Улучшание производительности фильтра с конвейеризацией

Оптимизация тактовой частоты с конвейерными регистрами

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

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

Например, для шестого БИХ-фильтра порядка, кодер добавляет два конвейерных регистра. Кодер вставляет конвейерный регистр между первым и вторым разделом, и между вторым и третьим разделом.

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

Примечание

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

Использовать конвейерные регистры,

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

  2. Для КИХ антисимметричный КИХ и симметричные КИХ-фильтры, рассматривают установку допуска на погрешность для сгенерированного испытательного стенда составлять числовые различия. Допуск на погрешность является количеством младших значащих битов, которые испытательный стенд игнорирует при сравнении результатов. Установить допуск на погрешность:

    1. Выберите панель Test Bench в диалоговом окне Generate 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. В качестве альтернативы можно дать кодеру команду применять дерево или конвейерно обрабатывать итоговое суммирование. Когда установлено в древовидный режим, кодер создает итоговый сумматор, который выполняет попарное сложение на последовательных продуктах, которые выполняются параллельно, а не последовательно. Конвейерный режим приводит к результатам, похожим на древовидный режим со сложением этапа конвейерных регистров после обработки каждого уровня дерева.

В сравнении,

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

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

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

Изменить итоговое суммирование, которое будет применено к КИХ-фильтру:

  1. Выберите одну из этих опций в панели Filter architecture диалогового окна Generate HDL.

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

    1. Выберите панель Test Bench в диалоговом окне Generate 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 на диалоговом окне Generate HDL.

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

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

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