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

AdderTreePipeline

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

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

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

AddPipelineRegisters

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

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

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

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

    Примечание

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

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

ChannelSharing

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

Смотрите многоканальный КИХ-фильтр для FPGA (DSP System Toolbox).

CoeffMultipliers

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

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

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

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

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

DALUTPartition

Размер LUT растет экспоненциально с порядком фильтра. Для фильтра с N коэффициенты, LUT должен иметь 2^N значения. Для фильтров высшего порядка размер LUT должен уменьшаться до разумных уровней. Чтобы уменьшать размер, можно подразделить LUT на многие LUTs, названные 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 как

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

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

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

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

DARadix

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

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

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

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

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

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

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

Примечание

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

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

FoldingFactor

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

MultiplierInputPipeline

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

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

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

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

MultiplierOutputPipeline

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

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

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

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

NumMultipliers

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

ReuseAccum

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

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

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

SerialPartition

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

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

Похожие темы