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

Интерактивный тестовый стенд с использованием Tcl

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

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

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

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' . Он напечатает «Триггер!» в консоль, когда это происходит, что позволяет нам протестировать концепцию управления процессами 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, вы можете использовать команду «исследовать». Мы можем, например, прочитать значение trigger сигнал с помощью этой команды в консоли ModelSim:

VSIM 6> examine /trigger
# 0

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

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

Затем мы можем, например, распечатать переменную с помощью команды Tcl «puts»:

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

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

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

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

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 г.: Я закончил курс. Нажмите на изображение ниже, чтобы узнать больше.

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

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

Открывается:

Подлежит решению .


VHDL

  1. Учебное пособие — Введение в VHDL
  2. Примеры преобразования VHDL
  3. Оператор процедуры — пример VHDL
  4. Записи — пример VHDL
  5. Подписанный и неподписанный в VHDL
  6. С# с использованием
  7. Как создать список строк в VHDL
  8. Как создать самопроверяющийся тестовый стенд
  9. Интерактивный лазерный проектор с использованием датчиков Zigbee
  10. Использование фрезерного станка в качестве токарного станка