Технология HDL Coder™ с плавающей запятой может генерировать код HDL из проекта с плавающей запятой. Собственные операторы с плавающей запятой имеют задержку. При создании кода HDL генератор кода вычисляет эту задержку и добавляет соответствующие задержки, чтобы сбалансировать параллельные пути.
Откройте окно hdlcoder_nfp_delay_allocation Simulink™ модель. Модель использует single и вычисляет квадратный корень. Модель имеет параллельный путь для иллюстрации того, как генератор кода уравновешивает задержки.
load_system('hdlcoder_nfp_delay_allocation') open_system('hdlcoder_nfp_delay_allocation/DUT')

Для создания кода HDL:
Щелкните правой кнопкой мыши DUT Подсистема и выберите HDL Code > Generate HDL for Subsystem.
Для просмотра созданной модели после создания кода HDL в командной строке введите gm_hdlcoder_nfp_delay_allocation.

NFP Sqrt блок является оператором с плавающей запятой, соответствующим блоку Sqrt в модели, и имеет задержку 28. Генератор кода определяет эту задержку и добавляет соответствующую задержку длины 28 по параллельному пути. Чтобы увидеть задержку операции с квадратным корнем, дважды щелкните значок NFP Sqrt блок. Длина задержки Sqrt_pd1 блок соответствует задержке оператора.

Можно настроить задержку проекта. Используйте пользовательские параметры задержки для определения компромиссов между задержкой и пропускной способностью. Затем можно оптимизировать реализацию проекта на целевом устройстве FPGA по площади и скорости. Настройте задержку с помощью:
Параметр «Стратегия задержки» (Latency Strategy): укажите, следует ли сопоставлять всю модель Simulink™ или отдельные блоки модели с максимальным, минимальным или нулевым временем задержки оператора с плавающей запятой.
Пользовательская задержка: можно указать пользовательскую задержку для определенных блоков, используемых в модели Simulink™. Пользовательская настройка задержки может принимать значения от нуля до максимальной задержки оператора с плавающей запятой.
Коэффициент избыточной дискретизации: Увеличение коэффициента избыточной дискретизации обеспечивает работу конструкции с более высокой тактовой частотой и поглощает конвейеры тактовой частоты с задержкой оператора с плавающей запятой.
Блоки задержки в модели: Если модель Simulink имеет задержку, Coder™ HDL могут поглощать часть или все задержки с помощью собственной реализации с плавающей запятой.
Можно задать стратегию задержки для всей модели или для отдельных блоков в модели.
Чтобы задать эту настройку для модели, выполните следующие действия.
В hdlcoder_nfp_delay_allocation модель, щелкните правой кнопкой мыши DUT Подсистема и выберите Код HDL > Свойства кодера HDL.
На вкладке «Создание кода HDL» > «Глобальные параметры» > «Цель с плавающей запятой» в поле «Библиотека» выберите «Собственная плавающая точка», а затем в поле «Стратегия задержки» выберите MAX, MIN или ZERO.

Чтобы указать этот параметр в командной строке:
Создать hdlcoder.FloatingPointTargetConfig для собственной плавающей точки с помощью hdlcoder.createFloatingPointTargetConfig функция.
nfpconfig = hdlcoder.createFloatingPointTargetConfig('NATIVEFLOATINGPOINT'); hdlset_param('hdlcoder_nfp_delay_allocation', 'FloatingPointTargetConfiguration', nfpconfig);
Укажите стратегию задержки с помощью LatencyStrategy property из nfpconfig объект.
nfpconfig.LibrarySettings.LatencyStrategy = 'MAX'
nfpconfig =
FloatingPointTargetConfig with properties:
Library: 'NativeFloatingPoint'
LibrarySettings: [1x1 fpconfig.NFPLatencyDrivenMode]
IPConfig: [1x1 hdlcoder.FloatingPointTargetConfig.IPConfig]
Чтобы просмотреть информацию о задержках, создайте код HDL, а затем откройте созданную модель. Чтобы открыть созданную модель, введите команду gm_hdlcoder_nfp_delay_allocation.
Для блоков в модели Simulink™ можно выборочно настроить стратегию задержки. По умолчанию блоки наследуют заданный для модели параметр стратегии задержки. Для определенных блоков можно задать пользовательское значение задержки в диапазоне от нуля до максимального значения задержки оператора с плавающей запятой.
Задавая пользовательскую задержку, можно настроить дизайн для компромиссов между:
Тактовая частота и потребляемая мощность: более высокое значение задержки увеличивает максимальную тактовую частоту (Fmax), которую можно достичь, что увеличивает динамическое энергопотребление.
Коэффициент избыточной дискретизации и частота дискретизации: сочетание более высокого значения задержки и более высокого коэффициента избыточной дискретизации увеличивает Fmax, который можно достичь, но уменьшает частоту дискретизации.
Дополнительные сведения об этом параметре и о том, как указать стратегию задержки для блока, см. в разделе LatencyStrategy.
Например, при наличии блока «Добавить» в параллельном пути в модели можно задать пользовательское значение задержки, равное 2 для блока «Добавить» путем ввода этих команд.
load_system('hdlcoder_nfp_delay_allocation_custom') open_system('hdlcoder_nfp_delay_allocation_custom') hdlset_param('hdlcoder_nfp_delay_allocation_custom/DUT/Add','LatencyStrategy','Custom') hdlset_param('hdlcoder_nfp_delay_allocation_custom/DUT/Add','NFPCustomLatency',2)

Чтобы просмотреть информацию о задержках, создайте код HDL, а затем откройте созданную модель. Чтобы открыть созданную модель, введите команду gm_hdlcoder_nfp_delay_allocation_custom. В созданной модели видно, что NFP Add блок имеет задержку 2.

При проектировании блоков в модели Simulink™ на скорости передачи данных укажите коэффициент избыточной дискретизации, превышающий единицу. Коэффициент избыточной дискретизации вставляет регистры конвейера с более высокой тактовой частотой, что улучшает тактовую частоту и уменьшает использование области. Дополнительные сведения о конвейеризации тактовой частоты см. в разделе Конвейеризация тактовой частоты.
Чтобы увидеть влияние коэффициента избыточной выборки на модель, в hdlcoder_nfp_delay_allocation модель:
Добавление блока задержки с длиной задержки 1 на выходе блока Sqrt.
Щелкните правой кнопкой мыши DUT и выберите «Код HDL» > «Свойства кодера HDL».
На панели «Создание кода HDL» > «Глобальные параметры» введите значение 40 для коэффициента избыточной выборки.

После генерации кода HDL созданная модель показывает NFP Sqrt блок работает с тактовой частотой в 40 раз быстрее, чем блок Sqrt в модели. NFP Sqrt блок поглотил блок Задержка (Delay) в модели Simulink™. Блок задержки теперь работает с тактовой частотой. Эта реализация экономит область, поглощая дополнительную задержку, и улучшает синхронизацию, работая с более высокой тактовой частотой.

Если модель Simulink™ имеет блок задержки с достаточной длиной задержки рядом с оператором, HDL Coder™ поглощает задержки как часть задержки оператора.
Примечание.Чтобы компенсировать задержки, необходимо сгруппировать задержки рядом с блоком.
Если длина задержки равна задержке оператора с плавающей запятой, HDL Coder™ поглощает задержки и не вводит никакой дополнительной задержки.
В hdlcoder_nfp_delay_allocation модель:
Дважды щелкните блок задержки на выходе блока Sqrt и измените длину задержки на 28.
Создание кода HDL для DUT Подсистема.
После создания кода HDL в командной строке введите gm_hdlcoder_nfp_delay_allocation для открытия созданной модели.

В созданной модели видно, что NFP Sqrt блок поглощает блок задержки рядом с блоком Sqrt в исходной модели. Это поглощение задержки происходит, потому что задержка оператора равна длине задержки. Поэтому генератор кода позволяет избежать дополнительной задержки в модели.
Если длина задержки меньше, чем задержка оператора, HDL Coder™ поглощает доступные задержки и балансирует параллельные пути, добавляя совпадающие задержки.
В hdlcoder_nfp_delay_allocation модель:
Дважды щелкните блок задержки на выходе блока Sqrt и измените длину задержки на 21.
Создание кода HDL для DUT Подсистема.
После создания кода HDL в командной строке введите gm_hdlcoder_nfp_delay_allocation для открытия созданной модели.

Вы видите, что NFP Sqrt блок поглощает задержку длины 21 и добавлена задержка согласования длины 7 в параллельном пути, так как операция с квадратным корнем требует 28 задержки.
Если длина задержки больше, чем задержка оператора, генератор кода поглощает определенное количество задержек, равное задержке, и избыточные задержки появляются вне оператора.
В hdlcoder_nfp_delay_allocation модель:
Дважды щелкните блок задержки на выходе блока Sqrt и измените длину задержки на 34.
Создание кода HDL для DUT Подсистема.
После создания кода HDL в командной строке введите gm_hdlcoder_nfp_delay_allocation для открытия созданной модели.

NFP Sqrt блок поглощает 28 задержек, потому что операция квадратного корня имеет задержку 28. Избыточная задержка 6 находится вне оператора.