From fed03f4cac43cb41e2e4fa756a43ccaf7e4ed22b Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Wed, 2 Jan 2019 11:37:33 +0100 Subject: Finish the testbenck for Icarus --- src/Test/VeriFuzz/Simulator/Icarus.hs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Test/VeriFuzz/Simulator/Icarus.hs b/src/Test/VeriFuzz/Simulator/Icarus.hs index 156d1fc..2c51f59 100644 --- a/src/Test/VeriFuzz/Simulator/Icarus.hs +++ b/src/Test/VeriFuzz/Simulator/Icarus.hs @@ -12,9 +12,12 @@ Icarus verilog module. module Test.VeriFuzz.Simulator.Icarus where +import Control.Lens import Data.ByteString (ByteString) import qualified Data.ByteString as B +import Data.Foldable (fold) import Data.Hashable +import Data.List (transpose) import Data.Text (Text) import qualified Data.Text as T import Prelude hiding (FilePath) @@ -31,11 +34,24 @@ instance Simulator Icarus where instance Simulate Icarus where runSim = runSimIcarus +addDisplay :: [Stmnt] -> [Stmnt] +addDisplay s = + concat $ transpose [s, replicate l $ TimeCtrl 1 Nothing + , replicate l . SysTaskEnable $ Task "display" ["%h", Id "y"]] + where + l = length s + +assignFunc :: [Port] -> ByteString -> Stmnt +assignFunc inp bs = + NonBlockAssign . Assign conc Nothing . Number (B.length bs * 4) $ bsToI bs + where + conc = RegConcat (portToExpr <$> inp) + runSimIcarus :: Icarus -> ModDecl -> [ByteString] -> Sh Int -runSimIcarus sim mod tst = do +runSimIcarus sim mod bss = do let tb = ModDecl "main" [] [] [ Initial $ - (SysTaskEnable $ Task "display" [ Str "21832" ]) + fold (addDisplay $ assignFunc (mod ^. modInPorts) <$> bss) <> (SysTaskEnable $ Task "finish" []) ] let newtb = instantiateMod mod tb -- cgit