having trouble with type constraints around clientIdx
This commit is contained in:
parent
813f543b42
commit
98f2f5cdfd
19
bs/Bus.bs
19
bs/Bus.bs
|
@ -67,6 +67,9 @@ mkBus serverMap = do
|
||||||
selectedClientRequestQueue = (select clientRequestQueues clientIdx)
|
selectedClientRequestQueue = (select clientRequestQueues clientIdx)
|
||||||
in
|
in
|
||||||
rules
|
rules
|
||||||
|
"rule" : when True ==> do
|
||||||
|
$display "Bus.bs:71"
|
||||||
|
|
||||||
(sprintf "request server from client %d" clientIdx): when True ==> do
|
(sprintf "request server from client %d" clientIdx): when True ==> do
|
||||||
let
|
let
|
||||||
clientRequest :: TaggedBusRequest inFlightTransactions
|
clientRequest :: TaggedBusRequest inFlightTransactions
|
||||||
|
@ -75,6 +78,7 @@ mkBus serverMap = do
|
||||||
targetAddr :: Addr = busRequestToAddr |> clientRequest.busRequest
|
targetAddr :: Addr = busRequestToAddr |> clientRequest.busRequest
|
||||||
targetServerIdx :: (Maybe ServerIdx) = serverMap targetAddr
|
targetServerIdx :: (Maybe ServerIdx) = serverMap targetAddr
|
||||||
-- $display "clientRequest" (fshow clientRequest)
|
-- $display "clientRequest" (fshow clientRequest)
|
||||||
|
$display "Bus.bs:81" (fshow clientRequest)
|
||||||
case targetServerIdx of
|
case targetServerIdx of
|
||||||
Just serverIdx -> do
|
Just serverIdx -> do
|
||||||
let
|
let
|
||||||
|
@ -83,7 +87,20 @@ mkBus serverMap = do
|
||||||
arbiterClientSlot :: Arbiter.ArbiterClient_IFC
|
arbiterClientSlot :: Arbiter.ArbiterClient_IFC
|
||||||
arbiterClientSlot = (select targetServerArbiter.clients clientIdx)
|
arbiterClientSlot = (select targetServerArbiter.clients clientIdx)
|
||||||
arbiterClientSlot.request
|
arbiterClientSlot.request
|
||||||
Nothing -> do action {}
|
Nothing -> do
|
||||||
|
let
|
||||||
|
idx = fromInteger clientIdx
|
||||||
|
targetClientResponseArbiter :: Arbiter.Arbiter_IFC numClients
|
||||||
|
targetClientResponseArbiter = (select responseArbiterByClient idx)
|
||||||
|
|
||||||
|
clientResponseArbiterSlot :: Arbiter.ArbiterClient_IFC
|
||||||
|
-- arbiters 0 to n-1 are where `n:=numServer` are reserved
|
||||||
|
-- for servers to make requests to. Arbiter n is reserved for
|
||||||
|
-- when this rule needs to skip making a request to a server
|
||||||
|
-- and should instead forward the `BusError UnMapped` response
|
||||||
|
-- back to the client. Vector.last selects arbiter `n`
|
||||||
|
clientResponseArbiterSlot = Vector.last targetClientResponseArbiter
|
||||||
|
clientResponseArbiterSlot.request
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue