#vhdl
#vhdl
Вопрос:
у меня есть модуль с 16-битной входной шиной. В моем объекте верхнего уровня я хочу подключить только 4 из них (также без двунаправленных). Их прямое подключение, конечно, приводит к ошибке
port map( IO16bit => IO4bit )
итак, я подключил m через внутренний сигнал
signal temp : std_logic_vector (15 downto 0);
port map(IO16bit => temp);
IO4bit <= temp(3 downto 0);
но теперь я получаю сообщение об ошибке:
Узлы с тремя состояниями напрямую не управляют выводами верхнего уровня
и не преобразуют разветвление в элемент ИЛИ
здесь я потерял двунаправленность. Как я могу это решить?
Ответ №1:
Вы можете использовать диапазон в port map
, а затем подключить оставшийся к dummy
подобному:
signal dummy : std_logic_vector(15 downto 4) := (others => 'Z');
...
port map(
IO16bit( 3 downto 0) => IO4bit,
IO16bit(15 downto 4) => dummy,
...
Это будет скомпилировано для моделирования, но вы должны убедиться, что выбранный вами инструмент синтеза также может принимать конструкцию и правильно ее обрабатывать. Часто возникает проблема с наличием внутренних inout
портов в синтезируемом дизайне.
Комментарии:
1. Или даже
IO16bit(15 downto 4) => open,
без фиктивного сигнала. Если вы используете фиктивный сигнал, используйте его(others => 'Z')
для предотвращения сбоев шины2. @BrianDrummond: при использовании
open
вместоdummy
then ModelSim выдается ошибка «Формальный «az_io» не должен быть связан с OPEN, когда подэлементы связаны по отдельности.». Хороший моментZ
для фиктивного.