HDL Block Properties: нативная плавающая точка

Обзор

Блокируйтесь параметры реализации позволяют вам управлять деталями кода, сгенерированного для определенных реализаций блока. Смотрите Параметры блоков HDL Набора и Представления, чтобы изучить, как выбрать реализации блока и параметры в графический интерфейсе пользователя или командной строке.

Имена свойства заданы как векторы символов. Тип данных значения свойства характерен для свойства. В этом разделе описываются синтаксис каждого параметра реализации блока, который можно задать во вкладке Native Floating Point HDL Block Properties. Вы видите, как определение параметра влияет на сгенерированный код.

CheckResetToZero

Можно использовать свойство CheckResetToZero для mod и функций rem блока Math Function в нативном режиме с плавающей точкой. Если у вас есть числа a и b, таким образом, что частное, которое a/b близко к целому числу, эта установка, обрабатывает a как интегральное кратное b и rem (a, b) =0. Этот результат численно точен и совпадает с результатом симуляции Simulink®. Однако вычисление этого результата использует дополнительные ресурсы и увеличивает место области на целевом устройстве FPGA.

Например, для этих наборов чисел, вы получаете различные результаты симуляции, когда вы включаете и отключаете установку CheckResetToZero.

Установка CheckResetToZeroОписание
'on' (значение по умолчанию)

Когда вы вычисляете mod или rem двух чисел, частное которых ближе к целому числу и имеет точность, больше, чем те из данных с плавающей запятой вводят вас использование, HDL Coder™ добавляет необходимую логику, чтобы вывести результат mod или rem как нуль, когда частное чисел близко к целому числу.

'off'

HDL Coder не вставляет дополнительную логику, чтобы вычислить частное, которое сохраняет область на целевом устройстве FPGA.

Установите CheckResetToZero для блока математической функции

Установить CheckResetToZero для блока от диалогового окна HDL Block Properties:

  1. Щелкните правой кнопкой по блоку.

  2. Выберите HDL Code HDL Block Properties.

  3. Для CheckResetToZero выберите on или off.

Установить CheckResetToZero для блока Math Function в подсистеме, my_dut в вашей модели Simulink my_design:

hdlset_param('my_design/my_dut/Math', 'CheckResetToZero, 'on')
См. также hdlset_param.

DivisionAlgorithm

Можно использовать свойство DivisionAlgorithm для Деления и Взаимных блоков в режиме Native Floating Point.

Установка DivisionAlgorithmОписание
Radix-2 (значение по умолчанию)

Режим Radix 2 по умолчанию выполняет повторенные вычитания на вычислительный один бит частного в каждой итерации.

Чтобы разработать для более низкого использования области при обменивании на задержку, используйте режим Radix 2 в сочетании с набором LatencyStrategy к MAX.

Radix-4

Режим Radix 4 выполняет повторенные вычитания на вычислительные два бита частного в каждой итерации. Чтобы вычислить результат, режим Radix 4 использует половину количества итераций, которое требуется режимом Radix 2.

Чтобы разработать для более низкой задержки при обменивании на область, используйте режим Radix 4 в сочетании с набором LatencyStrategy к MAX.

Использование ресурса деления с одинарной точностью и максимум синхронизируют частоту на Xilinx Virtex-7

Режим DivisionAlgorithmLatencyStrategyЗадержкаFmaxLUTsРегистры
Основание 2Min17334.4 МГц12481011
Max 32454.5 МГц12941797
Основание 4Min11245.5 МГц1956865
Max 20453.1 МГц18541522

Задайте DivisionAlgorithm для блока математической функции или деления

Задавать DivisionAlgorithm для блока от диалогового окна HDL Block Properties:

  1. Щелкните правой кнопкой по блоку.

  2. Выберите HDL Code> HDL Block Properties.

  3. Во вкладке Native Floating Point задайте DivisionAlgorithm.

Чтобы задать DivisionAlgorithm для блока в командной строке, используйте hdlset_param. Например, эта команда задает режим Radix 4 для блока Divide в подсистеме, my_dut в вашей модели Simulink my_design:

hdlset_param('my_design/my_dut/Divide, 'DivisionAlgorithm', 'Radix-4')

HandleDenormals

Можно использовать свойство HandleDenormals для определенных блоков, которые поддерживают генерацию HDL-кода в режиме Native Floating Point. Нестандартные числа являются числами, которые имеют значения меньше, чем самое маленькое число с плавающей запятой, которое может быть представлено без начальных нулей в мантиссе. С этой установкой можно задать, хотите ли вы, чтобы HDL Coder вставил дополнительную логику, чтобы обработать нестандартные числа в вашем проекте. Для получения дополнительной информации смотрите Нестандартные Числа.

Установка HandleDenormalsОписание
'inherit' (значение по умолчанию)

Используйте указатель denormals установка родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, используйте указатель denormals устанавливающий для модели.

'on'

Если у вас есть нестандартные числа в этих входных параметрах блока, HDL Coder добавляет логику, чтобы нормировать нестандартные числа.

'off'

HDL Coder не вставляет дополнительную логику, чтобы обработать нестандартные числа в вашем проекте. Генератор кода обрабатывает нестандартное значение как нуль прежде, чем выполнить любое вычисление.

Чтобы включить HandleDenormals для блока в модели, установите параметр, HandleDenormals, к 'on' для того блока.

Установите указатель Denormals для блока

Установить указатель denormals для блока от диалогового окна HDL Block Properties:

  1. Щелкните правой кнопкой по блоку.

  2. Выберите HDL Code> HDL Block Properties.

  3. Для HandleDenormals выберите inherit, on или off.

Чтобы установить указатель denormals для блока от командной строки, используйте hdlset_param. Например, чтобы включить адаптивную конвейеризацию для продукта блокируются в подсистеме, my_dut в вашей модели Simulink my_design:

hdlset_param('my_design/my_dut/Product', 'HandleDenormals', 'on')
См. также hdlset_param.

InputRangeReduction

Можно использовать свойство InputRangeReduction для sin, потому что, загар, sincos, и cos+jsin функции блока Trigonometric Function в режиме Native Floating Point. По умолчанию эта установка включена для блока, и это принимает, что ваш входной диапазон неограничен. Если ваш вход к блоку ограничен в области значений [-pi, pi], ваш проект не требует, чтобы логика уменьшала входной диапазон. В этом случае можно отключить эту установку, и реализация блока подвергается более низкой задержке и использует меньше ресурсов на целевом компьютере. Когда вы отключаете установку, сгенерированная модель содержит блок, который проверяет, ограничены ли входные параметры в области значений [-pi, pi].If, у вас есть неограниченные входные параметры, сгенерированная модель инициировала утверждение во время симуляции.

Установка InputRangeReductionОписание
'on' (значение по умолчанию)

Принимает, что входной диапазон неограничен и вставляет дополнительную логику, чтобы уменьшать область значений входного параметра до [-pi, pi] прежде, чем вычислить алгоритм.

'off'

Принимает, что входной параметр ограничен в области значений [-pi, pi] и не вставляет дополнительную логику, чтобы уменьшать область значений входного параметра. Эта реализация уменьшает задержку и сохраняет область на целевой платформе.

Установите InputRangeReduction для блока тригонометрической функции

Установить InputRangeReduction для блока от диалогового окна HDL Block Properties:

  1. Щелкните правой кнопкой по блоку.

  2. Выберите HDL Code HDL Block Properties.

  3. Во вкладке Native Floating Point, для InputRangeReduction, выбирают on или off.

Отключить InputRangeReduction для блока Trigonometric Function в подсистеме, my_trigonometric в вашей модели Simulink my_design:

hdlset_param('my_design/my_dut/my_trigonometric', 'InputRangeReduction, 'off')
См. также hdlset_param.

LatencyStrategy

Можно использовать свойство LatencyStrategy для определенных блоков, которые поддерживают генерацию HDL-кода в нативном режиме с плавающей точкой. Свойство задает, хотите ли вы, чтобы блоки в вашем проекте сопоставили с минимумом, максимумом или пользовательской задержкой для нативного оператора с плавающей точкой.

Установка LatencyStrategyОписание
'inherit' (значение по умолчанию)

Используйте установку стратегии задержки родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, используйте установку стратегии задержки для модели.

'Max'

Во время генерации кода HDL Coder использует максимальное значение задержки для нативного оператора с плавающей точкой.

'Min'

Во время генерации кода HDL Coder использует минимальное значение задержки для нативного оператора с плавающей точкой.

'Zero'

Во время генерации кода HDL Coder не добавляет задержки для нативного оператора с плавающей точкой.

'Custom'

Во время генерации кода HDL Coder добавляет задержку, равную значению, которое вы задаете для установки NFPCustomLatency нативного оператора с плавающей точкой. Можно использовать эту установку для определенных блоков в нативном режиме с плавающей точкой. Чтобы видеть блоки, для которых можно задать установку, смотрите NFPCustomLatency.

Чтобы задать минимальную опцию задержки для блока в модели, установите параметр, LatencyStrategy, к 'MIN' для того блока.

Чтобы изучить, как установить установку стратегии задержки образцового уровня, смотрите Факторы Задержки с Нативной Плавающей точкой.

Установите стратегию задержки блока

Установить стратегию задержки подсистемы от диалогового окна HDL Block Properties:

  1. Щелкните правой кнопкой по блоку.

  2. Выберите HDL Code> HDL Block Properties.

  3. Во вкладке Native Floating Point, для LatencyStrategy, выбирают inherit, Max, Min, Zero или Custom.

  4. Если вы устанавливаете LatencyStrategy на Custom, необходимо задать значение для NFPCustomLatency.

Можно установить LatencyStrategy на Custom для этих блоков с типами данных double и single:

Можно также установить LatencyStrategy на Custom для этих блоков с типами данных single:

Чтобы задать стратегию задержки блока от командной строки, используйте hdlset_param. Например, чтобы задать минимальную задержку для продукта блокируют в подсистеме my_dut в вашей модели Simulink my_design:

hdlset_param('my_design/my_dut/Product', 'LatencyStategy', 'MIN')
См. также hdlset_param.

NFPCustomLatency

Можно задать пользовательскую задержку для определенных блоков в нативном режиме с плавающей точкой. При помощи пользовательской стратегии задержки вы можете компромисс между частотой часов и потреблением энергии. Чтобы задать пользовательскую стратегию задержки, установите LatencyStrategy на Custom и задайте значение для NFPCustomLatency.

Можно задать установку NFPCustomLatency для этих блоков и с single и с типами данных double:

Можно также задать установку NFPCustomLatency для этих блоков с типами данных single:

Установите пользовательское значение задержки для блока

Устанавливать пользовательское значение задержки для подсистемы от диалогового окна HDL Block Properties:

  1. Щелкните правой кнопкой по блоку.

  2. Выберите HDL Code> HDL Block Properties.

  3. Во вкладке Native Floating Point, для LatencyStrategy, выбирают Custom.

  4. Задайте значение для NFPCustomLatency.

Чтобы задать стратегию задержки блока от командной строки, используйте hdlset_param. Например, чтобы задать пользовательскую задержку четыре для продукта блокируют в подсистеме my_dut в вашей модели Simulink my_design:

hdlset_param('my_design/my_dut/Product', 'LatencyStategy', 'Custom'
hdlset_param('my_design/my_dut/Product', 'NFPCustomLatency', 4)
См. также hdlset_param.

MantissaMultiplyStrategy

Можно использовать свойство MantissaMultiplyStrategy для множителей, которые поддерживают генерацию HDL-кода в нативном режиме с плавающей точкой. Блоки, которые имеют эту установку, включают продукт, Делятся, Обратная величина, и так далее. При помощи этой установки можно задать, как вы хотите, чтобы HDL Coder реализовал операцию умножения мантиссы для блоков.

Установка MantissaMultiplyStrategyОписание
'inherit' (значение по умолчанию)

Использование мантисса умножает установку стратегии родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, использование, мантисса умножает установку стратегии для модели.

'FullMultiplier'

HDL Coder использует множители, чтобы выполнить операцию умножения мантиссы для нативного оператора с плавающей точкой. Множители могут использовать модули DSP на целевом устройстве.

'PartMultiplierPartAddShift'

HDL Coder разделяет реализацию в две части. Одна часть реализована со множителями. Другая часть реализована с комбинацией сумматоров и переключателей. Множители могут использовать модули DSP на целевом устройстве. Комбинация сумматоров и переключателей не использует DSP.

'NoMultiplierFullAddShift'

HDL Coder использует сумматоры и переключатели, чтобы реализовать умножение мантиссы. Эта опция не использует модули DSP на целевом устройстве. Можно также использовать эту опцию, если целевое устройство не содержит модули DSP.

Чтобы реализовать умножение мантиссы с сумматорами и переключателями, установите MantissaMultiplyStrategy к 'NoMultiplierFullAddShift' для того блока.

Мантисса набора умножает стратегию блока

Установить адаптивную конвейеризацию для подсистемы от диалогового окна HDL Block Properties:

  1. Щелкните правой кнопкой по блоку.

  2. Выберите HDL Code> HDL Block Properties.

  3. Во вкладке Native Floating Point, для MantissaMultiplyStrategy, выбирают inherit, FullMultiplier, PartMultiplierPartAddShift или NoMultiplierFullAddShift.

Чтобы задать мантиссу умножают стратегию блока от командной строки, используют hdlset_param. Например, чтобы реализовать умножение мантиссы с помощью сумматоров и переключателей для продукта блокируют в подсистеме my_dut в модели Simulink my_design:

hdlset_param('my_design/my_dut/Product', ... 
                'MantissaMultiplyStategy', 'PartMultiplierPartAddShift')
См. также hdlset_param.

'MaxIterations'

Можно использовать свойство MaxIterations для mod и функций rem блока Math Function в режиме Native Floating Point. Если у вас есть числа a и b, которые являются значительно большими целыми числами, можно увеличить установку MaxIterations, чтобы совпадать с результатом симуляции Simulink. Однако вычисление этого результата использует дополнительные ресурсы и увеличивает место области на целевом устройстве FPGA.

Установка MaxIterationsОписание
32 (значение по умолчанию)

Количество по умолчанию итераций, чтобы вычислить результат mod и rem функционирует в режиме Native Floating Point. Эта реализация может потенциально привести к числовому несоответствию с результатами симуляции Simulink для больших целых чисел.

64

Задайте 64 как количество итераций, чтобы вычислить результат mod и функций rem в режиме Native Floating Point. В этом режиме реализация имеет более высокую вероятность соответствия с результатом симуляции Simulink для значительно больших целых чисел, но может использовать больше аппаратных ресурсов.

128

Задайте 128 как количество итераций, чтобы вычислить результат mod и функций rem в режиме Native Floating Point. В этом режиме реализация совпадает с результатом симуляции Simulink для больших целых чисел, но использует больше аппаратных ресурсов.

Установите MaxIterations для блока математической функции

Установить MaxIterations для блока от диалогового окна HDL Block Properties:

  1. Щелкните правой кнопкой по блоку.

  2. Выберите HDL Code> HDL Block Properties.

  3. Во вкладке Native Floating Point, для MaxIterations, выбирают 32, 64 или 128.

Чтобы установить указатель denormals для блока от командной строки, используйте hdlset_param. Например, чтобы включить адаптивную конвейеризацию для продукта блокируются в подсистеме, my_dut в вашей модели Simulink my_design:

hdlset_param('my_design/my_dut/Product', 'HandleDenormals', 'on')
См. также hdlset_param.

Связанные примеры

Больше о