如何在系统verilog中进行位扩展?

How to perform bit extension in system verilog?

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

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

我得到一个等于 00000001 不是 11111111

在 Verilog 中,无基文字(例如 1)是 (a) 十进制,(b) 有符号和 (c) 32 位。因为 (c),

{8{1}}

相同
{8{32'sb00000000000000000000000000000001}}

这是一个 256 位数字,然后在分配给 a 时被截断为 8 位。这就是为什么 a 等于 8'b00000001.

你需要

{8{1'b1}}