Обзор маршрута проектирования ПЛИС FPGA Advantage компании Mentor graphics. Часть 9. Расширенные возможности синтеза: ограничения синтеза

Обзор маршрута проектирования ПЛИС FPGA Advantage компании Mentor Graphics.

Часть 9. Расширенные возможности синтеза: ограничения синтеза

Алексей РАБОВОЛЮК

al1@megratec.ru

Данная статья является продолжением описания маршрута проектирования FPGA Advantage, начатого в КиТ № 7 2005. В ней речь пойдет о расширенных возможностях задания ограничений для синтеза (Synthesis Constraints) в среде Precision.

Водной из предыдущих статей было приведено описание процесса синтеза в Precision. Одним из подготовительных этапов было указание требуемой частоты, на которой должен работать синтезированный проект. Эта частота является одним из так называемых «ограничений» (Constraints), накладываемых на синтез, о которых и пойдет речь далее. Constraint (ограничение) — это некий параметр, который должен быть выдержан в процессе синтеза. Ограничения могут иметь различные предназначения, но общий их смысл сводится к тому, чтобы, основываясь на опыте разработчика, «подсказать» синтезатору, как правильно поступить в той или иной конкретной ситуации и повысить, в итоге, качество синтеза. Например, ограничениями можно задать: максимальное время распространения сигнала на заданном пути, тип логики, максимальное количество ветвлений, фальш-путь, домены синхросигналов и многое другое. Все ограничения содержатся в текстовом файле ограничений «.sdc», который можно подключить к проекту, щелкнув по разделу «Constraint Files» в области «Project Files» главного окна Precision. Для того чтобы ограничения из подключенного файла вступили в действие, необходимо щелкнуть по этому файлу правой кнопкой мыши и выбрать пункт «Apply Constrains File». SDC расшифровывается как Synopsys Design Constraint — это стандартный формат описания ограничений, используемый многими системами. Precision поддерживает и формат UCF, тоже являющийся весьма распространенным стандартом. Применение стандартных форматов позволяет использо-

вать одни и те же ограничения как для синтеза заказных схем, так и для синтеза ПЛИС, что важно при использовании ПЛИС в качестве прототипа заказной схемы.

Некоторые из ограничений можно задавать в интерактивном виде. Например, для задания требуемой рабочей частоты проекта необходимо в RTL-дереве проекта развернуть раздел Clocks и, щелкнув правой кнопкой мыши по нужному синхросигналу, выбрать пункт «Set Clock Constraints». После нажатия кнопки Ok в SDC-файл будет добавлена строка с соответствующим ограничением. Эта строка может выглядеть, например, так:

create_clock -domain Design_Clock -name Design_Clock -period

10.000000 -waveform { 0.000000 5.000000 } -design rtl

Несмотря на то, что с каждой новой версией в Precision все больше ограничений может быть задано в интерактивном виде, ни какой графический интерфейс не сможет заменить всю мощь и гибкость полноценного языка программирования (в данном случае это TCL), на основе которого построен формат файла ограничений. Precision построен по принципу «нажал на кнопку — получил результат», поэтому интерфейс максимально упрощен, что подходит для молодых специалистов. Однако если вы профессионал в синтезе, то вы сможете применить большинство ваших знаний, редактируя файл ограничений в текстовом виде.

Ограничения имеют довольно широкий спектр применения. Так, например, ограничения используются не только в процессе синтеза, но и в процессе генерации отчетов.

Например, критический путь сравнивается, в том числе, и с заданным ограничением.

Существует четыре типа временный ограничений на пути: от входа до выхода, от регистра до выхода, от входа до регистра, от регистра до регистра (рис. 1). Precision будет оптимизировать каждый из участков комбинационной логики (тучки на рис. 1) до тех пор, пока не будет выдержано ограничение или не будут исчерпаны все имеющиеся алгоритмы оптимизации. В ограничениях на пути не обязательно указывать одну из точек маршрута (начальную или конечную). При этом ограничение будет наложено на все возможные пути, например от входа до всех регистров и выходов.

Существует три вида ограничений на входной порт: синхросигнал, входная задержка, выходная задержка. Первое ограничение указывает, относительно какого синхросигнала будет производиться временной расчет. Входная задержка задается на входной порт данных и указывает, на сколько запаздывают данные относительно заданного синхросигнала. Выходная задержка указывает время удержания сигнала для выходного порта.

Для правильного расчета задержек синтезатору необходимы данные о синхросигналах — какие цепи являются синхросигналами и их частотные характеристики. При компиляции Precision пытается, исходя из логики проекта, автоматически определить, какие цепи являются синхросигналами. Если этого не произошло, то необходимо вручную указать синтезатору что данная цепь или порт является синхросигналом. Эта процедура назы-

Specifying Multiple Clocks

♦ Asynchronous clocks should be specified in different «clock domains»

♦ Use the «-domain» switch

♦ Automatically «false_paths» all paths between domains Create_clockclkl -period 20-waveform {0 10} -domain domainl Create_clock clk2 -period 20-waveform {0 10}-domain domain2

Clk1 ^

Clk2^-

♦ Synchronous clocks should be specified in the same «clock domains»

♦ Use the «-domain» switch

4 The wrost case timing relationship will be calculated between clocks Create_clockclkl -period 20-waveform {0 10}-domain domainl Create_clockclk2 -period 20-waveform {0 10}-domain domainl

Рис. 2. Проект с несколькими синхросигналами

вается созданием синхросигнала и в SDC-файле ей соответствует команда &eate_clock.

Precision позволяет работать с проектами, содержащими несколько синхросигналов. Для этого существует понятие доменов. Если два синхросигнала или более отличаются только по фазе (являются синхронными), они должны принадлежать к одному домену. Если синхросигналы различаются по частоте (являются асинхронными), они должны принадлежать к разным доменам. На каждый путь распространяется один из существующих синхросигналов. При этом, если, например, существует путь, соединяющий два регистра, управляемых разными синхросигналами, то такой путь анализируется отдельно (рис. 2). Так, если эти два разных синхросигнала принадлежат одному домену, то будет выполнен временной расчет с учетом сдвига синхросигналов относительно друг друга. Если же эти синхросигналы принадлежат разным доменам, то Precision просто не будет производить временной расчет этого пути, и этот путь не будет учитываться при общем временно м расчете. Стандарт SDC не поддерживает домены синхросигналов непосредственно, поэтому использование доменов является собственным расширением стандарта SDC. В примере создания синхросигнала, на рис. 2, ключом «-domain» задан домен с именем Design_Clock. Имя может быть произвольным.

Если входной порт определен как синхросигнал (при помощи ограничений или автоматически), и этот синхросигнал проходит через некую логику, то свойства этого синхросигнала (то есть временны е ограничения) не будут автоматически распространяться сквозь эту логику. Рассмотрим несколько возможных вариантов (рис. 3). Если два синхросигнала проходят через селектор, который выбирает, какой из синхросигналов пойдет дальше (на рис. 3 пометка MUXED Clock), то Precision сможет автоматически сгенерировать частотные ограничения только для двух исходных синхросигналов. Для результирующего (внутреннего) синхросигнала пользователю необходимо вручную создать синхросигнал и задать временные ограничения. При прохождении синхросигнала через регистр (на рис. 3 Registered Clock) Precision автоматически (если этого не было сделано вручную) установит частоту результирующего синхросигнала равной половине частоты исходного. Еще один вариант — синхросигнал проходит через некий логический вентиль (на рис. 3 пометка Gated Clock). В этом случае пользователю также необходимо создать внутренний синхросигнал на выходном выводе ячейки.

Качество синтеза будет тем выше, чем больше портов и сигналов охвачено ограничениями. При синтезе больших проектов разработчик может непреднамеренно пропустить некоторые цепи. Для таких ситуаций существует анализатор пропущенных ограничений (Report Missing Constraints). Он может быть запущен как из раздела «Design Analisys» левой панели инструментов (со стандартным набором параметров), так и в виде команды «report_missing_constraints» (с заданным пользователем набором параметров). Анализатор производит поиск пропущенных компонентов, находит блокированные и внутренние синхросигналы, находит порты без ограничений.

В процессе синтеза Precision выполняет множество оптимизаций различными алгоритмами до тех пор, пока все ограничения не будут выдержаны. В случае, если на одном или нескольких участках не удалось выдержать временны е ограничения, предусмотрены широкие возможности для анализа проекта. Простым вариантом анализа является использование кнопок из раздела «Design Analysis» левой панели инструментов. Если возможностей этого варианта не хватает, можно использовать команду report_timing в командном интерпретаторе (вкладка Transcript внизу окна). На момент написания статьи эта команда поддерживала 35 ключей, при помощи которых можно гибко настраивать требуемые параметры временно! го отчета. Чтобы получить описание всех возможных ключей, используйте ключ -help (report_timing -help). Кроме report_timing, Precision поддерживает еще несколько команд report_*. Для получения их списка необходимо ввести «report_» и нажать на клавиатуре клавишу Tab.

Рис. 4. Трассировка

Как правило, синтезированные схемы получаются очень большими, и если всю схему отобразить на экране монитора, то разобрать что-либо будет невозможно. Однако при просмотре графической схемы пользователя интересует лишь несколько элементов и их взаимное соединение. Для того чтобы отображать только необходимую пользователю информацию, существует режим трассировки. Пользователь может выделить на графической схеме какой-либо элемент и нажать кнопку View Trace (рис. 4) в верхней панели инструментов. При этом со схемы исчезнут все элементы, кроме выделенного. Далее пользователь может щелкнуть правой кнопкой мыши по элементу или выводу и выбрать Tace Forward или Trace Backward на интересующий уровень. При этом появятся подключенные элементы (соответственно, справа или слева от выделенного). Одним из распространенных приемов трассировки является отображение только критического пути при помощи кнопки «View Critical Path» из раздела «Design Analysis» левой панели инструментов, и последующий анализ входящих в критический путь компонентов.

Для того чтобы понять и устранить причины, по которым Precision не смог уложиться в заданные ограничения, разработчику, возможно, придется обратиться к исходному графическому или текстовому описанию. Для того чтобы сделать это максимально быстро, существует серия контекстных команд “Trace to...”. Например, для того чтобы посмотреть исходное описание интересующего элемента, можно щелкнуть правой кнопкой мыши по этому элементу и выбрать «Trace To HDL Designer». Precision позволяет производить данное действие не только над графическими элементами и элементами из дерева проекта, но и над текстовыми элементами. Например, если был сгенерирован текстовый отчет по критическому пути, то по любому из перечисленных там элементов (например, reg_mem/CE) можно щелкнуть правой кнопкой мыши и выбрать одну из ко-

манд серии «Trace to ...» или иную доступную команду.

Кроме того, в процессе анализа результатов синтеза разработчика часто интересует выборка данных, объединенных по некоторому признаку, например все цепи, в именах которых присутствует clk. Для таких случаев предусмотрена функция поиска. Поиск может осуществляться как по синтезированному RTL-проекту (на рис. 5 левая красная стрелка), так и по технологической схеме (на рис. 4 правая красная стрелка). Используя правую кнопку мыши, с результатами поиска можно работать так же, как если бы вы нашли интересующий элемент в соответствующем дереве проекта, то есть «трассировать к исходникам», задавать атрибуты, вызывать отчеты и т. д.

В процессе синтеза технологической схемы, с целью оптимизации проекта, Precision может переформатировать иерархию проекта, например, как на рис. 6. Однако пользователь может заранее указать, нужно ли переделывать иерархию при помощи атрибута HIERARCHY. Например, разработчик может

Рис. 5. Графический поиск

Рис. 6. Автоматическое переформатирование иерархии

щелкнуть правой клавишей мыши по интересующему блоку на RTL-схеме и выбрать пункт Preserve Hierarchy, при этом в файле ограничений precision_rtl.sdc появится запись типа:

set_attribute -name HIERARCHY -value «preserve» -instance I2 -design rtl

Данный пример наглядно показывает, насколько просто Precision позволяет делать сложные вещи. Так, получив указанную выше строку в файле ограничений при помощи двух щелчков мыши, разработчик может чуть-чуть подправить имеющийся «шаблон», например, добавив к имени I2 звездочку (получится I2*) и получить «сложное» назначение атрибутов — в данном случае всем элементам с именем, начинающимся с I2. Остальные значения атрибута HIERARCHY можно посмотреть в поставляемой с Precision документации.

Все основные настройки среды Precision вынесены в единое окно Synthesis Options, которое вызывается через меню Tools > Set Options. Исходя из задачи максимально упростить процесс первоначального знакомства нового пользователя с программой Precision, в окне Synthesis Options доступно минимально необходимое количество настроек, позволяющее разобраться в них даже начинающему специалисту. Вся мощь «ручного вмешательства» в процесс синтеза Precision доступна при помощи атрибутов и файла ограничений, которые подробно описаны в документации. Таким образом, Precision позволяет молодому специалисту сразу приступить к работе и получить результат, постепенно изучая тонкости синтеза.

Если в распоряжении пользователя имеются сконфигурированные данные для лабораторных работ, о которых говорилось в первой статье, то можно приступить к дальней-

Рис. 7. Задание ограничений в интерактивном виде

шей работе над проектом — синтезировать его в Precision. При этом не будут использованы данные, разработка которых описывалась в предыдущих статьях, требуются только исходные данные лабораторных работ.

Далее будет описан процесс работы с проектом «часы реального времени» (Real Time Clock).

Данный проект находится в библиотеке RTC, поэтому для начала необходимо подключить эту библиотеку в среде HDL Designer и разобраться с ее структурой. Процесс подключения описан в одной из предыдущих статей.

Библиотека содержит элемент RTC_Clock, который необходимо синтезировать со следующими параметрами:

• Technology: Xilinx Spartan2.

• Part: 2s15cs144.

• Speed Grade: -6.

• Design Frequency: 90 MHz.

• Add IO Pads: включено.

• output format: EDIF.

• Compile: включено.

• Synthesize: включено.

После загрузки и синтеза проекта в Precision можно приступить к анализу проекта в различных направлениях.

Первое, что можно сделать, — это посмотреть, как были распознаны синхросигналы (clocks) и через какие области проекта они проходят. Увидеть все найденные синхросигналы можно на вкладке Design Center, в области Design Hierarchy, в разделе Clocks. Развернув раздел Clocks и поместив курсор поверх любого найденного синхросигнала,

можно увидеть дополнительную информацию. Следующей интересной информацией являются сведения о том, какие ограничения на проект Precision сгенерировал автоматически. Это можно увидеть на той же вкладке Design Center, в области Project Files, в разделе Output Files. В этом разделе, помимо прочего, находятся файлы RTL Constraints Report и Tech Constraints Report, содержащие ограничения, использованные при компиляции RTL-схемы и синтезе технологической схемы соответственно. Далее, можно посмотреть, какие временнью ограничения были нарушены и были ли нарушения вообще. Этот отчет находится рядом с рассмотренными только что отчетами по ограничениям и называется Timing Violation Report. Этот же отчет можно увидеть и щелкнув по одноименной кнопке на вкладке Design Analysis на левой панели инструментов. Далее, можно посмотреть подробный отчет по наиболее критичному пути. Для этого существует кнопка Report Timing в том же разделе Design Analysis на левой панели инструментов. Полученный отчет можно увидеть и в графическом виде при помощи кнопки View Critical Path, находящейся там же. При этом будут показаны только элементы, относящиеся к критическому пути.

Однако полученный временно й отчет может оказаться не полным. Это может произойти, если в проекте имеется множество доменов синхросигналов. Precision игнорирует пути, проходящие из одного домена

в другой. Для того чтобы получить отчет по проигнорированным путям, существует команда:

герогОгттд -с1оск_^тат_сто$$тд

Однако вполне возможно, что Precision неверно предположил, что найденные внутренние синхросигналы работают независимо друг от друга, а на самом деле они работают «синхронно». Для того чтобы это исправить, необходимо развернуть раздел Clocks в области Design Hierarchy и, щелкнув правой кнопкой мыши по одному из внутренних синхросигналов, выбрать пункт Set Clock Constraints... , как это показано на рис. 7.

В появившемся окне необходимо отключить пункт Asynchronous Domain и в поле Domain выбрать ClockDomain0. Это действие необходимо повторить для всех семи оставшихся внутренних синхросигналов. Теперь можно пересинтезировать проект при помощи кнопки Sinthesize, находящейся на вкладке Design левой панели инструментов. Далее, вызывая отчеты, о которых говорилось до повторного синтеза, можно посмотреть, как изменился синтезированный проект.

Еще одним методом повышения рабочей частоты проекта является так называемый pipelining— автоматическое разбиение длинной последовательности комбинационной логики на несколько тактов путем вставки дополнительных регистров, как это показано на рис. 8. Precision разбивает пути на такты, во-первых, только если они никак не укладываются в заданные ограничения и, во-вторых, если включена опция Run Retiming. В зависимости от версии Precision эта опция может находиться либо в окне Options (Tools > Set Options), либо в окне Setup Design (кнопка Setup Design, раздел Design, левая панель инструментов).

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

В следующей статье речь пойдет о реализации подхода «проектирование сверху вниз» в среде HDL Designer.