Систолические КИХ-фильтры в базисе ПЛИС
Рассмотрим уравнение КИХ-фильтра (нерекурсивного цифрового фильтра с конечно-импульсной характеристикой), которое представляется как арифметическая сумма произведений:
где y — отклик цепи; xk — k-ая входная переменная; ck — весовой коэффициент k-ой входной переменной, который является постоянным для всех n; K — число отводов фильтра.
В фон-неймановских машинах данные, считанные из памяти, однократно обрабатываются в процессорном элементе (ПЭ), после чего снова возвращаются в память (рис. 1а). Авторы идеи систолической матрицы Кунг и Лейзерсон предложили организовать вычисления так, чтобы данные на своем пути от считывания из памяти до возвращения обратно пропускались через как можно большее число ПЭ (рис. 1б) [1].
Если сравнить положение памяти в вычислительных системах со структурой живого организма, то по аналогии ей можно отвести роль сердца, множеству ПЭ — роль тканей, а поток данных рассматривать как циркулирующую кровь. Отсюда и происходит название «систолическая матрица» (систола — сокращение предсердий и желудочков сердца, при котором кровь нагнетается в артерии). Систолическая структура — это однородная вычислительная среда из процессорных элементов, совмещающая в себе свойства конвейерной и матричной обработки. Систолические структуры эффективны при выполнении матричных вычислений, обработке сигналов, сортировке данных и т. д.
Рассмотрим структуру систолического КИХ-фильтра на четыре отвода (рис. 2). В основе структуры лежит ритмическое прохождение двух потоков данных xin и yin навстречу друг другу. Последовательные элементы каждого потока разделены одним тактовым периодом, так, чтобы любой из них мог встретиться с любым элементом встречного потока. Вычисления выполняются параллельно в процессорных элементах, каждый из которых реализует один шаг в операции вычисления скалярного произведения (рис. 2). Значение yin, поступающее на вход ПЭ, суммируется с произведением входных значений xin и ck. Результат выходит из ПЭ как yout = yin+ckxin. 3начение xin, кроме того, для возможного последующего использования остальной частью массива транслируется через ПЭ без изменений и покидает его в виде xout. Таким образом, на каждый отвод фильтра приходится один ПЭ. На рис. 2 показана структура систолического КИХ-фильтра на четыре отвода [2]. Потоки сигналов yin, представляющего накопленный результат вычисления скалярного произведения и входного xin, распространяются слева направо. На входах xin и выходах суммы каждого ПЭ добавлены регистерные элементы, что позволяет накопленному результату и входному значению оставаться в синхронизации.
Для получения конечного результата используется сеть сумматоров, которая последовательно суммирует скалярные произведения. Фильтр состоит из двух однотипных процессорных элементов ПЭ1 и ПЭ2. На вход yin ПЭ1 необходимо подать сигнал «логического нуля», а на входной линии xin используется один регистр, а не два, как у ПЭ2.
Используя представленные выше соображения, разработаем модель систолического фильтра на четыре отвода y = C0x0+C1x1+C2x2+C3x3 в САПР ПЛИС Quartus II в базисе ПЛИС серии Stratix III. Значения коэффициентов фильтра и входных отсчетов возьмем, как в работах [3, 4]. Предположим, что коэффициенты фильтра целочисленные со знаком, известны и равны C0 = –2, C1 = –1, C2 = 7 и C3 = 6. На вход КИХ-фильтра поступают входные отсчеты –5, 3, 1 и 0. Правильные значения на выходе фильтра: 10, –1, –40, –10, 26, 6 и т. д., то есть согласно формуле (1). В качестве перемножителей используем мегафункцию LPM_MULT. Регистры выполнены на мегафункциях LPM_FF.
Систолический КИХ-фильтр на четыре отвода с процессорными элементами ПЭ1 и ПЭ2 в САПР ПЛИС Quartus II показан на рис. 3.
На рис. 4 и 5 показаны схемы процессорных элементов ПЭ1 и ПЭ2, а на рис. 6 — временные диаграммы работы систолического КИХ-фильтра на четыре отвода.
На входах перемножителя сигналов, выполненных на мегафункции ALT_MULT, в процессорном элементе 1PE должно быть по одному 4-разрядному регистру для процесса согласования вычислений. А на одном из входов перемножителя сигналов в процессорном элементе 2PE необходимы два 4-разрядных регистра, первый из которых играет роль линии задержки.
Упростить структуру систолического КИХ-фильтра позволяет использование однотипного процессорного элемента (рис. 7 и 8). Правильность функционирования такого решения подтверждает диаграмма на рис. 9.
В работе [3] был представлен код языка VHDL КИХ-фильтра с использованием прямой реализации по формуле 1 (пример). По коду были получены временные диаграммы, показанные на рис. 10. Сравнивая временные диаграммы на рис. 6, 9 и 10, видим, что фильтры работают корректно.
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; package coeffs is type coef_arr is array (0 to 3) of signed(3 downto 0); constant coefs: coef_arr:= coef_arr'("1110", "1111", "0111", "0110"); end coeffs; library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use work.coeffs.all; entity fir_var is port (clk, reset, clk_ena: in std_logic; date: in signed (3 downto 0); q_reg: out signed (9 downto 0)); end fir_var; architecture beh of fir_var is begin process(clk,reset) type shift_arr is array (3 downto 0) of signed (3 downto 0); variable shift: shift_arr; variable tmp: signed (3 downto 0); variable pro: signed (7 downto 0); variable acc: signed (9 downto 0); begin if reset='0' then for i in 0 to 3 loop shift(i):= (others => '0'); end loop; q_reg<= (others => '0'); elsif(clk'event and clk = '1') then if clk_ena='1' then shift(0):=date; pro := shift(0) * coefs(0); acc := conv_signed(pro, 10); for i in 2 downto 0 loop pro := shift(i+1) * coefs(i+1); acc := acc + conv_signed(pro, 10); shift(i+1):= shift(i); end loop; end if; end if; q_reg<=acc; end process; end beh;
Пример. Код языка VHDL КИХ-фильтра на четыре отвода
В качестве примера рассмотрим, как обстоит дело с индустриальными ПЛИС последнего поколения фирмы Altera серии Cyclone V и Stratix V [5–8]. В этих сериях появились ЦОС-блоки с переменной точностью, одна из особенностей которых — это реализация систолических КИХ-фильтров. Каждый ЦОС-блок серии Stratix V позволяет реализовать два перемножителя двух 18-разрядных сигналов или один перемножитель двух 32-разрядных сигналов, причем встроенные в выходные цепи ЦОС-блоков многоразрядные сумматоры позволяют организовать первый и второй уровень в дереве многоразрядных сумматоров при проектировании параллельных КИХ-фильтров.
На рис. 11 показана прямая форма КИХ-фильтра с несимметричными коэффициентами на 16 отводов (коэффициенты представлены с 18-битной точностью) с использованием ЦОС-блоков ПЛИС серии Stratix V. В ЦОС-блоках используются два уровня суммирования по отношению к внешнему дереву многоразрядных сумматоров: каскадирующая шина, и, как вариант, линия задержки может быть сконфигурирована из внутренних входных регистров.
На рис. 12 показана прямая форма КИХ-фильтра на восемь отводов с несимметричными коэффициентами с использованием ЦОС-блоков серии Stratix V. Для реализации фильтров с большим числом отводов необходимы внешние линия задержки и дерево многоразрядных сумматоров по отношению к ЦОС-блокам, при этом в самом ЦОС-блоке осуществляется первый уровень суммирования значений с отводов фильтра, предварительно умноженных на его коэффициенты.
Применение ЦОС-блоков при проектировании КИХ-фильтра прямой формы позволяет вдвое сократить число многоразрядных сумматоров, но оставшаяся часть дерева сумматоров реализуется на внутренних ресурсах ПЛИС, что отрицательно сказывается на общем числе задействованных ресурсов. Как следствие, снижается быстродействие фильтра за счет увеличения задержек в трассировочных каналах самой ПЛИС.
Существенно уменьшить число используемых ресурсов позволяет систолический КИХ-фильтр, в ЦОС-блоках которого реализуются операции умножения и сложения с конвейеризацией, то есть отпадает необходимость в дереве многоразрядных сумматоров, однако он может иметь большую латентность по сравнению с прямой реализацией фильтра. Красным цветом на рис. 13 показаны систолические регистры, необходимые для синхронизации двух потоков. Мегафункция ALTMULT_ADD САПР Quartus II, начиная с версии 11.0 для ПЛИС серий Arria V, Cyclone V и Stratix V, позволяет конфигурировать ЦОС-блоки для организации систолических фильтров.
На рис. 14 представлена структура ЦОС-блока с переменной точностью ПЛИС серии Cyclone V, на которой выделен процессорный элемент. На рис. 15 показано диалоговое окно мегафункции ALTMULT_ADD ПЛИС серии Cyclone V (закладка Systolic/Preload) и схематически показано включение систолического регистра в последовательную цепь сумматоров.
Реализация параллельных КИХ-фильтров на четыре отвода в базисе ПЛИС серии Stratix III представлены в таблице. Все рассмотренные варианты фильтров реализованы с применением различных мегафункций. Первый вариант реализован без использования мегафункций ЦОС-блоков, второй вариант задействует лишь по одному умножителю из четырех возможных мегафункции ALTMULT_ACCUM, а третий — четыре умножителя из четырех возможных. Приведенная таблица (вариант 3) показывает максимальное использование ресурсов ЦОС-блоков ПЛИС одной мегафункцией ALTMULT_ADD, за счет использования четырех перемножителей и встроенного дерева сумматоров, реализующие первые и вторые уровни суммирования. Оптимальное использование ЦОС-блоков приводит к снижению общего числа задействованных ресурсов в проекте и повышению быстродействия. Так, снижается до нуля число LUT для реализации комбинационных функций, а количество используемых адаптивных логических модулей уменьшается с 59 (вариант 1) до 8. Во всех случаях частота работы фильтров ограничивается 400 МГц.
Ресурсы ПЛИС |
Систолический КИХ-фильтр с однотипными процессорными элементами без использования встроенных ЦОС-блоков |
Четыре мегафункции умножения с накоплением ALTMULT_ACCUM (внешняя линия задержки и дерево сумматоров) [4, рис. 1] |
Одна мегафункция умножения и сложения ALTMULT_ADD (внешняя линия задержки) [4, рис. 2] |
Вариант 1 |
Вариант 2 |
Вариант 3 |
|
Максимальная частота/частота в наихудшем случае, MГц |
432/400 |
429/400 |
514/400 |
Число LUT для реализации комбинационных функций |
59 |
18 |
0 |
Адаптивные логические модули (ALM) |
44 |
18 |
8 |
Число выделенных регистров для реализации последовательностной логики |
65 |
12 |
12 |
Встроенные ЦОС-блоки, 18×18 бит |
– |
16 |
4 |