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
|
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 $
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue