Эти рекомендации иллюстрируют рекомендуемые настройки задержек моделирования в модели. Задержки моделируются с помощью блоков, доступных в дискретной библиотеке. Каждое руководство имеет уровень серьезности, который указывает уровень соответствия требованиям. Дополнительные сведения см. в разделе Рекомендации по моделированию HDL Уровни серьезности.
2.6.1
Рекомендуется
Чтобы блоки в модели выводились как флипфлоп в целевом FPGA, используйте блоки задержки. Для каждого блока задержки можно задать локальный сброс и включить сигнал.
По умолчанию для параметра «Задержка» блока установлено значение 2. В этом случае вход в блок переходит на выход через два временных шага. Если для параметра Delay length установлено значение 0, вход переходит на выход без какой-либо задержки. Созданный код HDL обрабатывает блок как провод. Для вывода флипфлопа или регистрации на целевом устройстве установите для параметра Source значение dialog и укажите длину задержки больше нуля.
Для создания кода HDL не следует использовать блоки «Единичная задержка включена», «Единичная задержка установлена» и «Единичная задержка включена». Эти блоки устарели. Вместо этого замените эти блоки на синхронные с включенной единичной задержкой, синхронные с возможностью сброса единичной задержки и синхронные с возможностью сброса единичной задержки. Эти блоки используют блок управления состоянием для синхронного поведения оборудования. Чтобы выполнить эту замену в модели, выполните проверку модели Проверить наличие устаревших блоков с включенной/сбрасываемой задержкой установки.
Идентификатор руководства
2.6.2
Серьезность
Рекомендуется
Описание
Некоторые реализации блоков, операции с плавающей запятой и настройки оптимизации, такие как распределенная конвейерная обработка, вводят задержку в генерируемый код HDL и генерируемую модель. Дополнительная задержка приводит к разнице во времени между исходной моделью и созданной моделью. Чтобы избежать этой разницы во времени, например, при использовании системы управления с контуром обратной связи, используйте шаблон моделирования, который может поглощать задержки. Чтобы компенсировать задержки, поместите блок задержки после блока, который вводит задержку, и установите значение длины задержки равным задержке блока. Кроме того, добавив блок Задержка (Delay) в исходную модель, можно смоделировать исходную модель с задержкой.
Эти блоки могут вводить задержку:
Разделите, Sqrt и обратные блоки, для которых пользовательское значение задержки больше нуля.
Тригонометрические функциональные блоки, для которых установлено значение «Функция» sin, cos, sincos, cos+jsin, или atan2 и для архитектуры HDL установлено значение CORDIC
Собственные операторы с плавающей запятой, для которых для LatencyStrategy установлено значение Max, Minили пользовательское значение больше нуля.
Чтобы узнать о блоках с пользовательской задержкой для фиксированных типов точек, откройте библиотеку HDLMathLib. Библиотека содержит блоки с фиксированной точкой, имеющие управляющие сигналы.
open_system('HDLMathLib')

Чтобы узнать, как HDL Coder™ поглощает задержки, откройте модель hdlcoder_absorb_delay_timing.
open_system('hdlcoder_absorb_delays') set_param('hdlcoder_absorb_delays', 'SimulationCommand', 'Update')

Внутри HDL_DUT подсистема, вы видите блок задержки, который имеет длину задержки, равную 12 рядом с блоком «Разделить». Эта длина задержки соответствует задержке операции разделения для типов данных с фиксированной точкой. В этом случае требуемая длина задержки представляет собой сумму битовой ширины, 8, и 4, что равно 12.
open_system('hdlcoder_absorb_delays/HDL_DUT')

Для генерации кода HDL для подсистемы DUT используйте makehdl функция.
makehdl('hdlcoder_absorb_delays/HDL_DUT')
В созданной модели задержки рядом с блоком Разделить поглощаются в задержку блока. При двойном щелчке Divide блок, вы видите исходный блок Разделить (Divide) и блок Задержка (Delay) с длиной задержки (Delay length), равной 12.

Пример, показывающий поглощение задержки для операций с плавающей запятой, см. в разделе Соображения по задержке с собственной плавающей запятой.
Оптимизация, такая как распределенная конвейерная обработка, может привести к задержкам. Например, откройте эту модель hdlcoder_absorb_delay_sharing. DUT подсистема содержит две подсистемы sub_scalar и sub_add.
open_system('hdlcoder_absorb_delay_sharing') set_param('hdlcoder_absorb_delay_sharing', 'SimulationCommand', 'Update')

sub_scalar подсистема состоит из 12 Блоки продуктов с единичной задержкой рядом с ними. Чтобы поделиться этими блоками продуктов, SharingFactor 12 указан на sub_scalar подсистема.
open_system('hdlcoder_absorb_delay_sharing/DUT/sub_scalar')

Создание кода HDL для DUT подсистема, используйте makehdl функция.
makehdl('hdlcoder_absorb_delay_sharing/DUT')
При указании значения больше 1 для SharingFactor, блоков десериализатора, имеющих 1 после формирования кода HDL вставляют задержку выборки. При добавлении блоков единичной задержки рядом с блоками изделия в исходной модели эти задержки поглощаются блоком изделия после выполнения оптимизации совместного использования.
В созданной модели задержки поглощаются в блоке Derializer.

2.6.3
Рекомендуется
Чтобы сохранить область, когда проект содержит большие задержки проектирования и задержки конвейера, можно сопоставить задержки с блокированием ресурсов оперативной памяти и UltraRAM в FPGA. Задержки проектирования - это задержки, которые вставляются в проект вручную с помощью блоков задержки или других блоков, имеющих состояние, включая блоки Queue, HDL FIFO или Buffer. Задержки конвейера - это задержки, которые генерируются настройками оптимизации или настройками реализации блоков, такими как реализация Ньютона-Рафсона.
Для отображения задержек проектирования в ОЗУ:
В диалоговом окне «Свойства блока HDL» для блоков задержки установите значение UseRAM равным on. Сведения о том, как задать этот параметр для всех блоков задержки в проекте программным способом, см. в разделе Установка параметров блоков HDL для нескольких блоков программным способом.
Чтобы сопоставить значительные задержки с ресурсами UltraRAM, можно указать ram_style атрибут в сгенерированном коде HDL.
-- This VHDL code shows the ramstyle attribute set to ultra: attribute ram_style: string; attribute ram_style of ram : signal is "ultra"; // This Verilog code shows the ramstyle attribute set to ultra: (* ram_style = "ultra" *)
Как описано в Effects of Streaming and Distributed Pipelining, даже если UseRAM off, можно отобразить большие задержки, которые превышают пороговое значение, используя параметр RAM mapping threshold (bits). Это пороговое значение можно изменить в зависимости от величины задержки, которую требуется отобразить в ОЗУ.
При использовании функциональных блоков MATLAB можно сопоставить постоянные переменные в коде MATLAB ® с оперативной памятью, установив для архитектуры HDL значение MATLAB Datapath и MapPersistentVarsToRAM Свойство блока HDL для on.
Для задержек трубопровода, вставляемых оптимизацией, балансировка задержек автоматически вставляет совпадающие задержки в параллельных путях. Если длина задержки на критическом пути и число векторных элементов в параллельном пути принимают большие значения, задержки конвейера также могут стать значительно большими.
Чтобы сопоставить эти большие задержки с Block RAM:
Включите параметр Map pipeline delays to RAM.
Установите значение параметра RAM mapping threshold (bits) меньше требуемого размера RAM.
Размер ОЗУ = DelayLength * WordLength * VectorLength * ComplexLength
2.6.4
Обязательный
При создании кода HDL для подсистемы DUT, использующей блоки From и Goto:
Не используйте блоки From и Goto на границе подсистемы DUT. Для подключения входных и выходных портов DUT используйте блоки Inport и Outport.
Не используйте блоки From и Goto на границе атомной подсистемы. Для подключения входных и выходных портов DUT используйте блоки Inport и Outport.
Область блоков From и Goto должна быть локальной для иерархии подсистем. Задайте для параметра «Видимость тегов» блоков значение local или Scoped. Генерация кода HDL не поддерживает видимость тегов блоков, для которых установлено значение global.
Использование блоков From и Goto в иерархии подсистем может повлиять на читаемость модели. Перед созданием кода HDL рекомендуется использовать блоки From и Goto в одной подсистеме и local или Scoped видимость. При создании кода HDL в создаваемой модели каждый блок Перейти к (Goto) и Из (From) становится парой подсистем Из (From) и Перейти к (Goto), соединенных обратно.