Verilog 如何设置全变量常量?

Verilog 如何设置全变量常量?,verilog,system-verilog,Verilog,System Verilog,当数字大小是可变的,因此必须通过参数设置时,如何设置最大数字?在下面的例子中,结果必须是“FFFF”,但模拟器只返回“F”。有人能解决这个问题吗 `define SIZE 10 module tb1; reg [15:0] a; initial begin a = `SIZE'hF; $display("a=%h",a); end endmodule `SIZE'hF,SIZE部分仅表示它是一个n位宽度的数字。在您的情况下,10'hF表

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

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

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

`SIZE'hF
SIZE
部分仅表示它是一个n位宽度的数字。在您的情况下,
10'hF
表示它是一个10位的数字
0xF
,因此它在您的模拟中是正确的

如果您使用的是SystemVerilog,那么只需使用
a='1并将所有位设置为1

下面是SystemVerilog LRM所说的

可以通过在单个位值前面加一个撇号(')来指定未指定大小的单个位值,但不带基说明符。所有未定尺寸值的位应设置为指定位的值。在自定上下文中,未指定大小的单个位值的宽度应为1位,且该值应视为无符号


您可以使用复制操作符构造位向量

{a{b}生成一个包含a向量b副本的向量

在您的情况下,这将是:

 a = {`SIZE{1'b1}};

使用复制时,大小必须设置为16。也许是他的密码有误。{10{1'b1}}结果仅为03FF。获取
a
的最大数量,将
大小更改为16或使用未调整大小的单位值。