zachjs/sv2v

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

Closed this issue · 2 comments

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;

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?

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.