client methods presumably finished
This commit is contained in:
parent
979adf3660
commit
c9356eecfd
22
bs/Bus.bs
22
bs/Bus.bs
|
@ -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 $
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue