Вы должны использовать сигналы трех состояний, как в реальном оборудовании:
assign A_inout = direction_is_A_to_B ? A_out : 1'bz;
assign B_inout = direction_is_A_to_B ? 1'bz : B_out;
Тогда вы можете безопасно подключить A_inout к B_inout;
Вход является копией A_inout, номожет быть яснее явно использовать сигнал:
assign A_in = A_inout;
Обычно все, что делается внутри двунаправленной клавиатуры:
module bi_pad (
inout P,
input I,
input tri,
output O
);
assign P = tri ? 1'bz : O;
assign I = P;
endmodule
Вы можете использовать параметр для определениянаправление, но вы должны знать, когда создается экземпляр блока, в каком направлении он должен быть.Там нет обратной связи, например, от места и инструмента маршрута, чтобы сделать это для вас.