Это свойство применяется к основанным на кадрах фильтрам. Он задает, сколько регистров конвейера включает архитектура между уровнями дерева сумматоров. Эти этапы трубопровода увеличивают пропускную способность фильтра при добавлении задержки. Значение по умолчанию 0
. Чтобы улучшить скорость этой архитектуры, рекомендуемая настройка 2
.
Этапы трубопровода вводят задержки вдоль пути в модели, которая содержит поврежденный фильтр. Когда вы включаете эту опцию конвейера, кодер автоматически добавляет задержки балансировки на параллельных путях данных.
Дополнительные сведения об архитектуре фильтра на основе фреймов см. в разделе Архитектура на основе фреймов.
Это свойство применяется к скалярным входным фильтрам. Когда вы включаете это свойство, линейный сумматор фильтра по умолчанию реализуется как конвейерный древовидный сумматор. Эта архитектура увеличивает пропускную способность фильтра при добавлении задержек. Значение по умолчанию off
.
Следующие ограничения применяются к AddPipelineRegisters
:
Если вы используете AddPipelineRegisters
генератор кода усиливает полную точность в HDL и сгенерированной модели фильтра. Эта опция реализует в HDL-коде конвейерную структуру дерева сумматора, для которой поддерживается только полная точность. Если вы генерируете модель валидации, необходимо использовать полную точность в исходной модели, чтобы избежать несоответствий валидации.
Этапы трубопровода вводят задержки вдоль пути в модели, которая содержит поврежденный фильтр. Когда вы включаете эту опцию конвейера, кодер автоматически добавляет задержки балансировки на параллельных путях данных.
Примечание
Когда вы используете это свойство с блоком CIC Interpolation (DSP System Toolbox), задержки в параллельных путях не балансируются автоматически. Вручную добавляйте задержки там, где это необходимо для вашего проекта.
Для диаграмм архитектуры фильтра, которые указывают, где добавляются этапы трубопровода, смотрите HDL Filter Architures.
Можно использовать ChannelSharing
параметр реализации с многоканальным фильтром, чтобы обеспечить совместное использование одной реализации фильтра между каналами для более эффективной по площади проекта. Этот параметр либо 'on'
или 'off'
. Значение по умолчанию является 'off'
, и для каждого канала будет реализован отдельный фильтр.
Смотрите Multicannel конечной импульсной характеристики Filter для FPGA (DSP System Toolbox).
The CoeffMultipliers
параметр реализации позволяет вам задать использование canonical signed digit (CSD) или факторизованных оптимизаций CSD для обработки операций умножения коэффициентов в коде, сгенерированном для определенных блоков фильтра. Задайте CoeffMultipliers
параметр с помощью одной из следующих опций:
'csd'
: Используйте методы CSD, чтобы заменить операции умножения операциями сдвига и добавления. Методы CSD минимизируют количество операций сложения, необходимых для постоянного умножения, представляя двоичные числа с минимальным количеством ненулевых цифр. Это представление уменьшает площадь, используемую фильтром, поддерживая или увеличивая тактовую частоту.
'factored-csd'
: Используйте факторизованные методы CSD, которые заменяют операции умножения на операции сдвига и сложения простых множителей коэффициентов. Эта опция позволяет вам достичь большего сокращения площади фильтра, чем CSD, за счет уменьшения тактовой частоты.
'multipliers'
(по умолчанию): Сохраните операции умножения.
HDL Coder™ поддерживает CoeffMultipliers
для полностью параллельных реализаций фильтра. Он не поддерживается для полностью последовательной и частично последовательной архитектур.
Размер 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-фильтров.
Чтобы определить раздел LUT для одного из поддерживаемых типов односкоростных фильтров, вычислите FL
как показано в следующей таблице. Затем задайте разбиение как вектор, чья сумма элементов равна FL
.
Тип фильтра | Расчет длины фильтра (FL) |
---|---|
Прямая форма конечной импульсной характеристики | FL = length(find(Hd.numerator ~= 0)) |
Конечная импульсная характеристика прямой формы, симметричная конечная импульсная характеристика прямой формы | FL = ceil(length(find(Hd.numerator ~= 0))/2) |
Можно также задать генерацию кода DA для создания фильтра без разбиения LUT. Для этого задайте вектор одного элемента, значение которого равно длине фильтра.
Для поддерживаемых многоскоростных фильтров (FIR Decimation и FIR Interpolation) можно задать раздел LUT как
Вектор, определяющий разбиение для LUT для всех полифазных подфильтров.
Матрица LUT разбиений, где каждый вектор-строка задает LUT-разбиение для соответствующего полифазного подфильтра. В этом случае FL
является равномерным для всех подфильтров. Этот подход обеспечивает точное управление для разбиения каждого подфильтера.
Следующая таблица показывает FL
вычисления для каждого типа LUT-разделов.
Раздел LUT | Расчет длины фильтра (FL) |
---|---|
Вектор: Определите FL как показано в столбце «Расчет длины фильтра» (FL) справа. Задайте раздел LUT как вектор целых чисел, элементы которого равны FL . | FL = size(polyphase(Hm), 2) |
Матрица: Определите длину подфильтера FL i на основе полифазного разложения фильтра, как показано в столбце Filter Length (FL) Calculation справа. Укажите раздел LUT для каждого подфильтра как вектором-строкой, элементы которого равны FL i. | p = polyphase(Hm); FLi = length(find(p(i,:))); p представляет i-й подфильтр. |
Характерная для 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
задает общее количество тактовых импульсов, принятых для расчета выходов фильтра в фильтре БИХ SOS с последовательной архитектурой. Он комплементарен NumMultipliers. Необходимо выбрать то одно свойство, то другое; вы не можете использовать оба. Если вы не задаете FoldingFactor
или NumMultipliers
HDL-код для фильтра генерируется с полностью параллельной архитектурой.
Можно использовать этот параметр, чтобы сгенерировать заданное количество ступеней трубопровода на входах умножителя для структур конечной импульсной характеристики фильтра. Значение по умолчанию 0.
Следующее ограничение распространяется на MultiplierInputPipeline
:
Этапы трубопровода вводят задержки вдоль пути в модели, которая содержит поврежденный фильтр. Когда вы включаете эту опцию конвейера, кодер автоматически добавляет задержки балансировки на параллельных путях данных.
Диаграммы того, где эти этапы трубопровода происходят в архитектуре фильтра, смотрите в HDL Filter Architectures.
Можно использовать этот параметр, чтобы сгенерировать заданное количество ступеней трубопровода на выходах умножителя для структур конечной импульсной характеристики фильтра. Значение по умолчанию 0.
Следующее ограничение распространяется на MultiplierOutputPipeline
:
Этапы трубопровода вводят задержки вдоль пути в модели, которая содержит поврежденный фильтр. Когда вы включаете эту опцию конвейера, кодер автоматически добавляет задержки балансировки на параллельных путях данных.
Диаграммы того, где эти этапы трубопровода происходят в архитектуре фильтра, смотрите в HDL Filter Architectures.
NumMultipliers
задает общее количество умножителей, используемых для реализации фильтра в БИХ SOS с последовательной архитектурой. Он дополняет свойство FoldingFactor. Необходимо выбрать то одно свойство, то другое; вы не можете использовать оба. Если вы не задаете FoldingFactor
или NumMultipliers
HDL-код для фильтра генерируется с полностью параллельной архитектурой.
Можно использовать этот параметр, чтобы включить или отключить повторное использование аккумулятора в последовательной HDL- архитектуры. По умолчанию это полностью параллельная архитектура.
Чтобы сгенерировать это Архитектура... | Установите значение ReuseAccum на... |
---|---|
Полностью параллельный | Опустить это свойство |
Полностью последовательный | Не задан, или 'off' |
Частично последовательный | 'off' |
Каскадно-последовательный с явно заданным разбиением | 'on' |
Каскадно-последовательный с автоматически оптимизированным разбиением | 'on' |
Для получения дополнительной информации о архитектурах параллельных и последовательных фильтров смотрите HDL-архитектуру фильтров
Используйте этот параметр, чтобы задать разделы для архитектуры последовательного фильтра. По умолчанию это полностью параллельная архитектура.
Чтобы сгенерировать это Архитектура... | Установите значение SerialPartition на... |
---|---|
Полностью параллельный | Опустить это свойство |
Полностью последовательный | N , где N - длина фильтра |
Частично последовательный | [p1 p2 p3...pN] : Вектор из целых чисел, имеющих N элементы, где N количество последовательных разделов. Каждый элемент вектора задает длину соответствующего раздела. Сумма векторных элементов должна быть равна длине фильтра. Когда вы задаете секционирование для частично последовательной архитектуры, примите к сведению следующее:
|
Каскадно-последовательный с явно заданным разбиением | [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.