Это свойство применяется к основанным на кадре фильтрам. Это задает, сколько конвейерных регистров архитектура включает между уровнями дерева сумматора. Эти настройки канала связи увеличивают пропускную способность фильтра при добавлении задержки. Значением по умолчанию является 0
. Чтобы улучшить скорость этой архитектуры, рекомендуемой установкой является 2
.
Настройки канала связи вводят задержки вдоль пути в модели, которая содержит затронутый фильтр. Когда вы включаете эту конвейерную опцию, кодер автоматически добавляет балансирующиеся задержки на параллельных информационных каналах.
Для получения дополнительной информации об основанной на кадре архитектуре фильтра смотрите Основанную на кадре Архитектуру.
Это свойство применяется к скалярным входным фильтрам. Когда вы включаете это свойство, линейный сумматор по умолчанию фильтра реализован как конвейерный древовидный сумматор вместо этого. Эта архитектура увеличивает пропускную способность фильтра при добавлении задержки. Значением по умолчанию является off
.
Следующие ограничения применяются к AddPipelineRegisters
:
Если вы используете AddPipelineRegisters
, генератор кода обеспечивает полную точность в HDL и сгенерированной модели фильтра. Эта опция реализует конвейерную древовидную структуру сумматора в HDL-коде, для которого только поддерживается полная точность. Если вы генерируете модель валидации, необходимо использовать полную точность в исходной модели, чтобы избежать несоответствий валидации.
Настройки канала связи вводят задержки вдоль пути в модели, которая содержит затронутый фильтр. Когда вы включаете эту конвейерную опцию, кодер автоматически добавляет балансирующиеся задержки на параллельных информационных каналах.
Когда вы используете это свойство с блоком CIC Interpolation, задержки параллельных путей автоматически не сбалансированы. Вручную добавьте задержки при необходимости вашим проектом.
Для схем архитектуры фильтра, которые указывают, где настройки канала связи добавляются, смотрите Архитектуру Фильтра HDL.
Можно использовать параметр реализации ChannelSharing
с многоканальным фильтром, чтобы позволить совместно использовать одну реализацию фильтра среди каналов для более эффективного областью проекта. Этим параметром является или 'on'
или 'off'
. Значением по умолчанию является 'off'
, и отдельный фильтр будет реализован для каждого канала.
Смотрите генерируют HDL-код для многоканального КИХ-фильтра (DSP System Toolbox).
Параметр реализации CoeffMultipliers
позволяет вам задать использование канонической цифры со знаком (CSD) или учтенную оптимизацию CSD для обработки содействующих операций множителя в коде, сгенерированном для определенных блоков фильтра. Задайте параметр CoeffMultipliers
с помощью одной из следующих опций:
'csd'
: Используйте методы CSD, чтобы заменить операции множителя на операции shift-and-add. Методы CSD минимизируют количество операций сложения, требуемых для постоянного умножения путем представления двоичных чисел с минимальным количеством ненулевых цифр. Это представление уменьшает область, используемую фильтром при поддержании или увеличении тактовой частоты.
'factored-csd'
: Используйте учтенные методы CSD, которые заменяют операции множителя на операции shift-and-add на простых множителях коэффициентов. Эта опция позволяет вам достигнуть большего сокращения области фильтра, чем CSD, за счет уменьшения тактовой частоты.
'multipliers'
(значение по умолчанию): Сохраните операции множителя.
HDL Coder™ поддерживает CoeffMultipliers
для полностью параллельных реализаций фильтра. Это не поддержано для полностью последовательной и частично последовательной архитектуры.
Размер 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.
Чтобы определить раздел LUT для одного из поддерживаемых типов односкоростного фильтра, вычислите FL
как показано в следующей таблице. Затем задайте раздел как вектор, элементы которого суммируют к FL
.
Отфильтруйте тип | Расчет Длины фильтра (FL) |
---|---|
КИХ прямой формы | FL = length(find(Hd.numerator ~= 0)) |
Прямая форма асимметричный КИХ, прямая форма симметричный КИХ | FL = ceil(length(find(Hd.numerator ~= 0))/2) |
Можно также задать генерацию кода DA для проекта фильтра без разделения LUT. Для этого задайте вектор одного элемента, значение которого равно длине фильтра.
Для поддерживаемых многоскоростных фильтров (КИХ-Десятикратное уменьшение и КИХ-Интерполяция), можно задать раздел LUT как
Вектор, задающий раздел для LUTs для всех многофазных подфильтров.
Матрица разделов LUT, где каждый вектор - строка задает раздел LUT для соответствующего многофазного подфильтра. В этом случае FL
универсален для всех подфильтров. Этот подход обеспечивает точную регулировку для разделения каждого подфильтра.
Следующая таблица показывает вычисления FL
для каждого типа раздела LUT.
Раздел LUT | Расчет Длины фильтра (FL) |
---|---|
Вектор: Определите FL как показано в столбце Расчета Длины фильтра (FL) направо. Задайте раздел LUT как вектор целых чисел, элементы которых суммируют к FL . | FL = size(polyphase(Hm), 2) |
Матрица: Определите длину подфильтра FL i на основе многофазного разложения фильтра, как показано в столбце Расчета Длины фильтра (FL) направо. Задайте раздел LUT для каждого подфильтра как вектор - строка, элементы которого суммируют к FL i. | p = polyphase(Hm); FLi = length(find(p(i,:))); p представляет подфильтр ith. |
По сути поразрядная природа 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
для симметричных и асимметричных фильтров смотрите Факторы для Симметричных и Асимметричных Фильтров.
FoldingFactor
задает общее количество тактов, взятых для вычисления фильтра вывод в БИХ-фильтре SOS с последовательной архитектурой. Это дополнительно с NumMultipliers. Необходимо выбрать одно свойство или другой; вы не можете использовать обоих. Если вы не задаете или FoldingFactor
или NumMultipliers
, HDL-код для фильтра сгенерирован с полностью параллельной архитектурой.
Можно использовать этот параметр, чтобы сгенерировать конкретное количество настроек канала связи во входных параметрах множителя для КИХ-структур фильтра. Значение по умолчанию 0.
Следующее ограничение применяется к MultiplierInputPipeline
:
Настройки канала связи вводят задержки вдоль пути в модели, которая содержит затронутый фильтр. Когда вы включаете эту конвейерную опцию, кодер автоматически добавляет балансирующиеся задержки на параллельных информационных каналах.
Для схем того, где эти настройки канала связи происходят в архитектуре фильтра, смотрите Архитектуру Фильтра HDL.
Можно использовать этот параметр, чтобы сгенерировать конкретное количество настроек канала связи во множителе выходные параметры для КИХ-структур фильтра. Значение по умолчанию 0.
Следующее ограничение применяется к MultiplierOutputPipeline
:
Настройки канала связи вводят задержки вдоль пути в модели, которая содержит затронутый фильтр. Когда вы включаете эту конвейерную опцию, кодер автоматически добавляет балансирующиеся задержки на параллельных информационных каналах.
Для схем того, где эти настройки канала связи происходят в архитектуре фильтра, смотрите Архитектуру Фильтра HDL.
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.