Использование логического анализатора ChipScope Pro для отладки цифровых устройств на ПЛИС фирмы Xilinx
В настоящее время при разработке цифровых устройств достаточно часто применяются ПЛИС фирмы Xilinx. Этой тематике посвящено большое количество работ [1–3], однако методы отладки не нашли широкого освещения в российской литературе. В настоящей работе рассматриваются основные приемы использования логического анализатора ChipScope Pro, который облегчает процесс отладки цифровых устройств на ПЛИС. Данная статья ориентирована на разработчика, который знаком с основами проектирования в системе ISE [1] и хочет ознакомиться с основными приемами использования ChipScope Pro. Работа с логическим анализатором предполагает наличие реальной схемы на ПЛИС, поэтому при подготовке данной работы использовался стартовый набор Spartan 3E Starter Kit, описание которого можно найти на сайтах www.xilinx.com и www.plis.ru.
В состав программного комплекса ChipScope Pro входят: генератор блоков ChipScope Pro Core Generator; средство для добавления анализатора в отлаживаемый проект ChipScope Pro Core Inserter и логический анализатор ChipScope Pro Analyzer. Генератор блоков ChipScope Pro Core Generator используется один раз и может вызываться из ОС Windows. Для отладки обычных цифровых схем, не содержащих процессорных ядер MicroBlaze и PowerPC, достаточно сгенерировать два блока: контроллер ICON Core и анализатор ILA Core. ICON Core обеспечивает связь устройств, входящих в ChipScope Pro, с компьютером через интерфейс JTAG. Анализатор ILA Core выполняет функции логического анализатора, то есть захват и фиксацию данных. Узлы логического анализатора внедряются в разрабатываемую схему и реализуются на ресурсах ПЛИС, в частности фиксация данных производится во внутренних блоках памяти.
После запуска генератора ChipScope Pro Core Generator разработчику надо задать семейство, к которому принадлежит отлаживаемая ПЛИС, а в остальном можно следовать указаниям программы и соглашаться со всеми параметрами, предлагаемыми по умолчанию. При генерации не возникает сложностей или проблем, поэтому более подробно на этом этапе не имеет смысла останавливаться. Каждый блок генерируется один раз и в дальнейшем может использоваться многократно в разных проектах с различными параметрами. Более подробно порядок работы с этим приложением описан в главе 2 технического описания [4].
Рассмотрим процесс применения ChipScope Pro на конкретном примере. Пример выбран максимально упрощенный, с тем чтобы сконцентрироваться в основном на изучении особенностей работы анализатора. Пусть проект содержит два счетчика: ct6 и ct11, имеющих коэффициенты пересчета 6 и 11 соответственно. Кроме того, в схеме имеется триггерный сигнал z28, отмечающий с задержкой на один такт событие, когда одновременно ct6=2 и ct11=8. Описание этой схемы на языке VHDL имеет следующий вид:
Входным сигналом в этой схеме является синхросигнал clk, выходы данной схемы подключаются к светодиодам leds. Задание конкретных выводов ПЛИС производится в файле ограничений [1].
После ввода и моделирования схемы в системе ISE выполняется этап синтеза, а затем производится подключение логического анализатора. Блок анализатора добавляется так же, как и обычные модули проекта, например, из основного меню системы ISE можно выбрать пункт Project и далее — New Source, в открывшемся окне выбрать пункт ChipScope Definition and Connection File, задать имя узла (например, Ch1) и нажать кнопку Next. В последующих окнах нажимаются кнопки Next и Finish. После этого окно Sources принимает вид, показанный на рис. 1.
Чтобы запустить ChipScope Pro Core Inserter, надо дважды щелкнуть левой кнопкой мыши на строке Ch1.cdc. В двух последовательно открывающихся окнах можно ничего не изменять и нажимать кнопку Next до появления окна, показанного на рис. 2. В поле Number of Input Trigger Ports задается количество стартовых портов. Зададим три стартовых порта: два для счетчиков ct6 и ct11, третий — для сигнала z28. После задания количества портов устанавливаются их параметры (рис. 3). Так как порт TRIG0 соответствует счетчику ct6, разрядность которого равна 3, в поле Trigger Width для TRIG0 надо задать 3. Остальные параметры TRIG0 можно не изменять. Для порта TRIG1 в поле Trigger Width надо задать 4, что соответствует разрядности ct11. Для порта TRIG2 величину Trigger Width надо установить 1. Остальные параметры можно не изменять.
В следующем окне, которое появляется после нажатия кнопки Next, никаких изменений можно не делать, для продолжения надо так же нажать кнопку Next, после чего откроется окно, показанное на рис. 4. В этом окне нажимается кнопка Modify Connections, что приводит к открытию окна Select Net, показанного на рис. 5. В этом окне производится подключение сигналов контролируемой схемы, расположенных в левой части Structure/Nets, к входным портам анализатора, которые находятся в правой части Net Selections.
При активной вкладке Clock Signals выполняется подключение к анализатору синхросигнала, для этого в левой части в столбце Net Name левой кнопкой мыши выбирается строка clk_BUFGP (при выделении она окрашивается другим цветом), а затем в правой части, Net Selections, нажимается кнопка Make Connections. После подключения синхросигнала надо активизировать вкладку Trigger/Data Signal, при этом внизу появляются закладки TP0, TP1 и TP2, соответствующие портам с номерами 0, 1 и 2. В нулевом порте, активизируемым закладкой TP0, имеются три строки—CH0, CH1 и CH2. Это соответствует разрядности порта TRIG0, которая задавалась ранее. К нулевому порту нужно подключить выходы счетчика ct6 — сигналы ct6<0>, ct6<1> и ct6<2>, которые находятся в столбце Net Name в левой части окна Select Net. На рис. 5 эти связи не видны, но они появляются, если сдвинуть вниз полосу прокрутки.
Сигналы ct6<0>, ct6<1> и ct6<2> выделяются, после чего в правой части окна нужно нажать кнопку Make Connections. В результате выполняется подключение этих сигналов, они отражаются в окне Net Selections (рис. 6). Затем активизируется закладка TP1 и подключаются сигналы ct11<0>, ct11<1>, ct11<2> и ct11<3>, которые формируются на выходе счетчика ct11. Последней активизируется закладка TP2, в которой осуществляется подключение одного сигнала — z28. После подключения сигналов нажимается кнопка OK, затем в появившемcя окне нажимается кнопка Return to Project Navigator. После нажатия последней кнопки система задает вопрос о необходимости сохранения проекта, на этот вопрос надо ответить утвердительно, так как здесь сохраняется введенная информация, в том числе и имена связей. Сохраненный файл имеет расширение cdc. На этом работа ChipScope Pro Core Inserter завершается.
Далее в системе ISE выполняются все необходимые действия по формированию и загрузке в ПЛИС файла конфигурации [1]. После загрузки конфигурации в ПЛИС запускается анализатор ChipScope Pro Analyzer. Для запуска анализатора необходимо дважды щелкнуть левой кнопкой мыши по строке Analyze Design Using ChipScope, которая находится в нижней части окна Processes системы ISE. В открывшемся окне анализатора ChipScope Pro надо левой кнопкой мыши нажать кнопку Open Cable/Search JTAG Chain. Эта кнопка отображает цепь JTAG (ее изображение содержит четыре черных квадрата, объединенных в цепь) и находится на панели инструментов в левой верхней части окна, она является в этот момент единственной активной кнопкой.
Через несколько секунд появляется окно, содержащее таблицу, в которой приведены устройства, входящие в JTAG-цепь. В этом окне нужно нажать кнопку OK. Если все выполнено верно, то окно анализатора принимает вид, показанный на рис. 7. Окно на рис. 7 содержит следующие части: слева сверху расположено дерево проекта, слева снизу — браузер сигналов. Внизу расположена панель сообщений. В правой части расположено главное окно, которое разделено на две части: в верхней части окна Trigger Setup приводятся условия старта, в нижней части Waveform — временная диаграмма работы (на рис. 7 — пустая).
Для ввода информации, сохраненной ранее в ChipScope Pro Core Inserter, надо из основного меню анализатора выбрать пункт File, а в нем — пункт Import. В результате откроется окно Signal Import, в котором надо нажать кнопку Select New File. В следующем окне, Open Signal File, выбирается файл с расширением cdc (в данном примере — файл Ch1.cdc) и нажимается кнопка Open. В следующем окне нажатием кнопки OK подтверждается выбранный файл. В результате имена сигналов на диаграмме Waveform изменятся на те, которые задавались в ChipScope Pro Core Inserter.
Рассмотрим более подробно окно Trigger Setup. В верхней части, отмеченной слева закладкой Match, приводятся параметры событий M0, M1 и M2, формируемых в соответствующих схемах Match Unit (на рис. 7 показано только M0, другие два события можно увидеть, если изменить размеры окна). Эти события учитываются при запуске анализатора. В графе Function указано, что в данном случае проверяется равенство. В графе Value может быть указано число, с которым производится сравнение. При первоначальном запуске в этой графе задается XXX, что соответствует любому значению. В столбце Radix указывается система счисления, по умолчанию — двоичная. В средней части, отмеченной Trig, выбирается условие запуска, при первом запуске — это событие M0. В нижней части, Capture, указывается тип окна, размер запоминаемой диаграммы, момент запуска, порядок запоминания данных и другие параметры.
На рис. 8 показаны наиболее часто используемые кнопки панели инструментов, которая, как и у других программ, находится в левой верхней части окна. Цифрой 1 отмечена кнопка Turn On/Off Auto Core Status Polling, эта кнопка позволяет включить или выключить автоматический опрос состояния устройства. При включенном состоянии кнопка окрашена в зеленый цвет, при выключенномв красный. Эта кнопка должна быть включена, выключать ее целесообразно, когда интерфейс JTAG одновременно с анализатором используется для других целей. Цифрой 2 отмечена кнопка запуска Run. Кнопка Stop, обозначенная цифрой 3, позволяет остановить работу анализатора и вывести на экран его содержимое. Цифрой 4 отмечена кнопка немедленного запуска Trigger Immediate. Кнопки, помеченные цифрами 5 и 6, изменяют масштаб временной диаграммы.
При нажатии на кнопку Run запуск производится с комбинации, указанной в правой верхней части в закладе Match. На рис. 7 условие запуска не определено, так как в столбце Value имеется запись ХХХ. На этом месте вводится начальное (стартовое) состояние. Введем вместо ХХХ число 001 и нажмем кнопку Run (кнопка номер 2 на рис. 8). В результате после установки нужного масштаба получается диаграмма, представленная на рис. 9. На этом рисунке показана только временная диаграмма в окне Waveform. Из диаграммы видно, что начальная точка соответствует состоянию ct6=001. Если нажать на кнопку Trigger Immediate (T!), то старт будет производиться с любого (произвольного) состояния. Эту кнопку целесообразно использовать тогда, когда запуск с помощью кнопки Run не дает результата. Например, если в рассматриваемом случае в столбце Value вместо 001 ввести 110, то при нажатии кнопки Run запуск выполняться не будет, так как эта комбинация в диаграмме отсутствует, что видно из рис. 9. Однако при нажатии на кнопку Trigger Immediate (T!) результат будет получен.
Сигналы можно объединять в шины, для этого выделяется нужная группа сигналов, затем на выделенной группе сигналов надо нажать правой кнопкой мыши и в контекстном меню выбрать Add to bus. На рис. 10 показаны результаты объединения в шины сигналов на выходах счетчиков ct6 и ct11. Кроме того, на этой диаграмме удалены сами сигналы /ct6[0]…/ct6[2] и /ct11[0]…/ct11[3], на основе которых формировались шины.
При необходимости разработчик может просмотреть сигналы, которые предшествовали моменту запуска. Для этого в поле Position на закладке Capture необходимо ввести нужное количество тактов. Диаграмма, показанная на рис. 10, была получена после того, как в поле Position перед запуском было введено значение 8. На этом рисунке точка старта отмечена маркером T, этой точке на диаграмме предшествуют 8 тактов.
Допустим, что требуется произвести запуск с момента времени, когда одновременно ct6=1 и ct11=6. Для этого в окне Trigger Setup на вкладке Match в столбце Value задаются следующие значения: в строке M0:TriggerPort — 001; в строке M1:TriggerPort — 0110 (рис. 11). Кроме того, на вкладке Trig в столбце Trigger Condition Equation надо щелкнуть левой кнопкой мыши на записи M0, в результате откроется окно Trigger Condition, показанное на рис. 12. В этом окне надо поставить флажок (отметку в виде галочки) на пересечении столбца Enable и строки M1, в результате в поле Trigger Condition Equation появится запись M0 && M1. Это означает, что запуск будет производиться при совпадении событий M0 и M1. После этого нужно нажать кнопку OK, после закрытия окна Trigger Condition производится запуск анализатора нажатием кнопки Run (результат показан на рис. 13). Момент запуска отмечается маркером T; в данном случае в поле Position на закладке Capture было введено значение 2.
Допустим, что запуск анализатора нужно произвести по одиночному сигналу z28. В этом случае открывается окно Trigger Condition, в строках M0 и M1 удаляются отметки (галочки) и ставится отметка в строке M2. После закрытия этого окна на закладке Match в строке M2 в столбце Value значение X заменяется на 1, после чего производится запуск анализатора кнопкой Run.
На диаграммах, приведенных на рис. 10 и 13, помимо маркера T имеются также маркеры O и X, на рис. 10 они совмещены и находятся в позиции –8. Эти маркеры можно перемещать мышкой — так, например, на рис. 13 они установлены в позициях 4 и 17 соответственно, значения сигналов в эти моменты показаны также в столбцах X и O в левой части диаграммы. Это удобно использовать, когда установлен мелкий масштаб, не позволяющий увидеть значения сигналов на диаграмме (рис. 14). Кроме того, под диаграммой выводятся положения маркеров и расстояние между ними. Маркеры удобно использовать также для задания границ диаграммы, для чего после установки маркеров из основного меню выбирается пункт Waveform, далее Zoom и затем Zoom X, O.
В рассматриваемой статье взят максимально простой пример и рассмотрены только основные приемы работы с ChipScope Pro. Однако эти приемы можно использовать при настройке достаточно сложных схем, при этом можно создавать практически любые условия запуска. Как отмечалось ранее, реализация узлов ChipScope Pro производится на ресурсах используемой ПЛИС, что в отличие от других логических анализаторов, в том числе фирмы Agilent, не требует дополнительных аппаратных затрат. Это является несомненным достоинством данной технологии. В то же время следует учитывать, что использование рассмотренного анализатора несколько снижает количество ресурсов ПЛИС, имеющихся в распоряжении разработчика, что может сказаться при разработке схем с высоким коэффициентом заполнения ПЛИС. Более подробно работа анализатора изложена в руководстве [4]. Таким образом, рассмотренный логический анализатор ChipScope Pro достаточно прост для изучения и применения и позволяет существенно облегчить отладку цифровых схем.
- Зотов В. Ю. Проектирование цифровых устройств на основе ПЛИС фирмы Xilinx в САПР WebPACK ISE. М.: Горячая линия-Телеком. 2003.
- Кузелин М. О., Кнышев Д. А., Зотов В. Ю. Современные семейства ПЛИС фирмы Xilinx. Справочное пособие. М.: Горячая линия-Телеком. 2004.
- Тарасов И. Е. Разработка цифровых устройств на основе ПЛИС фирмы Xilinx с применением языка VHDL. М.: Горячая линия-Телеком. 2005.
- ChipScope Pro Software and Cores. User Guide. Xilinx, UG029, 2006.