diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2019-01-02 11:37:33 +0100 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2019-01-02 11:37:33 +0100 |
commit | fed03f4cac43cb41e2e4fa756a43ccaf7e4ed22b (patch) | |
tree | 4c0612e98dc741c74b313529c74890ac95f96f7a /src/Test/VeriFuzz/Simulator/Icarus.hs | |
parent | e99ef10cf0905a77c59dbec050e4b3f4d553a3a9 (diff) | |
download | verismith-fed03f4cac43cb41e2e4fa756a43ccaf7e4ed22b.tar.gz verismith-fed03f4cac43cb41e2e4fa756a43ccaf7e4ed22b.zip |
Finish the testbenck for Icarus
Diffstat (limited to 'src/Test/VeriFuzz/Simulator/Icarus.hs')
-rw-r--r-- | src/Test/VeriFuzz/Simulator/Icarus.hs | 20 |
1 files changed, 18 insertions, 2 deletions
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 |