From cedff4da4ee36ed6b3b4c1c20012d96075a87a9f Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Fri, 1 Feb 2019 19:48:02 +0000 Subject: Rename XST and add imports --- src/VeriFuzz/XST.hs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/VeriFuzz/XST.hs (limited to 'src/VeriFuzz/XST.hs') diff --git a/src/VeriFuzz/XST.hs b/src/VeriFuzz/XST.hs new file mode 100644 index 0000000..1cd63eb --- /dev/null +++ b/src/VeriFuzz/XST.hs @@ -0,0 +1,57 @@ +{-| +Module : VeriFuzz.Simulator.XST +Description : Xst (ise) simulator implementation. +Copyright : (c) 2018-2019, Yann Herklotz Grave +License : BSD-3 +Maintainer : ymherklotz [at] gmail [dot] com +Stability : experimental +Portability : POSIX + +Xst (ise) simulator implementation. +-} + +{-# LANGUAGE QuasiQuotes #-} + +module VeriFuzz.Simulator.XST where + +import Control.Lens hiding ((<.>)) +import qualified Data.Text as T +import Prelude hiding (FilePath) +import Shelly +import System.FilePath.Posix (takeBaseName) +import Text.Shakespeare.Text (st) +import VeriFuzz.Simulator.General +import VeriFuzz.Simulator.Internal.Template +import VeriFuzz.Verilog +import VeriFuzz.Verilog + +data Xst = Xst { xstPath :: FilePath + , netgenPath :: FilePath + } + +instance Simulator Xst where + toText _ = "xst" + +instance Synthesize Xst where + runSynth = runSynthXst + +defaultXst :: Xst +defaultXst = + Xst "/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/xst" "/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/netgen" + +runSynthXst :: Xst -> ModDecl -> FilePath -> Sh () +runSynthXst sim m outf = do + writefile xstFile $ xstSynthConfig m + writefile prjFile [st|verilog work "rtl.v"|] + writefile "rtl.v" $ genSource m + echoP "Run xst" + noPrint $ timeout_ (xstPath sim) ["-ifn", toTextIgnore xstFile] + echoP "Run netgen" + noPrint $ run_ (netgenPath sim) + ["-w", "-ofmt", "verilog", toTextIgnore $ modFile <.> "ngc", toTextIgnore outf] + echoP "Clean synthesized file" + noPrint $ run_ "sed" ["-i", "/^`ifndef/,/^`endif/ d; s/ *Timestamp: .*//;", toTextIgnore outf] + where + modFile = fromText $ modName m + xstFile = modFile <.> "xst" + prjFile = modFile <.> "prj" -- cgit