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