Fixed grant bug
Just becasue we have a grant id doesn't mean that anything has actually been granted...
This commit is contained in:
parent
a58c908763
commit
d552934b95
4 changed files with 140 additions and 130 deletions
|
@ -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
|
Reference in a new issue