Как справиться с ошибкой следующего куска системного кода verilog? - PullRequest
0 голосов
/ 23 мая 2018

schematic schematic

Я хотел бы написать системный verilog-код для реализации этой схемы (с использованием декодера 3 2: 4 и 64 3-х входов и гейта для достижения декодера 6:64), а такжеВот мой кусок кода:

module Ex4( input logic [5:0] D,
            output logic [63:0] y
         );

    genvar i;
    genvar j;
    genvar k;
    integer n = 0;
    logic [3:0] y1, y2, y3;

    dec2 d1(D[1:0], y1);
    dec2 d2(D[3:2], y2);
    dec2 d3(D[5:4], y3);

    generate
      begin 
        for(i = 0; i < 3; i = i + 1) begin:flp1
            for (j = 0; j < 3; j = j + 1) begin:flp2
                for(k = 0; k < 3; k = k + 1) begin:flp3
                   and3_new a_n(y1[i], y2[j], y3[k], y[n]);
                   n=n+1; // error message comes from this line
                end
            end
        end
     end
   endgenerate  
endmodule

Примечание: "dec2" и "and3_new" - это два заранее написанных модуля без проблем

Однако во время компиляции я получил следующую ошибку:Кто-нибудь может дать мне подсказку?Спасибо.

Ошибка (10170): синтаксическая ошибка Verilog HDL на Ex4.sv (22) рядом с текстом: "=";
ожидается "." Или "(". Проверьте и исправьте любыеСинтаксические ошибки, которые появляются непосредственно перед или по указанному ключевому слову. База данных знаний Intel FPGA содержит множество статей с конкретными сведениями о том, как устранить эту ошибку. Посетите базу знаний по адресу https://www.altera.com/support/support-resources/knowledge- base / search.html и найдите этономер конкретного сообщения об ошибке.

1 Ответ

0 голосов
/ 23 мая 2018

Вы не можете поместить процедурное заявление о назначении в эту позицию.Вместо [n] используйте [i*16+j*4+k].Вы также можете сделать

module Ex4( input logic [5:0] D,
            output logic [63:0] y
         );
    logic [3:0] y1, y2, y3;

    dec2 d1(D[1:0], y1);
    dec2 d2(D[3:2], y2);
    dec2 d3(D[5:4], y3);

        for(genvar i = 0; i < 4; i++) begin:flp1
            for (genvar j = 0; j < 4; j++) begin:flp2
                for(genvar k = 0; k < 4; k = k + 1) begin:flp3
                   parameter n = i*16+j*4+k;
                   and3_new a_n(y1[i], y2[j], y3[k], y[n]);
                end :flp3
            end : flp2
        end : flp1

endmodule
...