client methods presumably finished

This commit is contained in:
Yehowshua Immanuel 2025-04-10 01:27:33 -04:00
parent 979adf3660
commit c9356eecfd
3 changed files with 20 additions and 12 deletions

View file

@ -18,7 +18,7 @@ busRequestToAddr req = case req of
BusReadRequest (ReadRequest addr _) -> addr
BusWriteRequest (WriteRequest addr _) -> addr
mkBus :: (Addr -> Maybe Integer)
mkBus :: (Addr -> Maybe ServerIdx)
-> Module (Bus inFlightTransactions numClients numServers)
mkBus busMap = do
-- Tag engines for each client to manage transaction tags
@ -37,7 +37,7 @@ mkBus busMap = do
requestQueues <- replicateM (mkSizedBypassFIFOF (valueOf inFlightTransactions))
-- Queues to hold responses from servers to clients
responseQueues :: Vector numClients (FIFOF (BusResponse, MkTagType inFlightTransactions))
responseQueues :: Vector numClients (FIFOF (TaggedBusResponse inFlightTransactions))
responseQueues <- replicateM (mkSizedBypassFIFOF (valueOf inFlightTransactions))
-- Client interface vector
@ -47,6 +47,9 @@ mkBus busMap = do
selectedClientRequestQueue :: FIFOF (TaggedBusRequest inFlightTransactions)
selectedClientRequestQueue = (select requestQueues clientIdx)
selectedClientResponseQueue :: FIFOF (TaggedBusResponse inFlightTransactions)
selectedClientResponseQueue = (select responseQueues clientIdx)
selectedTagEngine :: TagEngine inFlightTransactions
selectedTagEngine = (select tagEngineByClientVec clientIdx)
in
@ -60,9 +63,11 @@ mkBus busMap = do
consumeResponse :: ActionValue (TaggedBusResponse inFlightTransactions)
consumeResponse = do
dummyVar := (not dummyVar)
let dummyResponse = BusReadResponse (Left UnMapped)
return (TaggedBusResponse 0 dummyResponse)
let
busResponse :: (TaggedBusResponse inFlightTransactions)
busResponse = selectedClientResponseQueue.first
selectedClientResponseQueue.deq
return busResponse
-- Server interface vector
let servers :: Vector numServers (BusServer inFlightTransactions numClients)
@ -74,9 +79,10 @@ mkBus busMap = do
let dummyBusRequest = BusReadRequest (ReadRequest 0 SizeByte)
return (0, dummyBusRequest)
submitResponse :: (MkClientTagType numClients, BusResponse, transactionTagType)
-> Action
submitResponse (clientTag, busResponse, transactionTag) = do
submitResponse :: ( MkClientTagType numClients,
TaggedBusResponse inFlightTransactions
) -> Action
submitResponse (clientTag, taggedBusResponse) = do
dummyVar := (not dummyVar)
return $

View file

@ -1,5 +1,6 @@
package BusTypes(
Bus(..),
ServerIdx,
MkClientTagType,
BusClient(..), BusServer(..),
BusRequest(..), BusResponse(..),
@ -13,6 +14,7 @@ import Vector
import TagEngine
type MkClientTagType a = (UInt (TLog a))
type ServerIdx = Integer
data BusError
= UnMapped
@ -97,8 +99,9 @@ interface (BusClient :: # -> *) inFlightTransactions =
-- associated with the original request.
interface (BusServer :: # -> # -> *) inFlightTransactions numClients =
consumeRequest :: ActionValue (MkTagType inFlightTransactions, BusRequest)
submitResponse :: (MkClientTagType numClients, BusResponse, transactionTagType)
-> Action
submitResponse :: ( MkClientTagType numClients,
TaggedBusResponse inFlightTransactions
) -> Action
interface (Bus :: # -> # -> # -> *) inFlightTransactions numClients numServers =
clients :: Vector numClients (BusClient inFlightTransactions)

View file

@ -7,7 +7,6 @@ package TagEngine(
import Vector
import Util
import FIFO
import FIFOF
import SpecialFIFOs
type MkTagType numTags = (UInt (TLog numTags))
@ -35,7 +34,7 @@ mkTagEngine = do
-- to TagEngine where `n := maxTagCount`.
initialTagDistributor <- mkReg (Just (maxTagCount - 1)) -- Distributes initial tags
retireQueue <- mkBypassFIFO -- Queue for tags being retired
freeTagQueue <- mkSizedFIFOF maxTagCount -- Queue of available tags
freeTagQueue <- mkSizedFIFO maxTagCount -- Queue of available tags
-- Signals
retireSignal <- mkRWire -- Signals a tag retirement