Чтобы иметь возможность поддерживать масштабируемость в моем проекте VHDL, я начал использовать записи в качестве входных и выходных для своих компонентов. В настоящее время я нахожусь в точке, где я хочу связать свой компонент с внешним миром, используя карты портов в архитектуре верхнего уровня. Проблема в том, что записи содержат несколько переменных, которые должны быть связаны с разными источниками.
В настоящее время мои записи, используемые в коде VHDL, выглядят следующим образом (имена заменены на фейки):
TYPE some_record_input IS RECORD
input_one : sfixed(3 downto -32);
input_two : sfixed(3 downto -32);
input_rst : std_logic;
END RECORD;
TYPE some_record_output IS RECORD
output_one : std_logic_vector(15 downto 0);
output_dn : std_logic;
END RECORD;
Следовательно, я использую библиотеку fixed_pkg для фиксированных точек.
Эти записи используются в карте портов объекта следующим образом.
ENTITY my_component IS
port
(
clk : IN std_logic;
data : IN some_record_input;
result : OUT some_record_output
);
END my_component;
Теперь о той части, где возникают проблемы. Я использую этот компонент на моем верхнем уровне, чтобы связать его с кнопками и светодиодами, доступными для моей платы Altera. В настоящее время это делается с помощью карты портов в теле моей сущности верхнего уровня:
A0 : my_component PORT MAP(clk => CLK, data => (input_one => IONE, input_two => ITWO, input_rst => RST), result => (output_one => OONE, output_dn => ODN));
Следовательно, сигналы капитала исходящие. Ясно, что это не лучший вариант, поскольку modelsim не компилирует это. Мне было интересно, может ли кто-нибудь сказать мне, как выполняется сопоставление портов записи для объекта верхнего уровня в VHDL. Заранее спасибо.