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

Улучшение верификации оборудования с помощью интерактивного тестбенча на Tcl

Интерактивный тестбенч — это настройка симулятора, где входные данные для устройства под тестом (DUT) предоставляются оператором во время выполнения тестбенча. Чаще всего это означает ввод команд в консоли симулятора для подачи стимулов на DUT.

Хотя вы всегда должны создавать самопроверяющийся тестбенч, интерактивный тестбенч может быть отличным дополнением. С интерактивным тестбенчем проще выполнять ад-хок тестирование, чем менять код самопроверяющегося тестбенча.

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

Взаимодействие Tcl с VHDL

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

Изменение VHDL-сигналов из Tcl

Для взаимодействия с VHDL нам нужно найти команду для изменения значения сигнала. В ModelSim это команда «force». Как указано в справочном документе по командам, синопсис команды:

force {<object_name> <value> [[@]<time_info>][, <value> [@]<time_info>]... [-deposit | -drive | -freeze] [-cancel [@]<time_info>] [-repeat [@]<time_info>]

Переключатель, который вы хотите использовать — флаг «-deposit». Это мгновенно меняет значение VHDL-сигнала, но позволяет другому VHDL или Tcl драйверу изменить его на что-то другое позже.

Игнорируя параметры, которые мы не используем, упрощенный синопсис выглядит так:

force -deposit <signal_name> <value>

VHDL-триггер

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

 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity interactive is end interactive; architecture sim of interactive is -- Controlled by Tcl signal trigger : std_logic := '0'; begin process is begin wait until trigger = '1'; report "Triggered!"; end process; end architecture; 

Процесс пробудится, когда сигнал trigger изменится с чего-то на '1'. Он выведет «Triggered!» в консоль, когда это произойдет, позволяя нам протестировать концепцию управления VHDL-процессами из Tcl.

Я сделал именно это в консоли ModelSim. Выданные команды, а также вывод, можно увидеть в транскрипте ниже.

VSIM 1> run 10 ns; VSIM 2> force -deposit /trigger '1' VSIM 3> run 0 ns; # ** Note: Triggered! # Time: 10 ns Iteration: 0 Instance: /interactive VSIM 4> force -deposit /trigger '0' VSIM 5> run 10 ns;

Я запустил тестбенч на 10 наносекунд после старта симуляции.

Затем я принудительно установил сигнал trigger в '1'. На следующей строке я жду 0 наносекунд. Цель этого — создать дельта-цикл. Я хочу, чтобы процесс сработал, но не хочу, чтобы прошло какое-либо симуляционное время.

Наконец, я принудительно устанавливаю сигнал trigger обратно в '0' перед продолжением тестбенча.

Мы видим, что VHDL-процесс пробудился после строки «run 0 ns» и вывел «Triggered!» в консоль.

Чтение значений VHDL-сигналов в Tcl

Для чтения значений сигналов в ModelSim можно использовать команду «examine». Мы можем, например, прочитать значение сигнала trigger, используя эту команду в консоли ModelSim:

VSIM 6> examine /trigger # 0

Вы захотите присвоить значение Tcl-переменной при использовании «examine» в скрипте. Давайте попробуем это в консоли ModelSim:

VSIM 7> set triggerVal [examine /trigger] # 0

Затем мы можем, например, вывести переменную, используя Tcl-команду «puts»:

VSIM 8> puts "triggerVal: $triggerVal" # triggerVal: 0

Остановка симулятора после каждого теста

Самый простой способ запустить тест достаточно долго, чтобы DUT отреагировал — просто запустить симулятор на фиксированное время. Например, если DUT должен отреагировать через два тактовых цикла, а период тактового сигнала 10 наносекунд, мы бы использовали команду «run 20 ns» в нашем Tcl-скрипте.

Если у DUT нет фиксированного времени реакции, VHDL-ассершн можно использовать для остановки симуляции и передачи управления Tcl-функции обратного вызова. В ModelSim это означало бы установку точки останова из вашего Tcl-скрипта с помощью команды «when»:

when [[-fast] [-id <id#>] [-label <label>] {<when_condition_expression>} {<command>}]

Вам также придется определить функцию обратного вызова «onBreak» в Tcl, которая будет запускаться при срабатывании точки останова. Функция «onBreak» указана в справочнике по командам ModelSim.

Недостатки тестирования, управляемого Tcl

У тестбенчей, сильно зависящих от Tcl-скриптов, есть недостатки. Наиболее очевидные — проблемы со скоростью и переносимостью.

Tcl-управляемые тестбенчи работают путем многократного запуска и остановки симулятора для взаимодействия с VHDL-кодом. Запуск и остановка симуляции для выполнения Tcl-функции между ними занимает больше времени, чем запуск VHDL-тестбенча непрерывно. Хотя Tcl — интерпретируемый язык, VHDL компилируется в симуляторе и работает намного быстрее Tcl.

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

Новый курс по VHDL и FPGA

* Я создаю новый курс по VHDL и FPGA, который глубоко погрузится в тестбенчи. Вы научитесь создавать FPGA-дизайн с нуля. После завершения курса вы будете знать, как создавать самопроверяющиеся тестбенчи и как переиспользовать код для создания интерактивного тестбенча.

* Обновлено 12 октября 2020: Я завершил курс. Нажмите на изображение ниже, чтобы узнать больше.

Продукт, который мы создадим, — это модуль контроллера точечно-матричного LED-дисплея. Мы будем использовать отладочную плату Lattice iCEstick за $49. В конце мы реализуем дизайн на макетной плате. Вы сможете печатать на клавиатуре компьютера, и символы будут появляться на точечно-матричном LED-экране, управляемом ПЛИС.

Улучшение верификации оборудования с помощью интерактивного тестбенча на Tcl

Узнайте больше о курсе Dot Matrix VHDL и FPGA здесь!

Открытие:

Будет решено позже.

VHDL

  1. Введение в VHDL: создание вашего первого И-шлюза
  2. Полное руководство по преобразованию типов в VHDL с Numeric_Std и Std_Logic_Arith
  3. Пример процедуры VHDL: инкремент std_logic_vector
  4. Использование записей (Records) в VHDL для чистых, повторно используемых интерфейсов FIFO
  5. Освоение знаковых и беззнаковых типов в VHDL: практические инсайты
  6. Освоение операторов using в C#: импорт, псевдонимы и статические директивы
  7. Создание списков строк в VHDL: лучшие практики и пример
  8. Как создать самопроверяющийся тестбенч в VHDL — практическое руководство
  9. Создание интерактивного лазерного проектора с Zigbee-сенсорами и платформой Gravio Edge
  10. Превращение фрезерного станка в токарный: простые шаги для металлообработчиков