From a02d6a336d20ddf9d79098b220273d1f0d2ff5dd Mon Sep 17 00:00:00 2001 From: Christiaan Baaij Date: Fri, 18 Aug 2023 13:32:24 +0200 Subject: [PATCH] vioProbe uses its clock lazily (#2551) Fixes #2532 --- clash-cores/clash-cores.cabal | 1 + clash-cores/src/Clash/Cores/Xilinx/VIO.hs | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/clash-cores/clash-cores.cabal b/clash-cores/clash-cores.cabal index 5b4fa1abd6..1fec9e3c56 100644 --- a/clash-cores/clash-cores.cabal +++ b/clash-cores/clash-cores.cabal @@ -153,6 +153,7 @@ library build-depends: clash-lib, infinite-list ^>= 0.1, + ghc-prim >= 0.3.1.0 && < 1.0, mtl >= 2.1.1 && < 2.4, pretty-show, prettyprinter >= 1.2.0.1 && < 1.8, diff --git a/clash-cores/src/Clash/Cores/Xilinx/VIO.hs b/clash-cores/src/Clash/Cores/Xilinx/VIO.hs index 4b5c4597b9..51c4fa1093 100644 --- a/clash-cores/src/Clash/Cores/Xilinx/VIO.hs +++ b/clash-cores/src/Clash/Cores/Xilinx/VIO.hs @@ -49,6 +49,7 @@ import Clash.Explicit.Prelude import Clash.Annotations.Primitive (Primitive (InlineYamlPrimitive)) import Data.String.Interpolate (__i) +import GHC.Magic (lazy) import Clash.Cores.Xilinx.VIO.Internal.BlackBoxes @@ -123,7 +124,12 @@ vioProbe# :: o -> Clock dom -> a -vioProbe# !_inputNames !_outputNames !_initialOutputProbeValues !_clk = vioX @dom @a @o +vioProbe# !_inputNames !_outputNames !_initialOutputProbeValues clk = + lazy clk `seq` -- Ensure clk is considered used, but not marked "used once". + -- This makes makes GHC not inline the clock argument. + -- + -- Fixes #2532 + vioX @dom @a @o -- See: https://github.com/clash-lang/clash-compiler/pull/2511 {-# CLASH_OPAQUE vioProbe# #-} {-# ANN vioProbe# (