Параметры реализации блоков позволяют управлять подробностями кода, созданного для конкретных реализаций блоков. См. раздел Установка и просмотр параметров модели HDL и блока, чтобы узнать, как выбрать реализации блоков и параметры в графическом интерфейсе пользователя или командной строке.
Имена свойств указываются как векторы символов. Тип данных значения свойства зависит от свойства. В этом разделе описывается синтаксис каждого параметра реализации блока и то, как параметр влияет на сгенерированный код.
Свойства блоков HDL блоков библиотеки обрабатываются аналогично параметрам маски. При создании экземпляра библиотечных блоков в модели текущие свойства блока HDL этого блока библиотеки копируются в экземпляры этого блока в модели. Свойства блоков HDL этих экземпляров не синхронизированы со свойствами блоков HDL блока библиотеки. То есть при изменении свойства блока HDL блока библиотеки это изменение не распространяется на экземпляры блока библиотеки, которые уже были добавлены в модель Simulink ®. Если требуется синхронизировать свойства блока HDL блока библиотеки с его экземплярами в модели, создайте подсистему, а затем поместите этот блок в подсистему. Свойства блока HDL блоков, находящихся внутри блока библиотеки, синхронизируются с соответствующими экземплярами в модели.
Предположим, что библиотека содержит блок подсистемы с архитектурой HDL, равным Module. При создании экземпляра этого блока в модели экземпляр блока использует Module в качестве архитектуры HDL. При изменении архитектуры HDL блока «Подсистема» в библиотеке на BlackBox, существующие экземпляры этого блока подсистемы в модели по-прежнему используют Module в качестве архитектуры HDL. При добавлении экземпляров блока «Подсистема» из библиотеки модели новые экземпляры блока получают копию текущих свойств блока HDL и, следовательно, используют BlackBox в качестве архитектуры HDL. Если требуется синхронизировать архитектуру HDL блока подсистемы в библиотеке с ее экземплярами в модели, создайте подсистему-оболочку с архитектурой HDL, которая требуется внутри этой подсистемы.
AdaptivePipelining параметр подсистемы позволяет задать адаптивное конвейерирование в подсистеме в модели.
| Настройка адаптивной прокладки трубопроводов | Описание |
|---|---|
'inherit' (по умолчанию) | Используйте настройку адаптивной конвейеризации родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, используйте параметр адаптивной конвейеризации для модели. |
'on' | Вставьте адаптивные трубопроводы для этой подсистемы. |
'off' | Не вставляйте адаптивные трубопроводы для этой подсистемы, даже если в родительской подсистеме включена адаптивная конвейерная обработка. |
Чтобы отключить адаптивную конвейерную обработку для подсистемы в модели, задайте параметр адаптивной конвейерной обработки. AdaptivePipeliningКому 'off' для этой подсистемы.
Сведения о настройке адаптивной конвейеризации на уровне модели см. в разделе Адаптивная конвейеризация.
Чтобы задать адаптивную конвейерную обработку для подсистемы в диалоговом окне «Свойства блока HDL»:
Щелкните правой кнопкой мыши подсистему и выберите «Код HDL» > «Свойства блока HDL».
Для параметра «Pipelining» выберите «inherit», «on» или «off».
Чтобы задать адаптивное конвейерирование для подсистемы из командной строки, используйте hdlset_param. Например, чтобы отключить адаптивную конвейерную обработку для подсистемы, my_dut:
hdlset_param('my_dut', 'AdaptivePipelining', 'off')
hdlset_param. BalanceDelays параметр подсистемы позволяет установить балансировку задержки в подсистеме в модели.
| Параметр BalureDelays | Описание |
|---|---|
'inherit' (по умолчанию) | Используйте настройку балансировки задержки родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, используйте настройку балансировки задержки для модели. |
'on' | Сбалансировать задержки для этой подсистемы. |
'off' | Не балансируйте задержки для этой подсистемы, даже если для родительской подсистемы включена балансировка задержек. |
Чтобы отключить балансировку задержки для любой подсистемы в модели, необходимо задать параметр балансировки задержки на уровне модели. BalanceDelaysКому 'off'. Когда в модели включена балансировка задержки, настройка балансировки задержки для отдельных подсистем игнорируется.
Сведения о настройке балансировки задержки на уровне модели см. в разделе Задержки балансировки.
Чтобы задать балансировку задержки для подсистемы с помощью диалогового окна Свойства блока HDL (HDL Block Properties), выполните следующие действия.
Щелкните правой кнопкой мыши подсистему.
Выберите «Код HDL» > «Свойства блока HDL».
Для параметра «Задержки» выберите значение inherit, on или off.
Чтобы установить балансировку задержки для подсистемы из командной строки, используйте hdlset_param. Например, чтобы отключить балансировку задержки для подсистемы, my_dut:
hdlset_param('my_dut', 'BalanceDelays', 'off')
hdlset_param. ClockRatePipelining параметр подсистемы позволяет установить конвейер тактовой частоты в подсистеме в модели.
| Настройка конвейерной синхронизации | Описание |
|---|---|
'inherit' (по умолчанию) | Используйте настройку конвейеризации тактовой частоты родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, используйте для модели настройку конвейеризации тактовой частоты. |
'on' | Вставьте трубопроводы тактовой частоты для этой подсистемы. |
'off' | Не вставляйте конвейеры тактовой частоты для этой подсистемы, даже если в родительской подсистеме включена конвейерная передача тактовой частоты. |
Чтобы отключить конвейерную обработку тактовой частоты для подсистемы в модели, установите параметр конвейерной обработки тактовой частоты. ClockRatePipeliningКому 'off' для этой подсистемы.
Сведения о настройке конвейеризации тактовой частоты на уровне модели см. в разделе Конвейеризация тактовой частоты.
Чтобы установить конвейер тактовой частоты для подсистемы с помощью диалогового окна Свойства блока HDL (HDL Block Properties), выполните следующие действия.
Щелкните правой кнопкой мыши подсистему.
Выберите «Код HDL» > «Свойства блока HDL».
Для ClockRatePipelining выберите inherit, on или off.
Для установки конвейера тактовой частоты для подсистемы из командной строки используйте команду hdlset_param. Например, чтобы отключить конвейерную обработку тактовой частоты для подсистемы, my_dut:
hdlset_param('my_dut', 'ClockRatePipelining', 'off')
hdlset_param.При использовании блоков мультипортового коммутатора используйте CodingStyle параметр, определяющий необходимость создания кода HDL с инструкциями if-else или case. По умолчанию HDL Coder™ генерирует операторы if-else. Если в модели имеется несколько блоков мультипортового коммутатора, можно указать другой CodingStyle для каждого блока.
| Настройка CodingStyle | Описание |
|---|---|
'ifelse_stmt'(По умолчанию) | Создайте инструкции if-else в коде Verilog или when-else в коде VHDL для блока мультипортового коммутатора. |
'case_stmt' | Создание инструкций case в коде Verilog или case-when в коде VHDL для блока мультипортового коммутатора. |
Чтобы задать стиль для многопортового коммутатора с помощью диалогового окна «Свойства блока HDL», выполните следующие действия.
Щелкните правой кнопкой мыши блок многопортового коммутатора.
Выберите «Код HDL» > «Свойства блока HDL».
Для параметра «Стиль» выберите ifelse_stmt или case_stmt.
Чтобы увидеть CodingStyle указанный для подсистемы из командной строки, используйте hdlget_param. Например, для просмотра настроек, заданных для блока мультипортового коммутатора в подсистеме, my_dut:
hdlget_param('my_dut/Multiport Switch', 'CodingStyle')
ans =
'case_stmt'hdlset_param. ConstMultiplierOptimization параметр реализации позволяет указать использование канонической цифры со знаком (CSD) или факторизованных оптимизаций CSD для обработки операций множителя коэффициента в создаваемом коде.
В следующей таблице показаны ConstMultiplierOptimization значения параметров.
| Параметр ConstMultiplierOptimization | Описание |
|---|---|
'none'(По умолчанию) | По умолчанию кодер HDL не выполняет оптимизацию CSD или FCSD. Код, генерируемый для блока усиления, сохраняет операции умножителя. |
'CSD' | При указании этой опции созданный код уменьшает область, используемую моделью, при сохранении или увеличении тактовой частоты с использованием методов канонических цифр со знаком (CSD). CSD заменяет операции умножения операциями сложения и вычитания. CSD минимизирует количество операций сложения, необходимых для постоянного умножения, путем представления двоичных чисел с минимальным количеством ненулевых цифр. |
'FCSD' | Эта опция использует факторизованные методы CSD (FCSD), которые заменяют операции умножения операциями сдвига и добавления/вычитания для определенных факторов операндов. Эти факторы обычно являются простыми, но также могут быть числом, близким к степени 2, что благоприятствует уменьшению площади. Эта опция позволяет добиться большего сокращения площади, чем CSD, за счет снижения тактовой частоты. |
'auto' | При указании этой опции кодер HDL выбирает между оптимизацией CSD или FCSD. Кодер выбирает оптимизацию, которая дает наиболее эффективную реализацию, основываясь на количестве требуемых сумматоров. При указании |
ConstMultiplierOptimization параметр доступен для следующих блоков:
Выгода
Диаграмма Stateflow ®
Таблица правды
Функция MATLAB
Система MATLAB
Используйте ConstrainedOutputPipeline параметр для задания неотрицательного количества регистров, размещаемых на выходе блока.
Кодер HDL перемещает существующие задержки в конструкции, чтобы попытаться выполнить ограничение. Новые регистры не добавляются. Если число регистров меньше, чем требуется кодеру для удовлетворения вашего ограничения, кодер сообщает разницу между количеством требуемых и фактических выходных регистров. Можно добавить задержки в конструкцию с помощью конвейера ввода или вывода.
Распределенная конвейерная обработка не перераспределяет регистры, указанные при ограниченной конвейерной обработке выходных данных.
Чтобы задать конвейерный вывод с ограничениями для блока с помощью графического интерфейса пользователя, выполните следующие действия.
Щелкните правой кнопкой мыши блок и выберите «Код HDL» > «Свойства блока HDL».
Для параметра ConstrainedOutputPipeline введите необходимое количество регистров на выходных портах.
Чтобы задать конвейерный вывод с ограничениями, в командной строке введите:
hdlset_param(path_to_block,
'ConstrainedOutputPipeline', number_of_output_registers)subsys, в вашей модели, mymodel, введите:hdlset_param('mymodel/subsys','ConstrainedOutputPipeline', 6)
DistributedPipelining параметр включает распределение регистров трубопроводов, оптимизацию скорости, которая позволяет увеличить тактовую частоту за счет уменьшения критического пути.
В следующей таблице показан эффект DistributedPipelining и OutputPipeline параметры.
| DistributedPipelining | OutputPipeline, nЭтапы | Результат |
|---|---|---|
'off' (по умолчанию) | Не указано (nStages по умолчанию 0) | Кодер HDL не вставляет регистры трубопроводов. |
nStages > 0 | Вставки кодера nStages выходные регистры на выходе подсистемы, функционального блока MATLAB или диаграммы потока состояний. | |
'on'
| Не указано (nStages по умолчанию 0) | Кодер не вставляет регистры конвейера.DistributedPipelining не имеет эффекта. |
nStages > 0 | Кодер распределяет nStages регистрируется в подсистеме, функциональном блоке MATLAB или диаграмме потока состояний на основе анализа критического пути. |
Для достижения дальнейшей оптимизации кода, генерируемого с помощью распределенной конвейерной обработки, выполните, по возможности, ресинхронизацию во время синтеза RTL.
Совет
При вставке регистров конвейера выходные данные первоначально могут находиться в недопустимом состоянии. Во избежание ошибок тестового стенда, возникающих в результате начальных неверных выборок, отключите проверку выходных данных для этих выборок. Дополнительные сведения см. в разделе Игнорирование проверки выходных данных (количество выборок).
При использовании блока Product для умножения матрицы в конструкции используйте DotProductStrategy для указания способа реализации умножения матрицы.
DotProductStrategy перечислены в следующей таблице.
| Ценность DotProductStrategy | Описание |
|---|---|
'Fully Parallel' (по умолчанию) | Расширяет операцию умножения матрицы на множители и сумматоры. Например, при умножении двух матриц 2x2 реализация использует восемь умножителей и четыре сумматора для вычисления результата. Примечание Для DotProductStrategy должно быть установлено значение |
'Serial Multiply-Accumulate' | Использует последовательную архитектуру блока умножения-накопления для реализации умножения матриц. В этой архитектуре тактовая частота должна быть быстрее тактовой частоты, указанной в параллельной архитектуре. Тактовая частота отображается в сводной информации о тактовых сигналах отчета по генерации кода. |
'Parallel Multiply-Accumulate' | Для реализации матричного умножения используется параллельная архитектура блока умножения-накопления. |
DSPStyle позволяет создать код, включающий атрибуты синтеза для отображения множителя в проекте. Можно выбрать, следует ли сопоставлять множители определенного блока с DSP или логикой в аппаратном обеспечении.
Для целей Xilinx ® созданный код использует use_dsp атрибут. Для целевых объектов Altera ® созданный код использует multstyle атрибут.
DSPStyle перечислены в следующей таблице.
| Значение DSPStyle | Описание |
|---|---|
'none' (по умолчанию) | Не вставляйте атрибут синтеза сопоставления DSP. |
'on' | Вставьте атрибут synthesis, который направляет средство synthesis для сопоставления с DSP в аппаратном обеспечении. |
'off' | Вставьте атрибут synthesis, который указывает инструменту synthesis для сопоставления с логикой в аппаратном обеспечении. |
DSPStyle параметр доступен для следующих блоков:
Выгода
Продукт
Для продукта элементов с архитектурой установлено дерево
Подсистема
Атомная подсистема
Вариационная подсистема
Включенная подсистема
Срабатывающая подсистема
Модель с архитектурой, для которой установлено значение ModelReference
При задании сведения иерархии для подсистемы, которая также имеет значение, отличное от значения по умолчанию DSPStyle установка, кодер HDL распространяет DSPStyle установка в родительскую подсистему.
Если распрямленная подсистема содержит блоки Gain, Product или Product of Elements, кодер сохраняет их по умолчанию DSPStyle и заменяет значения по умолчанию DSPStyle настройки с распрямленной подсистемой DSPStyle установка.
Созданный код для атрибутов синтеза зависит от:
Целевой язык
DSPStyle стоимость
SynthesisTool стоимость
В следующей таблице приведены примеры атрибутов синтеза в сгенерированном коде.
| Значение DSPStyle | Значение TargetLanguage | Стоимость SynthesisTool | |
|---|---|---|---|
'Altera Quartus II' | 'Xilinx ISE''Xilinx Vivado' | ||
'none' | 'Verilog' |
|
|
'VHDL' |
|
| |
'on' | 'Verilog' |
|
|
'VHDL' |
|
| |
'off' | 'Verilog' |
|
|
'VHDL' |
|
| |
Необходимо указать инструмент синтеза с помощью SynthesisTool собственность.
Чтобы задать атрибут синтеза с помощью диалогового окна Свойства блока HDL (HDL Block Properties), выполните следующие действия.
Щелкните правой кнопкой мыши на блоке.
Выберите «Код HDL» > «Свойства блока HDL».
Для DSPStyle выберите on, off или none.
Чтобы указать атрибут синтеза из командной строки, используйте hdlset_param. Например, предположим, что у вас есть модель, my_model, с подсистемой DUT, my_dut, который содержит блок усиления, my_multiplier. Вставка атрибута синтеза для сопоставления my_multiplier в DSP введите:
hdlset_param('my_model/my_dut/my_multiplier', 'DSPStyle', 'on')
hdlset_param.При указании значения по умолчанию DSPStyle свойство block, ConstMultiplierOptimization свойство должно иметь значение 'none'.
Входные данные для компонентов множителя не могут использовать double тип данных.
Постоянная усиления не может быть степенью 2.
FlattenHierarchy позволяет удалить иерархию подсистем из кода HDL, созданного на основе проекта.
| Настройка FlattenHierarchy | Описание |
|---|---|
'inherit' (по умолчанию) | Используйте параметр выравнивания иерархии родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, не выравнивайте. |
'on' | Выровнять эту подсистему. |
'off' | Не выравнивайте эту подсистему, даже если родительская подсистема выровнена. |
Чтобы выровнять иерархию, необходимо также иметь MaskParameterAsGeneric глобальное свойство имеет значение 'off'. Дополнительные сведения см. в разделе Создание параметризованного кода HDL из маскированной подсистемы.
Чтобы задать сведение иерархии с помощью диалогового окна Свойства блока HDL (HDL Block Properties), выполните следующие действия.
На вкладке Приложения выберите Кодер HDL. Появится вкладка Код HDL (HDL Code). Выберите подсистему и нажмите Свойства блока HDL. Для параметра FlattenHierarchy выберите on, off или inherit.
Щелкните правой кнопкой мыши подсистему и выберите HDL Code > HDL Block Properties. Для параметра FlattenHierarchy выберите on, off или inherit.
Чтобы задать сведение иерархии из командной строки, используйте hdlset_param. Например, чтобы включить сведение иерархии для подсистемы, my_dut:
hdlset_param('my_dut', 'FlattenHierarchy', 'on')
hdlset_param.Невозможно выровнять подсистему, если подсистема:
Синхронная подсистема или использует блок управления состоянием в Synchronous режим.
Эталонная реализация модели.
Триггерная подсистема при включении триггерного сигнала.
Маскированная подсистема, содержащая следующие элементы:
Автобус.
Перечисляемый тип данных.
Блоки таблиц подстановок: таблица подстановок 1-D, таблица подстановок 2-D, оптимизированная косинусная ЛПВП, таблица прямых подстановок (n-D), предварительная подстановка, оптимизированная синусоидальная ЛПВП, таблица подстановок n-D.
Блок системы MATLAB.
Блоки потока состояний: Диаграмма, Таблица перехода состояний, Средство просмотра последовательностей.
Блоки с реализацией сквозной передачи или без операции. См. разделы Сквозные, Без HDL и Каскадные реализации.
Примечание
Эта опция удаляет границы подсистемы перед созданием кода. Он не обязательно создает код HDL с полностью плоской иерархией.
InputPipeline позволяет задать реализацию с конвейерированием ввода для выбранных блоков. Значение параметра определяет количество входных ступеней трубопровода (глубина трубопровода) в создаваемом коде.
Следующий код задает глубину входного трубопровода в два этапа для каждого блока суммы в модели.
sblocks = find_system(gcb, 'BlockType', 'Sum');
for ii=1:length(sblocks),hdlset_param(sblocks{ii},'InputPipeline', 2), end;
Примечание
InputPipeline не влияет на блоки, не имеющие входного порта.
При генерации кода для регистров конвейера кодер HDL добавляет строку постфикса к именам регистров входного или выходного конвейера. Строка постфикса по умолчанию: _pipe. Чтобы настроить строку постфикса, используйте опцию Постфикс конвейера (Pipeline postfix) на панели Глобальные настройки (Global Settings )/Общие (General) на панели Создание кода HDL (HDL Code Generation) диалогового окна Параметры конфигурации (Configuration Parameters). Кроме того, можно передать требуемый постфикс в виде символьного вектора в makehdl собственность PipelinePostfix. Пример см. в разделе Постфикс трубопровода.
Для блока MATLAB Function можно использовать параметр InstantiateFunctions для создания VHDL ®entity или Verilog ®module для каждой функции. Кодер HDL генерирует код для каждого entity или module в отдельном файле.
Опции InstantiateFunctions для блока MATLAB Function перечислены в следующей таблице.
| Настройка функций InstantiateFunctions | Описание |
|---|---|
'off' (по умолчанию) | Создание кода для встроенных функций. |
'on' | Создание VHDL |
Чтобы задать параметр InstantiateFunctions с помощью диалогового окна Свойства блока HDL (HDL Block Properties), выполните следующие действия.
Щелкните правой кнопкой мыши функциональный блок MATLAB.
Выберите «Код HDL» > «Свойства блока HDL».
Для InstantiateFunctions выберите on.
Чтобы задать параметр InstantiateFunctions из командной строки, используйте hdlset_param. Например, для создания кода с возможностью создания экземпляра для функций в блоке MATLAB Function, myMatlabFcn, в вашей подсистеме DUT, myDUT, введите:
hdlset_param('my_DUT/my_MATLABFcnBlk', 'InstantiateFunctions', 'on')Если требуется создать код с возможностью создания экземпляров для одних функций, но не для других, включите параметр, чтобы создать код с возможностью создания экземпляров для функций и используйте coder.inline. Посмотрите coder.inline для получения подробной информации.
Программное обеспечение генерирует код «на лету», когда:
Вызовы функций находятся в условном коде или for петли.
Любая функция вызывается с несогласованным struct вход.
Функция имеет состояние, такое как постоянная переменная, и вызывается несколько раз.
В любом месте функции проектирования имеется перечисление.
Для Cascade для создания VHDL можно использовать параметр InstantiateStages entity или Verilog module для каждого этапа вычислений. Кодер HDL генерирует код для каждого entity или module в отдельном файле.
| Параметр InstantiateStages | Описание |
|---|---|
'off' (по умолчанию) | Генерация каскадных этапов в одном VHDL |
'on' | Создание VHDL |
LoopOptimization позволяет выполнять потоковую передачу или разворачивать циклы в коде, сгенерированном из функционального блока MATLAB. Петлевая потоковая передача оптимизирует для области; разворот цикла оптимизирует скорость.
Примечание
При указании MATLAB Datapath архитектура блока MATLAB Function позволяет разматывать только циклы. Для потоковой обработки циклов можно использовать потоковую оптимизацию, указав StreamingFactor. См. раздел Оптимизация HDL по границе функционального блока MATLAB с использованием архитектуры Datapath MATLAB.
| Параметр LoopOptimization | Описание |
|---|---|
'none' (по умолчанию) | Не оптимизируйте петли. |
'Unrolling' | Разматывание контуров. |
'Streaming' | Контуры потока. |
Чтобы выбрать оптимизацию цикла с помощью диалогового окна «Свойства блока HDL»:
Щелкните правой кнопкой мыши функциональный блок MATLAB.
Выберите «Код HDL» > «Свойства блока HDL».
Для параметра «LoopOptimization» выберите none, Unrolling, или Streaming.
Чтобы выбрать оптимизацию цикла из командной строки, используйте hdlset_param. Например, чтобы включить потоковую передачу цикла для функционального блока MATLAB, my_mlfn:
hdlset_param('my_mlfn', 'LoopOptimization', 'Streaming')
hdlset_param.Кодер HDL не может выполнять потоковую передачу цикла, если:
Индекс цикла отсчитывается вниз. Индекс цикла должен увеличиваться на 1 в каждой итерации.
Существует 2 или более вложенных циклов на том же уровне иерархии в пределах другого цикла.
Любая конкретная постоянная переменная обновляется как внутри, так и вне цикла.
Кодер HDL может выполнять потоковую передачу цикла, если постоянная переменная:
Обновление внутри цикла и чтение за его пределами.
Считывание в цикле и обновление за его пределами.
Используйте LUTRegisterResetType параметр блока для управления синтезом LUT в структуру ROM на FPGA.
| Значение LUTRegisterResetType | Описание |
|---|---|
default | Выходной регистр LUT имеет логику сброса по умолчанию. При генерации HDL LUT будет синтезироваться в виде регистров. |
none | Выходной регистр LUT не имеет логики сброса. При генерации HDL LUT будет синтезироваться как ПЗУ. |
Можно указать LUTRegisterResetType для следующих блоков:
Гамма-коррекция
Таблица подстановки
Блок NCO HDL Optimized игнорирует этот параметр.
С помощью MapPersistentVarsToRAM параметр реализации, можно использовать отображение на основе ОЗУ для постоянных массивов блока MATLAB Function вместо отображения на регистры.
| Настройка MapTalkVarsToRAM | Поведение отображения |
|---|---|
| Постоянные массивы отображаются в регистры в сгенерированном коде HDL. |
| Постоянные переменные массива сопоставляются с оперативной памятью. Ограничения см. в разделе Ограничения сопоставления ОЗУ. |
При включении сопоставления ОЗУ постоянный массив или определяемое пользователем свойство System object™ private сопоставляется с блочной ОЗУ при выполнении всех следующих условий:
Каждый доступ для чтения или записи предназначен только для одного элемента. Например, не допускается доступ к подматрице и копирование массива.
Логика вычисления адреса не зависит от чтения. Например, вычисление адреса чтения или записи с использованием данных, считанных из массива, не допускается.
Постоянные переменные или пользовательские свойства private объекта System инициализируются как 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 Значение частного свойства постоянного массива или определяемого пользователем объекта System зависит от внешних входных данных.
Например, в следующем коде: 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 в противном случае.
Если какое-либо из вышеперечисленных условий имеет значение false, то постоянный массив или определяемое пользователем свойство private объекта System сопоставляется с регистром в коде HDL.
Значение по умолчанию RAMMappingThreshold 256. Чтобы изменить пороговое значение, используйте hdlset_param. Например, следующая команда изменяет порог отображения для sfir_fixed модель до 128 бит:
hdlset_param('sfir_fixed', 'RAMMappingThreshold', 128);
Можно также изменить порог отображения ОЗУ в диалоговом окне «Параметры конфигурации». Дополнительные сведения см. в разделе «Пороговое значение (биты) отображения ОЗУ» раздела «Параметры отображения ОЗУ».
Пример отображения переменных постоянного массива в RAM в функциональном блоке MATLAB см. в разделе Отображение RAM с функциональным блоком MATLAB.
Используйте MapToRAM для сопоставления таблиц поиска (LUT) с оперативной памятью.
если включена функция «Simulate RAM Delay», то MapToRAM отключено для блоков «Оптимизация косинусного HDL» и «Оптимизация синусоидального HDL».
| Настройка MapToRAM | Поведение отображения |
|---|---|
'inherit' (по умолчанию) | Используйте настройку адаптивной конвейеризации родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, используйте параметр адаптивной конвейеризации для модели. |
| Таблицы поиска блоков (LUT) сопоставляются с логическими срезами в FPGA. |
| Таблицы поиска блоков (LUT) сопоставляются с оперативной памятью. |
OutputPipeline позволяет указать реализацию с конвейерированием вывода для выбранных блоков. Значение параметра определяет количество выходных ступеней трубопровода (глубина трубопровода) в создаваемом коде.
Следующий код задает глубину выходного трубопровода в два этапа для каждого блока суммы в модели.
sblocks = find_system(gcb, 'BlockType', 'Sum');
for ii=1:length(sblocks),hdlset_param(sblocks{ii},'OutputPipeline', 2), end;
Примечание
OutputPipeline не влияет на блоки, не имеющие выходного порта.
При генерации кода для регистров конвейера кодер HDL добавляет строку постфикса к именам регистров входного или выходного конвейера. Строка постфикса по умолчанию: _pipe. Чтобы настроить строку постфикса, используйте опцию Постфикс трубопровода (Pipeline postfix) в диалоговом окне Параметры конфигурации (Configuration Parameters) на вкладке Создание кода HDL (HDL Code Generation) > Глобальные настройки (Global Settings) > Общие (General). Кроме того, можно использовать PipelinePostfix свойство с makehdl. Пример см. в разделе Постфикс трубопровода.
См. также раздел Вставка распределенного конвейера для функциональных блоков MATLAB.
RAMDirective позволяет указать, требуется ли сопоставлять блоки ОЗУ в модели Simulink с распределенными RAM, блоками RAM или памятью UltraRAM. При выборе значения для этого параметра кодер HDL генерирует ramstyle атрибут в коде HDL. Этот атрибут указывает тип памяти ОЗУ, который должен использоваться средством синтеза при выводе блоков ОЗУ в проекте.
| RAMDirective Value (RAMDirect | Описание |
|---|---|
none (по умолчанию) | Не создавать |
distributed | Создайте атрибут HDL для сопоставления блоков ОЗУ в модели с распределенными RAM. Распределенные RAM создаются с помощью LUT. Эти RAM быстрее, но занимают большее количество фрагментов LUT в FPGA. Этот код VHDL показывает attribute ram_style: string; attribute ram_style of ram : signal is "distributed"; Этот код Verilog показывает (* ram_style = "distributed" *) |
block | Создайте атрибут HDL для отображения блоков ОЗУ в модели в блоки RAM. Блок ОЗУ - это выделенный блок памяти на устройстве FPGA. Количество доступных блоков RAM зависит от устройства FPGA, на котором развертывается код HDL. Размеры блоков RAM могут быть Чтобы сопоставить блоки ОЗУ с блоками ОЗУ, выполните следующие действия.
Этот код VHDL показывает attribute ram_style: string; attribute ram_style of ram : signal is "block"; Этот код Verilog показывает (* ram_style = "block" *) |
ultra | Создайте атрибут HDL для сопоставления блоков ОЗУ в модели с памятью UltraRAM. UltraRAM - выделенный блок памяти на целевом FPGA. Количество доступных модулей памяти UltraRAM зависит от устройства FPGA, на котором развертывается код HDL. Блоки UltraRAM больше, чем блочные RAM, и могут быть такими большими, как Чтобы сопоставить блоки ОЗУ с UltraRAM, выполните следующие действия.
Этот код VHDL показывает attribute ram_style: string; attribute ram_style of ram : signal is "ultra"; Этот код Verilog показывает (* ram_style = "ultra" *) |
В библиотеке RAM HDL, за исключением двухскоростной двухпортовой оперативной памяти, можно указать RAMDirective для всех остальных блоков ОЗУ.
Установить RAMDirective для блока ОЗУ в диалоговом окне Свойства блока HDL (HDL Block Properties):
Щелкните правой кнопкой мыши блок ОЗУ.
Выберите «Код HDL» > «Свойства блока HDL».
Для RAMDirective выберите none, distributed, block или ultra.
Примечание
Для двухпортового блока ОЗУ нельзя указать ultra в качестве RAMDirective поскольку блок не имеет фиксированного поведения чтения.
Установить RAMDirective для блока из командной строки, используйте hdlset_param. Например, для установки RAMDirective кому ultra для однопортового блока ОЗУ внутри подсистемы, my_dut:
hdlset_param('my_dut/Single Port RAM', 'RAMDirective', 'ultra');
hdlset_param.Используйте ResetType параметр блока для подавления генерации логики сброса.
| Значение ResetType | Описание |
|---|---|
default | Создать логику сброса. |
none | Не создавайте логику сброса. Сброс не применяется к сгенерированным регистрам. Следовательно, несовпадения между Simulink и сгенерированным кодом возникают для некоторого числа выборок во время начальной фазы, когда регистры загружены не полностью. Во избежание ошибок тестового стенда на начальном этапе определите количество выборок, необходимых для полной загрузки регистров. Затем установите опцию Игнорировать проверку выходных данных (количество выборок) соответствующим образом. См. также раздел Игнорирование проверки выходных данных (количество выборок) в параметрах стимула и выходного сигнала испытательного стенда. |
Можно указать ResetType для следующих блоков:
Диаграмма
Сверточный обращенный перемежитель
Сверточный перемежитель
Задержка
Задержка (Toolbox™ системы DSP)
Общий мультиплексный обращенный перемежитель
Общий мультиплексный перемежитель
Функция MATLAB
Система MATLAB
Память
Задержка с отводом
Таблица правды
Единичная задержка включена
Единичная задержка
При установке для ResetType значения none для функционального блока MATLAB кодер HDL не генерирует логику сброса для постоянных переменных в коде MATLAB ® .
Однако если задать другие оптимизации для блока, кодер может вставить регистры, использующие логику сброса. Кодер не подавляет генерацию логики сброса для этих регистров. Поэтому, если для ResetType задано значение none наряду с другими оптимизациями блоков созданный код может иметь порт сброса на верхнем уровне.
Чтобы подавить генерацию логики сброса для блока с помощью пользовательского интерфейса:
Щелкните правой кнопкой мыши блок и выберите «Код HDL» > «Свойства блока HDL».
Для параметра ResetType выберите none.
Для подавления генерации логики сброса в командной строке введите:
hdlset_param(path_to_block,'ResetType','none')
Например, чтобы подавить генерацию логики сброса для блока единичной задержки, UnitDelay1, внутри подсистемы, mySubsys, в командной строке введите:
hdlset_param('mySubsys/UnitDelay1','ResetType','none');
Чтобы указать синхронный или асинхронный сброс, используйте ResetType параметр уровня модели. Дополнительные сведения см. в разделе Сброс типа в разделе Сброс настроек и параметров.
Используйте этот параметр в блоках Min/Max, чтобы указать разделы для последовательной каскадной архитектуры. По умолчанию используется минимальное число разделов.
| Создание этого Архитектура... | Задайте для параметра SerurePartition значение... |
|---|---|
| Каскадно-последовательный с явно указанным разбиением | [p1 p2 p3...pN]: вектор N целые числа, где N - количество последовательных разделов. Каждый элемент вектора определяет длину соответствующей секции. Сумма элементов вектора должна быть равна длине вектора входных данных. Значения векторных элементов должны быть в порядке убывания, за исключением двух последних элементов, которые могут быть равны. Например, для ввода 8 элементов разделы [5 3] или [4 2 2] являются законными, но разделы [2 2 2 2] или [3 2 3] создать ошибку во время генерации кода. |
| Каскадный последовательный с автоматически оптимизированным разделением | 0 |
Это свойство также используется для архитектур последовательного фильтра. Сведения о настройке блоков фильтров см. в разделе Раздел фильтра.
Использовать SharingFactor для указания количества функционально эквивалентных ресурсов для сопоставления с одним общим ресурсом. Значение по умолчанию - 0. См. раздел Общий доступ к ресурсам.
Используйте SoftReset параметр block указывает, следует ли создавать аппаратную логику синхронного сброса или локальную логику сброса, соответствующую моделирующему поведению Simulink. Это свойство доступно для блока с возможностью сброса единичной задержки или блока с возможностью сброса единичной задержки.
| Значение SoftReset | Описание |
|---|---|
off (по умолчанию) | Создайте локальную логику сброса, соответствующую моделируемому поведению Simulink. |
on | Создайте логику синхронного сброса для блока. Этот параметр создает код, который более эффективен для синтеза, но не соответствует моделируемому поведению Simulink. |
Когда SoftReset установить в значение 'off'для блока с возможностью сброса единичной задержки создается следующий код:
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'для блока с возможностью сброса единичной задержки создается следующий код:
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;
Количество параллельных путей данных, или векторов, для преобразования в последовательные скалярные пути данных путем временного мультиплексирования последовательных путей данных и совместного использования аппаратных ресурсов. По умолчанию используется значение 0, которое реализует полностью параллельные пути данных. См. также Потоковая передача.
Этот режим можно использовать с блоками изделия в режимах «Разделить» и «Взаимное». Это свойство становится доступным при установке архитектуры HDL для блоков в ShiftAdd. Эта архитектура использует не восстанавливающий алгоритм деления, который выполняет несколько операций сдвига и добавления для вычисления частного. ShiftAdd архитектура обеспечивает повышение точности по сравнению с методом аппроксимации Ньютона-Рафсона.
При использовании ShiftAdd архитектура, вы можете использовать UsePipelines параметр реализации для указания того, следует ли использовать конвейерную или неконвейерную реализацию невосстановительного разделения.
| Настройка UsePipelines | Поведение отображения |
|---|---|
| Используйте конвейерную реализацию невосстановительного сдвига и добавьте операцию для разделительных и взаимных блоков. Этот параметр добавляет больше задержек в конструкцию, но обеспечивает более высокую максимальную тактовую частоту на целевом устройстве FPGA. Количество вставленных конвейеров соответствует числу итераций, которое требуется алгоритму для вычисления частного или обратного. |
| Используйте не конвейерную реализацию невосстановительного сдвига и добавьте операцию для блоков «Разделить» и «Взаимное». Этот параметр не добавляет задержки в конструкцию. Поскольку разделение и взаимность являются ресурсоемкими операциями, для достижения более высоких тактовых частот на целевом FPGA задайте UsePipelines равным |
Установить UsePipelines для подсистемы из диалогового окна «Свойства блока HDL»:
Щелкните правой кнопкой мыши подсистему.
Выберите «Код HDL» > «Свойства блока HDL».
Для параметра UsePipelines выберите значение on (вкл) или off (выкл).
Установить UsePipelines для блока из командной строки, используйте hdlset_param. Например, для отключения UsePipelines для блока разделения внутри подсистемы, my_dut:
hdlset_param('my_dut/divide', 'UsePipelines', 'off');
hdlset_param. UseRAM параметр реализации позволяет использовать основанное на ОЗУ отображение для блока вместо отображения на сдвиговый регистр.
| Настройка UseRAM | Поведение отображения |
|---|---|
| Задержка отображается на сдвиговый регистр в сгенерированном HDL-коде, за исключением одного случая. Дополнительные сведения см. в разделе Эффекты потоковой передачи и распределенной конвейерной обработки. |
| Задержка соответствует двухпортовому блоку ОЗУ, если выполняются следующие условия:
Если какое-либо условие является ложным, задержка отображается в сдвиговый регистр в коде ЛПВП, если она не объединяется с другими задержками для отображения в одно ОЗУ. Дополнительные сведения см. в разделе Отображение нескольких задержек в ОЗУ. |
Этот параметр реализации доступен для блока задержки в библиотеке дискретных данных Simulink и блока задержки (DSP System Toolbox) в библиотеке операций сигналов DSP System Toolbox.
Кодер HDL также может объединять несколько задержек равной длины в одну задержку и затем сопоставлять объединенную задержку с одной оперативной памятью. Эта оптимизация обеспечивает следующие преимущества:
Увеличенная заполняемость одиночной оперативной памяти
Совместное использование логики формирования адресов, что минимизирует дублирование идентичного кода HDL
Отображение задержек в ОЗУ, когда отдельные задержки не удовлетворяют пороговому значению
Следующие правила управляют возможностью объединения нескольких задержек в одну задержку.
Задержки должны:
Находиться на том же уровне иерархии подсистемы.
Использовать то же самое время компиляции.
Имеют UseRAM установить в значение onили генерируется потоковой передачей или общим доступом к ресурсам.
Иметь то же самое ResetType параметр, который не может быть none.
Общая длина слова объединенной задержки не может превышать 128 бит.
RAMSize объединенной задержки больше или равна RAMMappingThreshold значение. RAMSize является продуктом DelayLength * WordLength * VectorLength * ComplexLength.
DelayLength - общее число задержек.
WordLength - количество битов, представляющих тип данных объединенной задержки.
VectorLength - количество элементов в векторной задержке. VectorLength равно 1 для скалярной задержки.
ComplexLength равно 2 для сложных задержек; 1 в противном случае.
RAMMappingThreshold для следующей модели - 100 бит.

Блоки задержки и Delay1 объединяются и отображаются в двухпортовое ОЗУ в сгенерированном коде HDL, удовлетворяя следующим условиям:
Оба блока задержки:
Находятся на одном уровне иерархии.
Использовать то же самое время компиляции.
Иметь значение UseRAM on в диалоговом окне свойств блока HDL.
Иметь одинаковый параметр ResetType для default.
Общая длина слова объединенной задержки составляет 28 бит, что ниже 128-битового предела.
RAMSize из объединенной задержки составляет 112 бит (4 задержки * длина 28-битного слова), что больше порога отображения 100 бит.
При создании кода HDL для этой модели кодер HDL создает дополнительные файлы для задания отображения ОЗУ. Кодер хранит эти файлы в том же исходном расположении, что и другие сгенерированные файлы HDL, например, hdlsrc папка.
Когда UseRAM является off для блока задержки кодер HDL по умолчанию отображает задержку в сдвиговый регистр. Однако кодер изменяет UseRAM установка для on и пытается отобразить задержку в ОЗУ при следующих условиях:
Потоковая передача включена для подсистемы с блоком задержки.
Распределенная конвейерная обработка отключена для подсистемы с блоком задержки.
Предположим, что распределенная конвейерная обработка включена для подсистемы с блоком задержки.
Когда UseRAM является offблок задержки участвует в ресинхронизации.
Когда UseRAM является onблок задержки не участвует в ресинхронизации. Кодер HDL не разрывает задержку, отмеченную для отображения ОЗУ.
Рассмотрим подсистему с двумя блоками задержки, тремя блоками константы и тремя блоками изделия:

Когда UseRAM является on для блока Delay справа эта задержка не участвует в ресинхронизации.
Следующая сводка описывает, пытается ли кодер HDL отобразить задержку в ОЗУ вместо сдвигового регистра.
UseRAM Настройка блока задержки | Оптимизация включена для подсистемы с блоком задержки | ||
|---|---|---|---|
| Только распределенная конвейерная обработка | Только потоковая передача | Как распределенная конвейерная передача, так и потоковая передача | |
| На | Да | Да | Да |
| Прочь | Нет | Да, поскольку отображение в ОЗУ вместо сдвигового регистра может обеспечить зонально эффективную конструкцию. | Нет |
Предупреждение
VariablesToPipeline не рекомендуется. Использовать coder.hdl.pipeline вместо этого.
Параметр PortingToPipeline позволяет вставить регистр трубопровода на выходе одной или нескольких переменных MATLAB. Укажите список переменных как символьный вектор с пробелами, разделяющими переменные.
См. также Выражение MATLAB трубопровода.