Свойства блока HDL: собственная плавающая точка

Обзор

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

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

Свойства HDL-блоков библиотечных блоков

Свойства HDL-блоков библиотечных блоков обрабатываются аналогично параметрам маски. При создании экземпляров библиотечных блоков в модели текущие свойства HDL-блоков этого библиотечного блока копируются в образцы этого блока в вашей модели. Свойства HDL-блоков этих образцов не синхронизируются со свойствами HDL-блоков библиотечного блока. То есть, если вы меняете свойство HDL-блока библиотечного блока, изменение не распространяется на образцы из библиотечных блоков, которые вы уже добавили в Simulink® модель. Если вы хотите, чтобы свойства HDL-блока библиотечного блока были синхронизированы с его образцами в модели, создайте Subsystem и затем поместите этот блок внутрь этого Subsystem. Свойства HDL-блоков блоков, которые находятся внутри блока библиотеки, синхронизируются с соответствующими образцами в вашей модели.

Предположим, что библиотека содержит блок Subsystem с архитектурой, установленной на Module. Когда вы создаете экземпляр этого блока в вашей модели, образец блока использует Module как архитектура HDL. Если вы измените HDL- архитектуры блока Subsystem в библиотеке на BlackBoxсуществующие образцы этого Subsystem блока в вашей модели все еще используют Module как архитектура HDL. Если теперь вы добавляете образцы Subsystem блока из библиотеки в вашей модели, новые образцы блоков получают копию текущих свойств HDL-блоков и, следовательно, используют BlackBox как архитектура HDL. Если вы хотите, чтобы архитектура HDL Subsystem блока в библиотеке была синхронизирована с ее образцами в модели, создайте подсистему-оболочку с архитектурой HDL, которую вы хотите использовать в этом Subsystem.

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-блока»:

  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 в возвратном режиме.

Установка алгоритма деленияОписание
Radix-2 (по умолчанию)

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

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

Radix-4

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

Чтобы проектировать более низкую задержку при обмене на площадь, используйте режим Radix-4.

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

Режим алгоритма деленияLatencyStrategyВремя ожиданияFmaxLUTsРегистры
Radix-2MIN17334.4 МГц12481011
МАКС.32454.5 МГц12941797
Radix-4MIN11245.5 МГц1956865
МАКС.20453.1 МГц18541522

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

Чтобы задать DivisionAlgorithm для блока из диалогового окна «Свойств HDL-блока»:

  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' для этого блока.

Установите денормалы указателя для блока

Чтобы задать денормали указателя для блока из диалогового окна «Свойств HDL-блока»:

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

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

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

Чтобы задать денормали указателя для блока из командной строки, используйте 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].Если у вас есть неограниченные входы, сгенерированная модель запускает утверждение во время симуляции.

Настройка InputRangeReductionОписание
'on' (по умолчанию)

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

'off'

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

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

Чтобы задать InputRangeReduction для блока из диалогового окна «Свойств HDL-блока»:

  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-кода для типов с фиксированной и плавающей точками. Когда вы используете типы с плавающей точкой, задайте для IP-библиотеки с плавающей точкой значение Native Floating Point. Для фиксированных точек свойство задает нулевую, максимальную или пользовательскую задержку. Для типов с плавающей точкой свойство задает, будут ли блоки сопоставлены с минимальной, максимальной или пользовательской задержкой для оператора.

Настройка LatencyStrategyОписание
'inherit' (по умолчанию)

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

'Max'

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

'Min'

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

'Zero'

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

'Custom'

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

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

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

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

При использовании фиксированных точек можно задать LatencyStrategy для этих блоков.

  • Divide и Reciprocal блоки, которые имеют ShiftAdd как архитектура HDL.

  • Sqrt блок, который имеет SqrtFunction как архитектура HDL.

  • Trigonometric Function блок, для которого Function задано значение sin, cos, sincos, cos+jsin, или atan2 и Approximation method как CORDIC.

Чтобы задать стратегию задержки для подсистемы из диалогового окна «Свойств блока»:

  1. На панели инструментов Simulink, на вкладке Apps, выберите HDL Coder.

  2. Выберите блок, а на вкладке HDL Code нажмите кнопку HDL Block Properties.

  3. На вкладке General задайте LatencyStrategy. Если для LatencyStrategy задано значение Custom, необходимо задать значение для CustomLatency.

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

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

Установите стратегию задержки для блока с плавающей точкой

Чтобы задать стратегию задержки для подсистемы из диалогового окна «Свойств блока»:

  1. На панели инструментов Simulink, на вкладке Apps, выберите HDL Coder.

  2. Выберите блок, а на вкладке HDL Code нажмите кнопку HDL Block Properties.

  3. На вкладке Native Floating Point задайте LatencyStrategy. Если для LatencyStrategy задано значение Custom, необходимо задать значение для NFPCustomLatency.

Для получения дополнительной информации см. раздел «Генерация HDL-кода» на каждой блочной странице. Чтобы узнать о блоках, для которых можно задать пользовательскую задержку, смотрите NFPCustomLatency.

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

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

CustomLatency

Можно задать пользовательскую задержку для определенных блоков для фиксированных точек. При помощи пользовательской стратегии задержки можно достичь компромисса между частотой синхроимпульса и потреблением степени. Чтобы задать пользовательскую стратегию задержки, установите LatencyStrategy равным CUSTOM и задайте значение для CustomLatency. Для получения дополнительной информации см. раздел «Генерация HDL-кода» на каждой блочной странице.

Можно задать настройку CustomLatency для этих блоков с фиксированными точками.

  • Divide и Reciprocal блоки, которые имеют ShiftAdd как архитектура HDL.

  • Sqrt блок, который имеет SqrtFunction как архитектура HDL.

  • Trigonometric Function блок, для которого Function задано значение sin, cos, sincos, cos+jsin, или atan2 и Approximation method как CORDIC.

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

Чтобы задать пользовательское значение задержки для подсистемы из диалогового окна «Свойств блока»:

  1. На панели инструментов Simulink, на вкладке Apps, выберите HDL Coder.

  2. Выберите блок, а на вкладке HDL Code нажмите кнопку HDL Block Properties.

  3. На вкладке General установите LatencyStrategy равным Custom и задайте значение для CustomLatency.

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

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

NFPCustomLatency

Вы можете задать пользовательскую задержку для определенных блоков в собственном режиме с плавающей точкой. При помощи пользовательской стратегии задержки можно достичь компромисса между частотой синхроимпульса и потреблением степени. Чтобы задать пользовательскую стратегию задержки, установите LatencyStrategy равным Custom и задайте значение для NFPCustomLatency. Для получения дополнительной информации см. раздел «Генерация HDL-кода» на каждой блочной странице.

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

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

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

Чтобы задать пользовательское значение задержки для подсистемы из диалогового окна «Свойств блока»:

  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 (в режиме взаимности) и так далее. Используя эту настройку, можно задать, как HDL Coder должен реализовать операцию умножения мантиссы для блоков.

Настройка MantissaMultiplyStrategyОписание
'inherit' (по умолчанию)

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

'FullMultiplier'

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

'PartMultiplierPartAddShift'

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

'NoMultiplierFullAddShift'

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

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

Установите стратегию умножения Мантиссы для блока

Чтобы установить адаптивную конвейеризацию для подсистемы из диалогового окна «Свойств блока»:

  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', ... 
                'MantissaMultiplyStrategy', '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-блока»:

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

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

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

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

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

Похожие примеры

Подробнее о