Проектирование параллельных КИХ-фильтров в базисе ПЛИС

PDF версия
Перемножители сигналов играют ключевую роль в проектировании высокопроизводительных цифровых фильтров. В статье показаны различные варианты реализации КИХ-фильтров с использованием перемножителей на мегафункциях ALTMULT_ACCUM, ALTMULT_ADD и ALTMEMMULT САПр Quartus II компании Altera [1] в базисе ПЛИС. Авторы также сосредоточили свое внимание на реализации умножения методом правого сдвига с накоплением, применяемого для разработки масштабирующего аккумулятора.

Рассмотрим уравнение КИХ-фильтра (нерекурсивного цифрового фильтра с конечно-импульсной характеристикой), которое представляется как арифметическая сумма произведений:

где y — отклик цепи; xkk-ая входная переменная; Ck — весовой коэффициент k-ой входной переменной, который является постоянным для всех n; K — число отводов фильтра.

В качестве простейшего примера рассмотрим три варианта проектирования параллельного КИХ-фильтра на четыре отвода:

y = C0x0+C1x1+C2x2+C3x3 (2)

с использованием мегафункций САПР ПЛИС Quartus II компании Altera [1], объединенных общей идеей использования перемножителей цифровых сигналов и «дерева сумматоров». Коэффициенты фильтра и входные отсчеты возьмем из работы [2]. В [2] рассматривалось проектирование КИХ-фильтра на четыре отвода с использованием последовательной распределенной арифметики.

Предположим, что коэффициенты фильтра целочисленные, со знаком, известны и равны: C0 = –2, C1 = –1, C2 = 7 и C3 = 6. На вход КИХ-фильтра поступают входные отсчеты –5, 3, 1 и 0. Правильные значения на выходе фильтра: 10, –1, –40, –10, 26, 6 и т. д., то есть согласно формуле (2).

Первый вариант

Это параллельная реализация КИХ-фильтра на четыре отвода с помощью четырех блоков умножения с накоплением. В проекте используется четыре мегафункции ALTMULT_ACCUM (рис. 1). Каждый блок использует один перемножитель и один сумматор-аккумулятор. Для параллельной реализации фильтра на четыре отвода требуется четыре блока и три дополнительных однотипных многоразрядных сумматора, связанных по принципу «дерево сумматоров». Для того чтобы фильтр работал корректно, необходимо осуществлять синхронную загрузку каждого произведения в каждый сумматор-аккумулятор каждого блока. Для этого служит дополнительный вход мегафункции accum_sload. На рис. 1 также показана внешняя линия задержки на четыре отвода из трех 4-разрядных регистров, тактируемых фронтом синхросигнала. Коэффициенты фильтра представляются в двоичном виде с учетом знака числа и загружаются с помощью мегафункции LPM_CONSTANT.

Параллельная реализация КИХ-фильтра на четыре отвода с использованием четырех блоков в САПР ПЛИС Quartus II (мегафункция ALTMULT_ACCUM)

Рис. 1. Параллельная реализация КИХ-фильтра на четыре отвода с использованием четырех блоков в САПР ПЛИС Quartus II (мегафункция ALTMULT_ACCUM)

Второй вариант

Параллельная реализация КИХ-фильтра на четыре отвода с помощью четырех перемножителей в блоке на мегафункции ALTMULT_ADD (функция умножения и сложения) в САПР ПЛИС Quartus II показана на рис. 2. В мегафункции ALTMULT_ACCUM используется три встроенных сумматора. Профильтрованные значения приведены на рис. 3. Сравнивая временные диаграммы, видим, что профильтрованные значения на выходе у двух фильтров, построенных на разных мегафункциях, совпадают.

Параллельная реализация КИХ-фильтра на четыре отвода с использованием четырех перемножителей в блоке (мегафункция ALTMULT_ADD). Линия задержки такая же, как и на рис. 1

Рис. 2. Параллельная реализация КИХ-фильтра на четыре отвода с использованием четырех перемножителей в блоке (мегафункция ALTMULT_ADD). Линия задержки такая же, как и на рис. 1

Временные диаграммы работы параллельных фильтров на четыре отвода с использованием мегафункций ALTMULT_ACCUM и ALTMULT_ADD

Рис. 3. Временные диаграммы работы параллельных фильтров на четыре отвода с использованием мегафункций ALTMULT_ACCUM и ALTMULT_ADD

Значительно упростить разработку КИХ-фильтра позволяет иное использование мегафункции ALTMULT_ACCUM (модификация первого варианта). Фактически это одна мегафункция (один блок с четырьмя перемножителями), в которой линия задержки организована на внутренних регистрах четырех перемножителей. В мегафункции используются встроенные два сумматора и один сумматор-аккумулятор (рис. 4). Временные диаграммы, показанные на рис. 5, не отличаются от диаграмм на рис. 3.

Параллельная реализация КИХ-фильтра на четыре отвода с использованием одного блока с четырьмя перемножителями в САПР ПЛИС Quartus II (мегафункция ALTMULT_ACCUM). Линия задержки построена на внутренних регистрах перемножителей MULT0-MULT3

Рис. 4. Параллельная реализация КИХ-фильтра на четыре отвода с использованием одного блока с четырьмя перемножителями в САПР ПЛИС Quartus II (мегафункция ALTMULT_ACCUM). Линия задержки построена на внутренних регистрах перемножителей MULT0-MULT3

Временные диаграммы работы фильтра на четыре отвода с использованием мегафункции ALTMULT_ACCUM

Рис. 5. Временные диаграммы работы фильтра на четыре отвода с использованием мегафункции ALTMULT_ACCUM

Рассмотрим умножение десятичного числа 11 на 10 на примере мегафункции ALTMEMMULT (рис. 6). Мегафункция ALTMEMMULT предназначена для умножения числа на константу, которая хранится в блочной памяти ПЛИС (M512, M4K, M9K и MLAB-блоки), обеспечивая наивысшее быстродействие, лимитируемое латентностью. Однако константу можно загрузить и из внешнего порта. Считаем, что 10 — это константа, которая загружается из внешнего порта. По умолчанию в мегафункцию загружена, например, константа 3. Латентность мегафункции — 2, то есть доступность результата умножения числа на константу, если константа хранится в памяти мегафункции, возможна уже после двух синхроимпульсов (высокий уровень сигнала done, соответствующий порту load_done). Число «3», загруженное в мегафункцию по умолчанию, умноженное на число 11 с входного порта data_in[3..0], дает результат — 33.

Умножение 11 на 10 с помощью мегафункции ALTMEMMULT

Рис. 6. Умножение 11 на 10 с помощью мегафункции ALTMEMMULT

Далее, синхронный сигнал загрузки load (порт sload_coeff) разрешает загрузку числа 10 в перемножитель. Низкий уровень сигнала done в течение 16 тактов синхрочастоты говорит о том, что идет процесс умножения. И лишь спустя два синхроимпульса при высоком уровне сигнала done на выходе появляется требуемое число — 110. Таким образом, процесс умножения составляет 20 синхроимпульсов от момента появления сигнала load (рис. 7).

Временные диаграммы умножения 11 на 10. По умолчанию в мегафункцию загружена константа 3. Результат — 110

Рис. 7. Временные диаграммы умножения 11 на 10. По умолчанию в мегафункцию загружена константа 3. Результат — 110

Третий вариант

 Применяя мегафункцию ALTMEMMULT, разработаем параллельную реализацию КИХ-фильтра на четыре отвода с использованием четырех перемножителей (четыре блока по одному перемножителю в каждом) в САПР ПЛИС Quartus II и «дерева сумматоров» (рис. 8).

Параллельная реализация КИХ-фильтра на четыре отвода с использованием четырех умножителей в САПР ПЛИС Quartus II (мегафункция ALTMEMMULT). Линия задержки построена на четырех регистрах, коэффициенты фильтра загружаются из внешнего порта

Рис. 8. Параллельная реализация КИХ-фильтра на четыре отвода с использованием четырех умножителей в САПР ПЛИС Quartus II (мегафункция ALTMEMMULT). Линия задержки построена на четырех регистрах, коэффициенты фильтра загружаются из внешнего порта

Внешняя линия задержки состоит не из трех регистров, как в первых двух вариантах, а из четырех регистров. Дополнительно требуется, как и в первом варианте, три однотипных многоразрядных сумматора. Латентность каждого умножителя — 2. В каждый умножитель по умолчанию загружено число 0. Временные диаграммы работы фильтра на четыре отвода с использованием мегафункции ALTMEMMULT показаны на рис. 9.

Временные диаграммы работы фильтра на четыре отвода с использованием мегафункции ALTMEMMULT. Коэффициенты фильтра загружаются из внешнего порта

Рис. 9. Временные диаграммы работы фильтра на четыре отвода с использованием мегафункции ALTMEMMULT. Коэффициенты фильтра загружаются из внешнего порта

Коэффициенты фильтра C0 = –2, C1 = –1, C2 = 7 и C3 = 6 загружаются из внешнего порта. Для этих целей используется мегафункция LPM_CONSTANT.

Рассмотрим вариант, когда коэффициенты фильтра загружаются из блочной памяти в ПЛИС. В мегафункции ALTMEMMULT коэффициенты представляются как целочисленные значения со знаком (рис. 10).

Параллельная реализация КИХ-фильтра на четыре отвода с использованием четырех перемножителей в САПР ПЛИС Quartus II (мегафункция ALTMEMMULT). Линия задержки построена на четырех регистрах, коэффициенты фильтра загружаются из блочной памяти

Рис. 10. Параллельная реализация КИХ-фильтра на четыре отвода с использованием четырех перемножителей в САПР ПЛИС Quartus II (мегафункция ALTMEMMULT). Линия задержки построена на четырех регистрах, коэффициенты фильтра загружаются из блочной памяти

Временные диаграммы работы фильтра на четыре отвода с использованием мегафункции ALTMEMMULT показаны на рис. 11. Сравнивая рис. 9 и 11, видим, что быстродействие фильтра в этом случае значительно увеличивается за счет хранения коэффициентов в блочной памяти.

Временные диаграммы работы фильтра на четыре отвода с использованием мегафункции ALTMEMMULT. Коэффициенты фильтра загружаются из блочной памяти ПЛИС

Рис. 11. Временные диаграммы работы фильтра на четыре отвода с использованием мегафункции ALTMEMMULT. Коэффициенты фильтра загружаются из блочной памяти ПЛИС

Масштабирующий аккумулятор не только входит в состав последовательных КИХ-фильтров, его можно применять и для других целей. Рассмотрим проектирование масштабирующего аккумулятора с помощью метода правого сдвига с накоплением на примере умножения числа 11 на константу 10 (целочисленные беззнаковые значения).

Идея схемы умножения методом правого сдвига с накоплением: а) алгоритм умножения десятичного числа 11 на 10; б) структурная схема метода

Рис. 12. Идея схемы умножения методом правого сдвига с накоплением: а) алгоритм умножения десятичного числа 11 на 10; б) структурная схема метода

На рис. 12 показана идея схемы умножения методом правого сдвига с накоплением [3]. Для практической реализации в базисе ПЛИС потребуется преобразователь параллельного кода в последовательный со сдвигом вправо (мегафункция LPM_SHIFTREG), умножитель 1-разрядного числа на 4-разрядное (мегафункция LPM_MULT, старший значащий разряд игнорируется) и масштабирующий аккумулятор (рис. 13).

Схема умножения методом правого сдвига с накоплением

Рис. 13. Схема умножения методом правого сдвига с накоплением

На рис. 14 показан масштабирующий аккумулятор, который состоит из 4-разрядного сумматора (мегафункция LPM_ADD_SUB), сдвиговых регистров lpm_shiftreg0 и shift_LSB, вспомогательного регистра ff5 и регистра результата ff8. Регистр ff5 объединяет результат суммирования 2p[3..0] и разряд переноса Coutсумматора. Младший значащий разряд накапливается в регистре shift_LSB. Полученный 5-разрядный сигнал сдвигается вправо на один разряд с помощью сдвигового регистра lpm_shiftreg0, при этом старший значащий разряд отбрасывается, а оставшиеся, более младшие разряды вновь поступают на один из входов сумматора. В регистре ff8 происходит сохранение результата преобразования, который представляет собой 8-разрядный сигнал, полученный объединением сигналов p[3..0] и LSB[3..0].

Масштабирующий аккумулятор

Рис. 14. Масштабирующий аккумулятор

На рис. 15 показаны временные диаграммы умножения числа 11 на 10. Результат — 110. Сравнивая результат умножения числа 11 на 10 с помощью мегафункции ALTMEMMULT, показанный на рис. 7 и 15, с использованием метода правого сдвига с накоплением, видим, что для умножения во втором случае потребовалось 18 синхроимпульсов. Если в разработанном варианте в качестве перемножителя использовать мультиплексор многоразрядных сигналов, то можно получить бесперемножительную схему умножения и построить КИХ-фильтр без операции явного умножения.

Временные диаграммы умножения числа 11 на 10 методом правого сдвига с накоплением. Результат —110

Рис. 15. Временные диаграммы умножения числа 11 на 10 методом правого сдвига с накоплением. Результат —110

 

Выводы

Рассмотрены различные варианты проектирования параллельных КИХ-фильтров с использованием мегафункций САПР ПЛИС Quartus II компании Altera, а также умножение методом правого сдвига с накоплением.

Фильтр на мегафункции ALTMULT_ACCUM (вариант 1) является самым затратным, так как требует 16 аппаратных перемножителей, три дополнительных сумматора и внешнюю линию задержки (таблица).

Таблица. Анализ задействованных ресурсов ПЛИС серии Stratix при реализации параллельных КИХ-фильтров на четыре отвода с использованием мегафункций ALTMULT_ACCUM, ALTMULT_ADD и ALTMEMMULT

Ресурсы ПЛИС cерии Stratix

Мегафункция ALTMULT_ACCUM. Четыре блока по одному перемножителю в каждом, внешняя линия задержки из трех регистров /один блок (четыре перемножителя в блоке, встроенная линия задержки)

Мегафункция ALTMULT_ADD.

Четыре перемножителя в блоке, внешняя линия задержки из трех регистров

Мегафункция ALTMEMMULT.

Четрые блока по одному перемножителю в каждом (коэффициенты фильтра загружаются из внешнего порта)

Мегафункция ALTMEMMULT.

Четыре блока по одному перемножителю в каждом (коэффициенты фильтра загружаются из блочной памяти)

Вариант 1

Модификация

варианта 1

Вариант 2

Вариант 3

Количество АЛМ для выполнения комбинационных функций

18

0

0

181

18

Количество АЛМ с памятью

0

0

0

64

36

АЛМ

18

0

8

152

4

Количество выделенных регистров

12

0

12

248

68

Аппаратные перемножители (ЦСП 18×18)

16

4

4

0

0

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

18

0

0

49

36

Количество АЛМ под регистерные ресурсы

12

0

12

50

196

Количество АЛМ под комбинационные и регистерные ресурсы

0

0

0

196

18

Рабочая частота в наихудшем случае, МГц

400

400

400

331

400

Примечание. АЛМ — адаптивные логические модули.

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

Мегафункции ALTMULT_ADD также позволяет построить параллельный КИХ-фильтр с помощью всего лишь одного блока с четырьмя перемножителями и встроенными тремя сумматорами. Использование внешней линии задержки из трех регистров приводит к незначительному увеличению ресурсов и не сказывается на быстродействии. Экономия ресурсов ПЛИС в первом, модифицированном и во втором вариантах достигается за счет встроенных четырех аппаратных перемножителей 18×18.

Фильтр на мегафункции ALTMEMMULT с загрузкой коэффициентов из внешнего порта обладает пониженным быстродействием. Использование же блочной памяти для хранения коэффициентов фильтра внутри ПЛИС значительно упрощает процесс разработки и не приводит к существенному увеличению ресурсов за счет внешней линии задержки на четырех регистрах, дополнительных трех однотипных многоразрядных сумматорахв и не снижает быстродействие проекта.

Литература
  1. altera.com. Integer Arithmetic Megafunctions. UG-01063-3.0. Altera Corporation. Feb. 2012.
  2. Строгонов А., Быстрицкий А. КИХ-фильтр на распределенной арифметике: проектируем сами // Компоненты и технологии. 2013. № 3.
  3. Computer Arithmetic: Algorithms and Hardware Designs. Oxford U. Press, 2010.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *