Я буду ссылаться на ваши примеры кодов как 1, 2 3 и 4.
1) Пример 1 правильный.Это жизнеспособный способ подключения порта иерархическим способом.
2) Наверняка у вас будут ошибки компиляции / синтеза, в частности, для выходных портов.Фактически у вас будет несколько драйверов (каждый из выходных портов экземпляров компонентов), влияющих на один и тот же сигнал / порт верхнего объекта.Это будет легко увидеть и в симуляции, так как вы увидите «X» на этом порту (что указывает на несколько драйверов на один и тот же сигнал).Обратите внимание, что несколько входных портов могут быть подключены к одному драйверу (например, один и тот же входной порт верхнего объекта, один и тот же сигнал и т. Д.)
3) Это частично правильно!У вас та же проблема, что и в примере 2, когда несколько драйверов действуют на один и тот же сигнал.
4) Это определенно неправильно !.Вы не определили ни порты, ни сигналы для привязки к
ОБНОВЛЕНИЕ после изменений в сущности:
1) Это все еще правильно, порт сущности может использоваться в качестве (неявного) сигнала таким образом,Вы можете представить верхний объект как контейнер для двух подкомпонентов, где вы «припаяли» штифт компонентов к контактам верхнего объекта / контейнера (материал для пайки обеспечивает электрическую непрерывность)
2) Это может быть нормально, если входные порты используются в качестве входных данных, но при попытке использовать их в качестве выходных данных могут возникнуть проблемы.Существует сильная зависимость от того, как они описываются.Если компоненты используют слабые логические значения («L» и «H»), тогда, если вы используете сильные значения («0» и «1»), тогда он может вести себя нормально.Было бы лучше использовать промежуточный сигнал окончания, возможно, своего рода мультиплексирование / демультиплексирование, чтобы выбрать / направить данные в / из соответствующего внутреннего компонента.
3) С точки зрения чистого межсоединения, это нормально.Однако с функциональной точки зрения вы должны быть уверены, что всегда присутствует компонент, который действует как драйвер, а другой - как получатель.В противном случае у вас будет либо неопределенное значение для внутреннего сигнала, либо «X» из-за нескольких драйверов.Тем не менее, для сигнала адреса никто не управляет им, поэтому он всегда будет «U» (неопределенным).Вам нужно что-то (порт в верхнем объекте, процесс и т. Д.), И это указывает на какое-то значение.
4) Как и раньше, это неверно.Порт компонента не подключен ни к чему.Обратите внимание, что VHDL (но то же самое относится и к Verilog) является описание язык;Вы пытаетесь описать реальную схему (например, микросхему на печатной плате).Как и в реальной схеме, вам нужен какой-то провод для соединения одного контакта микросхемы с другим выводом в другой микросхеме, а затем в VHDL / verilog вам необходим эквивалентный «объект» для включения соединения. Таким образом, вам необходимо определитьобъект (в данном случае сигнал), а затем опишите его поведение (в этом случае свяжите вместе 2 порта из 2 компонентов).
Надеюсь, на этот раз немного понятнее