Повышение эффективности фильтра при конвейеризации

Оптимизация тактовой частоты с помощью регистров трубопровода

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

Для...Добавлены регистры трубопроводов
Конечная импульсная характеристика, антисимметричные конечные импульсные характеристики и симметричные конечные импульсные характеристики фильтрыМежду уровнями дерева окончательного суммирования
Транспонированные конечная импульсная характеристикаМежду умножителями коэффициентов и сумматорами
БИХМежду секциями
CICМежду секциями гребня

Для примера для фильтра БИХ шестого порядка кодер добавляет два регистра конвейера. Кодер вставляет регистр конвейера между первой и второй секциями и между второй и третьей секциями.

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

Примечание

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

Чтобы использовать регистры трубопровода,

  1. Выберите опцию Add pipeline registers на панели Filter architecture диалогового окна Генерация HDL.

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

    1. Выберите панель Test Bench в диалоговом окне Генерация HDL. Затем перейдите на вкладку Configuration.

    2. Установите поле Error margin (bits) в целое число, которое указывает на максимально допустимое количество бит различия в числовых результатах.

  3. Продолжите установку других опций или щелкните Generate, чтобы инициировать генерацию кода.

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

Множитель Входа и Выхода Конвейеризации для конечной импульсной характеристики фильтров

Если вы сохраняете операции умножения для конечная импульсная характеристика, можно достичь более высоких тактовых частот путем добавления этапов конвейера на входах или выходах умножителя.

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

  • Multiplier input pipeline: Чтобы добавить этапы трубопровода перед каждым умножителем, введите желаемое количество этапов как целое число, больше или равное 0.

  • Multiplier output pipeline: Чтобы добавить этапы трубопровода после каждого умножителя, введите желаемое количество этапов как целое число, больше или равное 0.

Альтернатива командной строки: используйте generatehdl функция со MultiplierInputPipeline и MultiplierOutputPipeline свойства для настройки конвейеризации умножителя для конечная импульсная характеристика.

Оптимизация итогового суммирования для конечная импульсная характеристика

Если вы генерируете HDL-код для конечная импульсная характеристика, рассмотрите оптимизацию метода окончательного суммирования, который будет применяться к фильтру. По умолчанию кодер применяет линейное суммирование сумматора, которое является методом окончательного суммирования, обсуждаемым в большинстве текстовых книг DSP. Кроме того, можно дать указание кодеру применить окончательное суммирование дерева или конвейера. При переходе в древовидный режим кодер создает конечный сумматор, который выполняет парное сложение для последующих продуктов, которые выполняются параллельно, а не последовательно. Режим Pipeline приводит к результатам, подобным древовидному режиму с сложением стадии регистров Pipeline после обработки каждого уровня дерева.

Для сравнения,

  • Количество операций суммирования для линейного и древовидного режимов одинаковое. Синхронизация для древовидного режима может быть лучше из-за параллельных сложений.

  • Режим конвейера оптимизирует тактовую частоту, но увеличивает задержку фильтра. Задержка увеличивается на log2(number of products), округлый до ближайшее целого числа.

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

Чтобы изменить окончательное суммирование, которое будет применено к конечная импульсная характеристика:

  1. Выберите один из следующих опций на панели Filter architecture диалогового окна Генерация HDL.

    Для...Выберите...
    Линейный режим (по умолчанию)Linear из меню FIR adder style
    Древовидный режим Tree из меню FIR adder style
    Режим трубопроводаФлажок Add pipeline registers
  2. Если вы задаете дерево или конвейерный режим, рассмотрите установку запаса по ошибке для сгенерированного испытательного стенда, чтобы учесть числовые различия. Запас по ошибке - это количество наименее значимых битов, которые испытательный стенд игнорирует при сравнении результатов. Чтобы задать поле ошибки,

    1. Выберите панель Test Bench в диалоговом окне Генерация HDL. Затем перейдите на вкладку Configuration.

    2. Установите поле Error margin (bits) в целое число, которое указывает на максимально допустимое количество бит различия в числовых результатах.

  3. Продолжите установку других опций или щелкните Generate, чтобы инициировать генерацию кода.

Альтернатива командной строки: используйте generatehdl функция со свойством FIRAdderStyle или AddPipelineRegisters оптимизировать окончательное суммирование для конечная импульсная характеристика.

Определение или подавление зарегистрированных входных и выходных входов

Кодер добавляет дополнительный входной регистр (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;

Если общая задержка является проблемой для вашего приложения, и у вас нет временных требований, можно подавить генерацию дополнительных регистров следующим образом:

  1. Выберите вкладку Global Settings в диалоговом окне Сгенерировать HDL.

  2. Выберите вкладку Ports на панели Additional settings.

  3. Очистить Add input register и Add output register по мере необходимости. Следующий рисунок показывает настройку для подавления генерации дополнительного входного регистра.

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