Свойства блока HDL: Общие

Обзор

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

Имена свойства заданы как векторы символов. Тип данных значения свойства зависит от свойства. В этом разделе описывается синтаксис каждого параметра реализации блока и то, как параметр влияет на сгенерированный код.

Свойства 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.

AdaptivePipelining

The AdaptivePipelining Параметр подсистемы позволяет вам задать адаптивную конвейеризацию для подсистемы в модели.

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

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

'on'

Вставьте адаптивные трубопроводы для этой подсистемы.

'off'

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

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

Чтобы узнать, как задать адаптивную конвейеризацию на уровне модели, смотрите Адаптивную конвейеризацию.

Установите адаптивную конвейеризацию для подсистемы

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

  1. Щелкните подсистему правой кнопкой мыши и выберите HDL Code > HDL Block Properties.

  2. Для AdaptivePipelining выберите inherit, on или off.

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

hdlset_param('my_dut', 'AdaptivePipelining', 'off')
См. также hdlset_param.

BalanceDelays

The BalanceDelays Параметр подсистемы позволяет вам задать балансировку задержки в подсистеме в модели.

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

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

'on'Задержки сальдо для этой подсистемы.
'off'Не балансируйте задержки для этой подсистемы, даже если у родительской подсистемы включена балансировка задержки.

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

Чтобы узнать, как задать балансировку задержки уровня модели, смотрите Задержки баланса.

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

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

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

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

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

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

hdlset_param('my_dut', 'BalanceDelays', 'off')
См. также hdlset_param.

ClockRatePipelining

The ClockRatePipelining Параметр подсистемы позволяет вам задать конвейеризацию с тактовой частотой для подсистемы в модели.

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

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

'on'

Вставьте трубопроводы тактовой частоты для этой подсистемы.

'off'

Не вставляйте трубопроводы тактовой частоты для этой подсистемы, даже если в родительской подсистеме включена тактовая частота.

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

Чтобы узнать, как установить конвейеризацию с тактовой частотой на уровне модели, см. Раздел «Конвейеризация с тактовой частотой».

Установите конвейеризацию тактовой частоты для подсистемы

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

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

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

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

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

hdlset_param('my_dut', 'ClockRatePipelining', 'off')
См. также hdlset_param.

CodingStyle

Когда вы используете блоки Multiport Switch, используйте CodingStyle параметр, чтобы указать, хотите ли вы сгенерировать HDL-код с операторами if-else или case. По умолчанию HDL- Coder™ генерирует операторы if-else. Если в модели есть несколько блоков Multiport Switch, можно выбрать, чтобы задать другое CodingStyle для каждого блока.

Настройка CodingStyleОписание
'ifelse_stmt'(По умолчанию)Сгенерируйте операторы if-else в коде Verilog или when-else в коде VHDL для блока Multiport Switch.
'case_stmt'Сгенерируйте операторы case в коде Verilog или case - когда операторы в коде VHDL для блока Multiport Switch.

Установите CodingStyle для Multiport Switch блока

Чтобы задать CodingStyle для Multiport Switch с помощью диалогового окна «Свойств блока»:

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

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

  3. Для CodingStyle выберите ifelse_stmt или case_stmt.

Чтобы увидеть CodingStyle заданный для подсистемы из командной строки, hdlget_param. Например, чтобы увидеть настройки, заданные для блока Multiport Switch внутри подсистемы, my_dut:

hdlget_param('my_dut/Multiport Switch', 'CodingStyle')
ans =

    'case_stmt'
См. также hdlset_param.

ConstMultiplierOptimization

The ConstMultiplierOptimization параметр реализации позволяет вам задать использование canonical signed digit (CSD) или факторизованных оптимизаций CSD для обработки операций умножения коэффициентов в сгенерированном коде.

Следующая таблица показывает ConstMultiplierOptimization значений параметров.

Настройка ConstMultiplierOptimizationОписание
'none'
(По умолчанию)
По умолчанию HDL Coder не выполняет оптимизацию CSD или FCSD. Код, сгенерированный для блока Gain, сохраняет операции умножения.
'CSD'Когда вы задаете эту опцию, сгенерированный код уменьшает площадь, используемую моделью, поддерживая или увеличивая тактовую частоту, используя методы канонической цифры со знаком (CSD). CSD заменяет операции умножения на операции сложения и вычитания. CSD минимизирует количество операций сложения, необходимых для постоянного умножения, представляя двоичные числа с минимальным количеством ненулевых цифр.
'FCSD'Эта опция использует факторизованные методы CSD (FCSD), которые заменяют операции умножения на сдвиг и складывают/вычитают операции для определенных факторов операндов. Эти факторы обычно являются простыми, но могут также быть числом, близким к степени 2, что способствует сокращению площади. Эта опция позволяет вам достичь большего сокращения площади, чем CSD, за счет снижения тактовой частоты.
'auto'

Когда вы задаете эту опцию, HDL Coder выбирает между оптимизацией CSD или FCSD. Кодер выбирает оптимизацию, которая приводит к наиболее эффективной по площади реализации, основываясь на количестве требуемых сумматоров. Когда вы задаете 'auto'кодер не использует умножители, если условия не таковы, что оптимизация CSD или FCSD невозможны (для примера, если в проекте используется арифметика с плавающей точкой).

The ConstMultiplierOptimization параметр доступен для следующих блоков:

  • Выгода

  • Stateflow® график

  • Таблица истинности

  • MATLAB Function

  • MATLAB System

ConstrainedOutputPipeline

Используйте ConstrainedOutputPipeline параметр для задания неотрицательного количества регистров для размещения на выходах блоков.

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

Распределённая конвейеризация не перераспределяет регистры, заданные с ограничением выходной конвейеризации.

Как задать ограниченную выходную конвейеризацию

Чтобы задать ограниченную выходную конвейеризацию для блока с помощью графический интерфейс пользователя:

  1. Щелкните правой кнопкой мыши блок и выберите HDL Code > HDL Block Properties.

  2. Для ConstrainedOutputPipeline введите количество регистров, необходимое для портов выхода.

Чтобы задать ограниченную выходную конвейеризацию, в командной строке введите:

hdlset_param(path_to_block,
             'ConstrainedOutputPipeline', number_of_output_registers)
Для примера, чтобы ограничить 6 регистров в выход портах подсистемы, subsys, в вашей модели, mymodel, введите:
hdlset_param('mymodel/subsys','ConstrainedOutputPipeline', 6)

См. также

DistributedPipelining

The DistributedPipelining параметр включает распределение регистров трубопроводов, оптимизацию скорости, которая позволяет вам увеличить тактовую частоту путем уменьшения вашего критического пути.

Следующая таблица показывает эффект DistributedPipelining и OutputPipeline параметры.

DistributedPipeliningOutputPipeline, nЭтапыРезультат
'off' (по умолчанию)Не задан (nStages значение по умолчанию 0)HDL Coder не вставляет регистры конвейера.
nStages > 0Кодер вставляет nStages выходные регистры на выходе подсистемы, MATLAB Function блока или диаграммы Stateflow.
'on' Не задан (nStages значение по умолчанию 0)Кодер не вставляет регистры конвейера.
DistributedPipelining не имеет эффекта.
nStages > 0Кодер распределяет nStages регистрируется внутри подсистемы, MATLAB Function блока или диаграммы Stateflow на основе анализа критического пути.

Чтобы добиться дальнейшей оптимизации кода, сгенерированного при распределённой конвейеризации, выполните синхронизацию во время синтеза RTL, если это возможно.

Совет

Выходные данные могут быть в недопустимом состоянии первоначально, если вы вставляете регистры конвейера. Чтобы избежать ошибок испытательного стенда, возникающих из-за начальных недопустимых выборок, отключите проверку выхода для этих выборок. Для получения дополнительной информации смотрите Игнорировать проверку выходных данных (количество выборок).

См. также

DotProductStrategy

Если вы используете блок Product для матричного умножения в проекте, используйте DotProductStrategy для определения способа реализации матричного умножения.

The DotProductStrategy опции перечислены в следующей таблице.

Функции DotProductStrategy ЗначенияОписание
'Fully Parallel' (по умолчанию)

Расширяет операцию матричного умножения на умножители и сумматоры. Для примера, если вы умножаете две матрицы 2x2, то для вычисления результата в реализации используются восемь умножителей и четыре сумматора.

Примечание

Для DotProductStrategy должно быть задано значение 'Fully Parallel' когда вы используете Native Floating Point режим.

'Serial Multiply-Accumulate'

Использует архитектуру Serial блока Multiply-Accumulate для реализации матричного умножения.

В этой архитектуре тактовая частота должна быть быстрее тактовой частоты, заданной в Parallel архитектуре. Тактовую частоту можно увидеть в Сводных данных часов отчета Генерация кода.

'Parallel Multiply-Accumulate'

Использует архитектуру Parallel блока Multiply-Accumulate для реализации матричного умножения.

DSPStyle

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

Для Xilinx® targets, сгенерированный код использует use_dsp атрибут. Для Altera® targets, сгенерированный код использует multstyle атрибут.

The DSPStyle опции перечислены в следующей таблице.

Значение DSPStyleОписание
'none' (по умолчанию)

Не вставляйте атрибут синтеза отображения DSP.

'on'

Вставьте атрибут синтеза, который направляет инструмент синтеза для сопоставления с DSP в оборудовании.

'off'

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

The DSPStyle параметр доступен для следующих блоков:

  • Gain

  • Product

  • Product of Elements с установленной в дереве архитектурой

  • Subsystem

  • Atomic Subsystem

  • Variant Subsystem

  • Enabled Subsystem

  • Triggered Subsystem

  • Model с установленным значением Architecture ModelReference

Поведение при сплющивании иерархии

Если вы задаете выравнивание иерархии для подсистемы, которая также имеет nondefault DSPStyle установка, HDL Coder распространяет DSPStyle установка родительской подсистемы.

Если уплощенная подсистема содержит Gain, Product или Product of Elements блоки, кодер сохраняет их nondefault DSPStyle и заменяет настройки по умолчанию DSPStyle настройки с уплощенной подсистемой DSPStyle настройка.

Атрибуты синтеза в сгенерированном коде

Сгенерированный код для атрибутов синтеза зависит от:

  • Целевой язык

  • DSPStyle значение

  • SynthesisTool значение

В следующей таблице показаны примеры атрибутов синтеза в сгенерированном коде.

Значение DSPStyleЗначение TargetLanguageЗначение SynthesisTool
'Altera Quartus II''Xilinx ISE'
'Xilinx Vivado'
'none''Verilog'

wire signed [32:0] m4_out1;

wire signed [32:0] m4_out1;

'VHDL'

m4_out1 : signal;

m4_out1 : signal;

'on''Verilog'

(* multstyle = "dsp" *) wire signed [32:0] m4_out1;

(* use_dsp = "yes" *) wire signed [32:0] m4_out1;

'VHDL'

attribute multstyle : string ;

attribute multstyle of m4_out1 : signal is "dsp" ;

attribute use_dsp : string ;

attribute use_dsp of m4_out1 : signal is "yes" ;

'off''Verilog'

(* multstyle = "logic" *) wire signed [32:0] m4_out1;

(* use_dsp = "no" *) wire signed [32:0] m4_out1;

'VHDL'

attribute multstyle : string ;

attribute multstyle of m4_out1 : signal is "logic" ;

attribute use_dsp : string ;

attribute use_dsp of m4_out1 : signal is "no" ;

Требование к спецификации атрибута синтеза

Необходимо задать инструмент синтеза при помощи SynthesisTool свойство.

Как задать атрибут синтеза

Чтобы задать атрибут синтеза с помощью диалогового окна HDL Block Properties:

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

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

  3. Для DSPStyle выберите on, off или none.

Чтобы задать атрибут синтеза из командной строки, используйте hdlset_param. Например, предположим, что у вас есть модель, my_model, с подсистемой DUT, my_dut, который содержит a. Блок Gain, my_multiplier. Чтобы вставить атрибут синтеза в карту my_multiplier в DSP введите:

hdlset_param('my_model/my_dut/my_multiplier', 'DSPStyle', 'on')
См. также hdlset_param.

Ограничения для спецификации атрибута синтеза

  • Когда вы задаете nondefault DSPStyle свойство блока, ConstMultiplierOptimization свойство должно быть установлено в 'none'.

  • Входы к компонентам умножения не могут использовать double тип данных.

  • Gain константа не может быть степенью 2.

FlattenHierarchy

FlattenHierarchy позволяет удалить иерархию подсистем из HDL-кода, сгенерированного в проекте.

Настройка FlattenHierarchyОписание
'inherit' (по умолчанию)Используйте настройку выравнивания иерархии родительской подсистемы. Если эта подсистема является подсистемой самого высокого уровня, не выравнивайте.
'on'Выровнять эту подсистему.
'off'Не выравнивайте эту подсистему, даже если родительская подсистема уплощена.

Чтобы выровнять иерархию, вы также должны иметь MaskParameterAsGeneric значение глобального свойства установлено в 'off'. Для получения дополнительной информации смотрите Сгенерировать параметризованный HDL-код из маскированной подсистемы.

Как сглаживать иерархию

Чтобы задать выравнивание иерархии с помощью диалогового окна HDL Block Properties:

  • На вкладке Apps выберите HDL Coder. Появится вкладка HDL Code. Выберите Subsystem и нажмите HDL Block Properties. Для FlattenHierarchy выберите on, off или inherit.

  • Щелкните правой кнопкой мыши по Subsystem и выберите HDL Code > HDL Block Properties. Для FlattenHierarchy выберите on, off или inherit.

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

hdlset_param('my_dut', 'FlattenHierarchy', 'on')
См. также hdlset_param.

Ограничения для сглаживания иерархии

Подсистема не может быть уплощена, если подсистема:

  • A Synchronous Subsystem или использует блок State Control в Synchronous режим.

  • А модель-ссылка реализация.

  • Триггируемая подсистема, когда Использование триггерного сигнала в качестве синхроимпульса включено.

  • Маскированная подсистема, содержащая любое из следующих значений:

    • Автобус.

    • Перечисленный тип данных.

    • Блоки интерполяционной таблицы: 1-D Lookup Table, 2-D Lookup Table, Cosine HDL Optimized, Direct LookupTable (n-D), Prelookup, Sine HDL Optimized, n-D Lookup Table.

    • MATLAB System блок.

    • Блоки Stateflow: Chart, State Transition Table, Sequence Viewer.

    • Блоки с реализацией pass-through или no-op. Смотрите Pass through, No HDL и Cascade Implementations.

Примечание

Эта опция удаляет контуры подсистемы перед генерацией кода. Он не обязательно генерирует HDL-код с полностью плоской иерархией.

InputPipeline

InputPipeline позволяет задать реализацию с входной конвейеризацией для выбранных блоков. В значение параметров указывается количество входа этапов трубопровода (глубина трубопровода) в сгенерированном коде.

Следующий код задает глубину входного конвейера из двух этапов для каждого блока Sum в модели:

sblocks = find_system(gcb, 'BlockType', 'Sum');
for ii=1:length(sblocks),hdlset_param(sblocks{ii},'InputPipeline', 2), end;

Примечание

The InputPipeline установка не имеет никаких эффектов для блоков, не имеющих входа порта.

При генерации кода для регистров конвейера HDL Coder добавляет постфиксную строку к именам входных или выходных регистров конвейера. Строка постфикса по умолчанию _pipe. Чтобы настроить строку постфикса, используйте опцию Pipeline postfix на панели Global Settings / General в панели HDL Code Generation диалогового окна Параметры конфигурации. Кроме того, вы можете передать необходимый постфикс как вектор символов в makehdl свойства PipelinePostfix. Для получения примера смотрите Pipeline postfix.

InstantiateFunctions

Для блока MATLAB Function можно использовать параметр InstantiateFunctions для генерации VHDL® entity или Verilog® module для каждой функции. HDL Coder генерирует код для каждого entity или module в отдельном файле.

Опции InstantiateFunctions для блока MATLAB Function перечислены в следующей таблице.

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

Сгенерируйте код для функций в строке.

'on'

Сгенерируйте entity VHDL или Verilog module для каждой функции и сохраните каждую module или entity в отдельном файле.

Как сгенерировать мгновенный код для функций

Чтобы задать параметр InstantiateFunctions с помощью диалогового окна HDL Block Properties:

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

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

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

Чтобы задать параметр InstantiateFunctions из командной строки, используйте hdlset_param. Например, чтобы сгенерировать мгновенный код для функций в блоке MATLAB Function, myMatlabFcn, в вашей подсистеме DUT, myDUT, введите:

hdlset_param('my_DUT/my_MATLABFcnBlk', 'InstantiateFunctions', 'on')

Сгенерируйте код Inline для конкретных функций

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

Ограничения для генерации кода экземпляра для функций

Программное обеспечение генерирует код в строке, когда:

  • Вызовы функций находятся в пределах условного кода или for циклы.

  • Любая функция вызывается с неконстантной struct вход.

  • Функция имеет состояние, такое как постоянная переменная, и вызывается несколько раз.

  • Существует перечисление где угодно в функции проекта.

InstantiateStages

Для Cascade можно использовать параметр InstantiateStages для генерации VHDL- entity или Verilog module для каждого этапа расчетов. HDL Coder генерирует код для каждого entity или module в отдельном файле.

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

Сгенерируйте каскадные стадии в одной VHDL- entity или Verilog module.

'on'

Сгенерируйте entity VHDL или Verilog module для каждого каскадного этапа и сохраните каждый module или entity в отдельном файле.

LoopOptimization

LoopOptimization позволяет вам транслировать или разворачивать циклы в коде, сгенерированном из блока MATLAB Function. Потоковая передача циклов оптимизирует площадь; цикл оптимизирует скорость.

Примечание

Если вы задаете MATLAB Datapath архитектура блока MATLAB Function, можно только разворачивать циклы. Для потоковой оптимизации циклов можно использовать потоковую оптимизацию, задав StreamingFactor. Смотрите Оптимизации HDL через контур блока MATLAB function с использованием архитектуры MATLAB Datapath.

Настройка LoopOptimizationОписание
'none' (по умолчанию)Не оптимизируйте циклов.
'Unrolling'Раскрутка циклов.
'Streaming'Потоковые циклы.

Как оптимизировать MATLAB Function блок для циклов

Чтобы выбрать оптимизацию цикла с помощью диалогового окна HDL Block Properties:

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

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

  3. Для LoopOptimization выберите none, Unrolling, или Streaming.

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

hdlset_param('my_mlfn', 'LoopOptimization', 'Streaming')
См. также hdlset_param.

Ограничения для MATLAB Function Блока Цикла оптимизации

HDL Coder не может передать цикл, если:

  • Индекс цикла отсчитывается. Индекс цикла должен увеличиться на 1 при каждой итерации.

  • Существует 2 или более вложенных циклов на том же уровне иерархии в другом цикле.

  • Любая конкретная постоянная переменная обновляется как внутри, так и вне цикла.

HDL Coder может транслировать цикл, когда постоянная переменная:

  • Обновлен внутри цикла и считан вне цикла.

  • Считайте в цикле и обновляйте вне цикла.

LUTRegisterResetType

Используйте LUTRegisterResetType параметры блоков для управления синтезом LUT в структуру ROM на FPGA.

Значение LUTRegisterResetTypeОписание
default

Выходной регистр LUT имеет логику сброса по умолчанию. Когда вы генерируете HDL, LUT будет синтезирован как регистры.

none

Выходной регистр LUT не имеет логики сброса. Когда вы генерируете HDL, LUT будет синтезирован как ПЗУ.

Можно задать LUTRegisterResetType для следующих блоков:

  • Gamma Correction

  • Lookup Table

Блок NCO HDL Optimized игнорирует этот параметр.

MapPersistentVarsToRAM

С MapPersistentVarsToRAM параметр реализации, можно использовать основанные на ОЗУ отображения для стойких массивов блока MATLAB Function вместо отображения в регистры.

Настройка MapPersistentVarsToRAMПоведение отображения

off

Постоянные массивы сопоставляются с регистрами в сгенерированном HDL-коде.

on

Переменные стойкого массива сопоставлены с ОЗУ. Ограничения см. в разделе Ограничения отображения ОЗУ.

Ограничения отображения ОЗУ

Когда вы активируете отображение ОЗУ, постоянный массив или определяемый пользователем System object™ частной собственности преобразуется в блок ОЗУ, когда все следующие условия верны:

  • Каждый доступ для чтения или записи предназначен только для одного элемента. Для примера доступ к подматрице и копии массивов не разрешены.

  • Логика расчета адреса не зависит от чтения. Например, расчет адреса чтения или записи с использованием данных, считанных из массива, не разрешено.

  • Постоянные переменные или пользовательские частная собственность системного объекта инициализируются в 0, если они имеют циклическую зависимость. Например, если у вас есть две стойкие переменные, A и B, у вас есть циклическая зависимость, если A зависит от B, и B зависит от A.

  • Если доступ находится в пределах условного оператора, условный оператор использует только простые логические выражения (&&, ||, ~) или реляционные операторы. Например, в следующем коде r1 не сопоставляется с ОЗУ:

    if (mod(i,2) > 0)
        a = r1(u);
    else
        r1(i) = u;
    end 

    Перепишите сложные условия, такие как условия, которые вызывают функции, путем назначения их временным переменным и использования временных переменных в условном операторе. Например, чтобы сопоставить r1 в оперативную память перепишите предыдущий код следующим образом:

    temp = mod(i,2);
    if (temp > 0)
        a = r1(u);
    else
        r1(i) = u;
    end 

  • Значение частной собственности стойкого массива или пользовательского системного объекта зависит от внешних входов.

    Например, в следующем коде bigarray не сопоставляется с ОЗУ, потому что не зависит от u:

    function z = foo(u)
    
    persistent cnt bigarray
    if isempty(cnt)
        cnt = fi(0,1,16,10,hdlfimath);
        bigarray = uint8(zeros(1024,1));
    end
    z = u + cnt;
    idx = uint8(cnt);
    temp = bigarray(idx+1);
    cnt(:) = cnt + fi(1,1,16,0,hdlfimath) + temp;
    bigarray(idx+1) = idx; 

  • RAMSize больше или равно RAMMappingThreshold значение. RAMSize является ли продукт NumElements * WordLength * Complexity.

    • NumElements - количество элементов в массиве.

    • WordLength - количество бит, представляющих тип данных массива.

    • Complexity является 2 для массивов с комплексным базовым типом; 1 в противном случае.

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

RAMMappingThreshold

Значение по умолчанию RAMMappingThreshold - 256. Для изменения порога используйте hdlset_param. Например, следующая команда изменяет порог отображения для sfir_fixed модель до 128 бит:

hdlset_param('sfir_fixed', 'RAMMappingThreshold', 128);

Можно также изменить порог отображения ОЗУ в диалоговом окне Параметры конфигурации. Для получения дополнительной информации смотрите раздел «порог отображения ОЗУ ( биты)» в параметрах отображения ОЗУ».

Пример

Для примера, который показывает, как сопоставить переменные стойкого массива с ОЗУ в блоке MATLAB Function, смотрите Сопоставление ОЗУ С Блоком MATLAB function.

MapToRAM

Используйте MapToRAM для сопоставления интерполяционных таблиц (LUT) с ОЗУ.

когда Simulate RAM Delay включено., MapToRAM свойство отключено для блоков Cosine HDL Optimized и Sine HDL Optimized.

Настройка MapToRAMПоведение отображения
'inherit' (по умолчанию)

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

off

Интерполяционные таблицы блоков (LUT) сопоставлены с логическими срезами в FPGA.

on

Интерполяционные таблицы блоков (LUT) сопоставлены с ОЗУ.

OutputPipeline

OutputPipeline позволяет задать реализацию с выходной конвейеризацией для выбранных блоков. В значение параметров указывается количество выхода этапов трубопровода (глубина трубопровода) в сгенерированном коде.

Следующий код задает глубину выходного конвейера из двух этапов для каждого блока Sum в модели:

sblocks = find_system(gcb, 'BlockType', 'Sum');
for ii=1:length(sblocks),hdlset_param(sblocks{ii},'OutputPipeline', 2), end;

Примечание

The OutputPipeline установка не имеет никаких эффектов для блоков, не имеющих выхода порта.

При генерации кода для регистров конвейера HDL Coder добавляет постфиксную строку к именам входных или выходных регистров конвейера. Строка постфикса по умолчанию _pipe. Чтобы настроить строку постфикса, используйте опцию Pipeline postfix в диалоговом окне Параметров конфигурации, на вкладке HDL Code Generation > Global Settings > General. Также можно использовать PipelinePostfix свойство с makehdl. Для получения примера смотрите Pipeline postfix.

Смотрите также Distributed Pipeline Insertion для блоков MATLAB function.

RAMDirective

RAMDirective позволяет вам указать, хотите ли вы сопоставить блоки оперативной памяти в модели Simulink с распределенными ОЗУ, блоками оперативной памяти или памятью UltraRAM. Когда вы выбираете значение для этой настройки, HDL Coder генерирует ramstyle атрибут в HDL-коде. Этот атрибут задает тип модуля оперативной памяти, который вы хотите использовать инструментом синтеза при выводе блоков оперативной памяти в вашем проекте.

RAMDirective ЗначениеОписание
none (по умолчанию)

Не генерируйте ramstyle атрибут в HDL-коде. Инструмент синтеза определяет тип выводимой ОЗУ для отображения блоков ОЗУ в вашей модели.

distributed

Сгенерируйте атрибут HDL для отображения блоков оперативной памяти в вашей модели с распределенными ОЗУ. Распределенные ОЗУ создаются с помощью LUT. Эти ОЗУ быстрее, но занимают большее количество срезов на FPGA.

Этот код VHDL показывает ramstyle для атрибута задано значение distributed:

 attribute ram_style: string;
 attribute ram_style of ram : signal is "distributed";

Этот код Verilog показывает ramstyle для атрибута задано значение distributed:

(* ram_style = "distributed" *)

block

Сгенерируйте атрибут HDL для отображения блоков ОЗУ в вашей модели, чтобы заблокировать ОЗУ. Блок RAM является выделенным модулем памяти на устройстве FPGA. Количество доступных блочных ОЗУ зависит от устройства FPGA, на которое вы развертываете HDL-код. Размеры блока ОЗУ можно 4kb, 8kb, 16kb, и 32kb.

Чтобы сопоставить ваши блоки оперативной памяти с блокировкой оперативной памяти:

  • Укажите инструмент синтеза. Необходимо использовать устройство Xilinx, содержащее блочные ресурсы оперативной памяти.

    Примечание

    Если целевое устройство не содержит блокированных ОЗУ, инструмент синтеза игнорирует этот атрибут и может вывести ОЗУ как распределенные ОЗУ или срезы.

  • Введите целевую частоту, большую нуля.

Этот код VHDL показывает ramstyle для атрибута задано значение block:

 attribute ram_style: string;
 attribute ram_style of ram : signal is "block";

Этот код Verilog показывает ramstyle для атрибута задано значение block:

(* ram_style = "block" *)

ultra

Сгенерируйте атрибут HDL для отображения блоков оперативной памяти в вашей модели в память UltraRAM. UltraRAM является выделенным блоком памяти на целевом FPGA. Количество доступных модулей памяти UltraRAM зависит от устройства FPGA, на котором вы развертываете HDL-код. Модули UltraRAM больше, чем блоковые RAM, и могут быть такими же большими, как и 500Mb в размере.

Чтобы сопоставить ваши блоки оперативной памяти с UltraRAM:

  • Настройка Xilinx Vivado® как инструмент синтеза. Необходимо нацелить устройство Xilinx, которое содержит ресурсы UltraRAM, такие как Virtex® UltraScale+™.

    Примечание

    Если целевое устройство не содержит память UltraRAM, инструмент синтеза игнорирует этот атрибут и может вывести ОЗУ как распределенные RAM или срезы. Чтобы вместо этого сопоставить блоки ОЗУ с блоками ОЗУ, установите RAMDirective на block.

  • Введите целевую частоту, большую нуля.

  • Блоки оперативной памяти в вашем проекте должны следовать поведению с фиксированным чтением и иметь один интерфейс синхроимпульса. В библиотеке HDL RAMs, кроме блоков Dual Port RAM и Dual Rate Dual Port RAM, можно сопоставить все остальные блоки оперативной памяти с UltraRAM.

  • Блоки ОЗУ не должны иметь заданного начального значения. Когда вы используете блоки RAM System, такие как Single Port RAM System, Specify the RAM initial value должны быть установлены на 0. При сбросе устройства все местоположения памяти в UltraRAM инициализируются в нуль.

Этот код VHDL показывает ramstyle для атрибута задано значение ultra:

 attribute ram_style: string;
 attribute ram_style of ram : signal is "ultra";

Этот код Verilog показывает ramstyle для атрибута задано значение ultra:

(* ram_style = "ultra" *)

Установите RAMDirective для блоков оперативной памяти

В HDL RAMs библиотеке, кроме Dual Rate Dual Port RAM, можно задать RAMDirective свойство для всех других блоков ОЗУ.

Как задать RAMDirective для блока оперативной памяти из диалогового окна HDL Block Properties:

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

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

  3. Для RAMDirective выберите none, distributed, block или ultra.

    Примечание

    Для блока Dual Port RAM вы не можете задать ultra как RAMDirective поскольку блок не имеет фиксированного поведения чтения.

Как задать RAMDirective для блока из командной строки используйте hdlset_param. Для примера задать RAMDirective на ultra для блока Single Port RAM внутри подсистемы, my_dut:

hdlset_param('my_dut/Single Port RAM', 'RAMDirective', 'ultra');
См. также hdlset_param.

ResetType

Используйте ResetType параметры блоков для подавления генерации логики сброса.

Значение ResetTypeОписание
default

Сгенерируйте логику сброса.

none

Не генерируйте логику сброса.

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

Чтобы избежать ошибок испытательного стенда на начальной фазе, определите количество выборок, необходимых для полной загрузки регистров. Затем установите Ignore output data checking (number of samples) опцию соответственно. См. также Ignore output data checking (number of samples) в Испытательный стенд Simulus и Output Parameters.

Можно задать ResetType для следующих блоков:

  • Chart

  • Convolutional Deinterleaver

  • Convolutional Interleaver

  • Delay

  • Delay (DSP System Toolbox™)

  • General Multiplexed Deinterleaver

  • General Multiplexed Interleaver

  • MATLAB Function

  • MATLAB System

  • Memory

  • Tapped Delay

  • Truth Table

  • Unit Delay Enabled

  • Unit Delay

Сброс логики для оптимизации в блоке MATLAB function

Когда вы задаете ResetType none для блока MATLAB Function HDL Coder не генерирует логику сброса для постоянных переменных в MATLAB® код.

Однако, если вы задаете другие оптимизации для блока, кодер может вставить регистры, которые используют логику сброса. Кодер не подавляет генерацию логики сброса для этих регистров. Поэтому, если вы задаете ResetType none наряду с оптимизацией других блоков, ваш сгенерированный код может иметь порт сброса на верхнем уровне.

Как подавить сброс генерации логики

Чтобы подавить генерацию логики сброса для блока, использующего пользовательский интерфейс:

  1. Щелкните правой кнопкой мыши блок и выберите HDL Code > HDL Block Properties.

  2. Для ResetType выберите none.

Чтобы подавить генерацию логики сброса, в командной строке введите:

hdlset_param(path_to_block,'ResetType','none')

Для примера, чтобы подавить генерацию логики для блока Unit Delay, UnitDelay1, в пределах подсистемы, mySubsys, в командной строке введите:

hdlset_param('mySubsys/UnitDelay1','ResetType','none');

Задайте синхронный или асинхронный сброс

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

SerialPartition

Используйте этот параметр в блоках Min/Max, чтобы задать разделы для последовательной каскадной архитектуры. В настройке по умолчанию используется минимальное количество разделов.

Чтобы сгенерировать это
Архитектура...
Установите значение SerialPartition на...
Каскадно-последовательный с явно заданным разбиением[p1 p2 p3...pN]: вектор N целые числа, где N количество последовательных разделов. Каждый элемент вектора задает длину соответствующего раздела. Сумма векторных элементов должна быть равна длине вектора- входным данным. Значения векторных элементов должны быть в порядке убывания, за исключением того, что последние два элемента могут быть равны. Для примера, для входных параметров 8 элементов, разделов [5 3] или [4 2 2] легальны, но разделы [2 2 2 2] или [3 2 3] вызвать ошибку во время генерации кода.
Каскадно-последовательный с автоматически оптимизированным разбиением0

Это свойство также используется для архитектур последовательных фильтров. Для того, как сконфигурировать фильтрующие блоки, смотрите SerialPartition.

SharingFactor

Использование SharingFactor чтобы задать количество функционально эквивалентных ресурсов для сопоставления с одним общим ресурсом. Значение по умолчанию 0. См. Раздел «Совместное использование ресурсов».

SoftReset

Используйте SoftReset параметры блоков, чтобы указать, генерировать ли аппаратную логику синхронного сброса или локальную логику сброса, которая соответствует поведению симуляции Simulink. Это свойство доступно для блока Unit Delay Resettable или Unit Delay Enabled Resettable блока.

Значение SoftResetОписание
off (по умолчанию)

Сгенерируйте локальную логику сброса, которая соответствует поведению симуляции Simulink.

on

Сгенерируйте логику синхронного сброса для блока. Эта опция генерирует код, который более эффективен для синтеза, но не соответствует поведению симуляции Simulink.

Когда SoftReset установлено на 'off'следующий код генерируется для блока Unit Delay Resettable:

always @(posedge clk or posedge reset)
  begin : Unit_Delay_Resettable_process
    if (reset == 1'b1) begin
      Unit_Delay_Resettable_zero_delay <= 1'b1;
      Unit_Delay_Resettable_switch_delay <= 2'b00;
    end
    else begin
      if (enb) begin
        Unit_Delay_Resettable_zero_delay <= 1'b0;
        if (UDR_reset == 1'b1) begin
          Unit_Delay_Resettable_switch_delay <= 2'b00;
        end
        else begin
          Unit_Delay_Resettable_switch_delay <= In1;
        end
      end
    end
  end

assign Unit_Delay_Resettable_1 = 
            (UDR_reset || 
             Unit_Delay_Resettable_zero_delay ? 1'b1 : 1'b0);
assign out0 = (Unit_Delay_Resettable_1 == 1'b1 ? 2'b00 :
            Unit_Delay_Resettable_switch_delay);

Когда SoftReset установлено на 'on'следующий код генерируется для блока Unit Delay Resettable:

always @(posedge clk or posedge reset)
  begin : Unit_Delay_Resettable_process
    if (reset == 1'b1) begin
      Unit_Delay_Resettable_reg <= 2'b00;
    end
    else begin
      if (enb) begin
        if (UDR_reset != 1'b0) begin
          Unit_Delay_Resettable_reg <= 2'b00;
        end
        else begin
          Unit_Delay_Resettable_reg <= In1;
        end
      end
    end
  end

assign out0 = Unit_Delay_Resettable_reg;

StreamingFactor

Количество параллельных путей данных, или векторов, для преобразования в последовательные, скалярные пути данных путем временного мультиплексирования последовательных путей данных и совместного использования аппаратных ресурсов. Значение по умолчанию 0, которое реализует полностью параллельные пути данных. См. также Потоковая передача.

UsePipelines

Можно использовать этот режим с Product блоками в Divide и Reciprocal режимах. Это свойство становится доступным, когда вы устанавливаете архитектуру для блоков равной ShiftAdd. Эта архитектура использует невосстановляющий алгоритм деления, который выполняет несколько операций сдвига и добавления, чтобы вычислить частное. The ShiftAdd архитектура обеспечивает улучшенную точность по сравнению с методом приближения Ньютона-Рафсона.

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

Настройка UsePipelinesПоведение отображения

on (по умолчанию)

Используйте конвейерную реализацию невосстановляющего сдвига и добавьте операцию для блоков Divide и Reciprocal. Эта настройка добавляет больше задержек в ваш проект, но достигает более высокой максимальной тактовой частоты на целевом устройстве FPGA. Количество вставленных трубопроводов совпадает с количеством итераций, которое требуется алгоритму для вычисления факторного или обратного.

off

Используйте непроводящую реализацию невосстановляющего сдвига и добавьте операцию для блоков Divide и Reciprocal. Этот параметр не добавляет задержки в проект. Поскольку деление и обратное являются ресурсоемкими операциями, для достижения более высоких тактовых частот на целевом FPGA установите UsePipelines на on.

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

Как задать UsePipelines для подсистемы из диалогового окна HDL Block Properties:

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

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

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

Как задать UsePipelines для блока из командной строки используйте hdlset_param. Например, чтобы выключить UsePipelines для блока Divide внутри подсистемы, my_dut:

hdlset_param('my_dut/divide', 'UsePipelines', 'off');
См. также hdlset_param.

UseRAM

The UseRAM параметр реализации включает использование основанного на ОЗУ отображения для блока вместо отображения в сдвиг регистр.

Настройка UseRAMПоведение отображения

off

Задержка преобразуется в сдвиг регистр в сгенерированном HDL-коде, кроме одного случая. Для получения дополнительной информации смотрите Эффекты потоковой и распределенной конвейеризации.

on

Задержка преобразуется в двухпортовый блок ОЗУ, когда верны следующие условия:

  • Начальное значение задержки равняется нулю.

  • Блок Delay не имеет внешнего порта сброса или включения.

  • Delay length> 4.

  • Задержка имеет один из следующих наборов числовых и информационных атрибутов type:

    • (a) Действительный скаляр с типом данных без плавающей точки (таким как целое число со знаком, беззнаковое целое число, фиксированная точка или логическое)

    • (b) Комплексный скаляр с вещественными и воображаемыми частями, которые используют тип данных без плавающей точки

    • (c) Вектор, где каждый элемент является либо (a), либо (b)

  • RAMSize больше или равно RAMMappingThreshold значение. RAMSize является ли продукт DelayLength * WordLength * ComplexLength.

    • DelayLength количество задержек, заданное блоком Delay.

    • WordLength количество бит, которые представляют тип данных задержки.

    • ComplexLength 2 для комплексных сигналов; 1 в противном случае.

Если какое-либо условие является ложным, задержка преобразуется в сдвиг регистр в HDL-коде, если только он не сливается с другими задержками, чтобы сопоставить его с одной ОЗУ. Для получения дополнительной информации смотрите Отображение нескольких задержек с ОЗУ.

Этот параметр реализации доступен для блока Delay в дискретной библиотеке Simulink и для блока Delay (DSP System Toolbox) в библиотеке DSP System Toolbox Signal Operations.

Отображение нескольких задержек с ОЗУ

HDL Coder также может объединить несколько задержек равной длины в одну задержку и затем сопоставить объединенную задержку с одной ОЗУ. Эта оптимизация обеспечивает следующие преимущества:

  • Увеличение заполнения одной ОЗУ

  • Совместное использование логики генерации адресов, которая минимизирует дублирование идентичного HDL-кода

  • Отображение задержек с ОЗУ, когда отдельные задержки не удовлетворяют порогу

Следующие правила определяют, можно ли объединить несколько задержек в одну задержку:

  • Задержки должны:

    • Находиться на том же уровне иерархии подсистем.

    • Используйте ту же скомпилированный шаг расчета.

    • Иметь UseRAM установлено на on, или быть сгенерированным потоковой передачей или совместным использованием ресурсов.

    • Иметь то же ResetType setting, который нельзя none.

  • Общий размер слова объединенной задержки не может превышать 128 бит.

  • The RAMSize объединенной задержки больше или равно RAMMappingThreshold значение. RAMSize является ли продукт DelayLength * WordLength * VectorLength * ComplexLength.

    • DelayLength - общее количество задержек.

    • WordLength - количество бит, представляющих тип данных объединенной задержки.

    • VectorLength количество элементов в вектор задержке. VectorLength равен 1 для скалярной задержки.

    • ComplexLength 2 для сложных задержек; 1 в противном случае.

Пример нескольких задержек, Отображения к блочной оперативной памяти

RAMMappingThreshold для следующей модели это 100 бит.

Блоки Delay и Delay1 объединяются и сопоставляются с двухпортовой ОЗУ в сгенерированном HDL-коде, удовлетворяя следующим условиям:

  • Оба блока задержки:

    • Находятся на том же уровне иерархии.

    • Используйте ту же скомпилированный шаг расчета.

    • Иметь UseRAM установлено на on в диалоговом окне свойств блоков.

    • Иметь ту же ResetType настройку default.

  • Общий размер слова объединенной задержки составляет 28 биты, что ниже 128-битного предела.

  • The RAMSize Объединенная задержка составляет 112 биты (4 задержки * 28-битный размер слова), что больше порога отображения 100 бит.

Когда вы генерируете HDL-код для этой модели, HDL Coder генерирует дополнительные файлы, чтобы задать отображение оперативной памяти. Кодер хранит эти файлы в том же исходном месте, что и другие сгенерированные HDL-файлы, например, hdlsrc папка.

Эффекты потоковой и распределенной конвейеризации

Когда UseRAM является off для блока Delay HDL Coder по умолчанию преобразует задержку в сдвиг регистр. Однако кодер меняет UseRAM установка значения on и пытается сопоставить задержку с ОЗУ при следующих условиях:

  • Потоковая передача включена для подсистемы с блоком Delay.

  • Распределённая конвейеризация отключена для подсистемы с блоком Delay.

Предположим, что распределённая конвейеризация включена для подсистемы с блоком Delay.

  • Когда UseRAM является offблок Delay участвует в синхронизации.

  • Когда UseRAM является onблок Delay не участвует в синхронизации. HDL Coder не разбивает задержку, отмеченную для отображения оперативной памяти.

    Рассмотрим подсистему с двумя блоками Delay, тремя блоками Constant и тремя блоками Product:

    Когда UseRAM является on для блока Delay справа эта задержка не участвует в синхронизации.

Следующие сводные данные описывают, пытается ли HDL Coder сопоставить задержку с ОЗУ вместо сдвига регистра.

UseRAM Настройка блока задержкиОптимизация, активированная для подсистемы с блоком задержки
Только распределенный конвейеризацияПотоковая передача толькоКак распределённая конвейеризация, так и потоковая передача
НаДаДаДа
ПрочьНетДа, потому что сопоставление с ОЗУ вместо сдвига регистра может обеспечить экономичную по площади проект.Нет

VariablesToPipeline

Предупреждение

VariablesToPipeline не рекомендуется. Использовать coder.hdl.pipeline вместо этого.

Параметр VariablesToPipeline позволяет вставлять регистр трубопровода на выходе одних или нескольких переменного MATLAB. Задайте список переменных в качестве вектора символов с пространствами, разделяющими переменные.

См. также Выражения Pipeline MATLAB.