Можно оптимизировать тактовую частоту, используемую кодом фильтра, применяя регистры конвейера. Хотя регистры увеличивают общую задержку фильтра и используемое пространство, они обеспечивают значительное улучшение тактовой частоты. По умолчанию эти регистры отключены. Когда они включены, кодер добавляет регистры между стадиями вычислений в фильтре.
| Для... | Добавлены регистры трубопроводов |
|---|---|
| КИХ, антисимметричные КИХ и симметричные КИХ-фильтры | Между уровнями конечного дерева суммирования |
| Транспонированные фильтры FIR | Между множителями коэффициентов и сумматорами |
| Фильтры БИХ | Между секциями |
| CIC | Между секциями гребенки |
Например, для БИХ-фильтра шестого порядка кодер добавляет два конвейерных регистра. Кодер вставляет регистр трубопровода между первой и второй секциями и между второй и третьей секциями.
Для КИХ-фильтров использование конвейерных регистров оптимизирует окончательное суммирование фильтра. Дополнительные сведения см. в разделе Оптимизация окончательного суммирования для фильтров FIR.
Примечание
Конвейерные регистры в КИХ, антисимметричных КИХ и симметричных КИХ-фильтрах могут давать числовые результаты, которые отличаются от результатов, полученных исходным объектом фильтра, поскольку они заставляют древовидный режим окончательного суммирования.
Для использования регистров трубопроводов
Выберите опцию Добавить регистры трубопровода (Add pipeline regists) на панели Архитектура фильтра (Filter architecture) диалогового окна Создать HDL (Generate HDL).
Для КИХ, антисимметричных КИХ и симметричных КИХ-фильтров рассмотрите возможность установки запаса ошибки для созданного стенда для учета числовых различий. Запас погрешности - это количество младших битов, игнорируемых тестовым стендом при сравнении результатов. Чтобы задать поле ошибки, выполните следующие действия.
Выберите панель Test Stench в диалоговом окне Generate HDL. Затем перейдите на вкладку Конфигурация.
Установите в поле Error margin (bits) целое число, указывающее максимально допустимое число разностей в числовых результатах.
Продолжите настройку других параметров или нажмите кнопку «» Создать «», чтобы инициировать создание кода.
Альтернатива командной строки: generatehdl функция со свойством AddPipelineRegisters оптимизировать фильтры с трубопроводными регистрами.
Если сохранить операции множителя для фильтра FIR, можно достичь более высоких тактовых частот путем добавления ступеней конвейера на входах или выходах множителя.
На следующем рисунке показаны параметры пользовательского интерфейса для опций конвейерирования множителей. Чтобы включить эти опции, используйте множители коэффициентов для Multiplier.
Входной трубопровод множителя: для добавления ступеней трубопровода перед каждым множителем введите требуемое количество ступеней в виде целого числа, большего или равного 0.
Выходной трубопровод множителя: для добавления ступеней трубопровода после каждого множителя введите требуемое количество ступеней в виде целого числа, большего или равного 0.

Альтернатива командной строки: generatehdl функции с помощью MultiplierInputPipeline и MultiplierOutputPipeline для указания конвейера множителя для фильтров FIR.
При создании кода HDL для фильтра FIR рекомендуется оптимизировать метод окончательного суммирования, применяемый к фильтру. По умолчанию кодер применяет линейное суммирование сумматора, которое является методом окончательного суммирования, обсуждаемым в большинстве текстовых книг DSP. Можно также поручить кодеру применить дерево или конечное суммирование конвейера. При установке в режим дерева кодер создает конечный сумматор, который выполняет парное сложение с последовательными продуктами, которые выполняются параллельно, а не последовательно. Режим конвейера дает результаты, аналогичные режиму дерева, с добавлением этапа регистров конвейера после обработки каждого уровня дерева.
Для сравнения:
Количество операций сумматора для линейного и древовидного режимов одинаково. Синхронизация для режима дерева может быть лучше благодаря параллельным добавлениям.
Конвейерный режим оптимизирует тактовую частоту, но увеличивает задержку фильтра. Задержка увеличивается на log2(number of products), округляется до ближайшего целого числа.
Линейный режим помогает достичь числовой точности по сравнению с исходным объектом фильтра. Режимы дерева и трубопровода могут давать числовые результаты, которые отличаются от результатов, полученных объектом фильтра.
Для изменения окончательного суммирования, применяемого к фильтру FIR:
Выберите одну из этих опций на панели Архитектура фильтра (Filter architecture) диалогового окна Создать HDL (Generate HDL).
| Для... | Выбрать... |
|---|---|
| Линейный режим (по умолчанию) | Linear из меню стиля сумматора FIR |
| Режим дерева | Tree из меню стиля сумматора FIR |
| Режим трубопровода | Флажок Добавить регистры трубопровода (Add pipeline regists) |
Если задан режим дерева или конвейера, рекомендуется задать поле ошибки для созданного стенда для учета числовых различий. Запас погрешности - это количество младших битов, игнорируемых тестовым стендом при сравнении результатов. Чтобы задать поле ошибки,
Выберите панель Test Stench в диалоговом окне Generate HDL. Затем перейдите на вкладку Конфигурация.
Установите в поле Error margin (bits) целое число, указывающее максимально допустимое число разностей в числовых результатах.
Продолжите настройку других параметров или нажмите кнопку «» Создать «», чтобы инициировать создание кода.
Альтернатива командной строки: generatehdl функция со свойством FIRAdderStyle или AddPipelineRegisters для оптимизации окончательного суммирования для фильтров FIR.
Кодер добавляет дополнительный входной регистр (input_register) и дополнительный выходной регистр (output_register) при формировании кода HDL. Эти дополнительные регистры могут быть полезны для целей синхронизации, но они увеличивают общую задержку.
Следующий блок процесса записывает данные в дополнительный входной регистр input_register когда происходит событие синхронизации и clk является активным высоким (1):
Input_Register_Process : PROCESS (clk, reset)
BEGIN
IF reset = '1' THEN
input_register <= (OTHERS => '0');
ELSIF clk'event AND clk = '1' THEN
IF clk_enable = '1' THEN
input_register <= input_typeconvert;
END IF;
END IF;
END PROCESS Input_Register_Process ;
Следующий блок процесса записывает данные в дополнительный выходной регистр output_register когда происходит событие синхронизации и clk является активным высоким (1):
Output_Register_Process : PROCESS (clk, reset)
BEGIN
IF reset = '1' THEN
output_register <= (OTHERS => '0');
ELSIF clk'event AND clk = '1' THEN
IF clk_enable = '1' THEN
output_register <= output_typeconvert;
END IF;
END IF;
END PROCESS Output_Register_Process;
Если общая задержка связана с вашим приложением и у вас нет требований к времени, можно подавить создание дополнительных регистров следующим образом:
Выберите вкладку Глобальные настройки (Global Settings) в диалоговом окне Создать ЛПВП (Generate HDL).
Выберите вкладку Порты на панели Дополнительные настройки.
Снимите флажки Add input register (добавить входной регистр) и Add output register (добавить выходной регистр при необходимости). На следующем рисунке показана настройка подавления генерации дополнительного входного регистра.

Альтернатива командной строки: generatehdl и функции со свойствами AddInputRegister иAddOutputRegister для добавления дополнительного входного или выходного регистра.