implement_Bus_alt1 #16

Merged
Yehowshua merged 23 commits from implement_Bus_alt1 into main 2025-04-16 22:00:14 +00:00
Showing only changes of commit 98f2f5cdfd - Show all commits

View file

@ -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