【发布时间】:2018-03-16 11:17:30
【问题描述】:
所以,我一直在用最新版本的 Mojo-IDE v1.3.6 解决这个问题
下面是我的代码的简短 sn-p。正如您所看到的,我正在尝试使用带有 for 循环的生成来创建“Hashers”块的许多实例。
genvar i;
generate
for (i = 0; i < 64/LOOP; i = i + 1) begin : HASHERS
wire [511:0] W;
wire [255:0] state;
if(i == 0)
sha256_digester U (
.clk(clk),
.k(Ks[32*(63-cnt) +: 32]),
.rx_w(feedback ? W : rx_input),
.rx_state(feedback ? state : rx_state),
.tx_w(W),
.tx_state(state)
);
else
sha256_digester U (
.clk(clk),
.k(Ks[32*(63-LOOP*i-cnt) +: 32]),
.rx_w(feedback ? W : HASHERS[i-1].W),
.rx_state(feedback ? state : HASHERS[i-1].state),
.tx_w(W),
.tx_state(state)
);
end
endgenerate
但是,当我尝试合成时出现以下错误:
Line 89, Column 38 : extraneous input '.' expecting {')', '[', '<=', '*', '+', '-', '?', '&', '|', '^', '~^', '^~', '/', '%', '==', '!=', '===', '!==', '&&', '||', '**', '<', '>', '>=', '>>', '<<', '>>>', '<<<'}
Line 90, Column 46 : extraneous input '.' expecting {')', '[', '<=', '*', '+', '-', '?', '&', '|', '^', '~^', '^~', '/', '%', '==', '!=', '===', '!==', '&&', '||', '**', '<', '>', '>=', '>>', '<<', '>>>', '<<<'}
错误在行
.rx_w(feedback ? W : HASHERS[i-1].W),
.rx_state(feedback ? state : HASHERS[i-1].state),
根据 Verilog-2000 指南,这应该是合法的,因为我应该能够访问“HASHERS”的先前索引以获得 rx_w 的“W”位。
任何帮助将不胜感激。
问候, S
【问题讨论】:
-
我认为是系统verilog扩展,不是verilog
[cnt +: 32]。它可能会导致您在下一行出现问题。 -
嘿 Serge - 感谢您的评论。我注释掉了那行并且错误仍然存在。我想知道mojo-ide是使用verilog还是系统verilog。
-
第二个猜测是你的编译器没有正确解析
HASHERS[i-1].W。尝试将您的模块名称添加到其中:yourmodule.HASHERS[i-1].W -
刚刚试了一下 - 模块名称是 sha256_transform - 我尝试了 sha256_transform.HASHERS[i].W 并且不幸的是错误仍然存在。 HASHERS 被实例化为 for 循环的一部分,因此它与其余代码位于同一模块中。我感谢您的帮助!更新:使用 Hashers[0].W 似乎有效。我想知道它是否与使用 genvar 作为块的索引有关。
-
明确一点,
[cnt +: 32]是 Verilog(不仅仅是 SystemVerilog)。