Синтез проектов, реализуемых на базе ПЛИС FPGA
фирмы Xilinx, в САПР WebPACK ISE
В следующей серии статей [1-5] был рассмотрен полный цикл разработки цифровых устройств (за искоючением этапов функционального и временного моделирования) в среде САПР WebPACK™ ISE™ (Integrated Synthesis Environment) при использовании ПЛИС CPLD, выпускаемых фирмой Xilinx®. В ближайших публикациях цикла будут рассмотрены процессы синтеза, размещения, трассировки проекта в кристалл и программирования ПЛИС для семейств FPGA (Field Programmable Gate Array) [6–9]. Настоящая статья посвящена изучению особенностей этапа синтеза проектов, для реализации которых используются ПЛИС семейств FPGA.
Использование временных и топологических ограничений в проектах, реализуемых на базе ПЛИС семейств FPGA
Этапы синтеза, размещения и трассировки проектов обычно выполняются в автоматическом режиме. Для управления этими процессами разработчик может использовать следующие инструменты:
- атрибуты, размещаемые в модулях исходного описания проекта;
- файлы временных и топологических ограничений;
- параметры процессов, устанавливаемые с помощью диалоговых панелей Навигатора проекта.
При использовании механизма атрибутов теряется универсальность модулей исходного описания. Для их последующего применения в других проектах, которые могут быть реализованы на базе ПЛИС различных семейств, каждый раз потребуется вносить изменения в выражения, содержащие временные и топологические параметры. Вынесение этих параметров в отдельные файлы (например, в файл временных и топологических ограничений проекта User Constraints File, UCF) позволяет преодолеть указанный недостаток.
В файлах временных и топологических ограничений могут присутствовать параметры как локального, так и глобального характера. Объектами локальных ограничений являются отдельные экземпляры элементов описания проекта (цепи, компоненты, контакты). Глобальные параметры относятся ко всему проекту в целом или оказывают влияние на все элементы проекта, тип которых указан в соответствующем выражении. Большинство глобальных ограничений удобнее задавать в виде параметров выполняемого этапа (процесса) с помощью диалоговых панелей Навигатора проекта. Поэтому в файлах временных и топологических ограничений целесообразно задавать значения параметров, которые носят локальный характер, и глобальные ограничения, отсутствующие в диалоговых панелях опций процессов Навигатора проекта. Способы создания и редактирования файлов ограничений рассмотрены в одной из предыдущих публикаций [4]. Поэтому далее остановимся лишь на описании параметров и синтаксисе выражений ограничений, наиболее часто используемых в процессе синтеза и реализации проектов на базе ПЛИС семейств FPGA.
Параметры LOC и PERIOD в случае выбора кристаллов семейств FPGA сохраняют свое назначение и синтаксис (применяются в тех же форматах). Максимальное значение задержки распространения сигнала для соответствующей цепи проекта задается с помощью параметра MAXDELAY. Полный формат выражения ограничения имеет вид:
NET <название_цепи> MAXDELAY=<максимальное_значение_задержки>
<единицы_измерения>.
|
В качестве единиц измерения длительности могут использоваться нс (ns), мкс (us), мс (ms), пс (ps). Пример использования временного ограничения MAXDELAY:
NET data_in MAXDELAY=3.0 ns.
Для указания максимально допустимого разброса задержек распространения сигнала по цепи, которая содержит одно или несколько ответвлений, предназначен параметр MAXSKEW. Так как ветви цепи могут иметь различную длину и топологию, то возникает временной перекос изменения сигнала данной цепи на входах элементов, которые подключены к ней. В ряде случаев, если разброс запаздывания сигнала в различных ветвях цепи превышает некоторую величину, такая ситуация может привести к сбою в процессе функционирования проектируемого устройства. Значение параметра MAXSKEW задает максимально допустимую величину этого временного перекоса. Синтаксис соответствующего выражения, устанавливающего данное ограничение, имеет следующий вид:
NET <название_цепи> MAXSKEW=<максимальное_ значение_разброса_ задержки> [<единицы_измерения>],
например,
NET data_load MAXSKEW = 2 ns.
В качестве единиц измерения временного разброса используются те же обозначения, что и в выражении, определяющем максимальное значение задержки распространения сигнала MAXDELAY. По умолчанию, если единицы измерения не указаны явно, используются нс.
Параметр NODELAY позволяет минимизировать задержку сигналов на информационных входах триггеров, расположенных в блоках ввода-вывода кристалла. По умолчанию при конфигурировании триггеров, входящих в состав блоков ввода-вывода ПЛИС семейств FPGA, устанавливается дополнительная задержка по входам данных, которая компенсирует запаздывание тактового сигнала. С помощью выражения ограничения, синтаксис которого приведен ниже, эта задержка исключается для указанного элемента. Параметр NODELAY может быть задан для триггера, расположенного в соответствующем блоке ввода-вывода, или для цепи, подключенной к контакту кристалла. Поэтому для данного параметра используются два варианта формата выражения ограничения.
INST <обозначение_триггера_блока_ввода-вывода> NODELAY,
например,
INST in1_ff NODELAY;
NET <название_цепи_подключенной_ к_ выводу_кристалла> NODELAY,
например,
NET data_in NODELAY.
Для более точного расчета задержек распространения сигналов можно использовать параметр VOLTAGE, который позволяет учесть зависимость временных параметров кристалла от напряжения источника питания проектируемого устройства. В случае установки данного ограничения производится масштабирование всех задержек распространения сигналов в кристалле в соответствии с указанным значением напряжения питания. Синтаксис выражения, устанавливающего значение параметра VOLTAGE, приведен ниже.
VOLTAGE = <значение_напряжения_источника_питания> [V],
где V указывает единицы измерения напряжения (В). Например:
VOLTAGE = 5.
Следует обратить внимание на то, что параметр VOLTAGE может применяться только для ПЛИС, предназначенных для работы в коммерческом диапазоне напряжения питания. Если указывается значение, которое выходит за пределы диапазона, допустимого для выбранного типа кристаллов, то такое ограничение игнорируется. Выводится сообщение об ошибке, а для проекта устанавливается типовое значение напряжение питания, принятое по умолчанию для выбранного семейства кристаллов.
Уточнение задержек распространения сигналов с учетом температуры, при которой предполагается эксплуатация проектируемого устройства, осуществляется с помощью параметра TEMPERATURE. При использовании этого ограничения производится масштабирование всех задержек распространения сигналов в кристалле в соответствии с указанным значением температуры. Формат соответствующего выражения ограничения имеет вид:
TEMPERATURE = <значение_температуры> [<единицы_измерения>].
В качестве единиц измерения температуры могут указываться обозначения C (по Цельсию), F (по Фаренгейту), K (по Кельвину). Например,
TEMPERATURE = 20 C.
Ограничение TEMPERATURE может устанавливаться только в проектах, для реализации которых используются кристаллы, предназначенные для работы в коммерческом диапазоне температур.
Большинство ПЛИС семейств FPGA обладает возможностью программирования нагрузочной способности выходных каскадов каждого блока ввода-вывода. Для этого используется параметр DRIVE, который позволяет установить требуемую мощность для каждого выходного контакта кристалла. В качестве объектов, для которых указывается параметр DRIVE, могут выступать выходные компоненты блоков ввода-вывода (выходные буферы OBUF, выходные триггеры OFD) или цепи, подключаемые к выходным контактам ПЛИС. Соответствующие форматы выражений ограничений выглядят следующим образом:
INST <обозначение_выходного_элемента_блока_ввода-вывода>
DRIVE = <значение_выходного_тока_в_mA>,
например,
INST out_buf1 DRIVE = 24.
NET <название_цепи_подключенной_ к_ выходу_кристалла>
DRIVE = <значение_выходного_тока_в_mA>,
например,
NET data_out DRIVE = 24.
Для кристаллов серий XC4000XV, XC4000XLA и Spartan™XL: допустимыми значениями выходного тока являются 12 и 24 мА.
При использовании ПЛИС серий Spartan-II, Virtex™, Virtex-E, Virtex-II и Virtex-II Pro список возможных значений содержит шесть позиций: 2 , 4, 6, 8, 12, 16, 24 мА. По умолчанию используется значение 12 мА. Инициализация элементов запоминающих устройств (ОЗУ, ПЗУ, таблиц преобразования, регистров) осуществляется с помощью параметра INIT, формат выражения которого имеет следующий вид:
INST <обозначение_элемента_памяти> INIT = <значение_определяющее_содержимое_элемента_памяти>,
например,
INST rom1 INIT = 5408.
Значение, определяющее содержимое элемента запоминающего устройства, указывается в шестнадцатеричном виде. Количество знаков шестнадцатеричного числа должно соответствовать разрядности элемента запоминающего устройства. Следует обратить внимание на то, что INIT нельзя применять для инициализации блочной памяти (Block RAM). Параметр INIT может использоваться также в проектах, реализуемых на базе ПЛИС семейств CPLD, но только для определения начального состояния регистров.
Все значения параметров, указываемые в файле временных и топологических ограничений, не должны выходить за пределы допустимых диапазонов, которые указаны в справочных данных для выбранного типа ПЛИС.
HDL-синтез проекта при использовании средств XST пакета WebPACK ISE и ПЛИС семейства FPGA
Этап синтеза представляет собой процесс трансформации исходного HDL-описания проектируемого устройства в список цепей, выполненный на низком логическом уровне. Элементы низкоуровневого описания, формируемого в процессе синтеза, должны соответствовать архитектуре семейства ПЛИС, выбранного для реализации проекта. Синтезированный список цепей должен быть максимально адаптирован к ресурсам используемого кристалла, что обеспечивает его наиболее эффективное отображение средствами размещения и трассировки на физическом уровне. Поэтому результаты синтеза одного и того же проекта отличаются при использовании ПЛИС семейств CPLD и FPGA.
Процесс синтеза начинается с анализа исходного HDL-описания проектируемого устройства, в ходе которого делаются попытки выделения блоков кода, представимых в виде соответствующих макросов. Использование макросов часто позволяет повысить производительность разрабатываемого устройства, поэтому средства синтеза пытаются идентифицировать как можно большее их количество. Выделенные макросы в процессе последующей оптимизации, выполняемой на этапе синтеза, могут сохраняться в виде отдельных блоков или оптимизироваться совместно с окружающей логикой. Выбор одного из этих способов представления с целью достижения наилучших результатов оптимизации определяется типом и размером макроса. Управление процессом идентификации макросов различного типа (например, ПЗУ, ОЗУ, мультиплексоров, дешифраторов, приоритетных шифраторов, регистров сдвига) осуществляется с помощью соответствующих ограничений или параметров синтеза HDL options, которые детально будут рассмотрены ниже. Выделенные макросы впоследствии могут быть реализованы с помощью макрогенераторов, входящих в состав средств синтеза, раз-
мещения и трассировки.
Следующим шагом в процессе синтеза является оптимизация, которая выполняется в два захода. Вначале выполняется оптимизация каждого отдельного объекта или модуля HDL-описания. Затем производится их объединение и создается полный список соединений (netlist) проекта. Завершающим шагом является оптимизация полученного списка цепей.
Основным результатом этапа синтеза, выполняемого средствами Xilinx Synthesis Technology (XST), является формирования файла NGC, который представляет собой описание проекта на низком логическом уровне в двоичном формате. Управление процессом синтеза осуществляется с помощью параметров. Для установки требуемых значений необходимо в окне процессов (рис. 1) щелчком левой кнопки мыши выделить строку Synthesize, после чего нажать кнопку расположенную на оперативной панели Навигатора проекта, или воспользоваться командой Properties контекстно-зависимого всплывающего меню, которое выводится при щелчке правой кнопки мыши. Диалоговая панель параметров синтеза, отображаемая на экране монитора, как
и в случае использования кристаллов семейств CPLD, содержит три страницы, снабженные закладками с их названиями: «Synthesis options», «HDL options» и «Xilinx Specific options». Но содержание этих страниц
отличается от представленного в предыдущих статьях [4]. Так как кристаллы семейств FPGA имеют более сложную архитектуру и ресурсы, чем ПЛИС CPLD, то средства синтеза предоставляют разработчику более обширный набор параметров управления, позволяющих оптимизировать результаты синтеза. Вид страницы «Synthesis options», содержащей параметры управления оптимизацией процесса синтеза, при использовании ПЛИС семейств FPGA показан на рис. 2.
Параметры Optimization Goal, Optimization Effort, Synthesis Constraints File, Check Attribute Syntax, VHDL Work Directory, VHDL INI File, Keep Hierarchy, рассмотренные подробно ранее [4], имеют то же назначение, что и при использовании кристаллов семейств CPLD.
Параметр Global Optimization Goal позволяет выбрать критерий глобальной оптимизации. В процессе синтеза проектов, реализуемых на базе ПЛИС семейств FPGA, производится два вида оптимизации:
- оптимизация отдельных объектов и модулей;
- глобальная оптимизация проекта в целом.
Значение AllClockNets устанавливает стратегию глобальной оптимизации, ориентированную на достижение максимальной тактовой частоты проектируемого устройства.
При выборе значения Inpad to Outpad целью оптимизации является минимизации задержек распространения сигналов от входных до выходных контактов через комбинационную логику кристалла. Значение Offset in before задает режим оптимизации максимального времени запаздывания сигналов на маршрутах от входных контактов ПЛИС до информационных входов триггеров по отношению к тактовому сигналу. При выборе значения Offset out after оптимизируется максимальная задержка распространения выходных сигналов триггеров до выходных контактов кристалла относительно сигнала синхронизации. Значение Max Delay устанавливает в качестве критерия глобальной оптимизации минимизацию максимальной задержки распространения сигналов для всех цепей проекта. По умолчанию установлено значение AllClockNets.
Значение параметра Global Optimization Value задает предельную величину тактовой частоты, требуемую в проекте. В текущей версии пакета этот параметр не используется.
Параметр Write Timing Constraints управляет размещением временных ограничений в файле, содержащем результаты синтез проекта (NGC). Эти временные ограничения учитываются как при синтезе, так и в процессе размещения и трассировки проекта в кристалл. По умолчанию для этого параметра установлено значение «выключено», запрещающее запись временных ограничений в файл NGC.
Страница «HDL Options», объединяющая параметры управления синтезом различных объектов HDL-описаний при использовании ПЛИС семейств FPGA, представлена на рис. 3.
Описание параметров FSM Encoding
Algorithm, FSM Flip-Flop Type, Mux Extraction, Resource Sharing, Complex Clock Enable Extraction приведено ранее [4] при рассмотрении синтеза проектов для последующей реализации на базе кристаллов CPLD.
Параметр Multiplier Style позволяет указать метод синтеза и последующей реализации макросов умножителей при использовании ПЛИС семейства Virtex-II. В выпадающем списке доступных значений этого параметра представлено три элемента: Auto, Block, LUT.
Значение Auto, установленное по умолчанию, предписывает средствам синтеза выбрать и указать наилучший метод последующей реализации для каждого обнаруженного макроса умножителя. Значение Block указывает на то, что процесс синтеза должен осуществляться с учетом последующего использования встроенных блоков умножителей кристаллов семейства Virtex-II. При выборе значения LUT синтез макросов умножителей выполняется с учетом последующей реализации на базе ресурсов таблиц преобразования Look-Up Table (LUT) ПЛИС семейства Virtex-II.
Значение параметра ROM Extraction разрешает или запрещает средствам синтеза извлечение макросов ПЗУ (ROM). По умолчанию установлено значение «включено», разрешающее выделение ROM-макросов в исходных HDL-описаниях. Обычно макросы ПЗУ могут создаваться (извлекаться) из операторов выбора (Case), в которых присваиваемые значения являются постоянными величинами.
Параметр RAM Extraction позволяет включить или выключает режим извлечения макросов ОЗУ (RAM) в процессе синтеза. Значение «включено», установленное по умолчанию, разрешает средствам синтеза выделение макросов ОЗУ в исходном коде HDL-описания.
С помощью параметра RAM Style указывается способ реализации макросов ОЗУ, формируемых средствами синтеза. Выпадающий список значений этого параметра содержит три элемента: Auto, Distributed, Block. По умолчанию установлено значение Auto, при котором средства синтеза для каждого идентифицированного макроса ОЗУ устанавливают тип, обеспечивающий его оптимальную реализацию. При выборе значения Distributed все синтезированные макросы ОЗУ представляются на этапе реализации в виде распределенной памяти. Значение Block обеспечивает последующее представление всех макросов ОЗУ в форме блочной памяти (Block RAM).
Параметр Mux Style используется для управления выбором метода реализации макросов мультиплексоров, сформированных средствами синтеза. Выпадающий список возможных значений включает три элемента: Auto, MUXF, MUXCY. Значение Auto, установленное по умолчанию, позволяет средствам синтеза выбрать и указать наилучший способ последующей реализации для каждого макроса мультиплексора. При выборе значения MUXF в качестве ресурсов для реализации всех макросов мультиплексоров, извлеченных средствами синтеза, назначаются мультиплексоры F5 и F6, которые входят в состав дополнительной логики каждого конфигурируемого логического блока ПЛИС. Значение MUXCY задает в качестве способа интерпретации всех макросов мультиплексоров использование ресурсов логики ускоренного переноса.
Значение параметра Decoder Extraction разрешает или запрещает средствам синтеза извлечение макросов декодеров (дешифраторов). По умолчанию установлено значение «включено», разрешающее выделение указанных макросов в исходном коде HDL-описаний.
С помощью параметра Priority Encoder Extraction осуществляется управление синтезом макросов приоритетных шифраторов. В выпадающем списке доступных значений этого параметра содержится три элемента: Yes, No, Force. Значение No запрещает извлечение (создание) макросов приоритетных шифраторов. При выборе Yes, установленного по умолчанию, для каждого обнаруженного описания приоритетного шифратора, выполненного на базе некоторого внутреннего алгоритма, программа синтеза Xilinx Synthesis
Technology (XST) формирует макрос или оптимизирует его совместно с остальной частью проекта. Значение Force предписывает средствам синтеза игнорировать внутренние алгоритмы и всегда создавать макросы для идентифицированных блоков описания приоритетных шифраторов.
Параметр Shift Register Extraction разрешает или запрещает извлечение макросов регистров сдвига в процессе синтеза. Значение «включено», установленное по умолчанию, разрешает средствам синтеза выделение макросов регистров сдвига в исходном коде HDL-описания.
Значение параметра Logical Shifter Extraction указывает способ синтеза описаний устройств логического сдвига. По умолчанию установлено значение «включено», разрешающее формирование макросов для идентифицированных описаний устройств логического сдвига.
Параметр XOR Collapsing определяет режим синтеза каскадных конструкций «исключающее ИЛИ» (XOR). При выборе значения «включено», установленного по умолчанию, в процессе синтеза производится «сжатие» каскадных XOR-структур в одиночные.
Содержание страницы «Xilinx Specif ic Options», в которой сведены параметры синтеза, учитывающие требования средств размещения и трассировки Xilinx, при использовании кристаллов семейств FPGA показано на рис. 4.
Назначение параметров Add I/O Buffers, Equivalent Register Removal подробно рассмотрено ранее [4].
Значение параметра Max Fanout устанавливает максимально допустимое количество ветвлений цепей в процессе синтеза. Наличие цепей с большим количеством ветвлений создает проблемы в процессе их трассировки.
Для исключения возникновения таких проблем с помощью параметра Max Fanout задается предельное значение, ограничивающее количество разветвлений результирующих цепей. Средства синтеза могут сократить количество разветвлений за счет дублирования соответствующих регистров и вентилей, а также за счет установки дополнительных буферов. По умолчанию для рассматриваемого параметра установлено значение 100.
С помощью параметра Number of Clock Buffers определяется максимальное количество глобальных буферов, создаваемых средствами синтеза. Задаваемое значение этого параметра должно соответствовать глобальным ресурсам, которые указаны в справочных данных для выбранного типа ПЛИС. Значение по умолчанию определяется типом кристалла, используемого для реализации проекта.
Параметр Incremental Synthesis позволяет установить режим инкрементного (пошагового) синтеза, при котором для каждого объекта или модуля HDL-описания создается отдельный список цепей (файл NGC). По умолчанию для этого параметра установлено значение «выключено», соответствующее обычному режиму синтеза.
Значение параметра Register Duplication разрешает или запрещает средствам синтеза дублирование регистров при временной оптимизации и сокращении количества разветвлений цепей. Значение «включено», установленное по умолчанию, разрешает дублирование регистров в процессе синтеза.
Параметр Register Balancing используется для повышения тактовой частоты проектируемого устройства за счет перемещения триггеров относительно логики. Выпадающий список значений этого параметра содержит четыре элемента: Yes, No, Forward, Backward. По умолчанию установлено значение No, запрещающее перестановку триггеров. Значение Yes разрешает перестановку триггеров как в прямом, так и обратном направлении.
При выборе значения Forward перемещение разрешается только в прямом направлении, то есть триггеры на входах таблицы преобразования (Look-Up Table) заменяются триггером на ее выходе. Значение Backward допускает только обратное перемещение триггеров, при котором триггер на выходе LUT-таблицы преобразуется в серию триггеров на ее входах.
С помощью параметра Move First Flip-Flop Stage расширяются возможности применения опции Register Balancing. При выборе значения «включено», установленного по умолчанию, в процессе перестановки триггеров могут участвовать и триггеры, подключаемые к входным контактам кристалла. Значение «выключено» позволяет исключить из процесса перемещения входные триггеры.
Параметр Move Last Flip-Flop Stage оказывает аналогичное влияние на применение опции Register Balancing в процессе синтеза. По умолчанию для этого параметра установлено значение «включено», разрешающее использовать в процессе перестановки триггеры, подключаемые к выходным контактам кристалла. При выборе значения «выключено» выходные триггеры исключаются из процесса перемещения. Для параметров Move First Flip-Flop Stage и Move Last Flip-Flop Stage рекомендуется использовать значения, установленные по умолчанию.
Значение параметра Slice Packing разрешает или запрещает средствам синтеза выполнять упаковку блоков кода с критическими связями в одну секцию или конфигурируемый логический блок. Значение «включено», установленное по умолчанию, позволяет повысить производительность проектируемого устройства за счет использования высокоскоростных цепей связи с таблицами преобразования в рамках одного конфигурируемого логического блока. При выборе значения «выключено» встроенный компоновщик средств синтеза не используется.
С помощью параметра Pack I/O Registers into IOBs осуществляется управление компоновкой триггеров в блоки ввода-вывода на этапе синтеза. В выпадающем списке доступных значений этого параметра представлено три элемента: Auto, Yes, No. Значение Auto, установленное по умолчанию, предписывает средствам синтеза выполнять упаковку триггеров в блоки ввода-вывода при условии соблюдения требований временных спецификаций.
При выборе значения Yes средства синтеза используют триггеры, входящие в состав блоков ввода-вывода, везде, где это возможно. Значение No запрещает средствам синтеза поглощение входных и выходных триггеров. После установки требуемых значений параметров синтеза следует подтвердить их нажатием клавиши ОК в нижней части диалоговой панели. Для запуска процесса синтеза следует дважды щелкнуть левой кнопкой мыши на строке «Synthesize» в окне процессов Навигатора проекта (рис. 1). Выполнение синтеза сопровождается информацией в окне консольных сообщений и строке состояния. О характере завершения процесса синтеза сигнализирует соответствующая пиктограмма в строке Synthesize. Более детальная информация о полученных результатах содержится в отчете Synthesize Report. Для его открытия достаточно дважды щелкнуть левой кнопкой мыши на строке View Synthesize Report. Количество и содержание разделов отчета различается при использовании семейств CPLD и FPGA. В качестве примера на рис. 5–9 для сравнения приведены фрагменты отчета о выполнении процесса синтеза проекта счетчика Джонсона, реализуемого в кристалле семейства Virtex-II.
Release 4.1WP0.x - xst E.30
Copyright (c) 1995-2001 Xilinx, Inc. All rights reserved.
--> Parameter TMPDIR set to .
CPU : 0.00 / 1.32 s | Elapsed : 0.00 / 1.00 s
--> Parameter overwrite set to YES
CPU : 0.00 / 1.32 s | Elapsed : 0.00 / 1.00 s
--> Parameter xsthdpdir set to ./xst
CPU : 0.00 / 1.32 s | Elapsed : 0.00 / 1.00 s
--> =========================================
---- Source Parameters
Input Format : VHDL
Input File Name : jc2.prj
---- Target Parameters
Target Device : xc2v40-cs144-5
Output File Name : jc2
Output Format : NGC
Target Technology : virtex2
---- Source Options
Entity Name : jc2
Automatic FSM Extraction : YES
FSM Encoding Algorithm : Auto
FSM Flip-Flop Type : D
Mux Extraction : YES
Resource Sharing : YES
Complex Clock Enable Extraction : YES
Multiplier Style : auto
ROM Extraction : Yes
RAM Extraction : Yes
RAM Style : Auto
Mux Style : Auto
Decoder Extraction : YES
Priority Encoder Extraction : YES
Shift Register Extraction : YES
Logical Shifter Extraction : YES
XOR Collapsing : YES
Automatic Register Balancing : No
---- Target Options
Add IO Buffers : NO
Equivalent register Removal : YES
Add Generic Clock Buffer(BUFG) : 16
Global Maximum Fanout : 100
Register Duplication : YES
Move First FlipFlop Stage : YES
Move Last FlipFlop Stage : YES
Slice Packing : YES
Pack IO Registers into IOBs : auto
Speed Grade : 5
---- General Options
Optimization Criterion : Speed
Optimization Effort : 1
Check Attribute Syntax : YES
Keep Hierarchy : No
Global Optimization : AllClockNets
Write Timing Constraints : No
Incremental Synthesis : NO
===========================================
|
Рис. 5. Пример отчета о результатах выполнения процесса синтеза (раздел исходных данных)
Отчет содержит шесть основных разделов, выделенных двойной штриховой линией. В первом разделе (рис. 5) сведения об исходных данных, при которых выполнялся процесс синтеза. Здесь указаны установленные значения параметров синтеза, рассмотренных выше, и некоторых общих параметров проекта (семейство и тип ПЛИС), а также форматы входных и выходных файлов.
Второй раздел представляет информацию о компиляции и анализе объектов исходных HDL-описаний, которые производятся в соответствии с иерархической структурой проекта (рис. 6). Во второй части этого раздела отображается последовательность синтеза этих объектов. В третьем разделе расположены данные о макросах, идентифицированных средствами синтеза.
Четвертый раздел отображает основные фазы оптимизации, выполняемой в процессе логического синтеза. Вначале производится оптимизация каждого иерархического модуля, после чего формируется общее описание проекта (рис. 7). Далее выполняется глобальная оптимизация проекта в целом. В зависимости от полученных результатов рассматриваемая секция отчета также может содержать предупреждения (WARNING), указывающие пути повышения уровня оптимизации проекта в процессе синтеза.
====================================================================
Compiling vhdl file F:/project/jcount/jc2.vhf in Library work.
Entity <fjkc_mxilinx> (Architecture <schematic>) compiled.
Entity <m2_1_mxilinx> (Architecture <schematic>) compiled.
Entity <sr4cled_mxilinx> (Architecture <schematic>) compiled.
Entity <jc2> (Architecture <schematic>) compiled.
Analyzing Entity <jc2> (Architecture <Schematic>).
Set property "keep_hierarchy = TRUE" for instance <dir_reg1> in unit <jc2>.
Set property "keep_hierarchy = TRUE" for instance <run_reg> in unit <jc2>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Set user-defined property "IOSTANDARD = LVTTL" for instance <i9> in unit <jc2>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Set user-defined property "IOSTANDARD = LVTTL" for instance <i8> in unit <jc2>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Set user-defined property "IOSTANDARD = LVTTL" for instance <i7> in unit <jc2>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Set user-defined property "IOSTANDARD = LVTTL" for instance <i6> in unit <jc2>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
WARNING:Xst:37 - Unknown property "slew".
Set user-defined property "DRIVE = 12" for instance <i18> in unit <jc2>.
Set user-defined property "IOSTANDARD = LVTTL" for instance <i18> in unit <jc2>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
WARNING:Xst:37 - Unknown property "slew".
Set user-defined property "DRIVE = 12" for instance <i17> in unit <jc2>.
Set user-defined property "IOSTANDARD = LVTTL" for instance <i17> in unit <jc2>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
WARNING:Xst:37 - Unknown property "slew".
Set user-defined property "DRIVE = 12" for instance <i16> in unit <jc2>.
Set user-defined property "IOSTANDARD = LVTTL" for instance <i16> in unit <jc2>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
WARNING:Xst:37 - Unknown property "slew".
Set user-defined property "DRIVE = 12" for instance <i15> in unit <jc2>.
Set user-defined property "IOSTANDARD = LVTTL" for instance <i15> in unit <jc2>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Set property "keep_hierarchy = TRUE" for instance <jcounter> in unit <jc2>.
Entity <jc2> analyzed. Unit <jc2> generated.
Analyzing Entity <fjkc_mxilinx> (Architecture <schematic>).
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Set user-defined property "INIT = 0" for instance <i_36_32> in unit <fjkc_mxilinx>.
Set user-defined property "RLOC = X0Y0" for instance <i_36_32> in unit <fjkc_mxilinx>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Entity <fjkc_mxilinx> analyzed. Unit <fjkc_mxilinx> generated.
Analyzing Entity <sr4cled_mxilinx> (Architecture <schematic>).
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Set user-defined property "INIT = 0" for instance <i_q2> in unit <sr4cled_mxilinx>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Set user-defined property "INIT = 0" for instance <i_q1> in unit <sr4cled_mxilinx>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Set user-defined property "INIT = 0" for instance <i_q0> in unit <sr4cled_mxilinx>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Set user-defined property "INIT = 0" for instance <i_q3> in unit <sr4cled_mxilinx>.
Set property "keep_hierarchy = TRUE" for instance <i_mdl2> in unit <sr4cled_mxilinx>.
Set property "keep_hierarchy = TRUE" for instance <i_mdl1> in unit <sr4cled_mxilinx>.
Set property "keep_hierarchy = TRUE" for instance <i_mdl0> in unit <sr4cled_mxilinx>.
Set property "keep_hierarchy = TRUE" for instance <i_mdr0> in unit <sr4cled_mxilinx>.
Set property "keep_hierarchy = TRUE" for instance <i_mdr1> in unit <sr4cled_mxilinx>.
Set property "keep_hierarchy = TRUE" for instance <i_mdr2> in unit <sr4cled_mxilinx>.
Set property "keep_hierarchy = TRUE" for instance <i_mdl3> in unit <sr4cled_mxilinx>.
Set property "keep_hierarchy = TRUE" for instance <i_mdr3> in unit <sr4cled_mxilinx>.
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Entity <sr4cled_mxilinx> analyzed. Unit <sr4cled_mxilinx> generated.
Analyzing Entity <m2_1_mxilinx> (Architecture <schematic>).
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
WARNING:Xst:37 - Unknown property "fpga_dont_touch".
Entity <m2_1_mxilinx> analyzed. Unit <m2_1_mxilinx> generated.
Synthesizing Unit <m2_1_mxilinx>.
Related source file is F:/project/jcount/jc2.vhf.
Unit <m2_1_mxilinx> synthesized.
Synthesizing Unit <sr4cled_mxilinx>.
Related source file is F:/project/jcount/jc2.vhf.
Unit <sr4cled_mxilinx> synthesized.
Synthesizing Unit <fjkc_mxilinx>.
Related source file is F:/project/jcount/jc2.vhf.
Unit <fjkc_mxilinx> synthesized.
Synthesizing Unit <jc2>.
Related source file is F:/project/jcount/jc2.vhf.
Unit <jc2> synthesized.
====================================================================
HDL Synthesis Report
Found no macro
====================================================================
|
Рис. 6. Пример отчета о результатах выполнения процесса синтеза (разделы, отображающие последовательность синтеза объектов и сведения об идентифицированных макросах)
===============================================
Starting low level synthesis...
Optimizing unit <m2_1_mxilinx> ...
Optimizing unit <sr4cled_mxilinx> ...
Optimizing unit <fjkc_mxilinx> ...
Optimizing unit <jc2> ...
Building and optimizing final netlist ...
WARNING:Xst:387 - The KEEP property attached to the net <a0> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <a1> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <ad> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <a0> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <a1> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <ad> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <m0> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <O> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <m0> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <O> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <m0> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <O> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <m0> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <O> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <m0> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <m1> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <O> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <m0> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <m1> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <O> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <m0> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <m1> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <O> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <m0> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <m1> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <O> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <l_left> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <l_or_ce> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <xlxn_10> may hinder timing optimization.
You may achieve better results by removing this property
WARNING:Xst:387 - The KEEP property attached to the net <xlxn_11> may hinder timing optimization.
You may achieve better results by removing this property
=========================================================================
|
Рис. 7. Пример отчета о результатах выполнения процесса синтеза (раздел, представляющий информацию о процессе оптимизации)
В пятой части отчета (рис. 8) приведены данные о выходных параметрах процесса синтеза и статистические характеристики полученных результатов (количество примитивов каждого типа, использованных в синтезированном описании проектируемого устройства).
По классификации, выполняемой средствами синтеза XST, существует восемь типов примитивов:
- BELS — базовые элементы, к которым относятся таблицы преобразований (LUT) и мультиплексоры (MUXCY, MUXF5, MUXF6, MUXF7, MUXF8);
- Flip-flops/Latches — триггеры с динамическим и потенциальным управлением (защелки) (например, элементы FDR, FDRE, LD);
- RAMS — элементы ОЗУ;
- SHIFTERS — регистры сдвига (например, элементы SRL16, SRL16_1, SRL16E, RL16E_1);
- Tri-States — элементы с тристабильными выходами (например, BUFT);
- Clock Buffers — глобальные буферные элементы, используемые в цепях синхронизации (например, элементы BUFG, BUFGP, BUFGDLL);
- IO Buffers — стандартные буферные элементы, подключаемые к выводам кристалла (например, элементы IBUF, OBUF, IOBUF, OBUFT, IBUF_GTL);
- LOGICAL — стандартные логические элементы, не вошедшие в группу базовых, (например, AND2, OR2);
- OTHER — элементы, не включенные ни в одну из предыдущих групп.
Шестая, заключительная часть отчета содержит информацию о временных параметрах синтезированного проекта (рис. 9).
Все временные характеристики, приведенные в этом разделе, носят предварительный характер. Более достоверная информация может быть получена только после выполнения этапа размещения и трассировки проекта в кристалл.
Раздел временных характеристик включает в себя три секции: Clock Information, Timing Summary, Timing Detail. В первой секции (Clock Information) перечисляются сигналы синхронизации и типы буферных элементов, использованных для их формирования. Секция Timing Summary представляет предельные значения основных временных характеристик: максимальное значение тактовой частоты, минимальное время установления входных сигналов по отношению к сигналу синхронизации, максимальная задержка выходных сигналов по отношению к сигналу синхронизации, максимальная задержка распространения сигнала от входа до выхода через комбинационную логику. В секции Timing Detail дается детальное описание временных характеристик критических путей.
Если полученные результаты синтеза не соответствуют исходным требованиям проекта (например, значения временных характеристик), следует повторить этот этап, изменив значения его параметров. При достижении успешных результатов синтеза следует перейти к этапу реализации (implementation) проектируемого устройства.
===========================
Final Results
Top Level Output File Name : jc2
Output Format : NGC
Optimization Criterion : Speed
Target Technology : virtex2
Keep Hierarchy : No
Macro Generator : macro+
Design Statistics
# IOs : 8
Cell Usage :
# BELS : 6
# GND : 1
# INV : 5
# FlipFlops/Latches : 6
# FDC : 2
# FDCE : 4
# IO Buffers : 8
# IBUF : 4
# OBUF : 4
# Logical : 35
# AND2 : 8
# AND2b1 : 10
# AND3b1 : 2
# AND3b2 : 2
# OR2 : 10
# OR2b2 : 1
# OR3 : 2
=============================
|
Рис. 8. Пример раздела отчета, содержащего статистические данные результатов синтеза
===============================================
TIMING REPORT
NOTE: THESE TIMING NUMBERS ARE ONLY A SYNTHESIS
ESTIMATE.
FOR ACCURATE TIMING INFORMATION PLEASE REFER TO
THE TRACE REPORT
GENERATED AFTER PLACE-and-ROUTE.
Clock Information:
------------------
----------------------------+---------------------------+-------+
Clock Signal | Clock buffer(FF name) | Load |
----------------------------+---------------------------+-------+
clk | IBUF | 3 |
----------------------------+---------------------------+-------+
Timing Summary:
---------------
Speed Grade: -5
Minimum period: 5.165ns (Maximum Frequency: 193.611MHz)
Minimum input arrival time before clock: 4.145ns
Maximum output required time after clock: 6.762ns
Maximum combinational path delay: No path found
Timing Detail:
All values displayed in nanoseconds (ns)
-------------------------------------------------------------------------
Timing constraint: Default period analysis for Clock 'clk'
Delay: 5.165ns (Levels of Logic = 5)
Source: jcounter/i_q3
Destination: jcounter/i_q0
Source Clock: clk rising
Destination Clock: clk rising
Data Path: jcounter/i_q3 to jcounter/i_q0
Gate Net
Cell:in->out fanout Delay Delay Logical Name (Net Name)
---------------------------------------- ------------
FDCE:C->Q 3 0.416 0.865 i_q3 (q3_dummy)
end scope: 'jcounter'
INV:I->O 1 0.387 0.360 i21 (xlxn_11)
begin scope: 'jcounter'
begin scope: 'i_mdl0'
AND2b1:I1->O 1 0.387 0.360 i_36_7 (m0)
OR2:I1->O 1 0.387 0.360 i_36_8 (O)
end scope: 'i_mdl0'
begin scope: 'i_mdr0'
AND2:I0->O 1 0.387 0.360 i_36_9 (m1)
OR2:I0->O 1 0.387 0.360 i_36_8 (O)
end scope: 'i_mdr0'
FDCE:D 0.149 i_q0
----------------------------------------
Total 5.165ns (2.500ns logic, 2.665ns route)
(48.4% logic, 51.6% route)
-------------------------------------------------------------------------
Timing constraint: Default OFFSET IN BEFORE for Clock 'clk'
Offset: 4.145ns (Levels of Logic = 4)
Source: left
Destination: run_reg/i_36_32
Destination Clock: clk rising
Data Path: left to run_reg/i_36_32
Gate Net
Cell:in->out fanout Delay Delay Logical Name (Net Name)
---------------------------------------- ------------
IBUF:I->O 2 0.552 0.698 i9 (xlxn_24)
INV:I->O 3 0.387 0.865 i10 (xlxn_19)
begin scope: 'run_reg'
AND2b1:I0->O 1 0.387 0.360 i_36_43 (a2)
OR3:I0->O 1 0.387 0.360 i_36_41 (ad)
FDC:D 0.149 i_36_32
----------------------------------------
Total 4.145ns (1.862ns logic, 2.283ns route)
(44.9% logic, 55.1% route)
-------------------------------------------------------------------------
Timing constraint: Default OFFSET OUT AFTER for Clock 'clk'
Offset: 6.762ns (Levels of Logic = 1)
Source: jcounter/i_q3
Destination: q_3
Source Clock: clk rising
Data Path: jcounter/i_q3 to q_3
Gate Net
Cell:in->out fanout Delay Delay Logical Name (Net Name)
---------------------------------------- ------------
FDCE:C->Q 3 0.416 0.865 i_q3 (q3_dummy)
end scope: 'jcounter'
OBUF:I->O 5.481 i16 (q_3)
----------------------------------------
Total 6.762ns (5.897ns logic, 0.865ns route)
(87.2% logic, 12.8% route)
===============================================
CPU : 20.43 / 21.75 s | Elapsed : 20.00 / 21.00 s
-->
|
Рис. 9. Пример раздела временных характеристик отчета о результатах выполнения процесса синтеза
Литература
- Зотов В.WebPACK ISE — свободно распространяемый пакет проектирования цифровых устройств на базе ПЛИС Xilinx. // Компоненты и технологии. 2001. No 6.
- Зотов В. WebPACK ISE: Интегрированная среда разработки конфигурации и программирования ПЛИС фирмы Xilinx. Создание нового проекта. // Компоненты и технологии. 2001. No 7.
- Зотов В. Схемотехнический редактор пакета WebPACK ISE. Создание принципиальных схем и символов // Компоненты и технологии. 2001. No 8.
- Зотов В. Синтез, размещение и трассировка проектов, реализуемых на базе ПЛИС CPLD фирмы Xilinx, в САПР WebPACK ISE // Компоненты и технологии. 2002. No 1.
- Зотов В. Программирование ПЛИС семейств CPLD фирмы Xilinx в САПР WebPACK ISE // Компоненты и технологии. 2002. No 2.
- Кнышев Д. А., Кузелин М. О. ПЛИС фирмы «Xilinx»: описание структуры основных семейств. М.: Издательский дом «Додэка-XXI». 2001.
- Мальцев П. П., Гарбузов Н. И., Шарапов А. П., Кнышев Д. А. Программируемые логические ИМС на КМОП-структурах и их применение. // М.: Энергоатомиздат. 1998.
- Кузелин М. ПЛИС CPLD компании Xilinx с малым потреблением. Серия CoolRunner// Компоненты и технологии. 2001. No 5.
- Кузелин М. ПЛИС фирмы Xilinx: семейство Spartan-II // Компоненты и технологии. 2001. No 3.
Валерий Зотов
|