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