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