From fd4b0b5152f94cd406f2e5de86ce7ed0a4d2cbd0 Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Tue, 2 Apr 2019 19:47:32 +0100 Subject: Large refactor with passing tests --- src/VeriFuzz/Sim/XST.hs | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/VeriFuzz/Sim/XST.hs (limited to 'src/VeriFuzz/Sim/XST.hs') diff --git a/src/VeriFuzz/Sim/XST.hs b/src/VeriFuzz/Sim/XST.hs new file mode 100644 index 0000000..359b587 --- /dev/null +++ b/src/VeriFuzz/Sim/XST.hs @@ -0,0 +1,70 @@ +{-| +Module : VeriFuzz.Sim.XST +Description : XST (ise) simulator implementation. +Copyright : (c) 2018-2019, Yann Herklotz +License : BSD-3 +Maintainer : ymherklotz [at] gmail [dot] com +Stability : experimental +Portability : POSIX + +XST (ise) simulator implementation. +-} + +{-# LANGUAGE QuasiQuotes #-} + +module VeriFuzz.Sim.XST + ( XST(..) + , defaultXST + ) +where + +import Prelude hiding (FilePath) +import Shelly +import Text.Shakespeare.Text (st) +import VeriFuzz.Sim.Internal +import VeriFuzz.Sim.Template +import VeriFuzz.Verilog.CodeGen + +data XST = XST { xstPath :: {-# UNPACK #-} !FilePath + , netgenPath :: {-# UNPACK #-} !FilePath + } + deriving (Eq, Show) + +instance Tool XST where + toText _ = "xst" + +instance Synthesisor XST where + runSynth = runSynthXST + +defaultXST :: XST +defaultXST = XST "xst" "netgen" + +runSynthXST :: XST -> SourceInfo -> FilePath -> Sh () +runSynthXST sim (SourceInfo top src) outf = do + dir <- pwd + writefile xstFile $ xstSynthConfig top + writefile prjFile [st|verilog work "rtl.v"|] + writefile "rtl.v" $ genSource src + echoP "XST: run" + _ <- logger dir "xst" $ timeout (xstPath sim) ["-ifn", toTextIgnore xstFile] + echoP "XST: netgen" + _ <- logger dir "netgen" $ run + (netgenPath sim) + [ "-w" + , "-ofmt" + , "verilog" + , toTextIgnore $ modFile <.> "ngc" + , toTextIgnore outf + ] + echoP "XST: clean" + noPrint $ run_ + "sed" + [ "-i" + , "/^`ifndef/,/^`endif/ d; s/ *Timestamp: .*//;" + , toTextIgnore outf + ] + echoP "XST: done" + where + modFile = fromText top + xstFile = modFile <.> "xst" + prjFile = modFile <.> "prj" -- cgit