Отладка в Quartus II с помощью JTAG

Я описал USB-Blaster и сказал что он прошивает только через JTAG. Некоторые спрашивают: «Если это JTAG, тогда через него можно отлаживать?», — да, можно.

Когда вы отлаживаете МК, то у вас на виду текущее значение регистров и место где сейчас находится выполнение программы, можно в режиме реального времени изменять регистры и выполнять программу по шагам. В ПЛИС никаких регистров нет, а тем более программы, как же там происходит отладка?

//в статье описано как с помощью встроенных функций Quartus получить хороший логический анализатор


Внутри чипа у нас целая цифровая схема из набора триггеров и таблиц истинности. Естественно цифровые устройства отлаживают с помощью логического анализатора: подключаемся к нужным сигналам на плате и смотрим как они изменяются. Внутрь микросхемы мы конечно же щупом не залезем, но можно вывести необходимые сигналы на неиспользуемые выводы и к ним уже подключать лог. анализатор (или светодиоды :)). С этим может помочь SignalProbe (Tools->SignalProbe Pins…), он позволяет взять название любого сигнала из проекта и назначит его на какой-то вывод, интерфейс довольно понятный, описывать не буду, да и средство не очень интересное. Более интересная штука это внутрисхемный логический анализатор который можно добавить в проект на FPGA (ограничение связано с наличием внутренней память, в CPLD микросхем ее покаместь нет).

SignalTap II Logic Analyzer

Мощная и интересная штука:
— позволяет наблюдать почти любой внутренний или внешний сигнал
— частота выборок ограничена только быстродействием чипа (для Циклона 250 МГц)
— до 2048 каналов
— 128к выборок на канал
— поддерживаются все FPGA семейства
— отслеживание состояний конечного автомата
— гибкая настройка моментов выборки

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

Чтобы добавить SignalTap в пороект есть 2 пути, с помощью MegaWizard Plug-in Manager или создать stp файл. Второе проще, нажимаем File->New-> SignalTap II Logic Analyzer File


К проекту может быть подключен только один stp файл, но логических анализаторов может быть несколько. Чтобы подключить или отключить файл из проекта жмем Assignments->Settings…-> SignalTap II Logic Analyzer


При создании файла открывается SignalTap (его также можно запустить самому Tools-> SignalTap II Logic Analyzer ).


Для примера я выбрал датчик температуры на основе DS1820. Идет циклический запуск преобразования, а потом считывания температуры, данные выводятся на светодиоды.


Отлаживать буду 1-wire модуль который я уже описывал 1-wire на VHDL, добавлена только main_func которая является просто конечным автоматом и управляет всеми процессами. Отслеживать будем линию общения с датчиком и состояние конечного автомата.

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


Чтобы добавить отслеживание состояний конечного автомата, жмем на пустом месте правой кнопкой -> Add State Machine Nodes…, выбираем который нам надо, конечно если квартус не поймет что вы описали именно конечный автомат, то ничего не покажется.

Логический анализатор надо от чего-то тактовать (по фронтам этого сигнала будет производится захват данных), я выбрал тактовый сигнал модуля one_wire. Для этого в Signal Configuration (справа на экране) указываем в качестве Clock наш сигнал (жмем на кнопку с тремя точками и выбираем как ранее).


Storage qualifief->Type определяет когда будет происходить захват данных. Continous – всегда, Input port – когда выбранный сигнал в состоянии лог. 1, Transitional – при изменении выбранного сигнала, Conditional – при определенном состоянии, для каждого сигнала выбирается по клику правой кнопки, Start/Stop – условие старта выборки и остановки соответственно. Выборка будет происходить когда выполнится логическое И всех выбранных условий. Я выбрал чтобы захват происходил когда сигнал busy в высоком уровне.


Сохраняем файл, компилируем проект. Прошить можно прямо с SignalTap, вверху справа видим SOF Manager, жмем кнопку с тремя точками и выбираем прошивку в папке с проектом, жмем рядом кнопку для прошивки чипа.

Теперь все готово и должно работать, жмем Processing->Run Analysys (или треугольник с лупой). Происходит захват данных пока не заполнится вся память, потом они отправляются на компьютер.


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

Это все хорошо, но ведь в CPLD тоже есть JTAG и их тоже надо отлаживать. Что ж, для этого есть In-System Sources and Probes. Эта штука позволяет не только наблюдать изменение сигналов в реальном времени (с частотой до 9 Гц), но и изменять существующие сигналы.

In-System Sources and Probes

Чтобы добавить его в проект запускаем MegaWizard Plug-In Manager, в нем в разделе JTAG-accessible Extensions выбираем In-System Sources and Probes. Выбираете количество просматриваемых сигналов и управляемых, добавляете в проект и подключаете необходимые сигналы.

После компиляции запускаете Tools-> In-System Sources and Probes Editor. Дальше все совсем просто, выбираете количество отображаемых точек, и запускаете на непрерывное считывание, все интуитивно понятно.


Такая штука отлично заменяет кнопки со светодиодами :)

Файлы в топике: debug_termo.zip

Комментарии (2)

RSS свернуть / развернуть
Здорово! Спасибо.
Побольше бы статей, об использовании продвинутых функций софта. Например, было бы ещё интересно почитать про редактор КА — зачем он нужен и что умеет. Да много всего любопытного есть.
0
Крутая штука!
Тут вопрос возник — а можно ли как-нить анализировать данные… НАпример, как это сделано во всяких Saleae софтах… Там выбираешь протокол, и оно тебе по байтикам разжевывает все. Я так понимаю, нужно экспортировать данные из сигналтап, а потом какой-нить прогой открыть
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.