verilog_backend: in non-SV mode, add a trigger for `always @*`.
authorwhitequark <whitequark@whitequark.org>
Thu, 16 Jul 2020 11:26:31 +0000 (11:26 +0000)
committerwhitequark <whitequark@whitequark.org>
Thu, 16 Jul 2020 11:30:14 +0000 (11:30 +0000)
commit128522f1737fc45dcc107381a167e59a79a48595
tree74851019f405f3a44803abbd74f98c2d6024da4d
parentd9f680b2363aded426465fd189910e0072228fee
verilog_backend: in non-SV mode, add a trigger for `always @*`.

This commit only affects translation of RTLIL processes (for which
there is limited support).

Due to the event-driven nature of Verilog, processes like

    reg x;
    always @*
        x <= 1;

may never execute. This can be fixed in SystemVerilog code by using
`always_comb` instead of `always @*`, but in Verilog-2001 the options
are limited. This commit implements the following workaround:

    reg init = 0;
    reg x;
    always @* begin
        if (init) begin end
        x <= 1;
    end

Fixes #2271.
backends/verilog/verilog_backend.cc