Як вивести внутрішні сигнали нижнього модуля до верхнього модуля в 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

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

^.^.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"; Коли я це роблю, я отримую помилку "Ідентифікатор або очікуваний буквальний рядок". Будь-які ідеї, чому я отримую помилку? (Вибачте за помилки з публікацією, вперше тут!)
Сухасіні,

Моя відповідь може бути недостатньо зрозумілою. При використанні aliasви повинні написати завдання в новому виписці. Перевага полягає в тому, що ви можете використовувати ім’я псевдоніма замість довгого зовнішнього імені.
Томас С.

1

Як я можу вивести внутрішні сигнали свого вихідного коду VHDL на мій тестовий стенд, щоб я міг розглядати їх як форми хвиль?

Тестовий стенд передбачає моделювання - суб'єкт без портів, як правило, не підходить для синтезу.

Хоча я ніколи не використовував Active-HDL, я розумію, що він має дизайн-браузер, який повинен дозволяти вам знімати сигнали у вашій ієрархії для відображення у вашій формі сигналу. Дивіться відео " Компіляція та моделювання Aldec" (5:02, хв: сек).

А щодо мене зараз складається враження, що відео може спричинити плутанину, можливо, саме в цьому випадку.

У 2:22 з кінця відео показує файл do (макрос), який керує моделюванням:

2:22 зробіть файл

Там, де ми бачимо кожен сигнал верхнього рівня конструкції, було додано до дисплея форми хвилі за допомогою хвильової команди. Слід також мати можливість задати сигнал у будь-якій точці ієрархії проектування.

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

Це коротке відео просто не показує сигнали для допоміжних рівнів ієрархії. (У короткому відео-презентації багато фармується).

Я хотів би знати, чи є якийсь інструмент, незалежний від інструменту, для досягнення моєї мети.

Як зазначалося вище, ваша мета здається переглядати внутрішні сигнали як форми хвиль.

Тепер для поганих новин - не існує стандартизації функцій або інтерфейсів тренажера, планування сигналів для скидання форми сигналу тощо. Це все визначені реалізацією.

Це майже гарантовано, що ви можете скидати сигнали в будь-яку частину ієрархії дизайну до переглядача форми хвилі або дамп-файлу з дамп-формою з будь-якою реалізацією, яка імітує, спосіб цього - визначено реалізацією.

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

Ідея портативності не граціозно сприймає кілька GUI.


0

Такі інструменти, як xilinx, мають можливість перегляду внутрішніх сигналів.

Простий метод, незалежний від інструменту, - це оголошення окремих вихідних ліній і підключення внутрішніх сигналів до цих ліній.


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

0

Якщо ви оголосили сигнали в тестовій панелі, але не в змозі побачити жоден вихід, у вас може виникнути проблема в операторі про інстанціювання, коли ви створюєте інстанцію об'єкта для тестування. Перевірте, чи правильно ви створили його, використовуючи заяву про інстанціювання сутності або інстанціювання компонента. Переконайтеся, що сигнали у вашій тестовій панелі підключені до досліджуваної сутності. Якщо це не вирішує проблему, опублікуйте код testbench, щоб ми могли допомогти.


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

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