some prep work to towards having a server accept a request
This commit is contained in:
parent
373d170c3f
commit
cd3d728083
14
bs/Bus.bs
14
bs/Bus.bs
|
@ -72,6 +72,14 @@ mkBus serverMap = do
|
||||||
clientResponseQueues :: Vector numClients (FIFOF (TaggedBusResponse inFlightTransactions))
|
clientResponseQueues :: Vector numClients (FIFOF (TaggedBusResponse inFlightTransactions))
|
||||||
clientResponseQueues <- replicateM (mkSizedBypassFIFOF (valueOf inFlightTransactions))
|
clientResponseQueues <- replicateM (mkSizedBypassFIFOF (valueOf inFlightTransactions))
|
||||||
|
|
||||||
|
-- The following two vectors of FIFOs make it easier to push/pull data to/from internal
|
||||||
|
-- server methods:
|
||||||
|
consumeRequestQueues :: Vector numServers (FIFOF (TaggedBusResponse inFlightTransactions))
|
||||||
|
consumeRequestQueues <- replicateM mkBypassFIFOF
|
||||||
|
|
||||||
|
submitResponseQueues :: Vector numServers (FIFOF (TaggedBusResponse inFlightTransactions))
|
||||||
|
submitResponseQueues <- replicateM mkBypassFIFOF
|
||||||
|
|
||||||
let clientRules :: Vector numClients (Rules)
|
let clientRules :: Vector numClients (Rules)
|
||||||
clientRules = genWith $ \clientIdx ->
|
clientRules = genWith $ \clientIdx ->
|
||||||
let
|
let
|
||||||
|
@ -82,7 +90,7 @@ mkBus serverMap = do
|
||||||
"rule" : when True ==> do
|
"rule" : when True ==> do
|
||||||
$display "Bus.bs:71"
|
$display "Bus.bs:71"
|
||||||
|
|
||||||
(sprintf "request server from client %d" clientIdx): when True ==> do
|
(sprintf "dispatch client request %d" clientIdx): when True ==> do
|
||||||
let
|
let
|
||||||
clientRequest :: TaggedBusRequest inFlightTransactions
|
clientRequest :: TaggedBusRequest inFlightTransactions
|
||||||
clientRequest = selectedClientRequestQueue.first
|
clientRequest = selectedClientRequestQueue.first
|
||||||
|
@ -162,11 +170,11 @@ mkBus serverMap = do
|
||||||
let servers :: Vector numServers (BusServer inFlightTransactions numClients)
|
let servers :: Vector numServers (BusServer inFlightTransactions numClients)
|
||||||
servers = genWith $ \serverIdx ->
|
servers = genWith $ \serverIdx ->
|
||||||
interface BusServer
|
interface BusServer
|
||||||
consumeRequest :: ActionValue (MkTagType inFlightTransactions, BusRequest)
|
consumeRequest :: ActionValue (TaggedBusRequest inFlightTransactions)
|
||||||
consumeRequest = do
|
consumeRequest = do
|
||||||
dummyVar := (not dummyVar)
|
dummyVar := (not dummyVar)
|
||||||
let dummyBusRequest = BusReadRequest (ReadRequest 0 SizeByte)
|
let dummyBusRequest = BusReadRequest (ReadRequest 0 SizeByte)
|
||||||
return (0, dummyBusRequest)
|
return (TaggedBusRequest {tag = 0; busRequest = dummyBusRequest})
|
||||||
|
|
||||||
submitResponse :: ( MkClientTagType numClients,
|
submitResponse :: ( MkClientTagType numClients,
|
||||||
TaggedBusResponse inFlightTransactions
|
TaggedBusResponse inFlightTransactions
|
||||||
|
|
|
@ -102,7 +102,7 @@ interface (BusClient :: # -> *) inFlightTransactions =
|
||||||
-- received from `consumeRequest`, ensuring the response is correctly
|
-- received from `consumeRequest`, ensuring the response is correctly
|
||||||
-- associated with the original request.
|
-- associated with the original request.
|
||||||
interface (BusServer :: # -> # -> *) inFlightTransactions numClients =
|
interface (BusServer :: # -> # -> *) inFlightTransactions numClients =
|
||||||
consumeRequest :: ActionValue (MkTagType inFlightTransactions, BusRequest)
|
consumeRequest :: ActionValue (TaggedBusRequest inFlightTransactions)
|
||||||
submitResponse :: ( MkClientTagType numClients,
|
submitResponse :: ( MkClientTagType numClients,
|
||||||
TaggedBusResponse inFlightTransactions
|
TaggedBusResponse inFlightTransactions
|
||||||
) -> Action
|
) -> Action
|
||||||
|
|
Loading…
Reference in a new issue