Список внешнего имени VHDL в пакете

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

Однако, если я попытаюсь смоделировать свой тестовый стенд с помощью ModelSim 10.0b, я получу сообщение об ошибке, загрузив дизайн:

Невозможно сослаться на сигнал ... до его разработки.

Хотя порядок компиляции правильный, я предполагаю, что во время запуска моделирования есть проблема с порядком загрузки. Все пакеты загружаются до загрузки дизайна. Есть ли шанс заставить ModelSim загрузить пакет внешнего имени позже?

Код @ user3099274 вставлен из комментария для удобства чтения:

package external_name_package is
  alias signal1 is << signal .tb_top_cfg.TB_TOP_E_INST.DUT.signal1 : std_logic >>;
  alias signal2 is << signal .tb_top_cfg.TB_TOP_E_INST.DUT.signal2 : std_logic >>;
end package external_name_package;

person user3099274    schedule 13.12.2013    source источник
comment
Что вы подразумеваете под списком внешних имен? Это новый type, который вы создаете? Вы создаете настоящий signal?   -  person Russell    schedule 13.12.2013
comment
Можете ли вы показать маленький пример того, что у вас есть на данный момент? Не думаю, что мы понимаем, о чем вы пытаетесь спросить ...   -  person Martin Thompson    schedule 16.12.2013
comment
Здравствуйте, вот пример пакета. Я хочу использовать псевдонимы в разных объектах с помощью этого пакета package external_name_package is alias signal1 is ‹---------------- signal .tb_top_cfg.TB_TOP_E_INST.DUT.signal1: std_logic ››; псевдоним signal2 - ‹* signal .tb_top_cfg.TB_TOP_E_INST.DUT.signal2: std_logic ››; конец пакета external_name_package;   -  person user3099274    schedule 16.12.2013


Ответы (2)


Обработка проекта VHDL выполняется в несколько этапов, сначала с анализом, а затем с доработкой. Анализ проверяет синтаксис и семантику для всех отдельных единиц дизайна. При разработке создается весь дизайн, объединяя различные единицы дизайна в один большой дизайн на основе иерархии.

Именно в процессе разработки внешние имена со ссылками на иерархию проверяются и связываются с указанными сигналами и т. Д. Правила разработки VHDL определяют, что проект разрабатывается в порядке «сначала в глубину», сверху вниз. Когда внешнее имя встречается на этапе разработки, должна быть возможность определить местоположение, что требует, чтобы местоположение ссылки на внешнее имя уже было разработано.

Если вы попытаетесь создать пакет с сигналами, тогда внешние имена в пакете будут проработаны в начале модуля тестового стенда, таким образом, до разработки DUT, и поэтому в это время невозможно разрешить внешнее имя, об этом говорится в сообщении об ошибке:

Ошибка «Невозможно сослаться на сигнал ... до его обработки».

Таким образом, решение состоит в том, чтобы разместить ссылки на внешние имена в процессе или блоке после создания экземпляра DUT.

Вы также можете найти соответствующее обсуждение здесь.

person Morten Zilmer    schedule 26.01.2014
comment
Чтобы уточнить (из связанного обсуждения), блок относится конкретно к декларативной области оператора VHDL block. Вы должны быть очень осторожны, чтобы никаким образом не ссылаться на внешний сигнал, пока он не будет обработан. Например, здесь нельзя использовать aliases (но вы можете объявить сигналы локально в block и назначить их внешним сигналам в теле block, что во многих случаях приемлемо). - person Harry; 25.05.2020

библиотека ieee; используйте ieee.std_logic_1164.all;

У меня есть нечто подобное, работающее в vhdl 2008, за исключением того, что я помещаю псевдоним иерархического сигнала внутри процедуры, определенной в теле пакета. Затем, управляя одним из сигналов псевдонима внутри процедуры, я использовал "принудительное включение", например:

package pkgx is
  procedure write( addr : inout std_logic_Vector(7 downto 0);
end package;

package body pkgx is

  procedure write( addr : inout std_logic_Vector(7 downto 0) is
    alias tap is <<signal .tb.signal3 : std_logic>>;
  begin


    tap <= force in '1';
    wait for 0 ns;
  end procedure;

end package body;
person William Moore    schedule 13.10.2014