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

View file

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

View file

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