30 lines
866 B
Haskell
30 lines
866 B
Haskell
package Bus(mkBus) where
|
|
|
|
import Types
|
|
import BusTypes
|
|
import TagEngine
|
|
import Vector
|
|
import Util
|
|
import Arbiter
|
|
|
|
clientRequest :: Arbiter.ArbiterClient_IFC -> Action
|
|
clientRequest ifc = ifc.request
|
|
|
|
mkBus :: Vector numClients (BusClient inFlightTransactions)
|
|
-> Vector numServers (BusServer inFlightTransactions numClients)
|
|
-> Module Empty
|
|
mkBus clientVec serverVec = do
|
|
tagEngineByClient :: Vector numClients (TagEngine inFlightTransactions)
|
|
tagEngineByClient <- replicateM mkTagEngine
|
|
|
|
arbiterByServer :: Vector numServers (Arbiter_IFC numClients)
|
|
arbiterByServer <- replicateM (mkArbiter False)
|
|
|
|
addRules |>
|
|
rules
|
|
"placeholder rule": when True ==> do
|
|
let selectedArbiter = (select arbiterByServer 0)
|
|
mapM_ clientRequest selectedArbiter.clients
|
|
|
|
return $ interface Empty { }
|