Автор: П.В. Алексей Рабоволюк
Источник: КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 7 '2005
Учитывая большой интерес к средствам проектирования ПЛИС, а также недостаток соответствующей литературы на русском языке, мы начинаем серию публикаций, целью которой является познакомить инженеров с основами проектирования в маршруте FPGA Advantage. В дальнейшем предполагается также уделить внимание другим этапам маршрута проектирования, особенно интеграции с проектированием печатных плат.
В течение последних лет в мире наблюдается заметный рост числа проектов, использующих ПЛИС типа FPGA. С одной стороны, эти схемы практически сравнялись по своим функциональноскоростным характеристикам со специализированными полузаказными схемами типа ASIC (десятки миллионов вентилей и сотни мегагерц). С другой стороны, они обладают такими очевидными преимуществами, как короткий и недорогой цикл разработки, гибкость, обеспечиваемая возможностью перепрограммирования (в том числе в составе изделия), снижение стоимости самих кристаллов с переходом на субмикронные технологические нормы и т. п. В последних поколениях FPGA появились серии, ориентированные на создание «системнапрограммируемомкристалле», предлагающие разработчикам такие «системные» функции, как встроенные процессоры, высокоскоростные последовательные интерфейсы, специализированные арифметические модули большой разрядности, например для DSPприложений, встроенные блоки памяти различной конфигурации и назначения и многое другое. Все это предъявляет чрезвычайно высокие требования к средствам проектирования. По существу, инженеры, проектирующие сложные системы на таких кристаллах, как VirtexII Pro, Virtex4, StratixII, ProASIC3 и других, должны иметь в своем распоряжении набор средств, обеспечивающий не только все этапы проектирования и верификации самого кристалла, но и их интеграцию с маршрутом проектирования печатных плат. Средства проектирования, поставляемые изготовителями ПЛИС, в основном рассчитаны на проекты не самого высокого уровня сложности и не решают все проблемы, возникающие при проектировании «системнакристалле». Другой очевидный недостаток пакетов изготовителей: эти программы привязаны к собственной технологии и не позволяют работать с комбинированными проектами, включающими кристаллы нескольких изготовителей.
Ядром маршрута проектирования Mentor Graphics являются пакеты HDL Designer, ModelSim и Precision Synthesis, реализующие, соответственно. Эти средства объединены в комплексный маршрут проектирования FPGA Advantage. Структурная схема маршрута проектирования приведена на рис. 1. FPGA Advantage поддерживает операционные системы Windows, Linux и Unix.
HDL Designer — это комплексное средство для создания HDLпроекта на уровне RTLописания. Он обеспечивает возможность текстового, табличного и графического ввода и редактирования VHDL, Verilog и «смешанного» описания проекта, а также функции управления запуском программ моделирования и синтеза, управления базами данных проекта, в том числе функцию контроля версий. HDL Designer ускоряет процесс функциональной верификации проекта благодаря встроенному механизму контроля правил проектирования и графической отладки в режиме моделирования. Пакет поддерживает функции коллективного проектирования и повторного использования блоков, в том числе импорт IPблоков. Встроенный менеджеробеспечивает навигацию проекта и поиск по множеству критериев. HDL Designer автоматически генерирует графическую документацию в формате HTML. Являясь составной частью интегрированного маршрута проектирования FPGA Advantage, HDL Designer в то же время поддерживает работу с программами моделирования и синтеза от других поставщиков. В целом он существенно повышает продуктивность разработки HDLпроекта на уровне RTL.
ModelSim — система моделирования и среда верификации цифровых систем. Она характеризуется высокой производительностью и расширенными возможностями отладки. Использование архитектуры единого моделирующего ядра (SKS — Single Kernel Simulator) и оптимизированной компиляции (Native Compiled) позволяет успешно моделировать и отлаживать проекты, основанные на смешанном языковом описании (VHDL, Verilog, SystemC, SystemVerilog и другие). Предоставляя удобный графический интерфейс, расширенную поддержку языковых стандартов, интегрированные средства отладки, возможности эффективной оптимизации процессов компиляции и моделирования, поддержку 32разрядных и 64разрядных ОС, расширенные возможности адаптации к среде пользователя, ModelSim является одним из самых распространенных и популярных HDLсимуляторов. Precision Synthesis — это средство логического синтеза высокопроизводительных ПЛИС типа PLD и FPGA, оптимизированное с точки зрения простоты использования и получения высокого качества результатов. Precision Synthesis поддерживает работу с многомиллионными программируемыми «системаминакристалле» (FPSoC) последнего поколения. Этот пакет получает входные данные о проекте в виде описания на VHDL или Verilog и реализует синтез логической схемы с учетом заданных ограничений на основе встроенных библиотек изготовителей. Онимеет встроенную систему статического временного анализа, возможность анализа и отладки в инкрементном режиме и интуитивно понятный пользовательский интерфейс, позволяющий легко управлять процессом синтеза как опытному инженеру, так и новичку. Precision Synthesis включает уникальный алгоритм оптимизации — Architecture Signature Extraction (ASE), который автоматически выделяет в проекте наиболее критичные области, ограничивающие производительность всей системы, такие как конечные автоматы, логические пути между различными уровнями иерархии проекта или логические пути с очень большим количеством комбинационной логики. Алгоритм ASE использует эвристический анализ в автоматическом режиме для уменьшения объема проекта и увеличения его производительности, исключая необходимость ручного вмешательства пользователя. Пакет имеет опцию физического синтеза (Precision Physical Synthesis), реализующую инкрементную оптимизацию проекта, и оперирует непосредственно с параметрами размещения и задержки, которые формируются программой размещения и трассировки поставщиков ПЛИС. Precision Synthesis поддерживает все библиотеки Xilinx, Altera, Actel и Lattice.
Одним из центральных понятий в маршруте проектирования FPGA Advantage является понятие проекта. Проект — это совокупность библиотек, содержащих логические объекты, и так называемый файл проекта, имеющий расширение .hdp и содержащий имена логических библиотек и пути к физическим директориям, в которых находятся эти библиотеки. На рис. 2 приведено главное окно HDL Designer в режиме просмотра библиотек. Чтобы открыть другой проект, можно два раза щелкнуть по уже открытому файлу проекта, при этом в случае, если открыты какиелибо библиотеки, система выдаст соответствующее предупреждение и предложит автоматически закрыть их, после чего появится окно Open Project, в котором можно выбрать один из ранее созданных проектов, либо указать другой файл проекта. Файл проекта является текстовым, так что при необходимости его можно отредактировать в любом текстовом редакторе. Если открыть в текстовом редакторе тот же файл проекта, что и на рис. 2, можно увидеть, что некоторые пути в этом файле начинаются с переменных. Соответствующие переменные необходимо создать на уровне операционной системы. В Windows это делается в разделе «Переменные окружения», а в Linux, если используется bash, — при помощи команды export. Благодаря файловой организации проект физически может быть разбросан по разным директориям. Например библиотека, которая содержит объекты, используемые несколькими разработчиками, может находиться на сетевом диске с возможностью одновременного доступа с нескольких рабочих мест. Для создания нового проекта используется стандартный путь в меню: File > New > Project.
Кроме основного файла проекта существует дополнительный. По умолчанию он называется shared.hdp. Общие для нескольких разработчиков библиотеки описываются именно в этом файле. Такое разделение на два независимых файла одной и той же информации вполне понятно, поскольку над одним проектом одновременно могут работать несколько человек, которые могут иметь как свои личные, так и общие наработки. Права доступа к объектам проектирования могут разграничиваться как средствами операционной системы (любой объект — это отдельный файл или директория, содержащая файлы), так и средствами HDL Designer посредством назначения прав администратора или пользователя общей библиотеки. В последнем случае объекты из библиотеки доступны только для чтения. Примером общих данных может служить стандартная библиотека IEEE. Если щелкнуть правой кнопкой мыши по файлу shared.hdp и в появившемся меню выбрать Edit Shared Project, то в списках библиотек останутся только общие библиотеки.
Для просмотра содержимого библиотеки, например MyTestLib, необходимо просто дважды щелкнуть по ней. При этом откроется окно выбранной библиотеки. Одновременно может быть открыто несколько библиотек, переключаться между которыми можно при помощи закладок внизу окна. На рис. 3 представлено содержимое выбранной библиотеки. В верхнем вложенном окне перечислены все объекты, содержащиеся в библиотеке, в нижнем — иерархия выбранных объектов. Включать и выключать вложенное окно иерархии можно при помощи меню View > Sub Windows > Design Hierarchy. Возможно перемещение объекта из верхнего вложенного окна в нижнее. В верхнем вложенном окне можно посмотреть, «как устроен» объект. На рис. 4 раскрыт объект BCDCounter_tb. Он состоит из символа и структуры. Символ описывает интерфейс объекта, а архитектура описывает его поведение. Вообще говоря, концепция структуры данных проекта полностью соответствует структуре проекта на языке VHDL, а именно: Библиотека > Интерфейс > Архитектура. Такой подход делает проект очень гибким. Например, в одном объекте может содержаться несколько архитектур с разной степенью детализации описания. Синий треугольник рядом с архитектурой struct показывает рабочую или текущую архитектуру (архитектуру по умолчанию). Выбрать текущую архитектуру можно, щелкнув правой кнопкой мыши по нужной архитектуре и выбрав пункт Set Default View
При проведении какихлибо манипуляций с объектом HDL Designer автоматически предлагает отслеживать зависимости. Например, если изменяется интерфейс объекта (скажем, добавляется входной сигнал), то появится сообщение с вопросом, требуется ли произвести соответствующие изменения во всех вхождениях данного объекта в проекте. Другой пример: при копировании объекта в другую библиотеку необходимо щелкнуть правой кнопкой мыши по объекту и выбрать Copy, затем перейти в нужную библиотеку, щелкнуть правой кнопкой мыши по имени этой библиотеки и выбрать Paste Special. При этом появляется вопрос, что именно требуется скопировать: только выбранный объект; выбранный объект со всеми компонентами; выбранный объект со всеми компонентами, в том числе с компонентами, которые располагаются в защищенных библиотеках и т. д. При попытке удалить объект также будет задан вопрос о том, нужно ли удалять всю иерархию. Если объект в данный момент редактируется одним из пользователей, удаление будет невозможно.
Справа от окна проекта (Design Explorer) располагается панель задач (Tasks). Если этой панели нет, ее можно включить через меню View > Sub Windows > Tasks and Templates. Для того, чтобы выполнить какуюнибудь задачу, необходимо выделить в окне проекта нужный объект и два раза щелкнуть по соответствующей задаче. HDL Designer предлагает большое число готовых задач. Увидеть их можно, щелкнув правой клавишей мыши по надписи My Tasks и выбрав Supplied Tasks. Для создания новой задачи вместо Supplied Tasks необходимо использовать New Tool или New Flow. Отдельные задачи (Tools) могут быть объединены в процессы (Flows). Например, чтобы промоделировать измененный проект, его необходимо сначала «сгенерировать», затем «откомпилировать» и только после этого запустить на моделирование. Эти действия объединены в стандартный процесс ModelSim Flow. В меню View > Sub Windows > есть два интересных пункта: Side Data и Downstream. Они открывают вложенные окна с соответствующими названиями. В окне Downstream можно увидеть файлы, полученные в результате работы средств, вызванных из Tasks, а в окне Side Data перечислены файлы сторонних программ. Там могут располагаться какието картинки, текстовые файлы, таблицы и т. д. При помощи этих окон в HDL Designer реализована функция управления «нестандартными» данными проекта. Иными словами, для управления «дополнительными» данными нет необходимости пользоваться еще какимито средствами. Если щелкнуть два раза по объекту BCDCounter_tb, то раскроется его «архитектура по умолчанию» (рис. 4). Архитектура BCDCounter_tb представлена в виде блокдиаграммы (Block Diagram) — схематическогонабора связанных цепями объектов. Кроме блокдиаграммы существует еще несколько вариантов реализации архитектуры: конечный автомат (State Diagram), блоксхема (Flow Chart), таблица истинности (Truth Table), таблица интерфейсов (IBDInterface Based Design), а также ASM.
Общие для всех настройки задаются через меню Options > Main. Например, можно выбрать закладку Diagrams и в ней — Default Font. Теперь во всех новых диаграммах будет использован выбранный шрифт. Для того чтобы эти настройки применить к существующей блокдиаграмме, необходимо открыть ее и использовать меню Options > Master Preferences > Apply to New and Existing Objects. Все сигналы, имеющие одинаковое имя, считаются соединенными. Чтобы посмотреть, что находится внутри иерархического объекта, необходимо два раза щелкнуть по нему. При этом будет открыта текущая архитектура. Чтобы открыть символ компонента (то есть интерфейс), необходимо щелкнуть по интересующему объекту правой кнопкой мыши и выбрать Open As > Interface. Будет открыт редактор символа, имеющий два способа представления информации: графический и табличный. Переключение между режимами осуществляется кнопками Interface и Symbol, находящимися на панели Structure Navigator, расположенной справа.
Для того чтобы получить из графического представления HDL код, необходимо либо открыть объект, либо в окне объектов выделить нужный и использовать меню Tasks > Generate > Run Single. Таким образом будет сгенерирован только выбранный объект. Для генерации иерархии необходимо вместо Run Single использовать Run Through Blocks (для генерации всех блоков) или Run Through Components (для генерации всех компонентов), или Run Through Components from the Design Root (для генерации от корня проекта). Корень проекта обозначен желтым ромбиком. Чтобы сменить корень проекта, необходимо щелкнуть правой кнопкой мыши по интересующему объекту и выбрать Set Design Root. Корень проекта не имеет физического смысла с точки зрения языка VHDL. Это просто метка, используемая HDL Designer. Напротив, метка архитектуры, по умолчанию, с точки зрения VHDL имеет смысл, поскольку в VHDL есть конструкция configuration, описывающая конфигурацию проекта, в которой, кроме всего прочего, указывается, какую из доступных архитектур использовать.
Чтобы запустить проект на моделирование, необходимо выделить интересующий объект (например BCDCounter_tb) и щелкнуть два раза по задаче ModelSim Flow в панели задач справа. При этом в автоматическом режиме будет выполнена генерация VHDLописания, подготовка дополнительных данных и запуск ModelSim, в результате появится окно Start ModelSim в которомможно повлиять на процесс запуска ModelSim. Если никакие изменения не требуются, необходимо нажать кнопку Ok.
После загрузки ModelSim можно выбрать объект bcdcounter_tb и в появившемся меню выбрать Add > Add to Wave для вывода сигналов на временную диаграмму. Далее вводится время моделирования (например, 10 µs) и несколько раз нажимается кнопка Run (рис. 5). Подробнее процесс моделирования будет описан в последующих публикациях.
Рассмотрим процесс запуска синтеза, объектом будет устройство BCDCounter. Для выполнения синтеза необходимо открыть список библиотек и выбрать XYZLib. Далее необходимо выделить объект BCDCounter и два раза щелкнуть по кнопке Precision Synthesis Flow. Затем в появившемся окне нужно выбрать конкретную технологическую библиотеку, например Xilinx Virtex, включить кнопки EDIF и VHDL и нажать Ok.
Результатом работы Precision Synthesis является список соединений библиотечных элементов, входящих в выбранную технологическую библиотеку. Таким образом, создается так называемый нетлист проекта. В процессе синтеза Precision Synthesis выполняет оптимизацию проекта по множеству параметров, которая особенно эффективна на больших проектах. После выполнения синтеза нетлист передается на размещение и трассировку (Place & Route). Этот этап выполняется программами, которые поставляются изготовителями ПЛИС и не входят в поставку FPGA Advantage. Эти программы запускаются непосредственно из меню Precision Synthesis путем нажатия кнопки Place & Route. Все необходимые для размещения и трассировки данные передаются автоматически, а отчеты, формируемые программами размещения и трассировки, доступны непосредственно из Precision Synthesis. В качестве примера в этой и последующих статьях будет использован пакет ISE компании Xilinx.
На рис. 6 показана последовательность действий, выполняемых при синтезе проекта. После запуска Precision Synthesis необходимо выбрать закладку Design на панели слева и последовательно нажать кнопки Compile и Synthesize. Далее в закладке ISE нажать кнопку Place & Route. В закладке Design Analysis можно получить различные отчеты о текущем проекте. Для сохранения проекта необходимо нажать кнопку Save. В противном случае после завершения работы программы Precision Synthesis директория, содержащая результаты работы, будет удалена. Теперь остается только открыть данные, полученные после размещения и трассировки, в программе подготовки двоичного файла для загрузки в ПЛИС и сгенерировать этот файл. Этот процесс подробно описан в инструкциях, предоставляемых поставщиками ПЛИС. Итак, в первой статье был представлен краткий обзор всего маршрута проектирования. В следующих статьях мы более подробно остановимся на каждом этапе
Материал основан на стандартном курсе обучения FPGA Adavantage, состоящем из теоретической части и ряда лабораторных работ. Эти работы могут быть проделаны читателем самостоятельно. Далее необходимо распаковать файл fpga_adv_data_61.zip, если вы работаете в Windows, или файл fpga_adv_data_61.tar.gz, если вы работаете в Linux или Unix, в какуюлибо директорию и создать переменные окружения FPGADV_LABS и HDS_LIBS, указывающие путь к директории с лабораторными работами и путь к файлу проекта соответственно.