我想接受一个参数并将一个等于参数的零分配给一个常量,并使用此常量进行比较。我该怎么做 ?
例如,说参数是3,我想创建一个常量
n=3'b000;
并在另一个声明中使用此n。唯一的问题是,我不知道n。我如何初始化'n'零和我分配给它的verilog数据类型?
答案 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 ;
...