Свойства блока HDL-фильтра

AdderTreePipeline

Это свойство применяется к основанным на кадрах фильтрам. Он задает, сколько регистров конвейера включает архитектура между уровнями дерева сумматоров. Эти этапы трубопровода увеличивают пропускную способность фильтра при добавлении задержки. Значение по умолчанию 0. Чтобы улучшить скорость этой архитектуры, рекомендуемая настройка 2.

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

Дополнительные сведения об архитектуре фильтра на основе фреймов см. в разделе Архитектура на основе фреймов.

AddPipelineRegisters

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

Следующие ограничения применяются к AddPipelineRegisters:

  • Если вы используете AddPipelineRegistersгенератор кода усиливает полную точность в HDL и сгенерированной модели фильтра. Эта опция реализует в HDL-коде конвейерную структуру дерева сумматора, для которой поддерживается только полная точность. Если вы генерируете модель валидации, необходимо использовать полную точность в исходной модели, чтобы избежать несоответствий валидации.

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

    Примечание

    Когда вы используете это свойство с блоком CIC Interpolation (DSP System Toolbox), задержки в параллельных путях не балансируются автоматически. Вручную добавляйте задержки там, где это необходимо для вашего проекта.

Для диаграмм архитектуры фильтра, которые указывают, где добавляются этапы трубопровода, смотрите HDL Filter Architures.

ChannelSharing

Можно использовать ChannelSharing параметр реализации с многоканальным фильтром, чтобы обеспечить совместное использование одной реализации фильтра между каналами для более эффективной по площади проекта. Этот параметр либо 'on' или 'off'. Значение по умолчанию является 'off', и для каждого канала будет реализован отдельный фильтр.

Смотрите Multicannel конечной импульсной характеристики Filter для FPGA (DSP System Toolbox).

CoeffMultipliers

The CoeffMultipliers параметр реализации позволяет вам задать использование canonical signed digit (CSD) или факторизованных оптимизаций CSD для обработки операций умножения коэффициентов в коде, сгенерированном для определенных блоков фильтра. Задайте CoeffMultipliers параметр с помощью одной из следующих опций:

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

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

  • 'multipliers' (по умолчанию): Сохраните операции умножения.

HDL Coder™ поддерживает CoeffMultipliers для полностью параллельных реализаций фильтра. Он не поддерживается для полностью последовательной и частично последовательной архитектур.

DALUTPartition

Размер LUT растет экспоненциально с порядком фильтра. Для фильтра с N коэффициенты, LUT должны иметь 2^N значения. Для фильтров более высокого порядка размер LUT должен быть уменьшен до разумных уровней. Чтобы уменьшить размер, можно подразделить LUT на ряд LUT, называемых LUT partitions. Каждый раздел LUT работает с различным набором ответвлений. Результаты, полученные из разбиений, суммируют.

Для примера для 160-контактного фильтра размер LUT (2^160)*W биты, где W - размер слова данных LUT. Разделяя это на 16 разделов LUT, каждый из которых принимает 10 входы (отводов), общий размер LUT уменьшается до 16*(2^10)*W биты.

Несмотря на то, что разбиение LUT уменьшает размер LUT, для суммирования данных LUT требуется больше сумматоров.

Можно использовать DALUTPartition включает генерацию кода DA и определяет количество и размер разделов LUT.

Задайте LUT-разделы как вектор из целых чисел [p1 p2...pN] где:

  • N количество разделов.

  • Каждый векторный элемент задает размер раздела. Максимальный размер для отдельного раздела 12.

  • Сумма всех векторных элементов равна длине фильтра FL. FL вычисляется по-разному в зависимости от типа фильтра. В следующем разделе можно узнать, как вычисляется FL для различных типов фильтров.

См. раздел Распределенная арифметика для HDL-фильтров.

Определение DALUTPartition для односкоростных фильтров

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

Тип фильтраРасчет длины фильтра (FL)
Прямая форма конечной импульсной характеристикиFL = length(find(Hd.numerator ~= 0))
Конечная импульсная характеристика прямой формы, симметричная конечная импульсная характеристика прямой формыFL = ceil(length(find(Hd.numerator ~= 0))/2)

Можно также задать генерацию кода DA для создания фильтра без разбиения LUT. Для этого задайте вектор одного элемента, значение которого равно длине фильтра.

Определение DALUTPartition для Многоскоростных фильтров

Для поддерживаемых многоскоростных фильтров (FIR Decimation и FIR Interpolation) можно задать раздел LUT как

  • Вектор, определяющий разбиение для LUT для всех полифазных подфильтров.

  • Матрица LUT разбиений, где каждый вектор-строка задает LUT-разбиение для соответствующего полифазного подфильтра. В этом случае FL является равномерным для всех подфильтров. Этот подход обеспечивает точное управление для разбиения каждого подфильтера.

Следующая таблица показывает FL вычисления для каждого типа LUT-разделов.

Раздел LUT Расчет длины фильтра (FL)
Вектор: Определите FL как показано в столбце «Расчет длины фильтра» (FL) справа. Задайте раздел LUT как вектор целых чисел, элементы которого равны FL.
FL = size(polyphase(Hm), 2)
Матрица: Определите длину подфильтера FLi на основе полифазного разложения фильтра, как показано в столбце Filter Length (FL) Calculation справа. Укажите раздел LUT для каждого подфильтра как вектором-строкой, элементы которого равны FLi.
p = polyphase(Hm);
FLi = length(find(p(i,:)));
 
где i - индекс i-й строки матрицы полифазы многоскоростного фильтра. i-я строка матрицы p представляет i-й подфильтр.

DARadix

Характерная для DA последовательность битов может ограничивать пропускную способность. Чтобы улучшить пропускную способность, основной алгоритм DA может быть изменен, чтобы вычислить более одного битовой суммы за раз. Количество одновременно вычисленных битовых сумм выражается как степень двойки названных DA radix. Для примера DA-радикал 2 (2^1) указывает, что вычисляется одна битовая сумма за раз. A DA-радикал 4 (2^2) указывает, что одновременно вычисляются две битовые суммы и так далее.

Чтобы вычислить несколько битовых сумм за раз, LUT реплицируется. Для примера для выполнения DA на 2 битах за раз (радис 4) нечетные биты подаются на одну LUT, и четные биты одновременно подаются на идентичную LUT. Результаты LUT, соответствующие нечетным битам, сдвигаются влево, прежде чем они добавляются к результатам LUT, соответствующим четным битам. Этот результат затем подается в масштабирующий аккумулятор, который смещает свое значение обратной связи на 2 места.

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

Можно использовать DARadix для определения количества бит, обрабатываемых одновременно в DA. Количество бит выражается как N, который должен быть:

  • Ненулевое положительное целое число, которое является степенью двойки

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

Значение по умолчанию для N Значение 2, задающее обработку одного бита за раз или полностью последовательного DA, который медлен, но низок по площади. Максимальное значение для N является 2^W, где W - вход слова фильтра. Этот максимум задает полностью параллельный DA, который является быстрым, но высоким по площади. Значения N между этими экстремумами задает частично последовательный DA.

Примечание

При установке DARadix значение для симметричных и асимметричных фильтров, см. Факторы для симметричных и асимметричных фильтров.

См. раздел Распределенная арифметика для HDL-фильтров.

FoldingFactor

FoldingFactor задает общее количество тактовых импульсов, принятых для расчета выходов фильтра в фильтре БИХ SOS с последовательной архитектурой. Он комплементарен NumMultipliers. Необходимо выбрать то одно свойство, то другое; вы не можете использовать оба. Если вы не задаете FoldingFactor или NumMultipliersHDL-код для фильтра генерируется с полностью параллельной архитектурой.

MultiplierInputPipeline

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

Следующее ограничение распространяется на MultiplierInputPipeline:

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

Диаграммы того, где эти этапы трубопровода происходят в архитектуре фильтра, смотрите в HDL Filter Architectures.

MultiplierOutputPipeline

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

Следующее ограничение распространяется на MultiplierOutputPipeline:

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

Диаграммы того, где эти этапы трубопровода происходят в архитектуре фильтра, смотрите в HDL Filter Architectures.

NumMultipliers

NumMultipliers задает общее количество умножителей, используемых для реализации фильтра в БИХ SOS с последовательной архитектурой. Он дополняет свойство FoldingFactor. Необходимо выбрать то одно свойство, то другое; вы не можете использовать оба. Если вы не задаете FoldingFactor или NumMultipliersHDL-код для фильтра генерируется с полностью параллельной архитектурой.

ReuseAccum

Можно использовать этот параметр, чтобы включить или отключить повторное использование аккумулятора в последовательной HDL- архитектуры. По умолчанию это полностью параллельная архитектура.

Чтобы сгенерировать это
Архитектура...
Установите значение ReuseAccum на...
Полностью параллельныйОпустить это свойство
Полностью последовательныйНе задан, или 'off'
Частично последовательный'off'
Каскадно-последовательный с явно заданным разбиением'on'
Каскадно-последовательный с автоматически оптимизированным разбиением'on'

Для получения дополнительной информации о архитектурах параллельных и последовательных фильтров смотрите HDL-архитектуру фильтров

SerialPartition

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

Чтобы сгенерировать это
Архитектура...
Установите значение SerialPartition на...
Полностью параллельныйОпустить это свойство
Полностью последовательныйN, где N - длина фильтра
Частично последовательный[p1 p2 p3...pN]: Вектор из целых чисел, имеющих N элементы, где N количество последовательных разделов. Каждый элемент вектора задает длину соответствующего раздела. Сумма векторных элементов должна быть равна длине фильтра. Когда вы задаете секционирование для частично последовательной архитектуры, примите к сведению следующее:
  • Длина фильтра должна быть разделена максимально равномерно на вектор, равный по длине количеству предназначенных умножителей. Например, если ваш проект требует фильтр длины 9 с 2 умножителями, рекомендуемый раздел [5 4]. Если ваш проект требует 3 умножителей, рекомендуемый раздел [3 3 3] вместо некоторого менее равномерного деления, такого как [1 4 4] или [3 4 2].

  • Если ваш проект ограничен необходимостью вычислить каждое выходное значение (соответствующее каждому входному значению) в точном количестве N синхроимпульсов использовать N как наибольший размер раздела и разбиение других элементов максимально равномерно. Например, если длина фильтра равна 9, и для вычисления выхода вашего проекта требуется ровно 4 цикла, задайте раздел следующим [4 3 2]. Этот раздел выполняется в 4 тактах, за счет 3 умножителей.

Каскадно-последовательный с явно заданным разбиением[p1 p2 p3...pN]: Вектор N целые числа, где N количество последовательных разделов. Каждый элемент вектора задает длину соответствующего раздела. Сумма векторных элементов должна быть равна длине фильтра. Значения векторных элементов должны быть в порядке убывания, кроме двух последних элементов, которые могут быть равными. Для примера, для длины фильтра 8, разделы [5 3] или [4 2 2] действительны, но разделы [2 2 2 2] и [3 2 3] вызвать ошибку во время генерации кода.
Каскадно-последовательный с автоматически оптимизированным разбиениемОпустить это свойство.

Для получения дополнительной информации об архитектурах параллельных и последовательных фильтров см. HDL-архитектуру фильтров.

Это свойство также используется для блоков Min/Max с каскадно-последовательными архитектурами. Для настройки каскадов Min/Max смотрите SerialPartition.

Похожие темы