Как вывести внутренние сигналы нижнего модуля на верхний модуль в VHDL?


11

Как я могу вывести внутренние сигналы моего исходного кода VHDL на свой стенд, чтобы я мог просматривать их как сигналы? Я использую Active HDL. Я хотел бы знать, есть ли какой-либо инструмент независимый метод достижения моей цели. Любая помощь приветствуется.

Я получаю эту ошибку сейчас.введите описание изображения здесь

Мой исходный код

entity SPI_DAC is
    Port ( 
    -- inputs and oututs
    )
end SPI_DAC;

architecture Behavioral of SPI_DAC is 
    --These are my internal signals 
    signal ch1_byte_data_sent       : STD_LOGIC_VECTOR(23 downto 0)     := x"000000"; 
    signal ch1_byte_cmd_sent        : STD_LOGIC_VECTOR(23 downto 0)     := x"000000";
    --and a few other signals
begin 
    --functionality 
end Behavioral;

Мой код тестового стенда

entity tb_spi_dac is
end tb_spi_dac;

architecture behavioral of tb_spi_dac is
    component spi_dac
    port(
    --declaration, inputs and outputs
    );
    end component;
begin
    uut: spi_dac port map(
    --map ports
    );
    --stimulus process
end;

Когда вы начнете симуляцию, ваш симулятор разработает все элементы. Затем он ищет ссылки, которые вы сделали, используя внешние имена. Мне кажется, что ваш путь неправильный. Я отредактировал свой ответ, чтобы дать более подробную информацию о построении путей. Без знания вашего дизайна я не могу сказать, что не так с вашим путем.
Томас С.

Как я уже сказал в своем ответе, вы должны использовать ярлык, а не имя объекта. Правильный путь должен быть .tp_spi_dac.uut.ch1_byte_data_sent.
Томас С.

Ваши предложения решили мою проблему @ThomasS. Большое спасибо! У меня была проблема с версией VHDL, которую я решил после просмотра видео по предложению Дэвида. Я знаю, что писать заметки с благодарностями не рекомендуется, но спасибо Томасу за исправление моего редактирования (меня действительно смутило это форматирование уценки).
Suhasini

Ответы:


11

То, что вы ищете, называется внешними именами (или иерархическими именами) в VHDL. Их можно использовать для обхода видимости области / иерархии. Синтаксис похож на пример ниже.

<<signal path_name : std_logic_vector(7 downto 0)>>

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

alias signal_name is 
    <<signal path_name : std_logic_vector(7 downto 0)>>;

Внешнее имя должно содержать путь к элементу, к которому вы хотите получить доступ. Путь может быть абсолютным или относительным. Отдельные элементы на вашем пути разделены точками. Обратите внимание, что вы должны предоставить метки экземпляра / процесса / сущности / ..., а не имя. Абсолютный путь начинается с .имени вашего верхнего уровня. Для относительных путей вы можете использовать ^для перемещения вверх по иерархии. При использовании констант / сигналов из какого-либо пакета вы также можете использовать @для перехода в библиотеку.

Примером абсолютного пути является

.tb_name.instance_label.sub_instance_label.signal_name

Для доступа к тому же элементу из тестового стенда с относительными именами вы можете использовать

instance_label.sub_instance_label.signal_name

Когда вы хотите получить доступ к некоторому сигналу / константе тестового стенда из sub_instance, вы можете использовать

^.^.constant_name

Чтобы получить доступ к некоторой другой константе в пакете конфигурации, расположенном в библиотеке конфигурации, вы можете использовать

@config.pkg_name.other_constant_name

Вы можете использовать свой браузер дизайна / библиотеки симуляторов, как указал Дэвид, чтобы найти правильный путь.

Эта функция была добавлена ​​в VHDL-2008, поэтому она должна поддерживаться всеми инструментами, которые уже поддерживают VHDL-2008 (включая ActiveHDL, я думаю). Большинство симуляторов не используют VHDL-2008 по умолчанию, но предоставляют аргумент командной строки или параметр конфигурации, чтобы включить его.


Я попробовал то, что вы предложили. псевдоним ch1_byte_data_sent - это << сигнал .TB_SPI_DAC.SPI_DAC.ch1_byte_data_sent: STD_LOGIC_VECTOR (с 23 по 0) >>: = x "000000"; Когда я это делаю, я получаю ошибку «Идентификатор или ожидаемый строковый литерал». Есть идеи, почему я получаю ошибку? (Извините за любые ошибки с постом, мой первый раз здесь!)
Suhasini

Мой ответ может быть недостаточно ясным. При использовании aliasвы должны написать назначение в новом утверждении. Преимущество состоит в том, что вы можете использовать псевдоним вместо длинного внешнего имени.
Томас С.

1

Как я могу вывести внутренние сигналы моего исходного кода VHDL на свой стенд, чтобы я мог просматривать их как сигналы?

Тестовый стенд подразумевает моделирование - объект без каких-либо портов, как правило, не подходит для синтеза.

Хотя я никогда не использовал Active-HDL, я понимаю, что у него есть дизайнерский браузер, который должен позволять вам выбирать сигналы в вашей иерархии для отображения в вашей форме волны. См. Видео Aldec's Compilation and Simulation (5:02, мин: сек).

И сейчас у меня сложилось впечатление, что видео может вызвать путаницу, возможно, в данном конкретном случае.

В 2:22 с конца видео показывает файл do (макрос), который управляет симуляцией:

2:22 сделать файл

Там, где мы видим, каждый сигнал на верхнем уровне дизайна был добавлен к отображению формы волны с помощью команды wave. Также должна быть возможность указать сигнал в любом месте иерархии проекта.

Основная идея заключается в том, что многие симуляторы позволяют планировать сбор сигналов (и некоторые разрешающие переменные) для отображения формы сигнала.

Это короткое видео просто не показывает сигналы для уровней вспомогательной иерархии. (В короткой видео-презентации много чего написано).

Я хотел бы знать, есть ли какой-либо инструмент независимый метод достижения моей цели.

Как уже отмечалось выше, ваша цель, по-видимому, состоит в том, чтобы рассматривать внутренние сигналы как сигналы.

Теперь о плохих новостях - не существует стандартизации для функций или интерфейсов симулятора, планирования сигналов для дампа формы сигнала и т. Д. Все это определяется реализацией.

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

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

Идея переносимости не охватывает несколько графических интерфейсов.


0

Такие инструменты, как xilinx, имеют возможность просмотра внутренних сигналов.

Простой, независимый от инструмента метод - это объявление отдельных выходных линий и подключение внутренних сигналов к этим линиям.


Я не хочу вмешиваться в мои порты ввода и вывода; поэтому не может объявить какие-либо новые выходные строки. Я объявил сигналы в своем тестовом стенде, но не могу увидеть какие-либо выходные данные на форме сигнала (показывает только мое инициализированное значение ноль без реализации функциональности). Есть ли другой способ сделать это?
Suhasini

0

Если вы объявили сигналы в тестовом стенде, но не можете увидеть какие-либо выходные данные, у вас может быть проблема в операторе создания экземпляров, когда вы создаете экземпляр объекта, подлежащего тестированию. Проверьте, правильно ли вы его создали, используя оператор создания сущности или компонент. Убедитесь, что сигналы в вашем тестовом стенде подключены к тестируемому объекту. Если это не решит проблему, опубликуйте код тестового стенда, чтобы мы могли помочь.


То, что сказал Томас, точно решает мою проблему. Я исправил ошибку, о которой упоминал ранее, которая возникла из-за того, что по умолчанию установлено значение VHDL 1993 в Active-HDL, поставляемом с программным обеспечением для проектирования iCEcube2 от Lattice. Теперь я сталкиваюсь с фатальной ошибкой в ​​разработке, когда пытаюсь инициализировать симуляцию. Я пытаюсь выяснить, почему это происходит, я надеюсь, что это не ограниченная проблема с лицензией.
Suhasini

Можете ли вы показать нам это сообщение?
Рик
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.