Verilog: Создание экземпляров массивов в модулях

#verilog #vivado

#verilog #вивадо

Вопрос:

Допустим, у меня есть модуль сумматора

 module adder(  input [3:0] A,  input [3:0] B,  output [4:0] F  );    assign F = A   B; endmodule;  

и модуль верхнего уровня:

 module toplevel(  input [3:0] X,  input [3:0] Y,  output [4:0] Z );  adder adder_1(  .A(X),  .B(Y),  .F(Z) ); endmodule;   

Где я хочу создать экземпляр сумматора. Смогу ли я создать экземпляр модуля, присвоив номера отдельным битам в его массиве?

Например, могу ли я написать что-то вроде,

 adder adder_1(  .A[0](X[0]),  .A[1](X[1},  

и так далее. Есть ли способ, которым я могу напрямую назначить бит 0 из модуля сумматора биту в модуле верхнего уровня?

Ответ №1:

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

краткий пример

  wire [3 : 0] temp;  assign temp[0] = x[0]; assign temp[1] = x[1] amp; 1`b0; assign temp[2] = x[2]; assign temp[3] = x[3];   adder adder_1(  .A(temp),  .B(Y),  .F(Z) );    

Ответ №2:

Да, это возможно. в вашем случае это было бы похоже :

 module toplevel(  input [3:0] X,  input [3:0] Y,  output [4:0] Z );  adder adder_1(  .A({X[3],X[2],X[1],X[0]}),  .B(Y),  .F(Z) ); endmodule;  

Комментарии:

1. Потрясающе, спасибо тебе!