Параметры реализации блоков позволяют управлять подробностями кода, созданного для конкретных реализаций блоков. См. раздел Установка и просмотр параметров модели HDL и блока, чтобы узнать, как выбрать реализации блоков и параметры в графическом интерфейсе пользователя или командной строке.
Имена свойств указываются как векторы символов. Тип данных значения свойства зависит от свойства. В этом разделе описывается синтаксис каждого параметра реализации блока, который можно указать на вкладке Собственная плавающая точка (Native Floating Point) окна Свойства блока HDL (HDL Block Properties). Можно увидеть, как указание параметра влияет на созданный код.
Свойства блоков HDL блоков библиотеки обрабатываются аналогично параметрам маски. При создании экземпляра библиотечных блоков в модели текущие свойства блока HDL этого блока библиотеки копируются в экземпляры этого блока в модели. Свойства блоков HDL этих экземпляров не синхронизированы со свойствами блоков HDL блока библиотеки. То есть при изменении свойства блока HDL блока библиотеки это изменение не распространяется на экземпляры блока библиотеки, которые уже были добавлены в модель Simulink ®. Если требуется синхронизировать свойства блока HDL блока библиотеки с его экземплярами в модели, создайте подсистему, а затем поместите этот блок в подсистему. Свойства блока HDL блоков, находящихся внутри блока библиотеки, синхронизируются с соответствующими экземплярами в модели.
Предположим, что библиотека содержит блок подсистемы с архитектурой HDL, равным Module. При создании экземпляра этого блока в модели экземпляр блока использует Module в качестве архитектуры HDL. При изменении архитектуры HDL блока «Подсистема» в библиотеке на BlackBox, существующие экземпляры этого блока подсистемы в модели по-прежнему используют Module в качестве архитектуры HDL. При добавлении экземпляров блока «Подсистема» из библиотеки модели новые экземпляры блока получают копию текущих свойств блока HDL и, следовательно, используют BlackBox в качестве архитектуры HDL. Если требуется синхронизировать архитектуру HDL блока подсистемы в библиотеке с ее экземплярами в модели, создайте подсистему-оболочку с архитектурой HDL, которая требуется внутри этой подсистемы.
Для функций mod и rem блока Math Function в собственном режиме с плавающей запятой можно использовать свойство StartResetToZero. Если у вас есть номера a и b такой, что частное a/b близок к целому числу, этот параметр обрабатывает a как интегральное кратное b, и rem (a, b) = 0. Этот результат является численно точным и соответствует результату моделирования Simulink. Однако при вычислении этого результата используются дополнительные ресурсы и увеличивается занимаемая площадь на целевом устройстве FPGA.
Например, для этих наборов чисел получаются различные результаты моделирования при включении и отключении параметра StartResetToZero.
| Параметр StartResetToZero | Описание |
|---|---|
'on' (по умолчанию) | При вычислении mod или rem двух чисел, частное которых ближе к целому числу и имеет точность, превышающую точность используемого типа данных с плавающей запятой, HDL Coder™ добавляет необходимую логику для вывода результата mod или rem как нуля, когда частное числа близко к целому числу. |
'off' | Кодер HDL не вставляет дополнительную логику для вычисления частного, что экономит область на целевом устройстве FPGA. |
Чтобы задать в диалоговом окне Свойства блока HDL (HDL Block Properties) значение StartResetToZero для блока, выполните следующие действия.
Щелкните правой кнопкой мыши на блоке.
Выберите «HDL Code HDL Block Properties» (Свойства блока HDL-кода HDL)
В поле StartResetToZero выберите «Вкл» или «Выкл».
Чтобы задать StartResetToZero для блока математической функции внутри подсистемы, my_dut в модели Simulink my_design:
hdlset_param('my_design/my_dut/Math', 'CheckResetToZero, 'on')
hdlset_param.Вы можете использовать DivisionAlgorithm свойство при включении Native Floating Point режим для блока Разделить (Divide) и блока Математическая функция (Math Function) в режиме возвратно-поступательного движения.
| Настройка алгоритма подключения | Описание |
|---|---|
Radix-2 (по умолчанию) | Режим Radix-2 по умолчанию выполняет повторные вычитания, вычисляя один бит частного в каждой итерации. Для проектирования более низкого уровня использования площадей во время обмена на задержки используйте режим Radix-2. |
Radix-4 | Режим Radix-4 выполняет повторные вычитания, вычисляя два бита частного в каждой итерации. Для вычисления результата в режиме Radix-4 используется половина числа итераций, необходимого для режима Radix-2. Чтобы рассчитать более низкую задержку во время торговли для области, используйте режим Radix-4. |
Использование ресурсов разделения с одной точностью и максимальная тактовая частота на Virtex-7 Xilinx
| Режим алгоритма подключения | LatencyStrategy | Время ожидания | Fmax | LUTs | Регистры |
|---|---|---|---|---|---|
| Radix-2 | МИНУТА | 17 | 334.4 МГц | 1248 | 1011 |
| МАКС. | 32 | 454.5 МГц | 1294 | 1797 | |
| Radix-4 | МИНУТА | 11 | 245.5 МГц | 1956 | 865 |
| МАКС. | 20 | 453.1 МГц | 1854 | 1522 |
Чтобы задать параметр «Алгоритм подключения» для блока в диалоговом окне «Свойства блока HDL», выполните следующие действия.
Щелкните правой кнопкой мыши на блоке.
Выберите «Код HDL» > «Свойства блока HDL».
На вкладке Native Floating Point (Собственная плавающая точка) укажите алгоритм подключения.
Чтобы задать параметр «Алгоритм подключения» для блока в командной строке, используйте команду hdlset_param. Например, эта команда задает режим Radix-4 для блока «Разделить» внутри подсистемы. my_dut в модели Simulink my_design:
hdlset_param('my_design/my_dut/Divide, 'DivisionAlgorithm', 'Radix-4')
Вы можете использовать HandleDenormals свойство для определенных блоков, поддерживающих генерацию кода HDL в Native Floating Point режим. Денормальные числа - это числа, значения которых меньше наименьшего числа с плавающей запятой, которое можно представить без ведущих нулей в мантиссе. С помощью этого параметра можно указать, нужно ли вставлять в кодер HDL дополнительную логику для обработки денормальных чисел в конструкции. Дополнительные сведения см. в разделе Денормальные числа.
| Установка HandleDenormals | Описание |
|---|---|
'inherit' (по умолчанию) | Используйте настройку denormals дескриптора родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, используйте для модели настройку denormals дескриптора. |
'on' | Если на этих входах блока имеются денормальные числа, кодер HDL добавляет логику для нормализации денормальных чисел. |
'off' | Кодер HDL не вставляет дополнительную логику для обработки денормальных чисел в конструкцию. Перед выполнением каких-либо вычислений генератор кода обрабатывает денормальное значение как ноль. |
Позволить HandleDenormals для блока в модели задайте параметр, HandleDenormalsКому 'on' для этого блока.
Чтобы задать денормали дескрипторов для блока в диалоговом окне Свойства блока HDL (HDL Block Properties), выполните следующие действия.
Щелкните правой кнопкой мыши на блоке.
Выберите «Код HDL» > «Свойства блока HDL».
Для параметра HandleDenormals выберите inherit, on или off.
Чтобы задать денормали для блока из командной строки, используйте hdlset_param. Например, чтобы включить адаптивную конвейерную обработку для блока Product внутри подсистемы, my_dut в модели Simulink my_design:
hdlset_param('my_design/my_dut/Product', 'HandleDenormals', 'on')
hdlset_param.Для функций sin, cos, tan, sincos и cos + jsin блока Trigonometric Function в Native Floating Point режим. По умолчанию этот параметр включен для блока и предполагает, что диапазон ввода не ограничен. Если ввод в блок ограничен диапазоном [-pi, pi], ваша конструкция не требует логики для уменьшения диапазона ввода. В этом случае вы можете отключить этот параметр, и реализация блока занимает меньше времени задержки и использует меньше ресурсов на целевом оборудовании. При отключении этого параметра создаваемая модель содержит блок, который проверяет, ограничены ли входные данные в диапазоне [-pi, pi]При наличии неограниченных входных данных создаваемая модель инициирует утверждение во время моделирования.
| Параметр InputRureReduction | Описание |
|---|---|
'on' (по умолчанию) | Предполагает, что диапазон ввода неограничен, и вставляет дополнительную логику для уменьшения диапазона входных аргументов до |
'off' | Предполагает, что входной аргумент ограничен диапазоном |
Чтобы задать InputRireReduction для блока в диалоговом окне Свойства блока HDL, выполните следующие действия.
Щелкните правой кнопкой мыши на блоке.
Выберите «HDL Code HDL Block Properties» (Свойства блока HDL-кода HDL)
На вкладке Собственная плавающая точка для InputRireReduction выберите вкл или выкл.
Чтобы отключить InputRireReduction для блока тригонометрической функции внутри подсистемы, my_trigonometric в модели Simulink my_design:
hdlset_param('my_design/my_dut/my_trigonometric', ... 'InputRangeReduction, 'off')
hdlset_param.Вы можете использовать LatencyStrategy свойство для определенных блоков, поддерживающих генерацию кода HDL для типов с фиксированной и плавающей точками. При использовании типов с плавающей запятой задайте для параметра Библиотека IP с плавающей запятой значение Native Floating Point. Для типов с фиксированной точкой свойство задает нулевую, максимальную или пользовательскую задержку. Для типов с плавающей запятой свойство указывает, соответствуют ли блоки минимальной, максимальной или пользовательской задержке оператора.
| Параметры стратегии LatencyStrategy | Описание |
|---|---|
'inherit' (по умолчанию) | Используйте настройку стратегии задержки родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, используйте настройку стратегии задержки для модели. |
'Max' | Во время генерации кода кодер HDL использует максимальное значение задержки для собственного оператора с плавающей запятой. |
'Min' | Во время генерации кода кодер HDL использует минимальное значение задержки для собственного оператора с плавающей запятой. |
'Zero' | Во время генерации кода кодер HDL не добавляет задержки для собственного оператора с плавающей запятой. |
'Custom' | Во время создания кода кодер HDL добавляет задержку, равную значению, указанному для параметров CustomLatency или NFPCustomLatency собственного оператора с плавающей запятой. Этот параметр можно использовать для определенных блоков в собственном режиме с плавающей запятой. Для просмотра блоков, для которых можно задать параметр, см. раздел NFPCustomLatency. |
Чтобы задать опцию минимальной задержки для блока в модели, задайте параметр, LatencyStrategyКому 'MIN' для этого блока.
Сведения о настройке стратегии задержки на уровне модели см. в разделе Вопросы задержки с собственной плавающей точкой.
При использовании типов с фиксированной точкой для этих блоков можно указать LatencyStrategy.
Разделить и взаимные блоки, имеющие ShiftAdd в качестве архитектуры HDL.
Блок Sqrt, имеющий SqrtFunction в качестве архитектуры HDL.
Тригонометрический функциональный блок, для которого установлено значение «Функция» sin, cos, sincos, cos+jsin, или atan2 и метод аппроксимации как CORDIC.
Чтобы задать стратегию задержки для подсистемы в диалоговом окне Свойства блока HDL (HDL Block Properties), выполните следующие действия.
На панели инструментов Simulink на вкладке Apps выберите HDL Coder.
Выберите блок и на вкладке «Код HDL» нажмите кнопку «Свойства блока HDL».
На вкладке Общие укажите стратегию LatencyStrategy. Если для параметра LatencyStrategy задано значение CustomLatency, необходимо указать значение.
Чтобы указать стратегию задержки для блока из командной строки, используйте hdlset_param. Например, чтобы указать минимальную задержку для блока продукта в подсистеме my_dut в модели Simulink my_design:
hdlset_param('my_design/my_dut/Product', 'LatencyStategy', 'MAX')
hdlset_param.Чтобы задать стратегию задержки для подсистемы в диалоговом окне Свойства блока HDL (HDL Block Properties), выполните следующие действия.
На панели инструментов Simulink на вкладке Apps выберите HDL Coder.
Выберите блок и на вкладке «Код HDL» нажмите кнопку «Свойства блока HDL».
На вкладке Собственная плавающая точка укажите стратегию LatencyStrategy. Если для параметра LatencyStrategy задано значение Custom, необходимо указать значение параметра NFPCustomLatency.
Для получения более подробной информации см. раздел «Создание кода HDL» на каждой странице блока. Сведения о блоках, для которых можно указать пользовательскую задержку, см. в разделе NFPCustomLatency.
Чтобы указать стратегию задержки для блока из командной строки, используйте hdlset_param. Например, чтобы указать минимальную задержку для блока продукта в подсистеме my_dut в модели Simulink my_design:
hdlset_param('my_design/my_dut/Product', 'LatencyStategy', 'MIN')
hdlset_param.Можно задать пользовательскую задержку для определенных блоков для типов с фиксированной точкой. Используя пользовательскую стратегию задержки, можно найти компромисс между тактовой частотой и энергопотреблением. Чтобы задать пользовательскую стратегию задержки, задайте для параметра LatencyStrategy значение CUSTOM и укажите значение CustomLatency. Для получения более подробной информации см. раздел «Создание кода HDL» на каждой странице блока.
Можно задать параметр CustomLatency для этих блоков с фиксированными типами точек.
Разделить и взаимные блоки, имеющие ShiftAdd в качестве архитектуры HDL.
Блок Sqrt, имеющий SqrtFunction в качестве архитектуры HDL.
Тригонометрический функциональный блок, для которого установлено значение «Функция» sin, cos, sincos, cos+jsin, или atan2 и метод аппроксимации как CORDIC.
Чтобы задать пользовательское значение задержки для подсистемы в диалоговом окне Свойства блока HDL (HDL Block Properties), выполните следующие действия.
На панели инструментов Simulink на вкладке Apps выберите HDL Coder.
Выберите блок и на вкладке «Код HDL» нажмите кнопку «Свойства блока HDL».
На вкладке Общие установите для параметра Латенсия Стратегия значение Настраиваемая и укажите значение для параметра 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.Можно задать пользовательскую задержку для определенных блоков в собственном режиме с плавающей запятой. Используя пользовательскую стратегию задержки, можно найти компромисс между тактовой частотой и энергопотреблением. Чтобы задать пользовательскую стратегию задержки, задайте для параметра LatencyStrategy значение Custom и укажите значение NFPCustomLatency. Для получения более подробной информации см. раздел «Создание кода HDL» на каждой странице блока.
Можно задать параметр NFPCustomLatency для этих блоков с обоими single и double типы данных.
Математическая функция в возвратно-поступательном режиме
Можно также указать параметр NFPCustomLatency для этих блоков с помощью single типы данных.
Чтобы задать пользовательское значение задержки для подсистемы в диалоговом окне Свойства блока HDL (HDL Block Properties), выполните следующие действия.
Щелкните правой кнопкой мыши на блоке.
Выберите «Код HDL» > «Свойства блока HDL».
На вкладке Собственная плавающая точка для LatencyStrategy выберите Пользовательская.
Укажите значение 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 для множителей, поддерживающих генерацию кода HDL в собственном режиме с плавающей запятой. Блоки с этой настройкой включают произведение, деление, математическую функцию (в режиме взаимности) и т. д. С помощью этого параметра можно указать способ реализации операции умножения мантиссы для блоков в кодере HDL.
| Настройка MantissaMultiplyStrategy | Описание |
|---|---|
'inherit' (по умолчанию) | Используйте настройку стратегии умножения мантиссы родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, используйте для модели настройку стратегии умножения мантиссы. |
'FullMultiplier' | Кодер HDL использует множители для выполнения операции умножения мантиссы для собственного оператора с плавающей запятой. Умножители могут использовать блоки DSP на целевом устройстве. |
'PartMultiplierPartAddShift' | Кодер HDL разбивает реализацию на две части. Одна часть выполнена с умножителями. Другая часть выполнена с комбинацией сумматоров и сдвигателей. Умножители могут использовать блоки DSP на целевом устройстве. Комбинация сумматоров и сдвигателей не использует DSP. |
'NoMultiplierFullAddShift' | Кодер HDL использует сумматоры и сдвигатели для реализации умножения мантиссы. Эта опция не использует блоки DSP на целевом устройстве. Этот параметр можно также использовать, если оконечное устройство не содержит блоков DSP. |
Для реализации умножения мантиссы с сумматорами и сдвигателями установите MantissaMultiplyStrategyКому 'NoMultiplierFullAddShift' для этого блока.
Чтобы задать адаптивную конвейерную обработку для подсистемы в диалоговом окне «Свойства блока HDL»:
Щелкните правой кнопкой мыши на блоке.
Выберите «Код HDL» > «Свойства блока HDL».
На вкладке Native Floating Point (Собственная плавающая точка) для параметра MantissaMultileStrategy выберите Inherit (Наследовать, множитель), PartMultierPartAddShift или NoMultipliureFureAddShift.
Чтобы указать стратегию умножения мантиссы для блока из командной строки, используйте hdlset_param. Например, для реализации умножения мантиссы с использованием сумматоров и сдвигателей для блока произведения внутри подсистемы my_dut в модели Simulink my_design:
hdlset_param('my_design/my_dut/Product', ... 'MantissaMultiplyStrategy', 'PartMultiplierPartAddShift')
hdlset_param.Вы можете использовать MaxIterations свойство для функций mod и rem блока Math Function в Native Floating Point режим. Если у вас есть номера a и b можно увеличить параметр MaxIterations, чтобы он соответствовал результату моделирования Simulink. Однако при вычислении этого результата используются дополнительные ресурсы и увеличивается занимаемая площадь на целевом устройстве FPGA.
| Настройка MaxIterations | Описание |
|---|---|
32 (по умолчанию) | Число итераций по умолчанию для вычисления результата функций mod и rem в |
64 | Определить |
128 | Определить |
Чтобы задать MaxIterations для блока в диалоговом окне Свойства блока HDL (HDL Block Properties), выполните следующие действия.
Щелкните правой кнопкой мыши на блоке.
Выберите «Код HDL» > «Свойства блока HDL».
На вкладке Собственная плавающая точка (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.