Обзор маршрута проектирования ПЛИС FPGA Advantage компании Mentor Graphics.
Часть 4. Моделирование в среде FPGA Advantage
Алексей РАБОВОЛЮК
Данная статья продолжает описание маршрута проектирования FPGA Advantage, начатое в предыдущих номерах. Сегодня речь пойдет об интерактивном моделировании ранее созданного проекта.
В первой статье (КиТ № 7 2005) был проведен общий обзор всего маршрута проектирования FPGA Advantage, во второй статье (КиТ № 8 2005) рассказано об основах создания блок-диаграмм и в третьей статье (КиТ № 9 2005) представлено описание процесса создания конечного автомата.
Моделирование HDL-проекта подразумевает выполнение двух этапов: компиляция исходного кода в двоичный вид и непосредственно моделирование. HDL Designer позволяет автоматизировать этот процесс: от пользователя требуется только выбрать нужный объект и дважды щелкнуть по кнопке запуска процесса моделирования.
Проект, как правило, состоит из большого числа файлов, поэтому в HDL Designer предусмотрено два режима: компиляция всех подряд файлов и компиляция только тех файлов, которые были модифицированы с момента предыдущей компиляции. Поэтому на этапе компиляции возникает задача отследить HDL-файлы, модифицированные после предыдущей компиляции. HDL Designer решает эту задачу, отслеживая измененные файлы. Переключение между режимами производится при помощи меню Tasks > Set Compile Always.
Существует два подхода к тестированию (верификации) проекта: интерактивное тестирование и применение «виртуального» тестового устройства, так называемого тестбенча.
Интерактивное тестирование подразумевает задание управляющих воздействий и наблюдение полученных откликов непосредственно в процессе моделирования и обычно используется для тестирования небольших отдельных блоков проекта.
Тестирование на основе тестбенча требует разработки дополнительного устройства, генерирующего для проекта входные воздействия и анализирующего выходные сигналы, и создается для верификации проекта в целом. Поскольку тестбенч не будет синтезироваться в кристалле, а предназначен исключительно для моделирования, то его можно
описывать с помощью несинтезируемых конструкций языков VHDL и Verilog или какого-либо другого языка, например SystemC, моделирование которого поддерживается специальной опцией ModelSim.
В данной статье представлен пример интерактивного моделирования, а возможности тестбенча будут рассмотрены в одной из последующих статей.
Процесс верификации проекта в FPGA Advantage условно можно разбить на несколько этапов: подготовка и сохранение проекта, генерация текстовых VHDL и/или Verilog-описаний из графических представлений, компиляция VHDL/Verilog-описаний в двоичный вид, запуск симулятора ModelSim, моделирование, отладка, редактирование проекта и, при необходимости, повторное выполнение всех этапов в итеративном режиме до тех пор, пока не будут получены требуемые результаты
моделирования. Указанные этапы можно выполнять как по отдельности, так и объединяя несколько этапов в один процесс. В панели Tasks модуля HDL Designer есть так называемые «потоки» (Flows), позволяющие, например, выполнить три действия — генерацию VHDL/Verilog, компиляцию сгенерированных файлов и запуск ModelSim, щелкнув по одной кнопке ModelSim Flow (рис. 1). Некоторые этапы могут быть автоматизированы в зависимости от контекста. Так, если есть отверифицированный проект, в котором необходимо сделать несколько изменений, то для того, чтобы промоделировать измененную версию, нет необходимости «выходить» из ModelSim, теряя, таким образом, настройки моделирования (открытые окна, список сигналов в окне Wave и т. д.). Можно просто воспользоваться кнопкой ModelSim Flow. При этом HDL Designer
| ■ I S' , Д SM О АЛ о а Я'*. л
аіз чь - wá ї* ■ й-я-
Рис. 1. Кнопки запуска моделирования
проведет все подготовительные процедуры и запустит измененный проект на моделирование в текущей сессии моделирования, сохранив все текущие настройки.
Если ModelSim используется в автономном режиме (не открывая HDL Designer), следует выполнить два этапа: компиляцию исходного HDL-кода и запуск сессии моделирования для выбранного откомпилированного объекта.
ModelSim состоит из множества окон, отображающих ту или иную специфическую информацию о моделируемом проекте. По необходимости такие окна могут быть открыты или закрыты. Это делается через меню View > Debug Windows главного окна ModelSim. Открытые окна имеют два режима отображения: в виде отдельных окон и в виде окон, вложенных в главное окно ModeSim. Переключение режима осуществляется специальной кнопкой, показанной на рис. 2.
На том же рисунке представлен внешний вид ModelSim с типичным набором открытых окон. Кроме графического, у ModelSim есть и командный режим. Большинство команд, выполненных через меню и кнопки на панелях, дублируются в окне протокола работы ModelSim. Данные команды записаны на языке TCL. Подробнее с документацией по этому языку вы можете ознакомиться на сайте разработчиков TCL/Tk: ht tp:/ /ww w.tcl.tk/. Команды могут быть сохранены в текстовом файле, а затем воспроизведены через меню Tools > Execute Macro... главного окна ModelSim. Таким образом, используя метод интерактивного тестирования, можно автоматизировать процесс ввода тестовых последовательностей.
Почти все окна контекстно-зависимы. Например, после выбора какого-либо объекта в окне структуры проекта Workspace, окно сигналов Objects отобразит сигналы, содержащиеся только в выбранном объекте.
Добавить сигнал в окно временной диаграммы сигналов (Wave) можно, перетащив сигнал из окна Objects или при помощи контекстного меню, щелкнув правой клавишей по нужному объекту и выбрав пункт Add... или Add to Wave.
Формат отображения и способ интерпретации сигналов и массивов сигналов не трудно настроить, щелкнув правой клавишей по нужному сигналу в окне диаграммы сигналов Wave и выбрав меню Format или Radix соответственно. Например, значение массива отображается как последовательность нулей и единиц или как целое десятичное число.
Чтобы отобразить в окне Objects не все сигналы, а только удовлетворяющие определенному признаку (входные, выходные и т. д.), можно «отфильтровать» список сигналов. Для этого нужно воспользоваться меню View > Filter окна Objects.
Отредактировать настройки, по умолчанию относящиеся к процессу моделирования, можно, вызвав меню Simulate > Runtime Options... главного окна ModelSim. В нем устанавливаются такие настройки, как способ интерпретации сигналов в окне Wave, время модели-
рования, ограничения на размер файла базы данных диаграмм сигналов и т. д.
Запуск моделирования осуществляется или через меню Simulation > Run главного окна ModelSim, или при помощи кнопки, показанной на рис. 2.
Присвоение значения сигналу выполняется в окне сигналов Objects, после щелчка правой клавишей мыши по выбранному сигналу и выбора пункта Force. Для отмены ра-
нее заданного воздействия надо вместо Force... вызвать NoForce. Для задания периодического воздействия существует пункт Clock.
ModelSim включает множество способов отладки проекта. Кроме отображения диаграммы сигналов ModelSim позволяет производить построчную отладку HDL-теста (включая возможность установки точек прерывания как на события, так и на строки HDL-кода и графические объекты исходного описания в HDL Designer), просматривать список и состояние активных процессов (View > Debug Windows > Process), наблюдать, как в процессе моделирования происходит вычисление сигналов (View > Debug Windows > List), просматривать распространение сигнала по иерархии проекта (View > Debug Windows > DataFlow), анализировать полноту покрытия моделированием HDL-кода по многим параметрам (View > Code Coverage), наблюдать состояния так называемых «ассертов» (assertions) (View > Analysis) и многое другое.
Самостоятельная работа
Если в распоряжении пользователя имеются сконфигурированные данные для лабораторных работ, о которых говорилось в первой статье (КиТ № 7'2005), создана блок-диаграмма,
описанная во второй статье, и создана архитектура для блока BCDRegControl, рассмотренная в третьей статье, то можно самостоятельно промоделировать объект BCDRegister. Для этого надо в HDL Designer выделить ранее созданный объект BCDRegister и дважды щелкнуть по строке ModelSim Flow на панели Tasks, расположенной справа. Если эта панель недоступна, ее следует включить, выбрав меню View > Sub Windows > Tasks and Templates.
Далее, в появившемся окне Start ModelSim можно просто нажать OK, не меняя других параметров. Данное окно позволяет гибко настраивать параметры компиляции и моделирования. Например, в поле Initialization command можно указать, так называемый do-file, после чего при старте моделирования будут выполняться содержащиеся в нем команды. В do-file содержатся именно те команды на языке TCL, которые вы могли взять из окна Transcript (о нем говорилось в начале статьи).
После запуска ModelSim при помощи меню View > Debug Windows > Objects и View > Debug Windows > Wave соответственно открываются окна Objects и Wave, а также окно Source, для открытия которого необходимо дважды щелкнуть по объекту BCDregister в окне Workspace.
Затем необходимо перетащить из окна Objects в окно Wave сигналы, показанные на рис. 3. Диаграмму сигналов имеет смысл сохранить в файл — базу данных диаграмм. Чем больше сигналов, тем больше получится размер этого файла. В процессе моделирования ModelSim сразу записывает диаграммы во временный файл на жестком диске в рабочую директорию, поскольку диаграммы не хранятся в оперативной памяти. Как правило, рабочая директория расположена в одной из поддирек-
^ U 4 J * » И • t ■ ъ - * *■
* й 4 t V . 1, t- u M II -j Ъ
k * : A > «
Рис. 3. Пример списка сигналов
Рис. 4. Задание входной «частоты» для сигнала clk объекта bcdregister
торий вашего проекта. Поэтому перед началом моделирования необходимо убедиться, что на том жестком диске, на котором хранится проект, хватит места для записи базы данных. На достаточно больших проектах база может занимать до нескольких гигабайт.
В качестве примера можно изменить способ интерпретации сигналов data_out, q_ones и q_tens на шестнадцатеричный, а остальных — на двоичный. Для того чтобы изменить способ интерпретации сигнала, необходимо в окне Wave щелкнуть по сигналу правой клавишей мыши и выбрать Radix > Hexadecimal для шестнадцатеричного вида и Radix > Binary для двоичного.
На рис. 3 между сигналами вы можете видеть так называемые разделители, помеченные словами New Divider. Эти разделители не несут никакой функциональной нагрузки и предназначены исключительно для облегчения визуального восприятия диаграмм. Для добавления разделителей между сигналами необходимо щелкнуть правой клавишей мыши по тому сигналу, перед которым устанавливается разделитель, и выбрать Insert Divider.
Масштаб диаграмм может быть изменен, например, для получения разрешения 2 мкс. Это выполняется при помощи кнопок Zoom In и Zoom Out на панели инструментов или через меню View > Wave > Zoom.
Задайте продолжительность моделирования 100 нс при помощи поля ввода Run Length на панели инструментов (рис. 2).
Например, сигналу clk можно присвоить период 100 нс, скважность 50% (50 нс) и задержку относительно текущего времени моделирования 30 нс. Для этого надо щелкнуть правой клавишей мыши в окне Objects по сигналу clk, выбрав пункт Clock... и заполнив появившееся диалоговое окно, как показано на рис. 4. Но перед тем необходимо убедиться, что в окне Workspace выбран объект bcdregister. Если выбран другой объект, то в окне Objects нужный сигнал может или отсутствовать, или быть показан другой сигнал с таким же именем.
Далее можно присвоить сигналу reset значение «0» и промоделировать проект в течение 100 нс. Данная операция выполняется
аналогично присвоению частоты с той разницей, что вместо пункта Clock... необходимо выбрать Force.. В появившемся диалого-
вом окне в поле Value вводится «0», а переключатель Kind остается в положении Freeze. Запустить процесс моделирования можно при помощи меню Simulate > Run > Run 100ns или кнопки Run на панели инструментов. Согласно логике работы проекта все выходные сигналы должны «сброситься» в ноль. Если это не так, следует вернуться к предыдущим пунктам и найти ошибку.
Далее можно присвоить сигналу reset значение «1» и еще раз промоделировать проект в течение 100 нс. При этом счетчик bcdregister не производит счет, то есть выходной массив остается равным нулю.
Наконец, сигналу ripple_in присваивается частота с периодом в 1000 нс и скважностью 10%, другими словами, в окне Define Clock в поле Period вводится значение 1000, а в поле Duty — значение 10.
Настройки моделирования необходимо сохранить. Весь текст из окна Transcript можно сохранить в do-file. Это делается при помощи меню File > Save As... при активном окне Transcript. Содержимое окна Transcript сохраняется в файл BCDRegTestSetup.do. Однако в окне Transcript отображаются только команды, относящиеся к моделированию. Чтобы сохранить формат сигналов в окне Wave, надо активировать это окно и выбрать меню File > Save. Причем формат сигналов сохраняется в файле wave_BCDReg.do. При следующем сеансе моделирования можно восстановить формат окна Wave, активировав его и выбрав меню File > Load.. Все команды за-
писаны на языке TCL, и сохраненные текстовые файлы легко изменить в соответствии с пожеланиями пользователя.
Заданный проект можно промоделировать еще несколько раз по 100 нс, до тех пор пока значение шины data_out не увеличится на несколько единиц.
Увеличив время моделирования до 50 мкс и запустив моделирование, можно довести проект до состояния, когда значение data_out вернется в «00».
111 ' í liÉdjÉltm
[н ПТТ
ll^lilfl li
kt« N( <p — i 4a)
4._______________________________Ui
Рис. 5. Конфигурирование точки прерывания
Если необходимо осуществить перезапуск моделирования, это делается через меню Simulate > Run > Restart... или при помощи кнопки на панели инструментов (рис. 2).
Для загрузки сохраненной ранее последовательности моделирования можно использовать меню Tools > Execute Macro... и выбрать сохраненный ранее файл BCDRegTestSetup.do.
Пользователю предлагается проверить правильность работы проекта при изменении значения шины data_out с 09 на 10. Для этого необходимо установить точку прерывания на шине data_out, щелкнув по ней в окне Wave правой клавишей мыши и выбрав пункт Insert Breakpoint. Теперь, если нажать кнопку бесконечно долгого моделирования (рис. 2), то моделирование будет продолжаться до тех пор, пока шина data_out не изменит свое значение. Нажимая кнопку возобновления моделирования после точки прерывания (рис. 2), можно дойти до того момента, когда шина data_out изменит свое значение с 09 на 10. Однако это не очень удобно. Чтобы зафиксировать нужное событие, стоит задать соответствующее условие для точки прерывания. Для этого надо открыть список всех установленных точек прерывания, используя меню Tools > Breakpoints... , выделить единственную имеющуюся точку прерывания, нажать кнопку Modify... и задать условия в соответствии с рис. 5. Теперь, после возобновления моделирования, оно остановится при наступлении нужного события.
Проект можно отладить так, чтобы на шине data_out последовательно появлялись значения от 00 до 99 в режиме счета с последующим сбросом в нулевое состояние и циклическим повтором.
Итак, на данном примере показано, как в FPGA Advantage запустить проект на моделирование и вручную управлять процессом моделирования. В одной из следующих статей будет описано моделирование на основе тестбенча.
В следующей статье речь пойдет о синтезе отлаженного проекта регистра bcdregister. ■
Литература
1. Designing with FPGA Advantage Student Workbook
Software Version V6.1 June 2003.