所以,我一直在使用最新版本的Mojo-IDE v1.3.6来解决这个问题。
以下是我的代码的简短片段。正如您所看到的,我正在尝试使用带有for循环的generate来创建“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'位。
非常感谢任何帮助。
此致 小号
答案 0 :(得分:0)
我用vcs尝试过它并没有产生任何问题。因此,看起来您的verilog编译器存在生成块的问题。
我建议您将state
和 wire [511:0] W[64/LOOP-1:0];
wire [255:0] state[64/LOOP-1:0];
genvar i;
generate
for (i = 0; i < 64/LOOP; i = i + 1) begin : HASHERS
if(i == 0)
sha256_digester U (
.clk(clk),
.k(Ks[32*(63-cnt) +: 32]),
.rx_w(feedback ? W[I] : rx_input),
.rx_state(feedback ? state[i] : rx_state),
.tx_w(W[i]),
.tx_state(state[i])
);
else
sha256_digester U (
.clk(clk),
.k(Ks[32*(63-LOOP*i-cnt) +: 32]),
.rx_w(feedback ? W[i] : W[i-1]),
.rx_state(feedback ? state[i] : state[i-1]),
.tx_w(W[i]),
.tx_state(state[i])
);
end
endgenerate
声明移到块之外,如下所示:
log: ninja version 0.1.3 initializing
log: magic group: gid=0 (root)
log: entering main loop
log: generating initial pid array..
log: now monitoring process activity
log: NEW ROOT PROCESS: sudo[3736] ppid=3721 uid=0 gid=1000
log: - ppid uid=1000(olga) gid=1000 ppid=3442
log: + olga is in magic group, all OK!
log: NEW ROOT PROCESS: aptd[4541] ppid=4540 uid=0 gid=0
log: - ppid uid=106(messagebus) gid=110 ppid=564
log: + messagebus is in magic group, all OK!