如何在系统Verilog中执行位扩展?

时间:2019-04-01 15:57:21

标签: verilog system-verilog sign-extension

我想使用复制运算器{}在特定的时间复制一位,但是我只得到想要的第一位,而无论该位是零还是一位,其他都为零。

module(logic output [7:0] a);
assign a={8{1}};
endmodule

我得到等于00000001 不是11111111

1 个答案:

答案 0 :(得分:3)

在Verilog中,无基础文字(例如1)是(a)十进制,(b)带符号和(c)32位。由于(c),

{8{1}}

相同
{8{32'sb00000000000000000000000000000001}}

,它是一个256位数字,然后在分配给a时被截断为8位。这就是为什么您获得a等于8'b00000001的原因。

您需要

{8{1'b1}}