Как я могу рассчитать задержку распространения через ряд комбинационных схем, используя Verilog и FPGA? - PullRequest
2 голосов
/ 16 января 2012

Я новичок в FPGA и HDL, но я пытаюсь узнать и не могу понять это.Как я могу рассчитать или оценить задержку распространения через несколько уровней комбинации логики.Могу ли я определить это только опытным путем или я могу это выяснить во время разработки.В этой ситуации я использую и ПЛИС для реализации настройки четности и проверки схемы.Схема будет выглядеть как древовидная сеть ворот xor, как на примерах изображений, за исключением того, что я собираюсь записать регистры xor 16, чтобы было больше уровней или операций xor.Я хотел бы иметь возможность рассчитать задержку распространения через каждую «уровень» xor логики, чтобы я мог определить, сколько фракций тактовых циклов или сколько наносекунд займет весь процесс проверки на четность и установки.Надеюсь, что я понимаю.

parity setting network

parity checking network

Большое спасибо за помощь.

Ответы [ 4 ]

11 голосов
/ 19 января 2012

Вам нужно «Знание», как я объясняю здесь, в «Искусстве высокопроизводительного дизайна FPGA».http://www.fpgacpu.org/log/aug02.html#art "Вы должны ... запустить свои инструменты и спроектировать несколько тестовых схем, а затем открыть анализатор синхронизации и редактор FPGA и пролить то, что получилось, каковы задержки (логика и маршрутизация)быть и т. д. "

После того, как вы сделаете это некоторое время, вы посмотрите на этот вопрос и просто узнаете (или получите довольно хорошую идею).

В этом случаеНапример, я знаю, что в FPGA XOR с 16 входами будет построен из дерева таблиц поиска с 4 или 6 входами (4-LUT или 6-LUT) двух глубинных, и это не может быть реализовано в схеметолько одна LUT глубокоПоэтому минимальная задержка для такой схемы в конвейерной реализации будет (в номенклатуре синхронизации Xilinx):

  • tCKO - тактовая частота для вывода задержки любого из 16-переворачиваемыхфлопс

  • tILO - задержка через LUT первого уровня

  • tAS - задержка до 2-го уровня LUTS + время установки триггерареализован в том же слайсе

  • плюс сетевые задержки маршрутизации

и для скорости Virtex-6 -1, я ожидаю, что это будет ~ 1,5 нс.

Как уже говорили другие, данные о задержке переключения компонентов находятся в таблицах данных для вашего устройства, а сетевые задержки маршрутизации - нет.Действительно, со временем вы можете даже начать вспоминать ключевые задержки и выработать понимание того, сколько примитивов FPGA, таких как LUT, вы можете использовать, и при этом все же ставить конкретный такт / тактовую частоту.

В любом случае, я только что попробовалэто с некоторым одноразовым Verilog, который я кодировал:

module t(clk, i, o);
  input clk;
  input [15:0] i;
  output reg o;

  reg [15:0] d;
  always @(posedge clk) begin
    d <= i;
    o <= ^d;
  end
endmodule

и простой файл UCF:

net clk period = 1.5 ns;

, и общая задержка в моем устройстве составляла около 1,4 нс.Попробуйте сами и посмотрите!

Вот один путь от выхода статического анализатора синхронизации:

Paths for end point o (SLICE_X3Y68.A5), 6 paths
--------------------------------------------------------------------------------
Slack (setup path):     0.198ns (requirement - (data path - clock path skew + uncertainty))
  Source:               d_13 (FF)
  Destination:          o (FF)
  Requirement:          1.500ns
  Data Path Delay:      1.248ns (Levels of Logic = 2)
  Clock Path Skew:      -0.019ns (0.089 - 0.108)
  Source Clock:         clk_BUFGP rising at 0.000ns
  Destination Clock:    clk_BUFGP rising at 1.500ns
  Clock Uncertainty:    0.035ns

  Clock Uncertainty:          0.035ns  ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE
    Total System Jitter (TSJ):  0.070ns
    Total Input Jitter (TIJ):   0.000ns
    Discrete Jitter (DJ):       0.000ns
    Phase Error (PE):           0.000ns

  Maximum Data Path at Slow Process Corner: d_13 to o
    Location             Delay type         Delay(ns)  Physical Resource
                                                       Logical Resource(s)
    -------------------------------------------------  -------------------
    SLICE_X3Y67.BQ       Tcko                  0.337   d<15>
                                                       d_13
    SLICE_X2Y68.A2       net (fanout=1)        0.590   d<13>
    SLICE_X2Y68.A        Tilo                  0.068   d<11>
                                                       d[15]_reduce_xor_21_xo<0>1
    SLICE_X3Y68.A5       net (fanout=1)        0.180   d[15]_reduce_xor_21_xo<0>
    SLICE_X3Y68.CLK      Tas                   0.073   d<10>
                                                       d[15]_reduce_xor_21_xo<0>3
                                                       o
    -------------------------------------------------  ---------------------------
    Total                                      1.248ns (0.478ns logic, 0.770ns route)
                                                       (38.3% logic, 61.7% route)

Как вы можете видеть, логические задержки из таблиц данных составляют всего около 480 пс, тогда какчистая задержка маршрутизации составляет 770 нс, а расхождение тактовых импульсов и т. д. немного больше, всего менее 1,3 нс.Это на самом деле быстрее, чем предел переключения компонентов / Fmax в глобальном тактовом дереве 700 МГц / 1,43 нс ...

Итак, если вы попробуете некоторые тестовые схемы и попытаетесь их настроить, вы получитеопыт, который поможет вам оценить, насколько быстро ваша схема будет работать при реализации в примитивах FPGA, таких как LUT.

И если это действительно имеет значение, то нет никаких оснований для реализации проекта с помощью синтеза, размещения и маршрутизации и статики.анализ сроков.Не забудьте добавить временные ограничения, чтобы дать инструментам что-то для цели, а затем экспериментируйте с понижением минимального тактового периода, пока не достигнете минимального периода.

Счастливого взлома!

0 голосов
/ 16 января 2012

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

самый простой способ сделать это - создать очень простой проект с нужными вам сигналами ввода-вывода, написать код на VHDL, Verilog или даже с использованием захвата схемы, синтезировать и направить проект, а затем просмотреть файл отчета, сгенерированный инструмент для просмотра фактических задержек.

Чтобы понять некоторые параметры в файле отчета, вы можете обратиться к документу «Характеристики постоянного тока и коммутации», предоставленному всеми компаниями ПЛИС. Например, для устройств семейства Spartan 6 от Xilinx это: http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf

Надеюсь, это поможет, / Фархад

0 голосов
/ 17 января 2012

Это то, что вы чувствуете, когда делаете больше кодирования на конкретной платформе, но это часть искусства быть хорошим RTL-инженером.

Когда вы пишете свой код, подвергайте его симуляции и синтезу.Убедитесь, что вы понимаете временные пути, о которых сообщает инструмент синтеза, и имеете хорошее представление о логике, которую вы описываете.Если вы сильно разбираетесь во времени, вам нужно переосмыслить свой дизайн, но сделайте это рано.Нет ничего хуже, чем тратить время на дизайн, заставить его работать и пройти все его тесты, просто чтобы выяснить, что он недостаточно быстр.

Затем вы меняете целевую FPGA или технологическую библиотеку, и вам нужно перенастроить всеваши ожидания.

0 голосов
/ 16 января 2012

Вы можете оценить задержки распространения через несколько этапов логики, только если у вас есть миниатюрные модели, которые предоставляют задержки как функцию температуры, напряжения питания и изменения производственного процесса для всех ваших компонентов. В мире IC это делается автоматически с использованием инструментов статического анализа. Я не уверен в методологиях проектирования ПЛИС.

Как упоминает Оли Чарльзуорт, общая задержка также зависит от задержек межсоединения. Другие факторы: сила входного привода и выходная нагрузка.

...