Никогда не забывайте, что «H» в HDL означает «Аппаратное обеспечение».
То, что вы говорите, это "если ctrl = 0, тогда используйте часть оборудования, назовите ее u0, которая подключается как ... иначе замените эту часть оборудования, теперь назовите ее u1 и подключите ее как .. . ".
Не существует простого аппаратного эквивалента, который динамически, на основе сигнала (в данном случае «ctrl»), заменяет два компонента.
Единственное отличие состоит в первых двух портах, что делает решение простым: вы делаете один компонент и используете мультиплексор 1 для первых двух входных портов:
signal a_or_c_mux: std_logic_vector (3 downto 0);
signal b_or_d_mux: std_logic_vector (3 downto 0);
a_or_c_mux <= a when ctrl='0' else c;
b_or_d_mux <= b when ctrl='0' else d;
Теперь вы можете создать экземпляр вашего модуля (один раз! И вне процесса) и использовать сигналы a_or_c_mux
и b_or_d_mux
в качестве входных данных для первых двух портов модуля.
1 Специально я использую «аппаратную» номенклатуру.