refactored server functions as well
This commit is contained in:
parent
2fee6a3bd8
commit
a58c908763
2 changed files with 82 additions and 48 deletions
54
bs/Bus/Server.bs
Normal file
54
bs/Bus/Server.bs
Normal file
|
@ -0,0 +1,54 @@
|
|||
package Server(
|
||||
serverArbitRequests,
|
||||
serverRouteResponse
|
||||
) where
|
||||
|
||||
import Types
|
||||
import BusTypes
|
||||
import TagEngine
|
||||
import Vector
|
||||
import Util
|
||||
import Arbiter
|
||||
import FIFO
|
||||
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))
|
||||
-> Rules
|
||||
serverRouteResponse serverIdx submitRespQueue responseArbiterByClient =
|
||||
rules
|
||||
(sprintf "server[%d] route response" serverIdx): when True ==> do
|
||||
let response :: (MkClientTagType numClients, TaggedBusResponse inFlightTransactions)
|
||||
response = submitRespQueue.first
|
||||
|
||||
clientTag :: MkClientTagType numClients
|
||||
clientTag = response.fst
|
||||
|
||||
targetClientRespArbiter :: Arbiter.Arbiter_IFC (TAdd numServers 1)
|
||||
targetClientRespArbiter = select responseArbiterByClient clientTag
|
||||
|
||||
arbiterClientSlot :: Arbiter.ArbiterClient_IFC
|
||||
arbiterClientSlot = select targetClientRespArbiter.clients serverIdx
|
||||
arbiterClientSlot.request
|
Reference in a new issue