zachjs / sv2v

SystemVerilog to Verilog conversion
BSD 3-Clause "New" or "Revised" License
540 stars 52 forks source link

bit fill literal '0 does not expand (sv2v) properly #291

Closed ljmalone123 closed 1 week ago

ljmalone123 commented 1 week ago

Hi, SV2V is great, I believe there is one small issue. When a bit fill literal such as '0 is converted from sv to v , the number of bits is not properly inferred from the signal declaration. Thanks Jarrett

--- version

g >>> sv2v --version sv2v v0.0.12-13-g4e989bc

--- sv2v input --- logic [31:0] pc; always_ff @(posedge i_clk or negedge i_resetb) if (!i_resetb ) pc <= '0;

--- sv2v output --- reg [31:0] pc; always @(posedge i_clk or negedge i_resetb) if (!i_resetb) pc <= 1'sb0;


I believe this should be pc <= 32'b0;

command used : sv2v fname.sv >> fname.v

FULL SV2 Input Module module test1(); logic [31:0] pc; logic i_resetb; logic i_clk; initial i_resetb = 0; initial i_clk = 0;

always_ff @(posedge i_clk or negedge i_resetb) if (!i_resetb ) pc <= '0; else pc <= pc + 32'd4; endmodule

FULL SV2V Output Module

module test1; reg [31:0] pc; reg i_resetb; reg i_clk; initial i_resetb = 0; initial i_clk = 0; always @(posedge i_clk or negedge i_resetb) if (!i_resetb) pc <= 1'sb0; else pc <= pc + 32'd4; endmodule


Verilator lint: verilator --lint-only fname.v

Verilator output: %Warning-WIDTHEXPAND: fname.v:476:7: Operator ASSIGNDLY expects 32 bits on the Assign RHS, but Assign RHS's CONST '1'sh0' generates 1 bits.

476 | pc <= 1'sb0;

zachjs commented 1 week ago

Thanks for filing this issue! This behavior is an intentional simplification for simple assignments to the value of an unbased unsized literal. Although Verilator outputs a stylistic linting warning, the behavior is identical in this context. Are you encountering a behavioral issue?

ljmalone123 commented 1 week ago

Hi, thanks for quick reply. I did not see any behavioral issue with either pc <= 1'sb0 ('0) or with pc <= 1'sb1 ('1). it sounds like this is the intended translation, so it certainly works for me. sv2v is a great tool, thanks! I'll close this out.