diff --git a/bs/TagEngine.bs b/bs/TagEngine.bs index 7726811..cd172d3 100644 --- a/bs/TagEngine.bs +++ b/bs/TagEngine.bs @@ -40,18 +40,18 @@ mkTagEngine = do requestSignal <- mkRWire -- Signals a tag request -- Debug - debugOnce <- mkReg True + debugOnce <- mkReg False -- Rules addRules |> rules "debug_initial_state": when debugOnce ==> do - $display "tagUsage: " (fshow (readVReg tagUsage)) + -- $display "tagUsage: " (fshow (readVReg tagUsage)) debugOnce := False "retire_tag": when True ==> do let tag = retireQueue.first - $display "Retiring tag: " (fshow tag) + -- $display "Retiring tag: " (fshow tag) retireQueue.deq freeTagQueue.enq tag retireSignal.wset tag @@ -66,13 +66,13 @@ mkTagEngine = do usage' = update usage requestTag True usage'' = update usage' retireTag False writeVReg tagUsage usage'' - $display $time " Updated usage (request + retire): " (fshow |> readVReg tagUsage) + -- $display $time " Updated usage (request + retire): " (fshow |> readVReg tagUsage) (Just retireTag, Nothing) -> do (select tagUsage retireTag) := False - $display $time " Updated usage (retire): " (fshow (readVReg tagUsage)) + -- $display $time " Updated usage (retire): " (fshow (readVReg tagUsage)) (Nothing, Just requestTag) -> do (select tagUsage requestTag) := True - $display $time " Updated usage (request): " (fshow (readVReg tagUsage)) + -- $display $time " Updated usage (request): " (fshow (readVReg tagUsage)) (Nothing, Nothing) -> action {} -- Interface diff --git a/bs/Tests/BusTester.bs b/bs/Tests/BusTester.bs new file mode 100644 index 0000000..16b1ef5 --- /dev/null +++ b/bs/Tests/BusTester.bs @@ -0,0 +1,67 @@ +package TagEngineTester(mkTagEngineTester) where + +import TagEngine +import ActionSeq +import Assert + +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 + -- tag <- tagEngine.requestTag + |> 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 diff --git a/bs/Tests/TagEngineTester.bs b/bs/Tests/TagEngineTester.bs index 5a26477..a109161 100644 --- a/bs/Tests/TagEngineTester.bs +++ b/bs/Tests/TagEngineTester.bs @@ -19,18 +19,20 @@ mkTagEngineTester = do requestTagAction = do tag <- tagEngine.requestTag - $display $time " got tag : " (fshow tag) + -- $display $time " got tag : " (fshow tag) + action {} retireTagAction :: UInt 3 -> Action retireTagAction tag = do res <- tagEngine.retireTag tag - $display $time " retiring tag : " (fshow tag) " " (fshow res) + -- $display $time " retiring tag : " (fshow tag) " " (fshow res) action {} in actionSeq $ do + $display "=== TESTING TagEngine ===" let expectedTag = 4 tag <- tagEngine.requestTag dynamicAssert (tag == expectedTag) "" @@ -59,10 +61,11 @@ mkTagEngineTester = do dynamicAssert (tag == expectedTag) "" |> do retireTagAction 2 - let expectedTag = 3 + let expectedTag = 4 tag <- tagEngine.requestTag dynamicAssert (tag == expectedTag) "" |> do + $display "=== PASSED ===" terminateSimNoError addRules $