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