Основы статического временного анализа. Часть 2.1: System Synchronous Input Delay Constraint.
Оглавление
- Введение
- 1. Цель временных ограничений для входных сигналов
- 2. Задержки при временном анализе для входных сигналов
- 3. Максимальное время распространения
- 4. Минимальное время распространения
- 5. Первый способ создания временных ограничений в Vivado
- 6. Второй способ создания временных ограничений в Vivado
- 7. Несовпадающие значения Slack
- Заключение
- Ссылки
*О найденных опечатках и замечаниях просим сообщить admin@fpga-systems.ru
Введение
Данная статья является продолжением серии статей по временным ограничениям в FPGA. Главная цель – познакомить начинающих разработчиков с основами статического временного анализа. Далее будет рассмотрен анализ передачи данных в FPGA из внешнего устройства и показаны два способа создания ограничений для входных сигналов.
1. Цель временных ограничений для входных сигналов
В цифровых синхронных устройствах данные передаются между двумя триггерами, которые разделены комбинационной логикой. В предыдущей статье был представлен временной анализ для случая, когда оба триггера располагаются внутри FPGA [1]. Предполагается, что читатель уже знаком с такими понятиями, как ограничения на максимальное и минимальное время распространения, время установки и удержания триггера, Slack и т.д.
Обычно обрабатываемые данные пересылаются между FPGA и другими микросхемами, расположенными на той же печатной плате. Эти пути передачи также должны удовлетворять ограничениям по Setup и Hold, чтобы плата как единое целое могла работать корректно. Поэтому практически всегда для входных сигналов FPGA требуется вводить временные ограничения.
В качестве примера будем рассматривать устройство, схема которого показана рисунке 1. Помимо FPGA на плате присутствует микросхема 74HC595 [2], которая представляет из себя обычный регистр сдвига и часто поставляется в составе обучающих наборов для Arduino. Также на плате располагается генератор (OSC), формирующий тактовый сигнал для FPGA и 74HC595.
Данная конфигурация, при которой тактовый сигнал для источника и приемника данных поступает от внешнего генератора, называется System Synchronous. Другой вариант, когда источник помимо данных также формирует тактовый сигнал, называется Source Synchronous.
На рисунке 1 отмечены только те ножки микросхемы 74HC595, которые будут рассматриваться в последующем. Ножка SER соответствует входу регистра сдвига, ножка QH’ – его выходу. Регистр сдвига тактируется сигналом, который поступает на ножку SRCLK. В дальнейшем микросхему 74HC595 для краткости будем иногда называть Device. Далее будет представлен временной анализ для передачи данных с выхода 74HC595 на вход FPGA. На рисунке 1 данный путь отмечен красным цветом.
Рисунок 1. Схема соединения устройств на плате.
Также пусть в FPGA загружен простой проект, состоящий из двух триггеров и двух LUT, которые реализуют логическое отрицание. Схема проекта показана на рисунке 2.
Рисунок 2. Схема FPGA проекта.
Описание проекта на System Verilog представлено ниже:
|
Данный проект не имеет какой-либо практической ценности, однако на его примере можно продемонстрировать, как проводится временной анализ для входных сигналов.
2. Задержки при временном анализе для входных сигналов
Анализ передачи данных между Device и FPGA мало отличается от случая, рассмотренного в [1] для двух триггеров внутри FPGA. Особенностью является то, что запускающий триггер располагается в одном устройстве, а защелкивающий в другом. На рисунке 3 показан анализируемый путь, на который нанесены задержки для данных и тактового сигнала.
Рисунок 3. Путь с задержками для входных данных и тактового сигнала.
Ниже даны определения задержек, представленных на рисунке 3.
• Todd (Osc to Device Delay) – задержка тактового сигнала от генератора до ножки SRCLK микросхемы 74HC595;
• Tofd (Osc to FPGA Delay) – задержка тактового сигнала от генератора до ножки CLK FPGA;
• Tdcd (Device Clock Delay) – задержка тактового сигнала от ножки SRCLK микросхемы 74HC595 до тактового входа запускающего триггера;
• Tco (Clock to Output) – интервал времени между приходом фронта на тактовый вход триггера и появлением данных на его выходе Q;
• Tddd (Device Data Delay) – задержка распространения данных от запускающего триггера до ножки QH’ микросхемы 74HC595;
• Tbd (Board Delay) – задержка распространения данных по дорожкам платы между микросхемой 74HC595 и FPGA;
• Tfcd (FPGA Clock Delay) – задержка тактового сигнала от ножки CLK FPGA до тактового входа защелкивающего триггера;
• Tfdd (FPGA Data Delay) – задержка распространения данных от ножки IDATA FPGA до защелкивающего триггера;
• Tsu (SetUp time) – время установки триггера;
• Th (Hold time) – время удержания триггера.
Период тактового сигнала будем обозначать Tclk. Оранжевым и зеленым цветом на рисунке 3 представлены задержки для участков пути, которые располагаются вне FPGA. Данные задержки необходимо указать временному анализатору Vivado.
3. Максимальное время распространения
Для начала рассмотрим, каким образом выполняется анализ для проверки ограничения на максимальное время распространения (Setup). Напомним, что временной анализ по Setup всегда проводится для самого пессимистичного случая, которому соответствует максимально задержанный запускающий фронт, максимально медленное распространение данных и максимально быстро распространяющийся защелкивающий фронт.
Сначала найдем фактическое время прибытия данных ко входу защелкивающего триггера, расположенного внутри FPGA, считая, что запускающий фронт появляется в нулевой момент времени. Уравнения для расчета представлены ниже (см. рисунок 3):
• Время прибытия фронта к запускающему триггеру внутри Device (Source Сlock Arrival time):
• Задержка распространения данных (Data Delay):
• Время прибытия данных на вход защелкивающего триггера внутри FPGA (Data Arrival time):
Подставив предыдущие результаты в уравнение для Tda_max, получим:
Введем обозначение:
Задержка Tdco соответствует интервалу времени между приходом фронта на тактовый вход SRCLK микросхемы 75HC595 и появлением данных на ее выходе QH’. Уравнение для Data Arrival time можно записать в виде:
Теперь вычислим требуемое время прибытия данных. Защелкивающий фронт появляется через один такт после запускающего, поэтому ко времени прибытия фронта добавлен один период тактового сигнала.
Время прибытия фронта к защелкивающему триггеру внутри FPGA (Destination Clock Arrival time):
• Требуемое время прибытия данных (Data Required time):
В предыдущем уравнении учитывается, что данные на входе защелкивающего триггера должны быть стабильны в течении времени Tsu до прихода фронта тактового сигнала.
При анализе по Setup величина запаса (Slack) вычисляется по формуле:
Если Slack принимает отрицательное значение, то это указывает, что данные приходят на вход защелкивающего триггера позже, чем требуется. То есть, ограничение по Setup нарушено. Используя ранее полученные уравнения, можно записать полное выражение для расчета Slack:
4. Минимальное время распространения
Теперь рассмотрим, как выполняется анализ для проверки ограничения на минимальное время распространения (Hold). При анализе по Hold считается, что задержки для запускающего фронта и данных имеют минимальное значение, а для защелкивающего фронта – максимальное.
Расчет фактического времени прибытия данных представлен ниже:
• Время прибытия фронта к триггеру внутри Device (Source Сlock Arrival time):
• Задержка распространения данных (Data Delay):
• Время прибытия данных к триггеру внутри FPGA (Data Arrival time):
где, как и ранее,
Далее представлены уравнения для вычисления требуемого времени прибытия данных:
• Время прибытия фронта к защелкивающему триггеру внутри FPGA (Destination Clock Arrival time):
• Требуемое время прибытия данных (Data Required time):
Напомним, что защелкивающий фронт для предыдущих данных появляется в тот же момент времени, что и запускающий фронт для следующих данных. По этой причине в задержке распространения Tdca отсутствует слагаемое, равное периоду тактового сигнала. Также отметим, что слагаемое Th в уравнении для Tdr_max учитывает, что данные не должны изменяться в течении времени удержания после защелкивающего фронта.
Уравнение для расчета Slack при анализе по Hold имеет вид:
Используя полученные выше результаты, выражение для Slack можно представить в виде:
5. Первый способ создания временных ограничений в Vivado
Перейдем от теории к практике и рассмотрим первый способ создания временных ограничений для входных сигналов. Для начала разберемся с ограничениями для анализа по Setup.
В уравнении (1) слагаемые, выделенные зеленым и оранжевым цветом, неизвестны временному анализатору Vivado, так как они описывают задержки для участков пути вне FPGA. Также неизвестным является значение периода Tclk. Создание ограничения на период тактового сигнала с помощью команды create_clock было рассмотрено в [1].
Для определенности будем считать, что напряжение источника питания микросхемы 74HC595 равно 4.5 В. Из таблицы 6.6 datasheet для 74HC595 [2] находим, что в этом случае её максимальная рабочая частота равна 31 МГц. Пусть требуется, чтобы плата на рисунке 1 могла работать при частоте тактового генератора (OSC) равной 10 МГц. Тогда ограничение на период тактового сигнала можно записать в виде:
|
Данная команда объявляет тактовый сигнал clk_10MHz с периодом 100 нс, который поступает в FPGA через ножку CLK. Объединим все оставшиеся неизвестные слагаемые из уравнения (1) в одну переменную input_delay_max. Тогда выражение для Slack можно переписать в виде:
где
В уравнении (3) слагаемые Todd_max, Tofd_min и Tbd_max описывают задержки, обусловленные распространением сигнала по дорожкам печатной платы. Их значения зависят от многих факторов, например, материала подложки, длины дорожек, типа дорожек (полосковые, микрополосковые и т.д.).
Для каждого типа дорожек существуют приближенные выражения для вычисления скорости распространения сигнала. Зная скорость сигнала и длину дорожки, можно оценить задержку распространения. Примеры приближенных расчетов для различных типов дорожек можно найти в [3].
Будем считать, что мы смогли оценить минимальные и максимальные задержки распространения сигналов по дорожкам печатной платы. В качестве примера примем следующие значения в наносекундах: Tbd_max = 0.6, Tbd_min = 0.5, Todd_max = 0.4, Todd_min = 0.2, Tofd_max = 0.3 и Tofd_min = 0.2. Значения задержек можно указать в файле с временными ограничениями (xdc-файл) в следующем виде:
|
Рассмотрим задержку Tdco из уравнения (3), которая соответствует интервалу времени между приходом фронта на тактовый вход SRCLK микросхемы 75HC595 и появлением данных на ее выходе QH’. Ее значение можно получить из таблицы 6.7 datasheet для 74HC595 [2]. Данная задержка обозначена как tpd и при напряжении питания 4.5 В может изменяться от 17 до 32 нс. Эти значения также записываются в xdc-файл:
|
Теперь можно создать временное ограничение на входной сигнал для анализа по Setup. Для этого в файл с ограничениями нужно внести следующие команды [4]:
|
В первой строке объявлена переменная idelay_max, значение которой приравнивается input_delay_max из уравнения (3). Далее с помощью команды set_input_delay создается ограничение для входного сигнала.
Опция -max $idelay_max задает задержку для анализа по Setup. Конструкция [get_ports IDATA] указывает, что ограничение накладывается на входной сигнал, поступающий в FPGA через ножку IDATA.
Важно отметить, что анализатору Vivado необходимо указать, каким сигналом тактируется запускающий триггер, так как он находится вне FPGA. Это делается с помощью опции -clock clk_10MHz. Данный тактовый сигнал был создан ранее с помощью команды create_clock. Защелкивающий триггер располагается внутри FPGA, поэтому временному анализатору его тактовый сигнал известен.
Аналогичным образом создаются ограничения для анализа по Hold. Объединив все неизвестные слагаемые в уравнении (2) в одну переменную, выражение для Slack можно записать в виде:
где
Команды, которые требуется добавить в xdc-файл, представлены ниже:
|
Как и ранее, сначала объявляется переменная, значение которой равно input_delay_min, после чего с помощью команды set_input_delay создается временное ограничение. Опция -min указывает, что ограничение предназначено для проведения анализа по Hold. Полное содержимое xdc-файла представлено ниже:
|
Рассмотрим, как введенные ограничения будут отражены во временных отчетах, полученных после размещения и трассировки проекта. На рисунке 4 представлен раздел Summary для анализа по Setup, в котором указан источник сигнала (ножка IDATA), защелкивающий триггер (ff1_reg), задержка данных внутри FPGA (Data Path Delay) и количество уровней логики (Logic Levels). Также можно увидеть полученный Slack, расфазировку (Clock Path Skew) и неопределенность (Clock Uncertainty) тактового сигнала.
Рисунок 4. Общие сведения о входном пути (Setup).
На рисунках 5 и 6 показаны задержки для защелкивающего фронта и данных соответственно. Представленные результаты можно интерпретировать следующим образом. Из рисунка 5 получаем, что защелкивающий фронт приходит на ножку CLK FPGA в момент времени равный 100 нс. Далее он распространяется через входной и тактовый буферы и попадает на защелкивающий триггер через 1.486 нс. Учитывая время установки и неопределенность тактового сигнала, получаем, что данные должны достигнуть входа защелкивающего триггера через 101.463 нс.
Рисунок 5. Расчет требуемого времени прибытия данных (Setup).
Чтобы попасть на ножку FPGA в момент времени 100 нс, защелкивающий фронт должен быть сформирован на выходе тактового генератора в 100 - Tofd_min = 99.8 нс. Запускающий фронт появляется на один период раньше, то есть, когда время равно -0.2 нс. Через Todd_max = 0.4 нс запускающий фронт дойдет до ножки SRCLK микросхемы 74HC595 и начнет передачу данных. Спустя еще Tdco_max + Tbd_max = 32.6 нс данные достигнут ножки IDATA FPGA. Это произойдет в -0.2 + 0.4 + 32.6 = 32.8 нс, что соответствует задержке input delay во второй строке рисунка 6.
Рисунок 6. Расчет фактического времени прибытия данных (Setup).
Внутри FPGA данные проходят через входной буфер и LUT и попадают на вход защелкивающего триггера в момент времени 33.752 нс. Отсюда получаем, что Slack равен 101.463 - 33.752 = 67.711 нс.
Ту же картину получаем для анализа по Hold. На рисунке 7 можно увидеть, что защелкивающий фронт достигает FPGA в нулевой момент времени. С учетом задержки распространения это означает, что он появился на выходе генератора на Tofd_max нс раньше. Для анализа по Hold запускающий и защелкивающий фронты появляются одновременно, поэтому на вход SRCLK микросхемы 74HC595 фронт приходит в момент времени -Tofd_max + Todd_min = -0.3 + 0.2 = -0.1 нс.
Рисунок 7. Расчет требуемого времени прибытия данных (Hold).
Спустя Tdco_min нс данные появятся на выходе QH’ микросхемы 74HC595. Далее они будут распространятся по дорожке платы в течении Tbd_min нс и попадут на ножку IDATA FPGA. Это произойдет в момент времени -0.1 + 17 + 0.5 = 17.4 нс, что соответствует задержке input delay на рисунке 8.
Рисунок 8. Расчет фактического времени прибытия данных (Hold).
Данный подход прост тем, что достаточно представить все неизвестные задержки в виде одной величины input_delay. Однако, как можно было увидеть, это приводит к тому, что интерпретация полученных результатов требует определенных усилий.
6. Второй способ создания временных ограничений в Vivado
Теперь рассмотрим второй способ создания временных ограничений для входных сигналов. В xdc-файле можно отдельно указывать задержки распространения тактового сигнала по дорожкам печатной платы. Для этого используется команда set_clock_latency [4]:
|
C помощью команды create_clock создается ограничение на период тактового сигнала, который поступает на ножку CLK FPGA. Далее первая команда set_clock_latency с опцией -early устанавливает минимальную задержку распространения равной Tofd_min. Конструкция [get_clocks clk_10MHz] указывает тактовый сигнал, для которого формируются задержки.
Вторая команда set_clock_latency с опцией -late задает максимальное время распространения. Опция -source означает, что задержка указывается от источника тактового сигнала до ножки FPGA. Так как задержка распространения до микросхемы 74HC595 отличаются от задержки до FPGA, в файле с временными ограничениями требуется создать еще один тактовый сигнал:
|
С помощью команды create_clock создается тактовый сигнал с именем clk_10MHz_Dev и периодом 100 нс. Обратите внимание, что этот сигнал поступает только в микросхему 74HC595, поэтому команда get_ports, указывающая ножку FPGA, не используется. Тактовый сигнал, который не попадает в FPGA, но присутствует на плате, называется виртуальным(virtual clock). Для виртуального сигнала clk_10MHz_Dev минимальная и максимальная задержки распространения заданы равными Todd_min и Todd_max соответственно. Так как задержки для тактового сигнала уже установлены, уравнения для input_delay_max и input_delay_min упростятся и будут содержать только задержки распространения данных:
Временные ограничения для входного сигнала создаются с помощью команды set_input_delay в виде:
|
Опция -max указывает, что задержки предназначены для анализа по Setup, а опция -min – для анализа по Hold. Обратите внимание, что теперь запускающий триггер, расположенный внутри микросхемы 74HC595, тактируется виртуальным сигналом, поэтому опция -clock задана с сигналом clk_10MHz_Dev. Полное содержимое xdc-файла представлено ниже:
|
Рассмотрим, что изменилось во временных отчетах при использовании данного способа создания ограничений. На рисунке 9 представлены общие сведения о входном пути для анализа по Setup. В третьей строке указано, что теперь запускающий триггер, который формирует входные данные для FPGA, тактируется виртуальным сигналом clk_10MHz_Dev.
Рисунок 9. Общие сведения о входном пути (Setup).
Расчет фактического времени прибытия данных показан на рисунке 10. Можно увидеть, что запускающий фронт появляется на выходе генератора в нулевой момент времени. Спустя 0.4 нс (clock source latency) тактовый сигнал поступает на микросхему 74HC595, что соответствует задержке Todd_max.
Рисунок 10. Расчет фактического времени прибытия данных (Setup).
Еще через Tdco_max + Tbd_max = 32.6 нс данные достигнут ножки FPGA. Это произойдет в момент времени 32.6 + 0.4 = 33 нс. С учетом задержек распространения внутри FPGA фактическое время прибытия данных составит 33.952 нс. Из рисунка 11 можно увидеть, что защелкивающий фронт тактового сигнала появляется на выходе генератора спустя один период в 100 нс. Через Tofd_min = 0.2 нс этот фронт дойдет до FPGA, пройдет через входной и тактовый буферы и попадет на защелкивающий триггер. Требуемое время прибытия данных составляет 101.674 нс. Величина Slack для анализа по Setup равна 101.674 - 33.952 = 67.721 нс.
Рисунок 11. Расчет требуемого времени прибытия данных (Setup).
Для анализа по Hold на рисунке 12 можно увидеть, что запускающий фронт формируется на выходе генератора в нулевой момент времени. Через Todd_min = 0.2 нс, он появится на входе SRCLK микросхемы 75HC595, а еще спустя Tdco_min + Tbd_min = 17.5 нс данные достигнут FPGA. В свою очередь защелкивающий фронт появится на выходе генератора также в нулевой момент времени и дойдет до ножки FPGA через Tofd_max = 0.3 нс. Это можно увидеть на рисунке 13.
Рисунок 12. Расчет фактического времени прибытия данных (Hold).
Рисунок 13. Расчет требуемого времени прибытия данных (Hold).
Использование виртуальных тактовых сигналов для создания временных ограничений лучше отражает физическое распространение сигналов на плате и упрощает интерпретацию временных отчетов. Более того, данный способ рекомендуется Vivado. Если открыть вкладку XDC в Language Templates, то можно найти пример временных ограничений для входного сигнала:
|
В данном случае значение input_delay задается в виде суммы задержек tco (Tdco) и trce_dly (Tbd), что соответствует уравнениям (5). Заметим также, что если пренебречь задержками тактового сигнала Todd и Tofd, то оба представленных выше способа будут полностью эквивалентны.
7. Несовпадающие значения Slack
В заключении рассмотрим следующий интересный момент. Можно увидеть, что значения Slack, представленные на рисунках 4 и 9, отличаются и равны 67.711 нс и 67.721 нс соответственно. Выясним из-за чего возникает разница в 0.01 нс. Рассмотрев временные отчеты, можно обнаружить, что причиной неодинаковых значений является неопределенность тактового сигнала (clock uncertainty).
Данная неопределенность обусловлена наличием джиттера. Значение общего джиттера Ttsj (Total System Jitter) рассчитывается по формуле [5]:
где Tsjs (System Jitter Source) – джиттер для запускающего триггера; Tsjd (System Jitter Destination) – джиттер для защелкивающего триггера.
По умолчанию для тактовых сигналов, которые поступают в FPGA, значение Tsj принимается равным 0.05 нс. Тогда для первого способа создания временных ограничений получаем:
Неопределенность тактового сигнала равна 0.5 · Ttsj = 0.035 нс, что можно увидеть на рисунке 4. Если используется второй способ, то один из тактовых сигналов является виртуальным, и его джиттер считается равным нулю. То есть в этом случае получаем, что Tsjs = 0 нс и Ttsj = Tsjd = 0.05 нс. Как показано на рисунке 9, неопределенность тактового сигнала равна 0.5 · Ttsj = 0.025 нс.
Чтобы значения Slack для обоих способов создания ограничений были равны, можно настроить величину джиттера с помощью команд set_system_jitter и set_input_jitter [4].
Заключение
В данной статье был рассмотрен временной анализ для входных сигналов FPGA. Показан вывод уравнений статического временного анализа. Представлено два способа создания временных ограничений и рассказано о виртуальных тактовых сигналах. В следующей статье предполагается использовать тот же подход при рассмотрении временных ограничений для выходных сигналов – System Synchronous Output Delay.
Ссылки
1. Основы статического временного анализа. Часть 1: Period Constraint
3. How to Calculate Trace Length from Time Delay Value for High-speed Signals
5. Design Analysis and Closure Techniques (UG 906)
Статья доступна в формате PDF