Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> VHDL

Корректное завершение симуляции VHDL-тестбенча

Когда VHDL-тестбенч достигает конца предполагаемого выполнения, нужно, чтобы симулятор остановился чисто и, по возможности, вернул управление вызывающему скрипту. Эта статья рассматривает наиболее распространенные и надежные техники остановки симуляции в основных VHDL-симуляторах, с примерами кода для ModelSim, Vivado и Tcl-скриптов.

1. Использование процедуры finish (VHDL‑2008)

Процедура finish из пакета std.env — самый прямой способ завершить тестбенч, завершившийся без ошибок. Компилируйте только тестбенч в VHDL‑2008; RTL может остаться в более раннем стандарте.

use std.env.finish; ... SEQUENCER_PROC : process begin -- Insert testbench logic here wait until stop_condition; report "Calling 'finish'"; finish; end process;

По умолчанию finish в GUI запросит подтверждение завершения. Если предпочитаете автоматический выход — особенно в пакетном режиме — добавьте ключ -onfinish stop к vsim:

vsim -onfinish stop work.using_finish_tb

В пакетном режиме (vsim -c) симулятор завершается чисто, и управление возвращается в оболочку, что идеально для регрессионных скриптов:

jonas@ubuntu:~/stop_tb$ vsim -c -do 'vsim work.using_finish_tb; run -all' # … # ** Note: Calling 'finish' # Time: 1 ms Iteration: 0 Instance: /using_finish_tb # End time: 22:58:31 on Jun 21,2020, Elapsed time: 0:00:00 # Errors: 0, Warnings: 8 jonas@ubuntu:~/stop_tb$

Существует две перегрузки: procedure FINISH; и procedure FINISH (STATUS : INTEGER);. Значение статуса зависит от симулятора, поэтому полагаться на него для кодов выхода не рекомендуется. В ModelSim можно явно задать код выхода оболочки через exit -code <value> в Tcl-скрипте.

2. Использование процедуры stop (VHDL‑2008)

Процедура stop приостанавливает симуляцию — полезно для ручного осмотра или возобновления позже. Она ведет себя как точка останова.

use std.env.stop; ... SEQUENCER_PROC : process begin wait until stop_condition; report "Calling 'stop'"; stop; end process;

В скриптовом рабочем процессе stop перебросит вас в Tcl-оболочку, поэтому скрипт зависнет, если вы не выполните exit вручную. Именно поэтому finish обычно предпочтительнее для автоматизированных запусков.

3. Использование намеренного сбоя утверждения (assertion failure)

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

SEQUENCER_PROC : process begin wait until stop_condition; assert false report "Test: OK" severity failure; end process;

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

4. Управление завершением через Tcl-коллбэки

Для более гибкого управления — например, для осмотра сигналов или очистки — можно привязать VHDL-сигнал к Tcl-коллбэку. VHDL-тестбенч сигнализирует булев stop_condition, когда все тест-кейсы завершены.

signal stop_condition : boolean; begin -- Example: toggle after 1 ms stop_condition <= not stop_condition after 1 ms; SEQUENCER_PROC : process begin -- testbench logic wait; -- keep the process dormant end process; 

ModelSim

when {stop_condition} { stop echo "Test: OK" } run -all

Когда stop_condition становится истинным, коллбэк выполняется, печатает сообщение и приостанавливает симуляцию. Можно заменить stop на exit для немедленного выхода из симулятора.

Vivado

set sim_fileset sim_1 launch_simulation -simset [get_filesets $sim_fileset] add_condition -notrace stop_condition { stop puts "Test: OK" } run all

Флаг -notrace подавляет эхо команд, сохраняя вывод консоли чистым.

Финальная рекомендация

Во всех основных симуляторах процедура VHDL‑2008 finish остается наиболее переносимым и дружественным к скриптам выбором. Она чисто завершает симуляцию в GUI и пакетных средах без лишних интерактивных подсказок.

Тем не менее, Tcl-коллбэки предлагают мощные возможности отладки, когда нужно приостановить симуляцию и инспектировать или манипулировать сигналами на лету.

Скачать примеры проектов

Пользователи ModelSim могут получить ZIP-архив с четырьмя иллюстративными тестбенчами, отправив свой email ниже. (Пользователи Vivado могут воспроизвести примеры с минимальными усилиями.)

VHDL

  1. Создание списков строк в VHDL: лучшие практики и пример
  2. Создание Tcl-управляемого тестбенча для VHDL-модуля кодового замка
  3. Реализация PWM-контроллера в VHDL: проектирование, симуляция и FPGA-демо
  4. Генерация случайных чисел в VHDL: от Uniform к OSVVM
  5. Улучшение верификации оборудования с помощью интерактивного тестбенча на Tcl
  6. Как создать самопроверяющийся тестбенч в VHDL — практическое руководство
  7. Реализация динамического связного списка в VHDL с защищенными типами и указателями доступа
  8. Использование внутрипроцессных процедур для более чистого проектирования FSM на VHDL
  9. Освоение функций VHDL: практическое руководство по эффективному дизайну
  10. Победа над ржавчиной: 5 проверенных стратегий сохранения металлических активов