我正在熟悉Verilog做的小练习,现在我正在尝试实现一个线性反馈移位寄存器。
我试图使用for-循环对始终块中的触发器链进行建模,但是iverilog一直给我错误寄存器I‘在lfsr中未知,其中"i“是迭代变量,lfsr是我的模块。
always @(posedge clk or negedge res_n) begin
if(res_n == 0) begin
// ... implement reset
end
else begin
flops[0] <= input_wire;
for (i = 0; i <= width-2; i = i+1) begin
flops[i+1] <= flops[i];
end
end
end
有人能帮帮我吗?
谢谢。
发布于 2017-01-30 02:02:37
您应该首先声明变量i,否则我将被视为没有规范的寄存器。这将使编译器返回unknown register
错误。
在for
代码块外声明i为整数,如下所示:
integer i;
发布于 2017-01-30 02:34:04
正如另一个答案所述,您需要在for循环中声明循环变量。但是,这不需要在always
块之外。相反,如果(并且只有当)标记一个begin
.end
块时,您可以在其中声明循环变量。这个解密必须是在区块内的第一个。这具有更好的封装性的优点:
always @(posedge clk or negedge res_n) begin
if(res_n == 0) begin
// ... implement reset
end
else begin : SOME_NAME
// ^
// |
// this is a label
integer i; // declaring i here results in better encapsulation
// the declaration HAS to be before "imperative" (ie executable) code
flops[0] <= input_wire;
for (i = 0; i <= width-2; i = i+1) begin
flops[i+1] <= flops[i];
end
end
end
https://stackoverflow.com/questions/41933060
复制相似问题