使用参数在verilog中创建常量

时间:2014-01-21 00:16:45

标签: verilog

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

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

n=3'b000;

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

2 个答案:

答案 0 :(得分:21)

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

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

parameter WIDTH = 3;
wire [WIDTH-1:0] n = {WIDTH{1'b0}};

有关复制运算符的完整说明,请参阅IEEE std 1800-2012§11.4.12.1“复制运算符”

答案 1 :(得分:12)

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

使用串联{a,b}和复制{width{c}}

的混合
wire [WIDTH-1:0] n = { 1'b1, {WIDTH-1{1'b0}} } ;

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

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

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