53 lines
1.3 KiB
Haskell
53 lines
1.3 KiB
Haskell
package TagEngineTester(mkTagEngineTester) where
|
|
|
|
import TagEngine
|
|
import ActionSeq
|
|
|
|
mkTagEngineTester :: Module Empty
|
|
mkTagEngineTester = do
|
|
tagEngine :: TagEngine 5 <- mkTagEngine
|
|
count :: Reg (UInt 4) <- mkReg 0;
|
|
runOnce :: Reg Bool <- mkReg False
|
|
|
|
s :: ActionSeq
|
|
s <-
|
|
let
|
|
requestTagAction :: Action
|
|
requestTagAction =
|
|
do
|
|
tag <- tagEngine.requestTag
|
|
$display "got tag : " (fshow tag)
|
|
|
|
retireTagAction :: UInt 3 -> Action
|
|
retireTagAction tag =
|
|
do
|
|
res <- tagEngine.retireTag tag
|
|
$display "retiring tag : " (fshow tag) " " (fshow res)
|
|
action {}
|
|
|
|
in
|
|
actionSeq $
|
|
do requestTagAction
|
|
|> do requestTagAction
|
|
|> do requestTagAction
|
|
|> do retireTagAction 3
|
|
|> do $display "BEGIN TRY SIMULTANEOUS RETIRE and REQUEST"
|
|
|> do
|
|
retireTagAction 4
|
|
requestTagAction
|
|
|> do $display "END TRY SIMULTANEOUS RETIRE and REQUEST"
|
|
|> do requestTagAction
|
|
|> do retireTagAction 4
|
|
|> do retireTagAction 4
|
|
|> do retireTagAction 0
|
|
|> do requestTagAction
|
|
|> do requestTagAction
|
|
|> do retireTagAction 1
|
|
|> do requestTagAction
|
|
|
|
addRules $
|
|
rules
|
|
"testIncrement": when (runOnce == False) ==>
|
|
do
|
|
s.start
|
|
runOnce := True |