add some comments

This commit is contained in:
Yehowshua Immanuel 2025-04-04 15:31:46 -04:00
parent 020bc5b646
commit e415d981f9

View file

@ -24,9 +24,15 @@ mkTagEngine = do
-- Constants -- Constants
let maxTagCount = fromInteger (valueOf numTags) let maxTagCount = fromInteger (valueOf numTags)
-- State
tagUsage :: Vector numTags (Reg Bool) <- replicateM (mkReg False) -- Tracks which tags are in use tagUsage :: Vector numTags (Reg Bool) <- replicateM (mkReg False) -- Tracks which tags are in use
initialTagCounter <- mkReg (Just (maxTagCount - 1)) -- Distributes initial tags
-- Since Bluespec doesn't allow us to initialize FIFOs with values at
-- reset, we can pretend as if the buffer within our freeTagQueue is populated
-- with sequentially incrementing values(starting from 0) on reset
-- by having our tag engine effectively return the value of a decrementing
-- counter initialized to (maxTagCount - 1) for the first n tag requests made
-- to TagEngine where `n := maxTagCount`.
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 <- mkSizedFIFOF maxTagCount -- Queue of available tags
@ -75,13 +81,13 @@ mkTagEngine = do
interface TagEngine interface TagEngine
requestTag :: ActionValue UIntLog2N(numTags) requestTag :: ActionValue UIntLog2N(numTags)
requestTag = do requestTag = do
case initialTagCounter of case initialTagDistributor of
Just 0 -> do Just 0 -> do
initialTagCounter := Nothing initialTagDistributor := Nothing
requestSignal.wset 0 requestSignal.wset 0
return 0 return 0
Just tag -> do Just tag -> do
initialTagCounter := Just (tag - 1) initialTagDistributor := Just (tag - 1)
requestSignal.wset tag requestSignal.wset tag
return tag return tag
Nothing -> do Nothing -> do
@ -90,6 +96,10 @@ mkTagEngine = do
requestSignal.wset tag requestSignal.wset tag
return tag return tag
-- `retireTag` isn't guarded on tag validity(this would break Bluespec's safety model)
-- so it is advisable that the caller of `retireTag` only attempt to retire valid tags.
-- Internally, the tagEngine will keep a correct and consistent state since TagEngine
-- validates tags before attempting to retire them.
retireTag :: UIntLog2N(numTags) -> Action retireTag :: UIntLog2N(numTags) -> Action
retireTag tag = retireTag tag =
do do