HDL Block Properties: Общий

Обзор

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

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

AdaptivePipelining

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

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

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

'on'

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

'off'

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

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

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

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

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

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

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

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

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

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

BalanceDelays

Параметр подсистемы 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

Параметр подсистемы 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.

ConstMultiplierOptimization

Параметр реализации ConstMultiplierOptimization позволяет вам задать использование канонической цифры со знаком (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 не возможны (например, если проект использует арифметику с плавающей точкой).

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

  • Усиление

  • График Stateflow®

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

  • Функция MATLAB

  • 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

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

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

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

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

Совет

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

Смотрите также

DotProductStrategy

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

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

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

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

'Serial Multiply-Accumulate'

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

'Parallel Multiply-Accumulate'

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

DSPStyle

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

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

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

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

Не вставляйте DSP, сопоставляющий атрибут синтеза.

'on'

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

'off'

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

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

  • Усиление

  • Продукт

  • Продукт Элементов с набором Архитектуры к Дереву

  • Подсистема

  • Атомарная подсистема

  • Различная подсистема

  • Enabled подсистема

  • Инициированная подсистема

  • Модель с набором Архитектуры к ModelReference

Поведение выравнивания иерархии

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

Если сглаженная подсистема содержит Усиление, продукт или продукт блоков Элементов, кодер сохраняет их настройки 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_dsp48 = "yes" *) wire signed [32:0] m4_out1;

'VHDL'

attribute multstyle : string ;

attribute multstyle of m4_out1 : signal is "dsp" ;

attribute use_dsp48 : string ;

attribute use_dsp48 of m4_out1 : signal is "yes" ;

'off''Verilog'

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

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

'VHDL'

attribute multstyle : string ;

attribute multstyle of m4_out1 : signal is "logic" ;

attribute use_dsp48 : string ;

attribute use_dsp48 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. Получите блок, my_multiplier. Вставить атрибут синтеза, чтобы сопоставить my_multiplier с DSP, введите:

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

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

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

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

  • Постоянное усиление не может быть степенью 2.

FlattenHierarchy

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

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

Предпосылки для выравнивания иерархии

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

СвойствоНеобходимое значение
DistributedPipelining'off'
StreamingFactor0
SharingFactor0

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

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

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

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

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

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

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

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

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

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

  • Синхронная Подсистема или использование блок State Control в режиме Synchronous.

  • Реализация черного квадрата или модель - ссылка.

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

  • Любая регулярная или подсистема маскированная, которая содержит блок MATLAB function.

  • Подсистема маскированная, которая содержит любое следующее:

    • Шина.

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

    • Блок интерполяционной таблицы: 1D Интерполяционная таблица, 2D Интерполяционная таблица, Косинус, Прямой LookupTable (n-D), Предварительный поиск, Синус, n-D Интерполяционная таблица.

    • Блок MATLAB System.

    • Блок Stateflow: График, Таблица Изменения состояния, Sequence Viewer.

    • Блокируйтесь с передачей или никакой-op реализацией. Смотрите Проходят, Никакой HDL и Каскадные Реализации.

Примечание

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

InputPipeline

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

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

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

Примечание

Установка InputPipeline не имеет никакого эффекта на блоки, которые не имеют входного порта.

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

InstantiateFunctions

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

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

Установка InstantiateFunctionsОписание
'off' (значение по умолчанию)

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

'on'

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

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

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

  1. Щелкните правой кнопкой по блоку MATLAB function.

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

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

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

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

Сгенерируйте код, встроенный для определенных функций

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

Ограничения для генерации кода Instantiable для функций

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

  • Вызовы функции в рамках условного кода или циклов for.

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

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

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

Если вы включаете InstantiateFunctions, UseMatrixTypesInHDL не имеет никакого эффекта.

InstantiateStages

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

Установка InstantiateStagesОписание
'off' (значение по умолчанию)

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

'on'

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

LoopOptimization

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

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

Как оптимизировать циклы for блока 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 будет синтезироваться как ROM.

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

  • Оптимизированный HDL NCO

  • Гамма-коррекция

  • Интерполяционная таблица

MapPersistentVarsToRAM

С параметром реализации MapPersistentVarsToRAM можно использовать основанное на RAM отображение для персистентных массивов блока MATLAB function вместо того, чтобы сопоставить с регистрами.

Установка MapPersistentVarsToRAMОтображение поведения

off

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

on

Персистентные переменные типа массив сопоставляют с RAM. Для ограничений смотрите, что RAM Сопоставляет Ограничения.

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

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

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

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

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

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

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

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

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

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

    Например, в следующем коде, bigarray не сопоставляет с RAM, потому что это не зависит от 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);

Можно также изменить порог отображения RAM в диалоговом окне Configuration Parameters. Для получения дополнительной информации смотрите, что RAM сопоставляет порог (биты) раздел в Отображении RAM.

Пример

Для примера, который показывает, как сопоставить персистентные переменные типа массив с RAM в блоке MATLAB function, смотрите, что RAM Сопоставляет с блоком MATLAB function.

OutputPipeline

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

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

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

Примечание

Установка OutputPipeline не имеет никакого эффекта на блоки, которые не имеют выходного порта.

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

См. также Распределенную Конвейерную Вставку для блоков MATLAB function.

ResetType

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

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

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

none

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

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

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

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

  • График

  • Сверточный Deinterleaver

  • Сверточный Interleaver

  • Задержка

  • Задержитесь (DSP System Toolbox™)

  • Общий мультиплексированный Deinterleaver

  • Общий мультиплексированный Interleaver

  • Функция MATLAB

  • Matlab.system

  • Memory

  • Коснувшаяся задержка

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

  • Enabled единичная задержка

  • Единичная задержка

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

UseMatrixTypesInHDL

Свойство блока UseMatrixTypesInHDL задает, сгенерировать ли 2D матрицы в HDL-коде, когда у вас есть матрицы MATLAB в вашем блоке MATLAB function.

Установка UseMatrixTypesInHDLОписание

off (значение по умолчанию)

Сгенерируйте векторы HDL с индексной логикой вычисления для матриц MATLAB. Эта опция может использовать больше области в синтезируемом оборудовании.

on

Сгенерируйте матрицы HDL для матриц MATLAB. Эта опция может сохранить область в синтезируемом оборудовании.

Следующие требования применяются:

  • Вы не можете использовать матрицы в портах ввода или вывода блока.

  • Элементы матрицы не могут быть комплексными или типы данных struct.

  • Вы не можете использовать линейную индексацию, чтобы задать элементы матрицы. Например, если вы имеете 3x3 матрица, A, вы не можете использовать A(4). Вместо этого используйте A(2,1).

    Можно также использовать оператор двоеточия или в строке или в индексе столбца, но не обоих. Например, можно использовать A(3,1:3) и A(2:3,1), но не A(2:3, 1:3).

  • InstantiateFunctions должен быть установлен в 'off'. Если вы включаете InstantiateFunctions, UseMatrixTypesInHDL не имеет никакого эффекта.

  • UseMatrixTypesInHDL не имеет никакого эффекта, если у вас есть Системные объекты в вашем коде MATLAB.

Сгенерировать 2D матрицы в HDL-коде:

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

  2. Для UseMatrixTypesInHDL выберите on.

Также в командной строке, используйте makehdl или hdlset_param, чтобы установить свойство блока UseMatrixTypesInHDL на 'on'.

Например, предположите, что у вас есть модель, myModel, с подсистемой, dutSubsys, который содержит блок MATLAB function, myMLFcn. Сгенерировать 2D матрицы в HDL-коде для myMLFcn, введите:

hdlset_param('myModel/dutSubsys/myMLFcn', 'UseMatrixTypesInHDL', 'on')

UseRAM

Параметр реализации UseRAM позволяет использовать основанное на RAM отображение для блока вместо того, чтобы сопоставить со сдвиговым регистром.

Установка UseRAMОтображение поведения

off

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

on

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

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

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

  • Delay length> 4.

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

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

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

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

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

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

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

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

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

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

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

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

  • Увеличенное заполнение на одном RAM

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

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

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

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

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

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

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

    • Имейте ту же установку ResetType, которая не может быть none.

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

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

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

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

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

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

Пример нескольких отображения задержек с блоком RAM

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

Задержка и Delay1 блокируют слияние и карту к двухпортовому RAM в сгенерированном HDL-коде путем удовлетворения следующих условий:

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

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

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

    • Установите UseRAM на on в диалоговом окне свойств блока HDL.

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

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

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

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

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

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

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

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

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

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

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

    Рассмотрите подсистему с двумя блоками Задержки, тремя блоками Константа и тремя блоками продукта:

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

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

Установка UseRAM для блока задержкиОптимизация, Enabled для подсистемы с блоком задержки
Распределенная конвейеризация толькоПотоковая передача толькоОбе распределенных конвейеризации и потоковая передача
НаДаДаДа
'off'НетДа, потому что отображение с RAM вместо сдвигового регистра может предоставить эффективный областью проект.Нет

VariablesToPipeline

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

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

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

См. также Конвейер Выражения MATLAB.