Инструкции по использованию блоков задержек и Goto и From для генерации HDL-кода

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

Соответствующее использование блоков Delay в качестве регистров

Идентификатор руководства

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

См. Сгенерированная модель и модель валидации.

Необходимые настройки HDL для блоков Goto и From

Идентификатор руководства

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 подсистем, соединенных назад к задней панели.

См. также

Функции

Похожие темы