back.{verilog,rtlil}: adjust $verilog_initial_trigger insertion.
authorwhitequark <whitequark@whitequark.org>
Sun, 25 Oct 2020 01:59:46 +0000 (01:59 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 31 Dec 2021 15:16:10 +0000 (15:16 +0000)
To track upstream changes.

nmigen/back/rtlil.py
nmigen/back/verilog.py

index 05f219ab79921598422f10d4250e1d17847443f6..916605e4fa9e8ce062ad6871fcba07b9c5a620dd 100644 (file)
@@ -955,9 +955,8 @@ def _convert_fragment(builder, fragment, name_map, hierarchy):
                     # simulators to work properly, and is universally ignored by synthesizers,
                     # Verilator rejects it.
                     #
-                    # Running the Yosys proc_prune pass converts such pathological `always @*`
-                    # blocks to `assign` statements, so this workaround can be removed completely
-                    # once support for Yosys 0.9 is dropped.
+                    # Yosys >=0.9+3468 emits a better workaround on its own, so this code can be
+                    # removed completely once support for Yosys 0.9 is dropped.
                     if not stmt_compiler._has_rhs:
                         if verilog_trigger is None:
                             verilog_trigger = \
index 37e4158e4f314fa7e05e62901997f537437fbaa0..181a765b950c68044e014a8b6a685b04ff383012 100644 (file)
@@ -13,11 +13,15 @@ def _convert_rtlil_text(rtlil_text, *, strip_internal_attrs=False, write_verilog
     script = []
     script.append("read_ilang <<rtlil\n{}\nrtlil".format(rtlil_text))
 
+    if yosys_version >= (0, 9, 3468):
+        # Yosys >=0.9+3468 (since commit 128522f1) emits the workaround for the `always @*`
+        # initial scheduling issue on its own.
+        script.append("delete w:$verilog_initial_trigger")
+
     if yosys_version >= (0, 9, 3527):
         # Yosys >=0.9+3527 (since commit 656ee70f) supports the `-nomux` option for the `proc`
         # script pass. Because the individual `proc_*` passes are not a stable interface,
         # `proc -nomux` is used instead, if available.
-        script.append("delete w:$verilog_initial_trigger")
         script.append("proc -nomux")
     else:
         # On earlier versions, use individual `proc_*` passes; this is a known range of Yosys