当数字大小可变且必须通过参数设置时,如何设置最大数量?在下面,结果必须是“FFFF”,但模拟器只返回“F”。任何人都可以解决这个问题吗?
`define SIZE 10
module tb1;
reg [15:0] a;
initial begin
a = `SIZE'hF;
$display("a=%h",a);
end
endmodule
答案 0 :(得分:7)
您可以使用复制运算符构造位向量。
{a {b}} 会生成一个 a 向量 b 副本的向量。
在你的情况下,这将是:
a = {`SIZE{1'b1}};
答案 1 :(得分:5)
`SIZE'hF
,SIZE
部分仅表示它只是一个n位宽度数。在您的情况下,10'hF
表示它是一个10位数0xF
,因此在模拟中它是正确的。
如果您使用的是SystemVerilog,则可以使用a = '1;
并将所有位设置为1.
这是SystemVerilog LRM所说的,
可以通过在单位值前加上撇号(')来指定未大小的单位值,但不使用基本说明符。未计算值的所有位应设置为指定位的值。在自定义的上下文中,未标准化的单比特值应具有1比特的宽度,并且该值应被视为无符号。