having trouble with type constraints around clientIdx

This commit is contained in:
Yehowshua Immanuel 2025-04-11 20:35:26 -04:00
parent 813f543b42
commit 98f2f5cdfd

View file

@ -67,6 +67,9 @@ mkBus serverMap = do
selectedClientRequestQueue = (select clientRequestQueues clientIdx)
in
rules
"rule" : when True ==> do
$display "Bus.bs:71"
(sprintf "request server from client %d" clientIdx): when True ==> do
let
clientRequest :: TaggedBusRequest inFlightTransactions
@ -75,6 +78,7 @@ mkBus serverMap = do
targetAddr :: Addr = busRequestToAddr |> clientRequest.busRequest
targetServerIdx :: (Maybe ServerIdx) = serverMap targetAddr
-- $display "clientRequest" (fshow clientRequest)
$display "Bus.bs:81" (fshow clientRequest)
case targetServerIdx of
Just serverIdx -> do
let
@ -83,7 +87,20 @@ mkBus serverMap = do
arbiterClientSlot :: Arbiter.ArbiterClient_IFC
arbiterClientSlot = (select targetServerArbiter.clients clientIdx)
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