Skip to content

[circt-verilog] Import difference of results in arcilator failure with remaining llhd constant_time #9052

@jpienaar

Description

@jpienaar

Input test case:

module bug (
    input logic wr_clk,
    input logic wr_data,
    output logic [1:0] mem
);
`ifdef CASE_1
  always_ff @(posedge (wr_clk)) begin
      mem[0] <= wr_data;
  end
  always_ff @(posedge (wr_clk)) begin
      mem[1] <= wr_data;
  end
`else
  always_ff @(posedge (wr_clk)) begin
      mem[0] <= wr_data;
      mem[1] <= wr_data;
  end
`endif
endmodule

the two results in different outputs

module {
  hw.module @bug(in %wr_clk : i1 loc(#loc2), in %wr_data : i1 loc(#loc3), out mem : i2) {
    %0 = comb.replicate %wr_data : (i1) -> i2 loc(#loc4)
    %1 = seq.to_clock %wr_clk loc(#loc5)
    %mem = seq.firreg %0 clock %1 : i2 loc(#loc5)
    hw.output %mem : i2 loc(#loc1)
  } loc(#loc1)
} loc(#loc)

vs

module {
  hw.module @bug(in %wr_clk : i1 loc(#loc2), in %wr_data : i1 loc(#loc3), out mem : i2) {
    %0 = llhd.constant_time <0ns, 0d, 1e> loc(#loc2)
    %c0_i2 = hw.constant 0 : i2 loc(#loc4)
    %mem = llhd.sig %c0_i2 : i2 loc(#loc4)
    %1 = comb.extract %6 from 1 : (i2) -> i1 loc(#loc5)
    %2 = comb.concat %1, %wr_data : i1, i1 loc(#loc5)
    %3 = seq.to_clock %wr_clk loc(#loc4)
    %mem_0 = seq.firreg %2 clock %3 {name = "mem"} : i2 loc(#loc4)
    llhd.drv %mem, %mem_0 after %0 : !hw.inout<i2> loc(#loc4)
    %4 = comb.extract %6 from 0 : (i2) -> i1 loc(#loc6)
    %5 = comb.concat %wr_data, %4 : i1, i1 loc(#loc6)
    %mem_1 = seq.firreg %5 clock %3 {name = "mem"} : i2 loc(#loc4)
    llhd.drv %mem, %mem_1 after %0 : !hw.inout<i2> loc(#loc4)
    %6 = llhd.prb %mem : !hw.inout<i2> loc(#loc4)
    hw.output %6 : i2 loc(#loc1)
  } loc(#loc1)
} loc(#loc)

(splitting the mem output into 2 separate outputs also result in same output with and without def).

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions