Fixed grant bug

Just becasue we have a grant id doesn't mean that anything has actually
been granted...
This commit is contained in:
Yehowshua Immanuel 2025-04-17 22:47:24 -04:00
parent a58c908763
commit d552934b95
4 changed files with 140 additions and 130 deletions

View file

@ -14,25 +14,6 @@ import FIFOF
import SpecialFIFOs
import Printf
serverArbitRequests :: Integer
-> Arbiter.Arbiter_IFC numClients
-> FIFOF (MkClientTagType numClients, TaggedBusRequest inFlightTransactions)
-> Vector numClients (FIFOF (TaggedBusRequest inFlightTransactions))
-> Rules
serverArbitRequests serverIdx serverArbiter consumeReqQueue clientReqQueues =
rules
(sprintf "server[%d] arbit requests" serverIdx): when True ==> do
let grantedClientIdx :: MkClientTagType numClients
grantedClientIdx = unpack serverArbiter.grant_id
selectedClientReqQueue :: FIFOF (TaggedBusRequest inFlightTransactions)
selectedClientReqQueue = select clientReqQueues grantedClientIdx
clientRequest :: TaggedBusRequest inFlightTransactions
clientRequest = selectedClientReqQueue.first
consumeReqQueue.enq (grantedClientIdx, clientRequest)
selectedClientReqQueue.deq
serverRouteResponse :: Integer
-> FIFOF (MkClientTagType numClients, TaggedBusResponse inFlightTransactions)
-> Vector numClients (Arbiter.Arbiter_IFC (TAdd numServers 1))
@ -51,4 +32,26 @@ serverRouteResponse serverIdx submitRespQueue responseArbiterByClient =
arbiterClientSlot :: Arbiter.ArbiterClient_IFC
arbiterClientSlot = select targetClientRespArbiter.clients serverIdx
arbiterClientSlot.request
arbiterClientSlot.request
serverArbitRequests :: Integer
-> Arbiter.Arbiter_IFC numClients
-> FIFOF (MkClientTagType numClients, TaggedBusRequest inFlightTransactions)
-> Vector numClients (FIFOF (TaggedBusRequest inFlightTransactions))
-> Rules
serverArbitRequests serverIdx serverArbiter consumeReqQueue clientReqQueues =
let grantedClientIdx :: MkClientTagType numClients
grantedClientIdx = unpack serverArbiter.grant_id
selectedClientInterface :: ArbiterClient_IFC
selectedClientInterface = select serverArbiter.clients grantedClientIdx
in
rules
(sprintf "server[%d] arbit requests" serverIdx): when selectedClientInterface.grant ==> do
let selectedClientReqQueue :: FIFOF (TaggedBusRequest inFlightTransactions)
selectedClientReqQueue = select clientReqQueues grantedClientIdx
clientRequest :: TaggedBusRequest inFlightTransactions
clientRequest = selectedClientReqQueue.first
consumeReqQueue.enq (grantedClientIdx, clientRequest)
selectedClientReqQueue.deq