Свойства оптимизации HDL

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

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

Задайте эти свойства как пары, разделенные запятой аргументов Name,Value к функции 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 ... pN] — Кодер генерирует частично последовательную архитектуру с разделами N. Целые числа в векторе задают длину каждого раздела. Сумма векторных элементов должна быть равна эффективной длине фильтра. Чтобы уменьшать область далее, можно сгенерировать каскадно-последовательную архитектуру путем включения свойства ReuseAccum. Для некоторых примеров смотрите, Генерируют Последовательные Разделы для КИХ-Фильтра.

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

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

Вы не можете использовать это свойство с БИХ-фильтрами SOS. Чтобы сгенерировать последовательную архитектуру для БИХ-фильтров 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 ... pN] — Кодер генерирует реализацию DA с разделами LUT N. Целые числа в векторе задают размер каждого раздела. Максимальный размер для отдельного раздела равняется 12. Сумма векторных элементов должна быть равна эффективной длине фильтра. Для многоскоростных фильтров каждый многофазный подфильтр использует те же разделы LUT. Для примера смотрите Распределенную Арифметику для Одного Фильтров Уровня.

  • {p1 p2 ... pN; q1 q2 ... qN; ... } — Кодер генерирует реализацию 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 th строка многофазной матрицы фильтра. i th строка матричного p представляет i th подфильтр.

Для получения дополнительной информации смотрите Распределенную Арифметику для КИХ-Фильтров.

Количество битов, обработанных одновременно в распределенной арифметике (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 или положительное целое число. Используйте это свойство задать последовательную архитектуру для прямой формы I или прямой формы II фильтров SOS. Чтобы уменьшать область в последовательной реализации архитектуры, можно совместно использовать множители за счет задержки. Складной фактор задает фактор, которым тактовая частота увеличивается в ответ на оптимизацию области.

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

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

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

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

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

Советы

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

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

Add input register

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

Add output register

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

Вкладка Filter Architecture

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