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

Обзор

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

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

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

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

Предположим, что библиотека содержит блок Subsystem с набором архитектуры HDL к 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 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-кода для фиксированной точки и типов с плавающей точкой. Когда вы используете типы с плавающей точкой, устанавливаете Библиотеку 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потому что, sincos, cos+jsin, или atan2 и Approximation method как CORDIC.

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

  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.

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

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

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

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

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

Для получения дополнительной информации смотрите раздел "HDL Code Generation" каждой страницы блока. Чтобы узнать о блоках, для которых можно задать пользовательскую задержку, смотрите 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 Code Generation" каждой страницы блока.

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

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

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

  • Блок Trigonometric Function, которому установили Function на sinпотому что, sincos, cos+jsin, или atan2 и Approximation method как CORDIC.

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

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

  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 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', ... 
                '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 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.

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

Больше о