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 режим для блока Divide и блока Math Function в режиме Reciprocal.

Установка 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. Например, чтобы включить адаптивную конвейеризацию для блока Product в подсистеме, my_dut в вашей модели Simulink my_design:

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

InputRangeReduction

Можно использовать свойство InputRangeReduction в sin, cos, tan, 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.

Для получения дополнительной информации смотрите раздел "HDL Code Generation" каждой страницы блока.

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

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

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

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

NFPCustomLatency

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

Можно задать установку 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. Например, чтобы задать пользовательскую задержку четыре для блока Product в подсистеме 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-кода в нативном режиме с плавающей точкой. Блоки, которые имеют эту установку, включают Product, Divide, Math Function (в режиме Reciprocal), и так далее. При помощи этой установки можно задать, как вы хотите, чтобы 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. Например, чтобы реализовать умножение мантиссы с помощью сумматоров и переключателей для блока Product в подсистеме 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. Например, чтобы включить адаптивную конвейеризацию для блока Product в подсистеме, my_dut в вашей модели Simulink my_design:

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

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

Больше о