preliminary work on client methods and some type repair

This commit is contained in:
Yehowshua Immanuel 2025-04-10 00:36:29 -04:00
parent ca02c88be3
commit 979adf3660
2 changed files with 36 additions and 13 deletions

View file

@ -13,14 +13,14 @@ import SpecialFIFOs
clientRequest :: Arbiter.ArbiterClient_IFC -> Action
clientRequest ifc = ifc.request
busRequestToAddr :: BusRequest -> Maybe Addr
busRequestToAddr :: BusRequest -> Addr
busRequestToAddr req = case req of
BusReadRequest (ReadRequest addr _) -> addr
BusWriteRequest (WriteRequest addr _) -> addr
mkBus :: (Addr -> Maybe Integer)
-> Module (Bus inFlightTransactions numClients numServers)
mkBus addrToServerTranslation = do
mkBus busMap = do
-- Tag engines for each client to manage transaction tags
tagEngineByClientVec :: Vector numClients (TagEngine inFlightTransactions)
tagEngineByClientVec <- replicateM mkTagEngine
@ -33,7 +33,7 @@ mkBus addrToServerTranslation = do
dummyVar <- mkReg False
-- Queues to hold requests from clients to servers
requestQueues :: Vector numServers (FIFOF BusRequest)
requestQueues :: Vector numServers (FIFOF (TaggedBusRequest inFlightTransactions))
requestQueues <- replicateM (mkSizedBypassFIFOF (valueOf inFlightTransactions))
-- Queues to hold responses from servers to clients
@ -43,25 +43,39 @@ mkBus addrToServerTranslation = do
-- Client interface vector
let clients :: Vector numClients (BusClient inFlightTransactions)
clients = genWith $ \clientIdx ->
interface BusClient
submitRequest req = do
dummyVar := (not dummyVar)
return 0
let
selectedClientRequestQueue :: FIFOF (TaggedBusRequest inFlightTransactions)
selectedClientRequestQueue = (select requestQueues clientIdx)
consumeResponse = do
dummyVar := (not dummyVar)
let dummyResponse = BusReadResponse (Left UnMapped)
return (dummyResponse, 0)
selectedTagEngine :: TagEngine inFlightTransactions
selectedTagEngine = (select tagEngineByClientVec clientIdx)
in
interface BusClient
submitRequest :: BusRequest
-> ActionValue (MkTagType inFlightTransactions)
submitRequest busRequest = do
tag <- selectedTagEngine.requestTag
selectedClientRequestQueue.enq (TaggedBusRequest tag busRequest)
return tag
consumeResponse :: ActionValue (TaggedBusResponse inFlightTransactions)
consumeResponse = do
dummyVar := (not dummyVar)
let dummyResponse = BusReadResponse (Left UnMapped)
return (TaggedBusResponse 0 dummyResponse)
-- Server interface vector
let servers :: Vector numServers (BusServer inFlightTransactions numClients)
servers = genWith $ \serverIdx ->
interface BusServer
consumeRequest :: ActionValue (MkTagType inFlightTransactions, BusRequest)
consumeRequest = do
dummyVar := (not dummyVar)
let dummyBusRequest = BusReadRequest (ReadRequest 0 SizeByte)
return (0, dummyBusRequest)
submitResponse :: (MkClientTagType numClients, BusResponse, transactionTagType)
-> Action
submitResponse (clientTag, busResponse, transactionTag) = do
dummyVar := (not dummyVar)

View file

@ -4,7 +4,8 @@ package BusTypes(
BusClient(..), BusServer(..),
BusRequest(..), BusResponse(..),
ReadRequest(..), ReadResponse(..), WriteRequest(..), WriteResponse(..),
BusVal(..), BusError(..), TransactionSize(..)
BusVal(..), BusError(..), TransactionSize(..),
TaggedBusRequest(..), TaggedBusResponse(..)
) where
import Types
@ -53,6 +54,14 @@ data BusResponse
| BusWriteResponse WriteResponse
deriving (Bits, Eq, FShow)
data TaggedBusRequest inFlightTransactions =
TaggedBusRequest (MkTagType inFlightTransactions) BusRequest
deriving (Bits, Eq, FShow)
data TaggedBusResponse inFlightTransactions =
TaggedBusResponse (MkTagType inFlightTransactions) BusResponse
deriving (Bits, Eq, FShow)
-- # BusClient.submitRequest
-- * The bus client calls the `submitRequest` method of the `BusClient` interface
-- with the `BusRequest` it wishes to submit and immediately recieves back
@ -67,7 +76,7 @@ data BusResponse
interface (BusClient :: # -> *) inFlightTransactions =
submitRequest :: BusRequest
-> ActionValue (MkTagType inFlightTransactions)
consumeResponse :: ActionValue (BusResponse, MkTagType inFlightTransactions)
consumeResponse :: ActionValue (TaggedBusResponse inFlightTransactions)
-- # BusServer.consumeRequest
-- * The bus server calls the `consumeRequest` method of the `BusServer` interface