Как передать определенный индекс массива в качестве входных данных в модуль в Verilog?

У меня есть Mux 4:1 следующим образом:

module mux4_1 (input [31:0]A, input [31:0]B, input [31:0]C, input [31:0]D, input sel[1:0], output [31:0]Y);

wire mux1o, mux2o;
mux2_1 mux1 (A, B, sel[0], mux1o);
mux2_1 mux2 (C, D, sel[0], mux2o);
mux2_1 mux3 (mux1o, mux2o, sel[1], Y);

endmodule

В другом модуле у меня есть массив F длины 4 в качестве входных данных, и мне нужен экземпляр мультиплексора 4:1 в этом модуле с элементами F[1] и F[3] из F в качестве селекторов. Как я могу указать это при объявлении экземпляра? Конечно, этот код ниже не работает, но он должен иллюстрировать то, чего я пытаюсь достичь.

module someModule (inputs... F[3:0], outputs...);
 // some code...
 mux mux4_1 (A, B, C, D, F[1]F[3], Y);
endmodule

person david    schedule 06.04.2020    source источник
comment
{F[1],F[3]} но убедитесь, что вы получили заказ правильно. Обычно выбор идет от MS к LS: {F[3] , F[1]}   -  person Oldfart    schedule 06.04.2020


Ответы (1)


Чтобы создать свой селекторный сигнал, вы можете просто объединить нужный сигнал из вашего массива.

wire [1:0] selector;
assign selector = {F[1], F[3]};

// selector is a 2 bit vector where 
// selector[0] == F[3]
// selector[1] == F[1]

Более быстрая реализация будет в вашем случае:

module someModule (inputs... F[3:0], outputs...);
     // some code...
     mux4_1 myInstance (A, B, C, D, {F[1], F[3]} , Y);
endmodule

В этом случае младший бит селектора равен F[3], а его старший бит равен F[1].

person Nicolas Antoine    schedule 08.04.2020