Блокируйтесь параметры реализации позволяют вам управлять деталями кода, сгенерированного для определенных реализаций блока. Смотрите Параметры блоков HDL Набора и Представления, чтобы изучить, как выбрать реализации блока и параметры в графический интерфейсе пользователя или командной строке.
Имена свойства заданы как векторы символов. Тип данных значения свойства характерен для свойства. В этом разделе описываются синтаксис каждого параметра реализации блока и как параметр влияет на сгенерированный код.
Параметр подсистемы AdaptivePipelining
позволяет вам установить адаптивную конвейеризацию на подсистеме в модели.
Адаптивная установка конвейеризации | Описание |
---|---|
'inherit' (значение по умолчанию) | Используйте адаптивную установку конвейеризации родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, используйте адаптивную установку конвейеризации для модели. |
'on' | Вставьте адаптивные конвейеры для этой подсистемы. |
'off' | Не вставляйте адаптивные конвейеры для этой подсистемы, даже если родительская подсистема имеет адаптивную включенную конвейеризацию. |
Чтобы отключить адаптивную конвейеризацию для подсистемы в модели, установите адаптивный параметр конвейеризации, AdaptivePipelining
, к 'off'
для той подсистемы.
Чтобы изучить, как установить образцовый уровень адаптивная конвейеризация, смотрите Адаптивную конвейеризацию.
Установить адаптивную конвейеризацию для подсистемы от диалогового окна HDL Block Properties:
Щелкните правой кнопкой по подсистеме.
Выберите HDL Code> HDL Block Properties.
Для AdaptivePipelining выберите inherit, on или off.
Чтобы установить адаптивную конвейеризацию для подсистемы из командной строки, используйте hdlset_param
. Например, чтобы выключить адаптивную конвейеризацию для подсистемы, my_dut
:
hdlset_param('my_dut', 'AdaptivePipelining', 'off')
hdlset_param
.Параметр подсистемы BalanceDelays
позволяет вам установить задержку, балансирующуюся на подсистеме в модели.
Установка BalanceDelays | Описание |
---|---|
'inherit' (значение по умолчанию) | Используйте установку балансировки задержки родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, используйте установку балансировки задержки для модели. |
'on' | Сбалансируйте задержки этой подсистемы. |
'off' | Не балансируйте задержки этой подсистемы, даже если родительская подсистема имеет включенную балансировку задержки. |
Чтобы отключить задержку, балансирующуюся для любой подсистемы в модели, необходимо установить параметр балансировки задержки образцового уровня, BalanceDelays
, к 'off'
.
Чтобы изучить, как установить балансировку задержки образцового уровня, смотрите задержки Баланса.
Установить задержку, балансирующуюся для подсистемы с помощью диалогового окна HDL Block Properties:
Щелкните правой кнопкой по подсистеме.
Выберите HDL Code> HDL Block Properties.
Для BalanceDelays выберите inherit, on или off.
Чтобы установить задержку, балансирующуюся для подсистемы из командной строки, используйте hdlset_param
. Например, к задержке при выключении, балансирующейся для подсистемы, my_dut
:
hdlset_param('my_dut', 'BalanceDelays', 'off')
hdlset_param
.Параметр подсистемы ClockRatePipelining
позволяет вам установить конвейеризацию тактовой частоты на подсистеме в модели.
Установка конвейеризации тактовой частоты | Описание |
---|---|
'inherit' (значение по умолчанию) | Используйте установку конвейеризации тактовой частоты родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, используйте установку конвейеризации тактовой частоты для модели. |
'on' | Вставьте конвейеры тактовой частоты для этой подсистемы. |
'off' | Не вставляйте конвейеры тактовой частоты для этой подсистемы, даже если родительская подсистема имеет включенную конвейеризацию тактовой частоты. |
Чтобы отключить конвейеризацию тактовой частоты для подсистемы в модели, установите параметр конвейеризации тактовой частоты, ClockRatePipelining
, к 'off'
для той подсистемы.
Чтобы изучить, как установить конвейеризацию тактовой частоты образцового уровня, смотрите, что Тактовая частота Конвейерно обрабатывает.
Установить конвейеризацию тактовой частоты для подсистемы с помощью диалогового окна HDL Block Properties:
Щелкните правой кнопкой по подсистеме.
Выберите HDL Code> HDL Block Properties.
Для ClockRatePipelining выберите inherit, on или off.
Чтобы установить конвейеризацию тактовой частоты для подсистемы из командной строки, используйте hdlset_param
. Например, чтобы выключить конвейеризацию тактовой частоты для подсистемы, my_dut
:
hdlset_param('my_dut', 'ClockRatePipelining', 'off')
hdlset_param
.Параметр реализации 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. Кодер выбирает оптимизацию, которая приводит к большей части эффективного внедрения области, на основе количества требуемых сумматоров. Когда вы задаете |
Параметр ConstMultiplierOptimization
доступен для следующих блоков:
Усиление
График Stateflow®
Таблица истинности
Функция MATLAB
Matlab.system
Используйте параметр ConstrainedOutputPipeline
, чтобы задать неотрицательное количество регистров, чтобы поместить в блоке выходные параметры.
HDL Coder перемещает существующие задержки в рамках вашего проекта, чтобы попытаться соответствовать вашему ограничению. Новые регистры не добавляются. Если существует меньше регистров, чем кодер должен удовлетворить ваше ограничение, кодер сообщает о различии между количеством желаемых и фактических выходных регистров. Можно добавить задержки с проектом с помощью конвейеризации ввода или вывода.
Распределенная конвейеризация не перераспределяет регистры, которые вы задаете с ограниченной выходной конвейеризацией.
Задавать ограниченную выходную конвейеризацию для блока с помощью графический интерфейса пользователя:
Щелкните правой кнопкой по блоку и выберите HDL Code> HDL Block Properties.
Для ConstrainedOutputPipeline введите номер регистров, которые вы хотите в выходных портах.
Задавать ограниченную выходную конвейеризацию, в командной строке, введите:
hdlset_param(path_to_block, 'ConstrainedOutputPipeline', number_of_output_registers)
subsys
, в вашей модели, mymodel
, введите:hdlset_param('mymodel/subsys','ConstrainedOutputPipeline', 6)
Параметр DistributedPipelining
включает конвейерное распределение регистра, оптимизацию скорости, которая позволяет вам увеличить свою тактовую частоту путем сокращения критического пути.
Следующая таблица показывает эффект параметров OutputPipeline
и DistributedPipelining
.
DistributedPipelining | OutputPipeline, nStages | Результат |
---|---|---|
'off' (значение по умолчанию) | Незаданный (значения по умолчанию nStages к 0) | HDL Coder не вставляет конвейерные регистры. |
nStages > 0 | Кодер вставляет nStages регистры вывода при выводе подсистемы, блока MATLAB function или диаграммы Stateflow. | |
'on'
| Незаданный (значения по умолчанию nStages к 0) | Кодер не вставляет конвейерные регистры.DistributedPipelining не имеет никакого эффекта. |
nStages > 0 | Кодер распределяет регистры nStages в подсистеме, блоке MATLAB function или диаграмме Stateflow, на основе анализа критического пути. |
Чтобы достигнуть дальнейшей оптимизации кода, сгенерированного с распределенной конвейеризацией, выполните повторную синхронизацию во время синтеза RTL, если это возможно.
Выходные данные могут быть в недопустимом состоянии первоначально, если вы вставляете конвейерные регистры. Чтобы избежать ошибок испытательного стенда, следующих из начальных недопустимых выборок, отключите выходную проверку те выборки. Для получения дополнительной информации см.:
Если вы используете блок Matrix Multiply в своем проекте, используйте DotProductStrategy
, чтобы задать, как вы хотите реализовать умножение матриц.
Опции DotProductStrategy
перечислены в следующей таблице.
Значение DotProductStrategy | Описание |
---|---|
'Fully Parallel' (значение по умолчанию) | Расширяет операцию умножения матриц во множители и сумматоры. Например, если вы умножаетесь два 2x2 матрицы, реализация использует восемь множителей и четыре сумматора, чтобы вычислить результат. |
'Serial Multiply-Accumulate' | Использует архитектуру Serial блока Multiply - Accumulate, чтобы реализовать умножение матриц. |
'Parallel Multiply-Accumulate' | Использует архитектуру Parallel блока Multiply - Accumulate, чтобы реализовать умножение матриц. |
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' |
|
|
'VHDL' |
|
| |
'on' | 'Verilog' |
|
|
'VHDL' |
|
| |
'off' | 'Verilog' |
|
|
'VHDL' |
|
|
Необходимо задать инструмент синтеза при помощи свойства SynthesisTool
.
Задавать атрибут синтеза с помощью диалогового окна HDL Block Properties:
Щелкните правой кнопкой по блоку.
Выберите HDL Code> HDL Block Properties.
Для 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
позволяет вам удалить иерархию подсистемы из HDL-кода, сгенерированного из вашего проекта.
Установка FlattenHierarchy | Описание |
---|---|
'inherit' (значение по умолчанию) | Используйте установку выравнивания иерархии родительской подсистемы. Если эта подсистема является подсистемой высшего уровня, не сглаживаться. |
'on' | Сгладьте эту подсистему. |
'off' | Не сглаживайте эту подсистему, даже если родительская подсистема сглажена. |
Чтобы сгладить иерархию, подсистема должна иметь следующие свойства блока.
Свойство | Необходимое значение |
---|---|
DistributedPipelining | 'off' |
StreamingFactor | 0 |
SharingFactor | 0 |
Чтобы сгладить иерархию, у вас должен также быть глобальный набор свойств MaskParameterAsGeneric
к 'off'
. Для получения дополнительной информации смотрите, Генерируют параметризованный HDL-код от подсистемы маскированной.
Установить выравнивание иерархии с помощью диалогового окна HDL Block Properties:
Щелкните правой кнопкой по подсистеме.
Выберите HDL Code> HDL Block Properties.
Для 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
позволяет вам задать реализацию с входной конвейеризацией для выбранных блоков. Значение параметров задает количество входных настроек канала связи (конвейерная глубина) в сгенерированном коде.
Следующий код задает входную конвейерную глубину двух этапов для каждого блока 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
. Для примера смотрите Конвейерный постфикс.
Для блока MATLAB function можно использовать параметр InstantiateFunctions, чтобы сгенерировать VHDL® entity
или Verilog® module
для каждой функции. HDL Coder генерирует код для каждого entity
или module
в отдельном файле.
Опции InstantiateFunctions для блока MATLAB function перечислены в следующей таблице.
Установка InstantiateFunctions | Описание |
---|---|
'off' (значение по умолчанию) | Сгенерируйте код для встроенных функций. |
'on' | Сгенерируйте VHDL |
Устанавливать параметр InstantiateFunctions с помощью диалогового окна HDL Block Properties:
Щелкните правой кнопкой по блоку MATLAB function.
Выберите HDL Code> HDL Block Properties.
Для 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
для деталей.
Программное обеспечение генерирует код, встроенный когда:
Вызовы функции в рамках условного кода или циклов for
.
Любая функция вызвана с непостоянным входом struct
.
Функция имеет состояние, такое как персистентная переменная, и вызвана многократно.
Существует перечисление где угодно в функции проекта.
Если вы включаете InstantiateFunctions
, UseMatrixTypesInHDL
не имеет никакого эффекта.
Для архитектуры Cascade
можно использовать параметр InstantiateStages, чтобы сгенерировать VHDL entity
или module
Verilog для каждого этапа вычисления. HDL Coder генерирует код для каждого entity
или module
в отдельном файле.
Установка InstantiateStages | Описание |
---|---|
'off' (значение по умолчанию) | Сгенерируйте каскадные этапы в одном VHDL |
'on' | Сгенерируйте VHDL |
LoopOptimization
позволяет вам передать потоком или развернуть циклы в коде, сгенерированном от блока MATLAB function. Потоковая передача цикла оптимизирует для области; развертывание цикла оптимизирует для скорости.
Установка LoopOptimization | Описание |
---|---|
'none' (значение по умолчанию) | Не оптимизируйте циклы. |
'Unrolling' | Разверните циклы. |
'Streaming' | Потоковые циклы. |
Выбрать оптимизацию цикла с помощью диалогового окна HDL Block Properties:
Щелкните правой кнопкой по блоку MATLAB function.
Выберите HDL Code> HDL Block Properties.
Для LoopOptimization выберите none
, Unrolling
или Streaming
.
Чтобы выбрать оптимизацию цикла из командной строки, используйте hdlset_param
. Например, чтобы включить потоковую передачу цикла для блока MATLAB function, my_mlfn
:
hdlset_param('my_mlfn', 'LoopOptimization', 'Streaming')
hdlset_param
.HDL Coder не может передать цикл потоком если:
Индекс цикла считает в обратном порядке. Индекс цикла должен увеличиться на 1 на каждой итерации.
Существует 2 или больше вложенных цикла на том же уровне иерархии в другом цикле.
Какая-то конкретная персистентная переменная обновляется и внутри и снаружи цикла.
HDL Coder может передать цикл потоком, когда персистентная переменная:
Обновленный в цикле и читают вне цикла.
Читайте в цикле и обновленный вне цикла.
Используйте параметры блоков LUTRegisterResetType
, чтобы управлять синтезом LUT в структуру ROM на FPGA.
Значение LUTRegisterResetType | Описание |
---|---|
default | LUT регистр вывода имеет логику сброса по умолчанию. Когда вы сгенерируете HDL, LUT будет синтезироваться как регистры. |
none | LUT регистр вывода не имеет никакой логики сброса. Когда вы сгенерируете HDL, LUT будет синтезироваться как ROM. |
Можно задать LUTRegisterResetType
для следующих блоков:
Оптимизированный HDL NCO
Гамма-коррекция
Интерполяционная таблица
С параметром реализации MapPersistentVarsToRAM
можно использовать основанное на RAM отображение для персистентных массивов блока MATLAB function вместо того, чтобы сопоставить с регистрами.
Установка MapPersistentVarsToRAM | Отображение поведения |
---|---|
| Персистентные массивы сопоставляют с регистрами в сгенерированном HDL-коде. |
| Персистентные переменные типа массив сопоставляют с 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
256. Чтобы изменить порог, используйте hdlset_param
. Например, следующая команда изменяет порог отображения для модели sfir_fixed
к 128 битам:
hdlset_param('sfir_fixed', 'RAMMappingThreshold', 128);
Можно также изменить порог отображения RAM в диалоговом окне Configuration Parameters. Для получения дополнительной информации смотрите, что RAM сопоставляет порог (биты) раздел в Отображении RAM.
Для примера, который показывает, как сопоставить персистентные переменные типа массив с RAM в блоке MATLAB function, смотрите, что RAM Сопоставляет с блоком MATLAB function.
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 | Описание |
---|---|
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 единичная задержка
Единичная задержка
Когда вы устанавливаете ResetType на none
для блока MATLAB function, HDL Coder не генерирует логику сброса для персистентных переменных в коде MATLAB®.
Однако, если вы задаете другую оптимизацию для блока, кодер может вставить регистры та логика сброса использования. Кодер не подавляет генерацию логики сброса для этих регистров. Поэтому, если вы устанавливаете ResetType на none
наряду с другой оптимизацией блока, ваш сгенерированный код может иметь порт сброса в верхнем уровне.
Подавить генерацию логики сброса для блока с помощью пользовательского интерфейса:
Щелкните правой кнопкой по блоку и выберите HDL Code> HDL Block Properties.
Для ResetType выберите none
.
Подавить генерацию логики сброса, на командной строке, введите:
hdlset_param(path_to_block,'ResetType','none')
Например, чтобы подавить генерацию логики сброса для блока Unit Delay, UnitDelay1
, в подсистеме, mySubsys
, на командной строке, введите:
hdlset_param('mySubsys/UnitDelay1','ResetType','none');
Чтобы задать синхронный или асинхронный сброс, используйте параметр образцового уровня ResetType
. Для получения дополнительной информации смотрите тип Сброса в Настройках Сброса.
Используйте этот параметр на блоках 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
, чтобы задать количество функционально эквивалентных ресурсов, чтобы сопоставить с одним совместно используемым ресурсом. Значение по умолчанию 0. Смотрите Разделение ресурсов.
Используйте параметры блоков 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;
Количество параллельных информационных каналов или векторы, чтобы преобразовать в последовательные, скалярные информационные каналы мультиплексирующими время последовательными путями данных и совместным использованием аппаратных ресурсов. Значение по умолчанию 0, который реализует полностью параллельные информационные каналы. См. также Потоковую передачу.
Свойство блока UseMatrixTypesInHDL
задает, сгенерировать ли 2D матрицы в HDL-коде, когда у вас есть матрицы MATLAB в вашем блоке MATLAB function.
Установка UseMatrixTypesInHDL | Описание |
---|---|
| Сгенерируйте векторы HDL с индексной логикой вычисления для матриц MATLAB. Эта опция может использовать больше области в синтезируемом оборудовании. |
| Сгенерируйте матрицы HDL для матриц MATLAB. Эта опция может сохранить область в синтезируемом оборудовании. Следующие требования применяются:
|
Сгенерировать 2D матрицы в HDL-коде:
Щелкните правой кнопкой по блоку MATLAB function и выберите HDL Code> HDL Block Properties.
Для UseMatrixTypesInHDL выберите on.
Также в командной строке, используйте makehdl
или hdlset_param
, чтобы установить свойство блока UseMatrixTypesInHDL
на 'on'
.
Например, предположите, что у вас есть модель, myModel
, с подсистемой, dutSubsys
, который содержит блок MATLAB function, myMLFcn
. Сгенерировать 2D матрицы в HDL-коде для myMLFcn, введите:
hdlset_param('myModel/dutSubsys/myMLFcn', 'UseMatrixTypesInHDL', 'on')
Параметр реализации UseRAM
позволяет использовать основанное на RAM отображение для блока вместо того, чтобы сопоставить со сдвиговым регистром.
Установка UseRAM | Отображение поведения |
---|---|
| Задержка сопоставляет со сдвиговым регистром в сгенерированном HDL-коде, кроме одного случая. Для получения дополнительной информации смотрите Эффекты Потоковой передачи и Распределенной Конвейеризации. |
| Задержка сопоставляет с двухпортовым блоком RAM, когда следующие условия верны:
Если какое-либо условие является ложным, задержка сопоставляет со сдвиговым регистром в HDL-коде, если это не объединяет с другими задержками, чтобы сопоставить с одним RAM. Для получения дополнительной информации смотрите Отображение Нескольких Задержек с RAM. |
Этот параметр реализации доступен для блока Delay в библиотеке Simulink Discrete и блока Delay в библиотеке DSP System Toolbox Signal Operations.
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 в противном случае.
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
не рекомендуется. Используйте coder.hdl.pipeline
вместо этого.
Параметр VariablesToPipeline позволяет вам вставить конвейерный регистр при выводе одной или нескольких переменных MATLAB. Задайте список переменных как вектор символов с пробелами, разделяющими переменные.
См. также Конвейер Выражения MATLAB.