Иерархическая ссылка VHDL внутри/для создания операторов

Мне нужна помощь с иерархической ссылкой при использовании операторов генерации. Извините, у меня мало времени, и я еще не смог сделать MCVE для этого. Перерыл много постов, но пока не нашел ответа на свой вопрос.

Два блока generate квалифицированы на одних и тех же дженериках. Если эти дженерики не установлены соответствующим образом, будет создан другой экземпляр uut с использованием списка соединений, в котором иерархические сигналы больше не существуют. Поскольку в этом случае сигналов не будет, у меня возникнут проблемы. Сигналы инициализируются в декларативной области тестового стенда, поэтому даже если generate не имеет права назначать их (т. е. в случае, когда используется другой uut), они, как минимум, будут иметь значение по умолчанию.

Кажется, существует проблема с порядком разработки, при которой иерархические сигналы, разрабатываемые в rtl_sig_gen, разрабатываются до uut в rtl_gen, на которые должны указывать иерархические ссылки. Похоже, что это так, независимо от того, размещены ли сигналы до, после или даже внутри того же оператора generate, что и uut.

Это тип ошибки, которую я получаю. Это касается QuestaSim 2021.4. К вашему сведению.

** Error (suppressible): ../Utilities/pld_top_tb.vhd(105): (vopt-1565) Failed to find 'i_nSysReset' in hierarchical name '.pld_top_tb.rtl_gen.uut.i_nSysReset'.
** Error (suppressible): ../Utilities/pld_top_tb.vhd(106): (vopt-1565) Failed to find 'i_a2dif' in hierarchical name '.pld_top_tb.rtl_gen.uut.i_a2dif.i_AD_Data'.

Ниже приведена общая настройка, в которой я это вижу. Возможна ли вообще иерархическая ссылка на условно созданный экземпляр внутри оператора генерации? Любое понимание было бы полезно.

rtl_sig_gen: if not g1_g and not g2_g generate
  i_nSysReset_h <= << signal .pld_top_tb.rtl_gen.uut.i_nSysReset : std_logic >>;
  i_AD_DATA_h   <= << signal .pld_top_tb.rtl_gen.uut.i_a2dif.i_AD_Data : std_logic_vector(11 downto 0) >>;
end generate rtl_sig_gen;

rtl_gen: if not g1_g and not g2_g generate

  uut: PLD_TOP
  port map (
    signal1       => ...,
    signal2       => ...,
    signal3       => ...
  );

end generate rtl_gen;

Почему бы просто не соединить i_nSysReset_h и i_AD_DATA_h под экземпляром uut и просто использовать относительный, а не абсолютный путь?

Tricky 02.05.2024 00:26

Ваша читающая аудитория теперь застряла в ожидании принятия ответа, не прибегая к минимально воспроизводимому примеру . На вопрос («Возможна ли вообще иерархическая ссылка на условно созданную сущность в операторе генерации?») невозможно ответить без исследовательских усилий со стороны кого-либо, кроме автора вопроса. См. Список внешних имен VHDL в пакете, объясняющий порядок разработки внешних имен. Также см. IEEE Std 1076-2008 14.2 Разработка иерархии проекта, 14.5 Разработка части утверждения.

user16145658 02.05.2024 01:21

@user16145658 user16145658 справедливая точка зрения. Я просто надеялся, что найдется кто-нибудь, кто разбирается в этом. Спасибо, что указали мне на эти ссылки.

user_007 02.05.2024 02:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

VHDL требует, чтобы объект был разработан до того, как для ссылки на него будет использоваться внешнее имя. VHDL разрабатывает проекты в текстовом порядке.

Этого должно быть достаточно, чтобы изменить порядок ваших операторов генерации.

rtl_gen: if not g1_g and not g2_g generate

  uut: PLD_TOP
  port map (
    signal1       => ...,
    signal2       => ...,
    signal3       => ...
  );

end generate rtl_gen;

rtl_sig_gen: if not g1_g and not g2_g generate
  i_nSysReset_h <= << signal .pld_top_tb.rtl_gen.uut.i_nSysReset : std_logic >>;
  i_AD_DATA_h   <= << signal .pld_top_tb.rtl_gen.uut.i_a2dif.i_AD_Data : std_logic_vector(11 downto 0) >>;
end generate rtl_sig_gen;

Если мы воспользуемся предложением @Tricky в комментариях выше, его можно упростить до следующего. Обратите внимание, что ограничение диапазона для std_logic_vector также не требуется:

rtl_gen: if not g1_g and not g2_g generate

  uut: PLD_TOP
  port map (
    signal1       => ...,
    signal2       => ...,
    signal3       => ...
  );


  i_nSysReset_h <= << signal uut.i_nSysReset : std_logic >>;
  i_AD_DATA_h   <= << signal uut.i_a2dif.i_AD_Data : std_logic_vector>>;
end generate rtl_gen;

Другие вопросы по теме