Эти инструкции иллюстрируют рекомендуемые настройки для моделирования задержек в вашей модели. Задержки моделируются с помощью блоков, доступных в библиотеке Discrete. Каждое руководство имеет уровень серьезности, который указывает на уровень податливостей. Для получения дополнительной информации см. HDL-руководства по моделированию уровней серьезности.
2.6.1
Рекомендуется
Чтобы блоки в вашей модели были выведены как триггер на целевом FPGA, используйте Delay блока. Можно задать локальный сброс и включить сигнал для каждого блока Delay.
По умолчанию для Delay length блока задано значение 2
. В этом случае вход в блок переходит к выходу через два временных шагов. Если для Delay length задано значение 0
вход переходит к выходу без каких-либо задержек. Сгенерированный HDL-код обрабатывает блок как провод. Чтобы вывести флипфлоп или зарегистрироваться на целевом устройстве, установите Source равным dialog
и задайте Delay length, больше нуля.
Не используйте блоки Unit Delay Enabled, Unit Delay Resettable и Unit Delay Enabled Resettable для генерации HDL-кода. Эти блоки устарели. Вместо этого замените эти блоки на блоки Unit Delay Enabled Synchronous, Unit Delay Resettable Synchronous и Unit Delay Enabled Resettable Synchronous. Эти блоки используют State Control блок для синхронного поведения оборудования. Чтобы выполнить эту замену в модели, запустите проверку модели Check на устаревшие блоки Unit Delay Enabled/Resettable.
Идентификатор руководства
2.6.2
Серьезность
Рекомендуется
Описание
Некоторые реализации блоков, операции с плавающей точкой и настройки оптимизации, такие как распределённая конвейеризация, вводят задержку в сгенерированный HDL-код и сгенерированную модель. Дополнительная задержка приводит к различию во времени между исходной моделью и сгенерированной моделью. Чтобы избежать этого различия во времени, например, когда вы используете систему управления с циклом обратной связи, используйте шаблон моделирования, который может поглощать задержки. Чтобы поглощать задержки, поместите блок Delay после блока, который вводит задержку, и установите значение длины задержки, равное задержке блока. В сложение, путем добавления блока 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
подсистема, вы видите блок Delay, который имеет длину Delay, равную 12
рядом с блоком «Разделить». Эта длина задержки соответствует задержке операции деления для типов данных с фиксированной точкой. В этом случае необходимая Длина Задержки является суммой битовой ширины, 8
, и 4
, что равно 12
.
open_system('hdlcoder_absorb_delays/HDL_DUT')
Чтобы сгенерировать HDL-код для подсистемы DUT, используйте makehdl
функция.
makehdl('hdlcoder_absorb_delays/HDL_DUT')
В сгенерированной модели задержки рядом с блоком Divide поглощаются в задержку блока. При двойном клике по этому Divide
блок, вы видите исходный блок Divide и блок Delay с длиной задержки 12
.
Для примера, который показывает поглощение задержки для операций с плавающей точкой, см. «Факторы задержки с собственной плавающей точкой».
Оптимизация, такая как распределённая конвейеризация, может ввести задержку. Для примера откройте эту модель hdlcoder_absorb_delay_sharing
. The DUT
подсистема содержит две подсистемы sub_scalar
и sub_add
.
open_system('hdlcoder_absorb_delay_sharing') set_param('hdlcoder_absorb_delay_sharing', 'SimulationCommand', 'Update')
The sub_scalar
подсистема состоит из 12
Блоки продукта, которые имеют модуль задержку рядом с ними. Для совместного использования этих блоков Продукта, SharingFactor of 12
задается на sub_scalar
подсистема.
open_system('hdlcoder_absorb_delay_sharing/DUT/sub_scalar')
Чтобы сгенерировать HDL-код для DUT
подсистема, используйте makehdl
функция.
makehdl('hdlcoder_absorb_delay_sharing/DUT')
Когда вы задаете значение, больше 1
для блоков SharingFactor, Deserializer, которые имеют 1
задержка расчета вставляется после генерации HDL-кода. Путем добавления блоков unit Delay рядом с блоками Product в исходной модели эти задержки поглощаются в блок Product после выполнения оптимизации совместного использования.
В сгенерированной модели задержки поглощаются в блоке Derializer.
2.6.3
Рекомендуется
Чтобы сохранить область, когда ваш проект содержит большие задержки проекта и задержки трубопровода, можно сопоставить задержки, чтобы заблокировать ресурсы ОЗУ и UltraRAM на FPGA. Задержки проекта - это задержки, которые вы вручную вставляете в проект с помощью блоков Delay или других блоков, которые имеют состояние, включая Queue, HDL FIFO или Buffer блоки. Задержки трубопровода являются задержками, которые генерируются настройками оптимизации или настройками реализации блоков, такими как реализация Ньютона-Рафсона.
Для сопоставления задержек проекта с ОЗУ:
В диалоговом окне HDL Block Properties Delay блоков задайте UseRAM on
. Чтобы узнать, как можно задать эту опцию для всех блоков Delay в проекте программно, смотрите Задать параметры блоков 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" *)
Как описано в Эффектах потоковой и распределенной конвейеризации, даже если UseRAM off
можно сопоставить большие задержки, которые превышают порог значение с помощью параметра RAM mapping порога (бит). Вы можете изменить это пороговое значение в зависимости от того, насколько большую задержку вы хотите сопоставить с ОЗУ.
Когда вы используете MATLAB Function блоки, можно сопоставить стойкие переменные в MATLAB® код в ОЗУ путем установки архитектуры в MATLAB Datapath
и MapPersistentVarsToRAM
Свойство блока для on
.
Для задержек трубопровода, которые вставляются оптимизациями, балансировка задержек автоматически вставляет соответствующие задержки в параллельные пути. Если длина задержки на критическом пути и количество элементов вектора в параллельном пути принимают большие значения, задержки трубопровода также могут стать значительно большими.
Чтобы сопоставить эти большие задержки с Block RAM:
Включите параметр Map pipeline delays to RAM.
Настройте параметр RAM mapping threshold (bits) на значение, меньше необходимого размера ОЗУ.
RAM size = DelayLength * WordLength * VectorLength * ComplexLength
2.6.4
Обязательный
Когда вы генерируете HDL-код для Subsystem DUT, которая использует From и Goto блоки:
Не используйте From и Goto блоки через контур подсистемы DUT. Чтобы соединить входной и выходной порты DUT, используйте вместо этого Inport и Outport блоки.
Не используйте From и Goto блоки через контур Atomic Subsystem. Чтобы соединить входной и выходной порты DUT, используйте вместо этого Inport и Outport блоки.
Возможности From и Goto блоков должна быть локальной для иерархии подсистем. Установите Tag Visibility из блоков равными local
или Scoped
. Генерация HDL-кода не поддерживает Tag Visibility из блоков, установленных на global
.
Использование From и Goto блоков через иерархию подсистем может повлиять на читаемость модели. Перед генерацией HDL-кода рекомендуется использовать From и Goto блоки в одной подсистеме и использовать local
или Scoped
видимость. Когда вы генерируете HDL-код, в сгенерированной модели каждый Goto и From блок становится парой From и Goto подсистем, соединенных назад к задней панели.