Mojo IDE - 在Verilog中生成循环块

时间:2017-10-04 22:59:06

标签: verilog fpga mojo

所以,我一直在使用最新版本的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'位。

非常感谢任何帮助。

此致 小号

1 个答案:

答案 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!