Собственный компонент 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
Subsystem и выберите 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 имеет задержку, HDL Coder™ может поглотить некоторых или всю задержку с нативной реализацией с плавающей точкой.
Можно задать установку стратегии задержки для целой модели или для отдельных блоков в модели.
Задавать эту установку для модели:
В модели hdlcoder_nfp_delay_allocation
щелкните правой кнопкой по DUT
Subsystem и выберите HDL Code> HDL Coder Properties.
На вкладке HDL Code Generation> Global Settings> Floating Point Target, для Библиотеки, выбирают Native Floating Point, и затем для Стратегии Задержки, выбирают 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.
Например, если у вас есть блок Add в параллельном пути в вашей модели, можно задать пользовательское значение задержки 2
для блока Add путем ввода этих команд.
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
:
Добавьте блок Delay с длиной Задержки 1
при выводе блока Sqrt.
Щелкните правой кнопкой по DUT и выберите HDL Code> HDL Coder Properties.
На генерации HDL-кода> Глобальная панель Настроек, введите значение 40
для Сверхдискретизации фактора.
После генерации HDL-кода сгенерированная модель показывает блок NFP Sqrt
, действующий на тактовой частоте, которая в 40 раз быстрее, чем блок Sqrt в вашей модели. Блок NFP Sqrt
поглотил блок Delay в вашей модели Simulink™. Блок Delay теперь действует на тактовой частоте. Эта реализация сохраняет область путем поглощения дополнительной задержки и улучшает синхронизацию путем работы на более быстрой тактовой частоте.
Если ваша модель Simulink™ имеет блок Delay с достаточной длиной Задержки, смежной с оператором, HDL Coder™ поглощает задержки как часть задержки оператора.
Примечание: Чтобы поглотить задержки, убедитесь, что вы группируете задержки, смежные с блоком.
Если длина Задержки равна задержке оператора с плавающей точкой, HDL Coder™ поглощает задержки и не вводит дополнительной задержки.
В модели hdlcoder_nfp_delay_allocation
:
Дважды кликните блок Delay при выводе блока Sqrt и измените длину Задержки на 28
.
Сгенерируйте HDL-код для Подсистемы DUT
.
После генерации HDL-кода, в командной строке, вводят gm_hdlcoder_nfp_delay_allocation
, чтобы открыть сгенерированную модель.
В сгенерированной модели вы видите, что блок NFP Sqrt
поглощает блок Delay, смежный с блоком Sqrt в вашей исходной модели. Это поглощение задержки происходит, потому что задержка оператора равна длине Задержки. Генератор кода поэтому избегает дополнительной задержки в вашей модели.
Если длина Задержки является меньше, чем задержка оператора, HDL Coder™ поглощает доступные задержки, и балансы параллельны путям путем добавления соответствия с задержками.
В модели hdlcoder_nfp_delay_allocation
:
Дважды кликните блок Delay при выводе блока Sqrt и измените длину Задержки на 21
.
Сгенерируйте HDL-код для Подсистемы DUT
.
После генерации HDL-кода, в командной строке, вводят gm_hdlcoder_nfp_delay_allocation
, чтобы открыть сгенерированную модель.
Вы видите, что блок NFP Sqrt
поглотил Задержку длины 21
и добавил соответствующую задержку длины 7
в параллельном пути, потому что операция квадратного корня требует задержек 28
.
Если длина задержки больше, чем задержка оператора, генератор кода поглощает определенное число задержек, равных задержке, и избыточные задержки появляются вне оператора.
В модели hdlcoder_nfp_delay_allocation
:
Дважды кликните блок Delay при выводе блока Sqrt и измените длину Задержки на 34
.
Сгенерируйте HDL-код для Подсистемы DUT
.
После генерации HDL-кода, в командной строке, вводят gm_hdlcoder_nfp_delay_allocation
, чтобы открыть сгенерированную модель.
Блок NFP Sqrt
поглотил 28 задержек, потому что операция квадратного корня имеет задержку 28
. Избыточная задержка 6
вне оператора.