2

当数字大小是可变的,因此必须通过参数设置时,我该如何设置最大数字?在下面,结果必须是“FFFF”,但模拟器只返回“F”。任何人都可以解决这个问题吗?

`define SIZE 10
module tb1;
    reg [15:0] a;

    initial begin
        a = `SIZE'hF;
        $display("a=%h",a);
    end
endmodule
4

2 回答 2

7

您可以使用复制运算符来构造位向量。

{a{ b }}生成一个带有向量b副本的向量。

在您的情况下,这将是:

 a = {`SIZE{1'b1}};
于 2013-08-20T10:15:59.740 回答
5

`SIZE'hF, 该SIZE部分仅表示它只是一个 n 位宽度的数字。在你的情况下10'hF意味着它是一个 10-bit number 0xF,所以它在你的模拟中是正确的。

如果你使用 SystemVerilog,你可以使用a = '1;它,它会将所有位设置为 1。

这是 SystemVerilog LRM 所说的,

可以通过在单位值前面加上撇号 (') 来指定未调整大小的单位值,但没有基本说明符。unsized 值的所有位都应设置为指定位的值。在一个自行确定的上下文中,一个无大小的单比特值应具有 1 位的宽度,并且该值应被视为无符号。

于 2013-08-20T08:58:51.007 回答