使用参数在verilog中创建常量

Flo*_*ose 15 verilog

我想接受一个参数并将一个等于参数的零分配给一个常量,并使用此常量进行比较.我该怎么做 ?

例如,说参数是3,我想创建一个常量

n=3'b000;
Run Code Online (Sandbox Code Playgroud)

并在另一个声明中使用此n.唯一的问题是,我不知道n.我如何初始化'n'零和我分配给它的verilog数据类型?

Gre*_*reg 22

您正在寻找复制运算符.语法是{replication_constant{value}}.

创建大小WIDTH为全零的总线的示例.

parameter WIDTH = 3;
wire [WIDTH-1:0] n = {WIDTH{1'b0}};
Run Code Online (Sandbox Code Playgroud)

有关复制运算符的完整说明,请参阅IEEE std1800-2012§11.4.12.1"复制运算符"

  • @nguthrie,填充零("0")用于SystemVerilog,SO的问题是Verilog. (2认同)
  • 你引用了 1800-2012 标准,所以我认为这是公平的游戏。在我看来,SV 只是 Verilog 的最新版本,因此人们也可能听说过 SV 语法,即使他们没有用它来标记他们的问题。 (2认同)

Mor*_*gan 12

要扩展Gregs的答案并回答如果你想要1然后全部0的话.

使用串联{a,b}和复制的混合{width{c}}:

wire [WIDTH-1:0] n = { 1'b1, {WIDTH-1{1'b0}} } ;
Run Code Online (Sandbox Code Playgroud)

虽然在SystemVerilog中使用'0or '1语法来'b0进行宽度匹配,但在较旧的Verilog中有效.在verilog-95中,它只能与32位宽度匹配,但此后已得到纠正.

定义触发器上的复位值的示例:

reg [7:0] a;
always @(posedge clk or negedge rst_n) begin
  if(~rst_n) begin
    a <= 'b0 ;
 ...
Run Code Online (Sandbox Code Playgroud)