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

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

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

Однако для более глубокой отладки требуется более сложный запуск.

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

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

Подсчет количества нарастающих фронтов на действительной линии между нарастающим и спадающим фронтами действительного кадра будет сообщать о количестве строк в кадре.

Мы можем настроить ILA, чтобы делать именно это, используя Trigger State Machine.

Чтобы иметь возможность использовать Trigger State Machine (TSM) в ILA, нам нужно включить опцию Advanced Trigger в конфигурации ILA.

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

Конечный автомат триггера описывается с помощью простого языка сценариев. Это позволяет нам объявлять и изменять состояния и переходить к состояниям в зависимости от значений счетчика Signal или ILA.

Структура самого простого сценария TSM будет следующей:

штат ‹название_штата›

курок;

Хотя это мало что дало бы, кроме запуска немедленного триггера.

Вместо этого мы хотим использовать состояние сигналов в ILA и счетчики для перехода от одного состояния к другому до запуска ILA.

Мы можем определить до 16 состояний в нашей машине состояний триггера, и в каждом состоянии мы можем использовать ветвление (если еще), чтобы определить следующее действие, которое нужно предпринять. Для перехода между состояниями мы используем команду goto ‹state name›. Оператор goto или триггер должен быть последним, что мы вызываем в состоянии или ветке.

Синтаксиса больше, чем я могу описать в одном блоге; однако языковые шаблоны в Vivado предоставляют значительный ресурс как по использованию, так и по синтаксису.

Мы можем написать скрипт Trigger State Machine, используя любой текстовый редактор — расширение файла должно быть ‹имя файла›.tsm.

После того, как проект с ILA создан и у нас есть готовый сценарий TSM, следующим шагом будет программирование устройства и открытие диспетчера оборудования Vivado.

Чтобы использовать сценарий TSM, нам нужно изменить режим триггера с BASIC на ADVANCED_ONLY на вкладке настроек ILA.

Именно на этой вкладке мы также можем выбрать файл TSM, который мы хотим использовать с ILA.

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

Для этого на вкладке состояния в ILA нам нужно нажать на кнопку compile TSM. Это скомпилирует сценарий TSM и откроет диалоговое окно, если есть какие-либо ошибки.

Если мы этого не сделаем, то при нажатии на триггер он будет скомпилирован в первый раз.

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

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

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

Находясь во втором состоянии (wait_fs_fe), скрипт подсчитывает нарастающие фронты, возникающие на действительном сигнале линии. Каждый раз, когда на действительной линии обнаруживается нарастающий фронт, счетчик увеличивается. При обнаружении заднего фронта кадровой синхронизации происходит вход в конечное состояние.

Именно в конечном состоянии проверяется значение счетчика. Это проверяется на ожидаемое количество строк 800 или 0x320. Если получено правильное количество строк, устанавливается флаг 1. В качестве альтернативы, если количество строк отличается от ожидаемого, устанавливается флаг 3.

Конечно, мы можем использовать TSM и для фильтрации информации — например, для мониторинга входа Ethernet на наличие пакетов определенного формата, срабатывая только при их получении.

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

Посмотрите мои проекты FPGA/SoC:Адам Тейлор на Hackster.io

Получите код:ATaylorCEngFIET (Адам Тейлор)

Доступ к архивам MicroZed Chronicles с более чем 250 статьями о Zynq / Zynq MpSoC, которые еженедельно обновляются на MicroZed Chronicles.