step by step - building the rule

This commit is contained in:
Yehowshua Immanuel 2025-04-09 16:29:56 -04:00
parent b4c7537a85
commit 9332675e48

View file

@ -10,12 +10,18 @@ import Arbiter
clientRequest :: Arbiter.ArbiterClient_IFC -> Action
clientRequest ifc = ifc.request
mkBus :: Vector numClients (BusClient inFlightTransactions)
busRequestToAddr :: BusRequest -> Addr
busRequestToAddr req = case req of
BusReadRequest (ReadRequest addr _) -> addr
WriteReadRequest (WriteRequest addr _) -> addr
mkBus :: (Addr -> Integer)
-> Vector numClients (BusClient inFlightTransactions)
-> Vector numServers (BusServer inFlightTransactions numClients)
-> Module Empty
mkBus clientVec serverVec = do
tagEngineByClient :: Vector numClients (TagEngine inFlightTransactions)
tagEngineByClient <- replicateM mkTagEngine
mkBus addrToServerTranslation clientVec serverVec = do
tagEngineByClientVec :: Vector numClients (TagEngine inFlightTransactions)
tagEngineByClientVec <- replicateM mkTagEngine
arbiterByServer :: Vector numServers (Arbiter_IFC numClients)
arbiterByServer <- replicateM (mkArbiter False)
@ -23,7 +29,25 @@ mkBus clientVec serverVec = do
addRules |>
rules
"placeholder rule": when True ==> do
let selectedArbiter = (select arbiterByServer 0)
mapM_ clientRequest selectedArbiter.clients
let selectedServerArbiter = (select arbiterByServer 0)
mapM_ clientRequest selectedServerArbiter.clients
"connect request client 0": when True ==> do
let
clientIdx :: Integer = 0
selectedClient ::(BusClient inFlightTransactions)
selectedClient = (select clientVec clientIdx)
selectedTagEngine = (select tagEngineByClientVec clientIdx)
tag <- selectedTagEngine.requestTag
busRequest :: BusRequest
busRequest <- selectedClient.dequeueRequest tag
let
addr = busRequestToAddr busRequest
targetServerIdx = addrToServerTranslation addr
targetServer = (select serverVec 0)
action {}
return $ interface Empty { }