HDL Optimization Properties

Оптимизируйте скорость или площадь сгенерированного HDL-кода

С помощью свойств оптимизации HDL можно задать скорость по сравнению с площадью компромиссов в сгенерированном коде.

Задайте эти свойства как аргументы имя-значение для generatehdl функция. Name - имя свойства и Value - соответствующее значение. Можно задать несколько аргументов имя-значение в любом порядке как 'Name1',Value1,...,'NameN',ValueN.

Для примера:

fir = dsp.FIRFilter('Structure','Direct form antisymmetric');
generatehdl(fir,'InputDataType',numerictype(1,16,15),'AddPipelineRegisters','on');

Оптимизация Скорости

расширить все

Оптимизируйте тактовую частоту с помощью регистров трубопровода, задайте как 'off' или 'on'. Вы не можете использовать это свойство с полностью последовательными или каскадными последовательными фильтрами. Когда вы устанавливаете это свойство на 'on'кодер добавляет конвейерные регистры между этапами расчета фильтра. Несмотря на то, что регистры добавляют к общей задержке фильтра, они обеспечивают значительные улучшения тактовой частоты.

Тип фильтраРасположение добавленного регистра трубопроводов
Конечная импульсная характеристикаМежду умножителями коэффициентов и сумматорами
Прямая форма конечной импульсной характеристики, антисимметричная конечная импульсная характеристика и симметричная конечная импульсная характеристика

Между уровнями древовидного последнего сумматора

Для альтернативного древовидного метода суммирования смотрите также свойство FIRAdderStyle.

БИХМежду секциями
CICМежду секциями гребня

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

Оптимизируйте тактовую частоту с помощью метода суммирования, заданного как 'linear', 'tree', или 'pipelined'. Это свойство применяется только к прямым фильтрам конечной импульсной характеристики, антисимметричных конечных импульсных характеристик и симметричных конечных импульсных характеристик. Вы не можете использовать это свойство с полностью последовательными или каскадными последовательными фильтрами. Когда вы устанавливаете это свойство на 'tree'кодер создает конечный сумматор, который выполняет парное сложение для последующих продуктов, которые выполняются параллельно, а не последовательно. Когда вы устанавливаете это свойство на 'pipelined'кодер создает на основе дерева конечный сумматор с конвейерными регистрами между уровнями дерева.

Для получения дополнительной информации смотрите Оптимизацию Окончательного Суммирования для конечная импульсная характеристика.

Зависимости

Это свойство применяется только когда AddPipelineRegisters для свойства задано значение 'off'.

Дополнительный входной регистр, заданный как 'on' или 'off'. Когда для этого свойства задано значение 'on'кодер генерирует сигнал с именем input_register и включает оператор процесса, который управляет регистром. Если возникшая задержка является проблемой, или если фильтр включен в код, который имеет существующий входной регистр, установите это свойство на 'off'. Для получения дополнительной информации смотрите Указание или Подавление Зарегистрированных Входных и Выходных Данных.

Дополнительный выходной регистр, заданный как 'on' или 'off'. Когда для этого свойства задано значение 'on'кодер генерирует сигнал с именем output_register и включает оператор процесса, который управляет регистром. Если возникшая задержка является проблемой, или если фильтр включен в код, который имеет существующий выходной регистр, установите это свойство на 'off'. Для получения дополнительной информации смотрите Указание или Подавление Зарегистрированных Входных и Выходных Данных.

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

Зависимости

Чтобы включить это свойство, задайте CoeffMultipliers на 'multipliers'.

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

Зависимости

Чтобы включить это свойство, задайте CoeffMultipliers на 'multipliers'.

Оптимизация площади

расширить все

Оптимизация HDL-кода, заданная как 'off' или 'on'. По умолчанию кодер генерирует буквальную реализацию фильтра с числовым поведением, которое точно соответствует объекту фильтра. Эта реализация не обязательно является оптимальной реализацией HDL. Когда для этого свойства задано значение 'on'кодер уменьшает площадь аппаратной реализации и оптимизирует типы данных и эффекты квантования. Для получения дополнительной информации об основополагающих компромиссах смотрите Оптимизируйте для HDL.

Реализация умножений коэффициентов, заданная как 'multiplier', 'csd', или 'factored-csd'. Вы не можете использовать это свойство с многоразовыми или последовательными фильтрами.

  • 'multiplier' - Кодер сохраняет логику умножения в сгенерированном HDL коде.

  • 'csd' или 'factored-csd'- Кодер реализует умножение с помощью канонической логики со знаком (CSD). Метод CSD заменяет множители на сдвиг и добавление логики. Этот метод также минимизирует количество сумматоров, используемых для постоянного умножения, путем представления двоичных чисел с минимальным количеством ненулевых цифр. Эта оптимизация уменьшает площадь, используемую фильтром, поддерживая или увеличивая тактовую частоту.

  • 'factored-csd' - Кодер реализует умножение с помощью факторизованной логики CSD. Факторизованный CSD заменяет операции умножения на сдвиг и добавляет операции на простых множителях коэффициентов. Эта опция достигает большего сокращения площади, чем CSD, за счет уменьшения тактовой частоты.

Для получения дополнительной информации см. «Оптимизация CSD для коэффициентных умножителей».

Разделы для архитектур последовательных фильтров, заданные как один из следующих:

  • -1 - Кодер генерирует полностью параллельную архитектуру. Эта архитектура эквивалентна последовательному разбиению, заданному как вектор из них размера эффективной длины фильтра.

  • Эффективная длина фильтра - кодер генерирует полностью последовательную архитектуру.

  • [p1 p2... p N] - Кодер генерирует частично последовательную архитектуру с N перегородки. Целые числа в векторе задают длину каждого раздела. Сумма векторных элементов должна быть равна эффективной длине фильтра. Чтобы дополнительно уменьшить площадь, можно сгенерировать каскадно-последовательную архитектуру, включив ReuseAccum свойство. Для некоторых примеров смотрите Сгенерировать последовательные разделы для конечная импульсная характеристика.

  • Массив ячеек последовательных разделов - Кодер генерирует разделы для каждого каскадного фильтра. Задайте разделы для каждой ступени фильтра следующим -1, эффективную длину фильтра или вектор из целых чисел. Элементы каждого вектора должны суммироваться с эффективной длиной фильтра связанного фильтра в каскаде. Для получения примера смотрите Сгенерировать последовательные разделы каскадного фильтра.

    Когда последовательный раздел фильтра установлен в -1, можно задать LUT-раздел для этого этапа при помощи DALUTPartition и DARadix свойства. Для получения дополнительной информации см. раздел «Опции архитектуры для каскадных фильтров».

Вы не можете использовать это свойство с фильтрами БИХ SOS. Для генерации последовательной архитектуры для фильтров IIR SOS используйте FoldingFactor или NumMultipliers вместо этого свойства.

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

Тип фильтраРасчет эффективной длины фильтра
Прямая форма FL = length(find(filt.Numerator~= 0))
Прямая форма симметричнаяFL = ceil(length(find(filt.Numerator~= 0))/2)
Прямая антисимметричная форма

Для получения дополнительной информации смотрите Определение скорости по сравнению с областью Компромиссы через свойства generatehdl.

Обзор параллельных и последовательных архитектур и список типов фильтров, поддерживаемых для каждой архитектуры, см. в разделе «Скорость по сравнению с областью» «Компромиссы».

Повторное использование аккумулятора для каскадно-последовательной архитектуры, заданное как 'off' или 'on'. Когда для этого свойства задано значение 'on'кодер группирует фильтр в несколько последовательных разделов. Накопленный выход каждой перегородки каскадируется к аккумулятору предыдущей перегородки. Поэтому выходы перегородок вычисляются в аккумуляторе первой перегородки. Этот метод, называемый accumulator reuse, сохраняет область чипа. Если свойство SerialPartition не определено, кодер генерирует оптимальный раздел. Для получения дополнительной информации смотрите Определение скорости по сравнению с областью Компромиссы через свойства generatehdl.

Обзор параллельных и последовательных архитектур и список типов фильтров, поддерживаемых для каждой архитектуры, см. в разделе «Скорость по сравнению с областью» «Компромиссы».

Интерполяционные таблицы (LUT) для распределенной арифметики (DA), заданные как один из следующих:

  • -1 - Кодер генерирует полностью параллельную архитектуру.

  • Эффективная длина фильтра - кодер генерирует реализацию DA без разбиения LUT.

  • [p1 p2... p N] - Кодер генерирует реализацию DA с N Разделы LUT. Целые числа в векторе определяют размер каждого раздела. Максимальный размер для отдельного раздела 12. Сумма векторных элементов должна быть равна эффективной длине фильтра. Для многоскоростных фильтров каждый полифазный подфильтр использует одни и те же LUT-разделы. Для получения примера смотрите Распределенную арифметику для фильтров с одной скоростью.

  • {p1 p2... p N; q1 q2... q N; ... } - Кодер генерирует реализацию DA с N уникальные LUT-разделы для каждого полифазного подфильтра многоскоростного фильтра. Каждая строка матрицы задает разделы для одного подфильтра. Элементы в каждой строке должны суммироваться с соответствующей длиной подфильтера, FLi. Для получения примера смотрите Распределенную арифметику для Многоскоростных фильтров.

  • Массив ячеек разделов DALUT - Кодер генерирует реализацию DA с различными разделами LUT для каждого каскада фильтра. Задайте разделы LUT для каждого каскада фильтра следующим -1, эффективную длину фильтра или вектор из целых чисел. Элементы каждого вектора должны суммироваться с эффективной длиной фильтра связанного фильтра в каскаде. Для получения примера смотрите Распределенную арифметику для каскадных фильтров.

    Когда для LUT-раздела фильтра задано значение -1можно задать последовательный раздел для этого этапа с помощью SerialPartition свойство. Для получения дополнительной информации см. раздел «Опции архитектуры для каскадных фильтров».

Используйте эту таблицу в качестве руководства для вычисления эффективной длины фильтра. Кроме того, можно использовать hdlfilterdainfo функция для отображения эффективной длины фильтра, опций разбиения LUT и возможных DARadix значения для фильтра.

Тип фильтраРасчет эффективной длины фильтра
Прямая форма FL = length(find(filt.Numerator~= 0))
Прямая форма симметричнаяFL = ceil(length(find(filt.Numerator~= 0))/2)
Прямая антисимметричная форма
Мультирейт с равномерными LUT-разбиениями для каждого полифазного подфильтраFL = size(polyphase(filt),2)
Мультирейт с уникальными LUT-разбиениями для каждого полифазного подфильтраp = полифаза (filt)
FLi = длина (найти (p (i,:)))
, где i - индекс к iпервая строка полифазной матрицы фильтра. The iпервая строка матрицы p представляет i1й подфильтр.

Для получения дополнительной информации смотрите Распределенная арифметика для конечная импульсная характеристика.

Количество бит, обработанных одновременно в распределенной арифметике (DA), заданное как 2, 2N, или {2N,2M,...} где:

  • N > 0

  • mod(W,N) = 0, где W - вход слова фильтра

  • 2N <= 2W

Это свойство задает степень параллелизма в архитектуре DA, которая может улучшить тактовую частоту за счет площади.

  • 21 - Кодер реализует полностью последовательную архитектуру DA, которая обрабатывает 1 бит за раз.

  • 2N - Кодер генерирует частично последовательную архитектуру DA при 1 < N < W.

  • 2W - Кодер генерирует полностью параллельную архитектуру DA.

  • {2N,2M,...} - Кодер генерирует реализацию DA с различными DARadix значения для каждого каскада фильтра в каскадном фильтре. Для получения примера смотрите Распределенную арифметику для каскадных фильтров.

    Когда DARadix значение каскада фильтра установлено равным 2, можно задать последовательную архитектуру для этого каскада при помощи SerialPartition свойство. Для получения дополнительной информации см. раздел «Опции архитектуры для каскадных фильтров».

Для получения дополнительной информации смотрите Распределенная арифметика для конечная импульсная характеристика.

Коэффициент складывания для БИХ, заданный как 1 или положительное целое число. Используйте это свойство для определения последовательной архитектуры для фильтров SOS прямой формы I или прямой формы II. Чтобы уменьшить площадь в реализации последовательной архитектуры, можно совместно использовать множители за счет задержек. Коэффициент складывания задает коэффициент, на который частота синхроимпульсов увеличивается в ответ на оптимизацию области.

Можно задать любое из FoldingFactor свойство или NumMultipliers свойство, но не то и другое. Если вы не задаете ни одно свойство, кодер генерирует полностью параллельную архитектуру.

Для получения примера см. раздел «Генерация последовательной архитектуры для БИХ фильтра». Получение информации о FoldingFactor опции и соответствующие NumMultipliers, вызвать hdlfilterserialinfo функция.

Количество общих умножителей для БИХ, заданное в виде положительного целого числа. Используйте это свойство для определения последовательной архитектуры для фильтров SOS прямой формы I или прямой формы II. Общие множители сокращают площадь за счет увеличения тактовой частоты.

Можно задать любое из NumMultipliers свойство или FoldingFactor свойство, но не то и другое. Если вы не задаете ни одно свойство, кодер генерирует полностью параллельную архитектуру.

Для получения примера см. раздел «Генерация последовательной архитектуры для БИХ фильтра». Получение информации о NumMultipliers опции и соответствующие FoldingFactor, вызвать hdlfilterserialinfo функция.

Совет

Если вы используете fdhdltool функцию для генерации HDL-кода можно задать соответствующие свойства в диалоговом окне Генерация HDL.

СвойствоРасположение в диалоговом окне

Add input register

Global Settings вкладка > Ports вкладка

Add output register

Дополнительные оптимизационные свойства

Filter Architecture вкладку

См. также: