Как переписать этот код с помощью выражения Generate?

У меня есть код Verilog, который выглядит примерно так.

module top (
    .
    .
    input a_2;
    input a_1;
    input a_0;
);
    bottom I_bottom(
                    .
                    .
                   .a(a_2);
                   );
    bottom I_bottom_2(
                       .
                       .
                       .a(a_2);
                      );
    bottom I_bottom_1(
                       .
                       .
                       .a(a_1);
                     );
    bottom I_bottom_0(
                      .
                      .
                      .a(a_0)
                     );
endmodule

Как мне написать этот код, используя generate заявление? Обратите внимание, что входы в top фиксируются в top, Я не могу изменить это на массив, как a[2:0],

2 ответа

Создайте вектор для приравнивания к отдельным проводам порта. Тогда используйте generate и индексировать вектор для каждого сигнала. Это работает одинаково для входов или выходов.

Вы должны построить вектор вручную, но от конвертации куда-то не уйдет из-за первоначального требования сохранить имена отдельных портов. По крайней мере, это делается только один раз и делается кратко.

module top (
    .
    .
    input a_2;
    input a_1;
    input a_0;
);

wire [4:0]vec_a = {a_4, a_3, a_2, a_1, a_0};
generate genvar i;
    for(i=0; i<5; i=i+1) begin
        bottom I_bottom(
                .
                .
               .a(vec_a[i]);
        );
    end
endgenerate

endmodule

Просто чтобы сделать явное предложение @toolic, сделанное в комментарии, вы можете написать массив экземпляров следующим образом:

module top (
    input a_3,
    input a_2,
    input a_1,
    input a_0
);

    bottom I_bottom[3:0] (
                      .a({a_3,a_2,a_1,a_0})
                     );
endmodule

Обратите внимание, что я переименовал ваш экземпляр I_bottom в I_bottom[3] и подключил его к входу a_3не a_2, Я не уверен, что вы намеревались нарушить схему там.


Я понимаю, что это не отвечает на поставленный вопрос, так как не использует generate заявление. Я думаю, что мне нравится решение, которое использует generate лучше.

Другие вопросы по тегам