Эти инструкции иллюстрируют рекомендуемые настройки для моделирования задержек вашей модели. Вы моделируете задержки при помощи блоков, доступных в Библиотеке 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-кода. Эти блоки были obsoleted. Вместо этого замените эти блоки на Unit Delay Enabled Synchronous, Unit Delay Resettable Synchronous и блоки Unit Delay Enabled Resettable Synchronous. Эти блоки используют блок State Control для синхронного аппаратного поведения. Чтобы выполнить эту замену в вашей модели, осуществите Проверку проверки модели на устаревший Unit Delay Enabled/Восстановленные Блоки.
ID инструкции
2.6.2
Серьезность
Рекомендуемый
Описание
Определенные реализации блока, операции с плавающей точкой и настройки оптимизации такой, как распределено конвейеризация вводят задержку в сгенерированном HDL-коде и сгенерированной модели. Дополнительная задержка приводит к различию в синхронизации между исходной моделью и сгенерированной моделью. Чтобы избежать этого различия в синхронизации, такой как тогда, когда вы используете систему управления с обратной связью, используют шаблон моделирования, который может поглотить задержки. Чтобы поглотить задержки, поместите блок Delay после блока, который вводит задержку и устанавливает значение длины Задержки, равное задержке блока. Кроме того, путем добавления блока Delay в исходную модель, можно симулировать исходную модель с задержкой.
Эти блоки могут ввести задержку:
Разделитесь, Sqrt и Взаимные блоки, которые имеют пользовательское значение задержки, больше, чем нуль.
Блоки Тригонометрической функции, которые имеют Функциональный набор к sin
потому что
, 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, который имеет длину Задержки, равную 12
около блока Divide. Эта длина Задержки соответствует задержке операции деления для типов данных с фиксированной точкой. В этом случае необходимая длина Задержки является суммой bitwidth, 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
. 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, блоки Deserializer, которые имеют 1
демонстрационная задержка вставляется после генерации HDL-кода. Путем добавления блоков единичной задержки около блоков продукта в исходной модели эти задержки поглощены в блок продукта после того, как вы выполните оптимизацию совместного использования.
В сгенерированной модели задержки поглощены блоком Derializer.
2.6.3
Рекомендуемый
Чтобы сохранить область, когда ваш проект содержит большие задержки проекта и конвейерные задержки, можно сопоставить задержки с ресурсами блока RAM и UltraRAM на FPGA. Задержки проекта являются задержками, которые вы вручную вставляете в свой проект при помощи блоков Delay или других блоков, которые имеют состояние включая Queue, HDL FIFO или блоки Buffer. Конвейерные задержки являются задержками, которые сгенерированы настройками оптимизации или настройками реализации блока, такими как реализация Ньютона-Raphson.
Сопоставлять задержки проекта с RAM:
В диалоговом окне 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, сопоставляющего порог (биты) параметр. Можно изменить это пороговое значение в зависимости от того, как большой задержка вы хотите сопоставить с RAM.
Когда вы используете блоки MATLAB Function, можно сопоставить персистентные переменные в коде MATLAB® к RAM архитектурой установки HDL к MATLAB Datapath
и MapPersistentVarsToRAM
Свойство блока HDL к on
.
Для конвейерных задержек, которые вставляются оптимизацией, задержка, балансирующаяся автоматически, вставляет соответствие с задержками параллельных путей. Если длина задержки в критическом пути и количестве векторных элементов в параллельном пути принимает большие значения, конвейерные задержки могут также стать значительно большими.
Сопоставлять эти большие задержки, чтобы Блокировать RAM:
Включите конвейерные задержки Карты с параметром RAM.
Настройте параметр RAM mapping threshold (bits) к значению, которое меньше, чем необходимый размер RAM.
Размер RAM = DelayLength * WordLength * VectorLength * ComplexLength
2.6.4
Обязательный
Когда вы генерируете HDL-код для Subsystem DUT, который использует блоки Goto и From:
Не используйте 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, соединенных вплотную.