16. Бэканнотирование с использованием стандартного формата задержки (SDF) в Verilog HDL

Повествуется о SDF аннотации
Содержание

Файлы SDF — файлы, содержащие значения временных характеристик для specify задержек путей, значений specparam, ограничений проверки временных характеристик и задержек межсоединений. Файлы SDF могут содержать и другую информацию в дополнение к временным параметрам моделирования, но она не обязательно должна относиться к моделированию Verilog. Значения временных параметров в файлах SDF обычно поступают от инструментов расчета задержек для интегральных схем (ASIC), которые используют информацию о соединениях, технологии и геометрии макета.

Бэканнотирование в Verilog — это процесс, в ходе которого временные значения из файла SDF обновляются для specify задержек путей, значений specparam, временных ограничений и задержек межсоединений.

16.1 Аннотатор SDF

Термин аннотатор SDF относится к любому инструменту, способному выполнять обратную аннотацию данных SDF в симуляторе Verilog. Он должен выдавать предупреждение для любых данных, которые он не может аннотировать.

Файл SDF может содержать множество конструкций, не связанных с определением задержек путей, значений specparam, значений ограничений проверки синхронизации или задержек межсоединений. Примером может служить любая конструкция в секции TIMINGENV файла SDF. Все конструкции, не связанные с таймингом Verilog, должны игнорироваться без выдачи предупреждений.

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

16.2 Отображение конструкций SDF на Verilog

Временные значения SDF появляются в объявлении CELL, которое может содержать одну или несколько секций DELAY, TIMINGCHECK и LABEL. Раздел DELAY содержит значения задержки распространения для specify путей и задержек межсоединений. Секция TIMINGCHECK содержит значения ограничений проверки синхронизации. Секция LABEL содержит новые значения для specparams. Обратное аннотирование в Verilog выполняется путем сопоставления конструкций SDF с соответствующими объявлениями Verilog и последующей замены существующих значений временных характеристик Verilog на значения из файла SDF.

16.2.1 Сопоставление конструкций задержки SDF с декларациями Verilog

При аннотировании конструкций DELAY, которые не являются задержками межсоединений (рассматриваются в разделе 16.2.3), аннотатор SDF ищет пути specify, где имена и условия совпадают. При аннотировании конструкций TIMINGCHECK аннотатор SDF ищет проверки синхронизации того же типа, где имена и условия совпадают. В таблице 16-1 показано, какие структуры Verilog могут быть аннотированы каждой конструкцией SDF в разделе DELAY.

Таблица 16-1 — Привязка конструкций задержки SDF к объявлениям Verilog
Конструкция SDFАннотированная структура Verilog
(PATHPULSE…Условные и безусловные ограничения импульса пути
(PATHPULSEPERCENT…Условные и безусловные ограничения импульса пути
(IOPATH…Условное и безусловное задают задержки пути/пределов импульсов
(IOPATH (RETAIN…Условные и безусловные задают задержки пути/пределы импульсов, RETAIN может быть проигнорирован
(COND (IOPATH…Условно задает задержки пути/ограничения импульсов
(COND (IOPATH (RETAIN…Условно указывает задержки пути/пределы импульсов, RETAIN может быть проигнорирован
(CONDELSE (IOPATH…ifnone
(CONDELSE (IOPATH (RETAIN…если нет, то RETAIN может быть проигнорирован
(DEVICE…Все пути указывают к выходам модуля. Если пути не указаны, все примитивы управляют выходами модуля.
(DEVICE port_instance…Если port_instance является экземпляром модуля, то все указывают пути к выходам модуля. Если пути не указаны, все примитивы управляют выходами модуля. Если port_instance является выходом экземпляра модуля, все указывают пути к выходу этого модуля. Если путь не указан, то все примитивы, управляющие выходом этого модуля.

В следующем примере исходный сигнал SDF sel соответствует исходному сигналу Verilog, а сигнал назначения SDF zout также соответствует сигналу назначения Verilog. Поэтому время нарастания/спада 1,3 и 1,7 приписывается к заданному пути.

SDF-файл:
(IOPATH sel zout (1.3) (1.7))
Verilog specify путь:
(sel => zout) = 0;

Условная задержка IOPATH между двумя портами должна аннотировать только specify пути Verilog между этими же двумя портами с тем же условием. В следующем примере время нарастания/спада 1.3 и 1.7 аннотируется только на второй specify путь:

SDF-файл:
(COND mode (IOPATH sel zout (1.3) (1.7)))
Verilog specify пути:
if (!mode) (sel => zout) = 0; if (mode) (sel => zout) = 0;

Безусловная задержка IOPATH между двумя портами должна аннотировать все specify пути Verilog между этими же двумя портами. В следующем примере время нарастания/спада 1.3 и 1.7 аннотировано на оба specify пути:

SDF-файл:
(IOPATH sel zout (1.3) (1.7))
Verilog specify пути:
if (!mode) (sel => zout) = 0; if (mode) (sel => zout) = 0;

16.2.2 Отображение конструкций проверки синхронизации SDF в Verilog

В таблице 16-2 показано, какие проверки синхронизации Verilog аннотируются к каждому типу проверок синхронизации SDF. v1 — первое значение проверки синхронизации, v2 — второе значение, а x означает, что значение не аннотируется.

Таблица 16-2 — Отображение конструкций проверки синхронизации SDF в Verilog
Проверка синхронизации SDFАннотированные проверки временных параметров Verilog
(SETUP v1…$setup(v1), $setuphold(v1,x)
(HOLD v1…$hold(v1), $setuphold(x,v1)
(SETUPHOLD v1 v2…$setup(v1), $hold(v2), $setuphold(v1,v2)
(RECOVERY v1…$recovery(v1), $recrem(v1,x)
(REMOVAL v1…$removal(v1), $recrem(x,v1)
(RECREM v1 v2…$recovery(v1), $removal(v2), $recrem(v1,v2)
(SKEW v1…$skew(v1)
(TIMESKEW v1…$timeskew(v1)
(FULLSKEW v1 v2…$fullskew(v1,v2)
(ШИРИНА v1…$width(v1,x)
(PERIOD v1…$period(v1)
(NOCHANGE v1 v2…$nochange(v1,v2)

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

SDF-файл:
(SETUPHOLD data clk (3) (4))
Проверка временных параметров Verilog:
$setuphold (posedge clk &&& mode, data, 1, 1, ntfr); $setuphold (negedge clk &&& !mode, data, 1, 1, ntfr);

Если условия и/или фронты связаны с сигналами в проверке синхронизации SDF, то они должны совпадать с таковыми в любой соответствующей проверке синхронизации Verilog, прежде чем произойдет аннотирование. В следующем примере проверка синхронизации SDF должна аннотировать первую проверку синхронизации Verilog, но не вторую:

SDF-файл:
(SETUPHOLD data (posedge clk) (3) (4))
Проверка временных параметров Verilog:
$setuphold (posedge clk &&&& mode, data, 1, 1, ntfr); // Аннотировано $setuphold (negedge clk &&& !mode, data, 1, 1, ntfr); // Не аннотировано

Здесь проверка синхронизации SDF не должна аннотировать ни одну из проверок синхронизации Verilog:

SDF-файл:
(SETUPHOLD data (COND !mode (posedge clk)) (3) (4))
Проверка временных параметров Verilog:
$setuphold (posedge clk &&&& mode, data, 1, 1, ntfr); // Не аннотировано $setuphold (negedge clk &&& !mode, data, 1, 1, ntfr); // Не аннотировано

16.2.3 SDF аннотация specparams

Конструкция SDF LABEL аннотирует к specparams. Любое выражение, содержащее один или несколько specparams, переоценивается при аннотации к файлу SDF.

В следующем примере показаны конструкции SDF LABEL, аннотирующие specparams в модуле Verilog. Specparams используются в процедурных задержках для управления переходом тактового сигнала. Конструкция SDF LABEL аннотирует значения dhigh и dlow, тем самым устанавливая период и рабочий цикл тактового сигнала.

SDF-файл:
(LABEL (ABSOLUTE (dhigh 60) (dlow 40)))
Файл Verilog:
module clock(clk); output clk; reg clk; specparam dhigh=0, dlow=0; initial clk = 0; always begin #dhigh clk = 1; // Тактовый сигнал остается низкими в течение времени dlow // перед переходом к 1 #dlow clk = 0; // Тактовый сигнал остается высоким в течение времени dhigh // перед переходом к 0 end; endmodule
В следующем примере показан specparam в выражении specify пути. Конструкция SDF LABEL может быть использована для изменения значения specparam и вызвать повторную оценку выражения.
specparam cap = 0; ... specify (A => Z) = 1.4 * cap + 0.7; endspecify

16.2.4 SDF аннотация задержек межсоединений

Аннотирование задержек межсоединений в SDF отличается от аннотирования других конструкций, описанных выше, тем, что не существует соответствующего объявления Verilog, к которому можно было бы сделать аннотацию. Моделировании в Verilog задержки межсоединений — это абстракция, которая представляет собой задержку распространения сигнала от выходного или двунаправленного порта модуля к входному или двунаправленному порту модуля. Конструкция INTERCONNECT включает источник, нагрузку и значения задержки, в то время как конструкции PORT и NETDELAY включают только нагрузку и значения задержки. Задержки межсоединений могут быть указаны только между портами модуля, но никак не между примитивными выводами. В таблице 16-3 показано, как аннотируются конструкции межсоединений SDF в разделе DELAY.

Таблица 16-3 — SDF аннотация задержек межсоединений
Конструкция SDFАннотированная структура Verilog
(PORT…Задержка межсоединения
(NETDELAY aЗадержка межсоединения
(INTERCONNECT…Задержка межсоединения

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

При аннотировании конструкции PORT аннотатор SDF должен найти порт и, если он существует, аннотировать задержку межсоединения к этому порту, которая представляет собой задержку от всех источников в сети к этому порту.

При аннотировании конструкции NETDELAY аннотатор SDF должен проверить, аннотирует ли он порт или сеть. Если это порт, то аннотатор SDF должен аннотировать задержку соединения для этого порта. Если это сеть, то аннотируется задержка соединения для всех портов нагрузки, подключенных к этой сети. Если порт или сеть имеет более одного источника, то задержка должна представлять задержку от всех источников. Задержки NETDELAY могут быть аннотированы только для входных или выходных портов модуля или для сетей.

В случае сетей с несколькими источниками уникальные задержки могут быть аннотированы между каждой парой источник/нагрузка с помощью конструкции INTERCONNECT. При аннотировании этой конструкции аннотатор SDF должен найти порт источника и порт нагрузки, и если они существуют, он должен аннотировать задержку между ними. Если порт источника не найден или если порт источника и порт нагрузки не находятся в одной сети, то выдается предупреждение, но задержка порта нагрузки все равно аннотируется. Если это происходит для порта нагрузки, который является частью сети с несколькими источниками, то задержка рассматривается как задержка от всех портов-источников, что аналогично поведению аннотации для задержки PORT. Порты-источники должны быть портами выхода или двунаправленными, а порты нагрузки должны быть портами входа или двунаправленными.

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

В модуле Verilog ссылка на аннотированный порт, где бы она ни встречалась, будь то в операторах $monitor и $display или в выражениях, должна давать значение задержанного сигнала. Ссылка на источник дает значение сигнала без задержки, а ссылка на нагрузку — значение сигнала с задержкой. В общем случае ссылки на значение сигнала иерархически до нагрузки должны давать значение сигнала без задержки, а ссылки на сигнал в момент или иерархически после нагрузки должны давать значение сигнала с задержкой. Аннотация к иерархическому порту влияет на все подключенные порты на более высоком или более низком иерархическом уровне, в зависимости от направления аннотации. Аннотация от порта-источника должна интерпретироваться как аннотация от всех источников, иерархически более высоких или более низких, чем этот порт-источник.

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

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

Иерархически перекрывающиеся аннотации разрешены. Это происходит, когда аннотации к одному и тому же порту или от него происходят на разных иерархических уровнях и, следовательно, не соответствуют одному и тому же иерархическому подмножеству портов. В следующем примере первый оператор INTERCONNECT аннотирует все порты сети, которые находятся на иерархическом уровне или в пределах i53/selmode, а второй аннотирует меньшее подмножество портов, только те, которые находятся на иерархическом уровне или в пределах i53/u21/in:
(INTERCONNECT i14/u5/out i53/selmode (1.43) (2.17)) (INTERCONNECT i14/u5/out i53/u21/in (1.58) (1.92))

16.3 Множественные аннотации

Аннотирование SDF — это упорядоченный процесс. Конструкции из файла SDF аннотируются в порядке их появления. Другими словами, аннотация конструкции SDF может быть изменена аннотацией последующей конструкции, которая либо изменяет (INCREMENT), либо перезаписывает (ABSOLUTE) ее. Это не обязательно должна быть одна и та же конструкция. В следующем примере сначала аннотируются фронты импульсов для IOPATH, а затем аннотируется весь IOPATH, тем самым перезаписывая фронты импульсов, которые были только что аннотированы:
(DELAY (ABSOLUTE (PATHPULSE A Z (2.1) (3.4)) (IOPATH A Z (3.5) (6.1))
Перезаписи границ импульсов можно избежать, используя пустые круглые скобки для хранения текущих значений фронтов импульсов:
(DELAY (ABSOLUTE (PATHPULSE A Z (2.1) (3.4)) (IOPATH A Z ((3.5) () ()) ((6.1) () ()) )
Приведенная выше аннотация может быть упрощена до одного объявления:
(DELAY (ABSOLUTE (IOPATH A Z ((3.5) (2.1) (3.4)) ((6.1) (2.1) (3.4)) )
Аннотация PORT, за которой следует аннотация INTERCONNECT к одной и той же нагрузке, влияет только на задержку от источника INTERCONNECT. Для следующей сети с тремя источниками и одной нагрузкой задержка от всех источников, кроме i13/out, остается равной 6:
(DELAY (ABSOLUTE (PORT i15/in (6)) (INTERCONNECT i13/out i15/in (5))
Аннотация INTERCONNECT, за которой следует аннотация PORT, приводит к перезаписи аннотации INTERCONNECT. Здесь задержки от всех источников до нагрузки становятся равными 6:
(DELAY (ABSOLUTE (INTERCONNECT i13/out i15/in (5)) (PORT i15/in (6))

16.4 Множество файлов SDF

Можно аннотировать более одного файла SDF. Каждый вызов задачи $sdf_annotate аннотирует проект временной информацией из файла SDF. Аннотированные значения либо изменяют (INCREMENT), либо перезаписывают (ABSOLUTE) значения из предыдущих файлов SDF. Различные области проекта могут быть аннотированы из разных SDF-файлов путем указания иерархической области региона в качестве второго аргумента для $sdf_annotate.

16.5 Аннотация по пределу импульса

Для SDF-аннотации задержек (не временных ограничений) значения по умолчанию, аннотированные для пределов(см. п. 14.6) импульса, должны рассчитываться с использованием процентных настроек для пределов отклонения и ошибки. По умолчанию эти пределы равны 100%, но они могут быть изменены с помощью опций вызова.

Например, если опции вызова установили предел отклонения на 40% и предел ошибки на 80%, следующая конструкция SDF аннотирует задержку 5, предел отклонения 2 и предел ошибки 4:
(DELAY (ABSOLUTE (IOPATH A Z (5))
Учитывая, что задержка specify пути изначально была равна 0, следующая аннотация приводит к задержке 5 и предельным значениям импульса 0:
(DELAY (ABSOLUTE (IOPATH A Z ((5) () ()) )
Аннотации в режиме INCREMENT могут привести к пределам импульсов меньше 0, в этом случае они должны быть скорректированы на 0. Например, если пределы импульсов заданного пути равны 3, следующая аннотация приведет к значению 0 для обоих пределов импульсов:
(DELAY (INCREMENT (IOPATH A Z (() (-4) (-5)) )

Существуют две конструкции SDF, которые аннотируют только пределы импульсов, PATHPULSE и PATHPULSEPERCENT. Они не влияют на задержку. Когда PATHPULSE устанавливает пределы импульсов в значения, превышающие задержку, Verilog демонстрирует такое же поведение, как если бы пределы импульсов были установлены равными задержке.

16.6 Сопоставление значений задержки в SDF и Verilog

Specify пути и межсоединения Verilog могут иметь уникальные задержки до двенадцати переходов состояний (см. 14.3.1). Все остальные конструкции, такие как примитивы стробов и непрерывные назначения, могут иметь только три задержки переходов состояний (см. 7.14).

Для заданных в Verilog задержек путей и межсоединений количество значений задержки перехода, предоставляемых SDF, может быть меньше двенадцати.

В таблице 16-4 показано, как задержки SDF, которых меньше двенадцати, расширяются до двенадцати задержек. Типы переходов Verilog показаны слева внизу, а количество предоставляемых задержек SDF показано сверху. Значения SDF имеют имена от v1 до v12.

Таблица 16-4 Сопоставление значений задержки в SDF и Verilog
Переход на Verilog/Количество предоставленных значений задержки SDF1 значение2 значения3 значения6 значений12 значений
0 -> 1v1v1v1v1v1
1 -> 0v1v2v2v2v2
0 -> zv1v1v3v3v3
z -> 1v1v1v1v4v4
1 -> zv1v2v3v5v5
z -> 0v1v2v2v6v6
0 -> xv1v1min(v1,v3)min(v1,v3)v7
x -> 1v1v1v1max(v1,v4)v8
1 -> xv1v2min(v2,v3)min(v2,v5)v9
x -> 0v1v2v2max(v2,v6)v10
x -> zv1max(v1,v2)v3max(v3,v5)v11
z -> xv1min(v1,v2)min(v1,v2)min(v4,v6)v12

Для других задержек, которые могут иметь не более трех значений, разложение менее трех задержек SDF на три задержки Verilog описано в таблице 7-9. Более трех задержек SDF сводятся к трем задержкам Verilog путем простого игнорирования дополнительных задержек. Задержка до состояния X создается из минимальной из трех других задержек.