我正在尝试为动态大小的寄存器编写test_bench。 我像这样定义了一个参数变量并实例化了一个寄存器模块:
parameter integer regSize = 8;
register #(.size(regSize)) R1 (
.clock(clk),
.reset(rst),
.enable(enb),
.regIn(in),
.regOut(outp)
);
现在例如我想定义“in”变量(模块的第4个输入)
reg [regSize - 1: 0] in = (regSize)'b0;
我希望它的工作原理如下:reg [regSize - 1: 0] in = 8'b0;
但事实并非如此。
我收到此错误:
near "'b": syntax error, unexpected BASE, expecting ';' or ','
我该怎么写呢?
感谢您的帮助。
答案 0 :(得分:1)
使用连接重复结构:
reg [regSize - 1: 0] in = {regSize{1'b0}};
或者在System Verilog中,你可以这样做:
reg [regSize - 1: 0] in = '0;
您可能还需要类似的内容来添加,例如1到一个长度可变的计数器:
...
counter <= counter + {{(regSize-1){1'b0}},1'b1}; // regSize>1!
由于这变得难以阅读,我更喜欢使用localparam:
localparam [regSize-1:0] value_1 = {{(regSize-1){1'b0}},1'b1}; // regSize>1!
...
counter <= counter + value_1;
请注意,如果您还希望宽度为1位,它会变得相当混乱,但我认为将1添加到1位计数器可能是一个设计错误。
答案 1 :(得分:0)
无需在Verilog中填写0到一个数字,它会自动为您执行此操作。你可以做到
reg [regSize - 1: 0] in = 0;