- 16.1 Аннотатор SDF
- 16.2 Отображение конструкций SDF на Verilog
- 16.2.1 Сопоставление конструкций задержки SDF с декларациями Verilog
- 16.2.2 Отображение конструкций проверки синхронизации SDF в Verilog
- 16.2.3 SDF аннотация specparams
- 16.2.4 SDF аннотация задержек межсоединений
- 16.3 Множественные аннотации
- 16.4 Множество файлов SDF
- 16.5 Аннотация по пределу импульса
- 16.6 Сопоставление значений задержки в SDF и Verilog
Файлы 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.
Конструкция 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 приписывается к заданному пути.
(IOPATH sel zout (1.3) (1.7))
(sel => zout) = 0;
Условная задержка IOPATH между двумя портами должна аннотировать только specify пути Verilog между этими же двумя портами с тем же условием. В следующем примере время нарастания/спада 1.3 и 1.7 аннотируется только на второй specify путь:
(COND mode (IOPATH sel zout (1.3) (1.7)))
if (!mode) (sel => zout) = 0;
if (mode) (sel => zout) = 0;
Безусловная задержка IOPATH между двумя портами должна аннотировать все specify пути Verilog между этими же двумя портами. В следующем примере время нарастания/спада 1.3 и 1.7 аннотировано на оба specify пути:
(IOPATH sel zout (1.3) (1.7))
if (!mode) (sel => zout) = 0;
if (mode) (sel => zout) = 0;
16.2.2 Отображение конструкций проверки синхронизации SDF в Verilog
В таблице 16-2 показано, какие проверки синхронизации Verilog аннотируются к каждому типу проверок синхронизации SDF. v1 — первое значение проверки синхронизации, v2 — второе значение, а x означает, что значение не аннотируется.
Проверка синхронизации 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:
(SETUPHOLD data clk (3) (4))
$setuphold (posedge clk &&& mode, data, 1, 1, ntfr);
$setuphold (negedge clk &&& !mode, data, 1, 1, ntfr);
Если условия и/или фронты связаны с сигналами в проверке синхронизации SDF, то они должны совпадать с таковыми в любой соответствующей проверке синхронизации Verilog, прежде чем произойдет аннотирование. В следующем примере проверка синхронизации SDF должна аннотировать первую проверку синхронизации Verilog, но не вторую:
(SETUPHOLD data (posedge clk) (3) (4))
$setuphold (posedge clk &&&& mode, data, 1, 1, ntfr); // Аннотировано
$setuphold (negedge clk &&& !mode, data, 1, 1, ntfr); // Не аннотировано
Здесь проверка синхронизации SDF не должна аннотировать ни одну из проверок синхронизации Verilog:
(SETUPHOLD data (COND !mode (posedge clk)) (3) (4))
$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, тем самым устанавливая период и рабочий цикл тактового сигнала.
(LABEL
(ABSOLUTE
(dhigh 60)
(dlow 40)))
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 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.
Конструкция SDF | Аннотированная структура Verilog |
---|---|
(PORT… | Задержка межсоединения |
(NETDELAY a | Задержка межсоединения |
(INTERCONNECT… | Задержка межсоединения |
Межсетевые задержки могут быть аннотированы как для сетей с одним источником, так и для сетей с несколькими источниками.
При аннотировании конструкции PORT аннотатор SDF должен найти порт и, если он существует, аннотировать задержку межсоединения к этому порту, которая представляет собой задержку от всех источников в сети к этому порту.
При аннотировании конструкции NETDELAY аннотатор SDF должен проверить, аннотирует ли он порт или сеть. Если это порт, то аннотатор SDF должен аннотировать задержку соединения для этого порта. Если это сеть, то аннотируется задержка соединения для всех портов нагрузки, подключенных к этой сети. Если порт или сеть имеет более одного источника, то задержка должна представлять задержку от всех источников. Задержки NETDELAY могут быть аннотированы только для входных или выходных портов модуля или для сетей.
В случае сетей с несколькими источниками уникальные задержки могут быть аннотированы между каждой парой источник/нагрузка с помощью конструкции INTERCONNECT. При аннотировании этой конструкции аннотатор SDF должен найти порт источника и порт нагрузки, и если они существуют, он должен аннотировать задержку между ними. Если порт источника не найден или если порт источника и порт нагрузки не находятся в одной сети, то выдается предупреждение, но задержка порта нагрузки все равно аннотируется. Если это происходит для порта нагрузки, который является частью сети с несколькими источниками, то задержка рассматривается как задержка от всех портов-источников, что аналогично поведению аннотации для задержки PORT. Порты-источники должны быть портами выхода или двунаправленными, а порты нагрузки должны быть портами входа или двунаправленными.
Задержки межсоединений имеют много общих характеристик с задержками задающего тракта. Для задержек межсоединений действуют те же правила заполнения недостающих задержек и пределов импульсов, что и для задержек задающего тракта. Задержки межсоединений имеют двенадцать переходных задержек, и с каждой из двенадцати задержек связаны уникальные пределы импульсов отказа и ошибки.
В модуле Verilog ссылка на аннотированный порт, где бы она ни встречалась, будь то в операторах $monitor и $display или в выражениях, должна давать значение задержанного сигнала. Ссылка на источник дает значение сигнала без задержки, а ссылка на нагрузку — значение сигнала с задержкой. В общем случае ссылки на значение сигнала иерархически до нагрузки должны давать значение сигнала без задержки, а ссылки на сигнал в момент или иерархически после нагрузки должны давать значение сигнала с задержкой. Аннотация к иерархическому порту влияет на все подключенные порты на более высоком или более низком иерархическом уровне, в зависимости от направления аннотации. Аннотация от порта-источника должна интерпретироваться как аннотация от всех источников, иерархически более высоких или более низких, чем этот порт-источник.
Аннотации, расположенные выше по иерархии, должны обрабатываться должным образом. Эта ситуация возникает, когда нагрузка находится иерархически выше источника. Задержка на всех портах, которые находятся иерархически выше нагрузки или которые подключаются к сети в точках, расположенных иерархически выше нагрузки, такая же, как и задержка на этой нагрузке.
Аннотации, расположенные ниже по иерархии, также должны обрабатываться должным образом. Эта ситуация возникает, когда источник находится иерархически выше нагрузки. Задержка на нагрузку интерпретируется как задержка от всех портов, которые находятся на источнике или выше него, или которые подключаются к сети в точках иерархически выше источника.
(INTERCONNECT i14/u5/out i53/selmode (1.43) (2.17))
(INTERCONNECT i14/u5/out i53/u21/in (1.58) (1.92))
16.3 Множественные аннотации
(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)) )
(DELAY
(ABSOLUTE
(PORT i15/in (6))
(INTERCONNECT i13/out i15/in (5))
(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%, но они могут быть изменены с помощью опций вызова.
(DELAY
(ABSOLUTE
(IOPATH A Z (5))
(DELAY
(ABSOLUTE
(IOPATH A Z ((5) () ()) )
(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.
Переход на Verilog/Количество предоставленных значений задержки SDF | 1 значение | 2 значения | 3 значения | 6 значений | 12 значений |
---|---|---|---|---|---|
0 -> 1 | v1 | v1 | v1 | v1 | v1 |
1 -> 0 | v1 | v2 | v2 | v2 | v2 |
0 -> z | v1 | v1 | v3 | v3 | v3 |
z -> 1 | v1 | v1 | v1 | v4 | v4 |
1 -> z | v1 | v2 | v3 | v5 | v5 |
z -> 0 | v1 | v2 | v2 | v6 | v6 |
0 -> x | v1 | v1 | min(v1,v3) | min(v1,v3) | v7 |
x -> 1 | v1 | v1 | v1 | max(v1,v4) | v8 |
1 -> x | v1 | v2 | min(v2,v3) | min(v2,v5) | v9 |
x -> 0 | v1 | v2 | v2 | max(v2,v6) | v10 |
x -> z | v1 | max(v1,v2) | v3 | max(v3,v5) | v11 |
z -> x | v1 | min(v1,v2) | min(v1,v2) | min(v4,v6) | v12 |
Для других задержек, которые могут иметь не более трех значений, разложение менее трех задержек SDF на три задержки Verilog описано в таблице 7-9. Более трех задержек SDF сводятся к трем задержкам Verilog путем простого игнорирования дополнительных задержек. Задержка до состояния X создается из минимальной из трех других задержек.