#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. Потрясающе, спасибо тебе!