无符号表达式在赋值中与有符号表达式一起使用

Unsigned expression used with signed expression in assignment

我在 verilog 中有以下代码:

reg [5:0] a;
reg [5:0] shift_amt;
reg [63:0] mysig;

assign shift_amt = (a + 1) & 6'h3f;
assign mysig = 1 << shift_amt;

当我 运行 望远镜时,出现以下错误:

无符号表达式'mysig'在赋值中与有符号表达式'(1 << shift_amt)'一起使用。

我没有标记为 signedunsigned,并且我尝试了几种重写此语句的方法,甚至包装尝试$unsigned(1 << shift_amt),但由于某种原因,我的 mysig 结果在测试用例 I 中变为 0正在使用 a = 39.

数字文字 1 隐含地是一个带符号的 32 位值。作为习惯,你应该写成

assign mysig = 64'b1 << shift_amt;