# 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 = \
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