From d821bbe66596b402a93c3189d5497e4d287f6a83 Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Thu, 14 Nov 2019 19:48:38 +0000 Subject: Support proper Quartus Pro version --- src/Verismith/Tool/QuartusLight.hs | 78 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/Verismith/Tool/QuartusLight.hs (limited to 'src/Verismith/Tool/QuartusLight.hs') diff --git a/src/Verismith/Tool/QuartusLight.hs b/src/Verismith/Tool/QuartusLight.hs new file mode 100644 index 0000000..86c9a3a --- /dev/null +++ b/src/Verismith/Tool/QuartusLight.hs @@ -0,0 +1,78 @@ +{-| +Module : Verismith.Tool.QuartusLight +Description : QuartusLight synthesiser implementation. +Copyright : (c) 2019, Yann Herklotz Grave +License : GPL-3 +Maintainer : yann [at] yannherklotz [dot] com +Stability : experimental +Portability : POSIX + +QuartusLight synthesiser implementation. +-} + +module Verismith.Tool.QuartusLight + ( QuartusLight(..) + , defaultQuartusLight + ) +where + +import Control.DeepSeq (NFData, rnf, rwhnf) +import Data.Text (Text, unpack) +import Prelude hiding (FilePath) +import Shelly +import Shelly.Lifted (liftSh) +import Verismith.Tool.Internal +import Verismith.Tool.Template +import Verismith.Verilog.AST +import Verismith.Verilog.CodeGen + +data QuartusLight = QuartusLight { quartusLightBin :: !(Maybe FilePath) + , quartusLightDesc :: {-# UNPACK #-} !Text + , quartusLightOutput :: {-# UNPACK #-} !FilePath + } + deriving (Eq) + +instance Tool QuartusLight where + toText (QuartusLight _ t _) = t + +instance Show QuartusLight where + show t = unpack $ toText t + +instance Synthesiser QuartusLight where + runSynth = runSynthQuartusLight + synthOutput = quartusLightOutput + setSynthOutput (QuartusLight a b _) = QuartusLight a b + +instance NFData QuartusLight where + rnf = rwhnf + +defaultQuartusLight :: QuartusLight +defaultQuartusLight = QuartusLight Nothing "quartus" "syn_quartus.v" + +runSynthQuartusLight :: QuartusLight -> SourceInfo -> ResultSh () +runSynthQuartusLight sim (SourceInfo top src) = do + dir <- liftSh pwd + let ex = execute_ SynthFail dir "quartus" + liftSh $ do + writefile inpf $ genSource src + noPrint $ run_ "sed" [ "-i" + , "s/^module/(* multstyle = \"logic\" *) module/;" + , toTextIgnore inpf + ] + writefile quartusSdc $ "create_clock -period 5 -name clk [get_ports clock]" + writefile quartusTcl $ quartusSynthConfig sim quartusSdc top inpf + ex (exec "quartus_sh") ["-t", toTextIgnore quartusTcl] + liftSh $ do + cp (fromText "simulation/vcs" fromText top <.> "vo") + $ synthOutput sim + run_ + "sed" + [ "-ri" + , "s,^// DATE.*,,; s,^tri1 (.*);,wire \\1 = 1;,; /^\\/\\/ +synopsys/ d;" + , toTextIgnore $ synthOutput sim + ] + where + inpf = "rtl.v" + exec s = maybe (fromText s) ( fromText s) $ quartusLightBin sim + quartusTcl = fromText top <.> "tcl" + quartusSdc = fromText top <.> "sdc" -- cgit