Научная статья на тему 'ПРОЕКТИРОВАНИЕ КИХ-ФИЛЬТРОВ С УЧЕТОМ АРХИТЕКТУРНЫХ ОСОБЕННОСТЕЙ ПЛИС'

ПРОЕКТИРОВАНИЕ КИХ-ФИЛЬТРОВ С УЧЕТОМ АРХИТЕКТУРНЫХ ОСОБЕННОСТЕЙ ПЛИС Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
88
57
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Строгонов Андрей, Быстрицкий Алексей

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «ПРОЕКТИРОВАНИЕ КИХ-ФИЛЬТРОВ С УЧЕТОМ АРХИТЕКТУРНЫХ ОСОБЕННОСТЕЙ ПЛИС»

Проектирование КИХ-фильтров

с учетом архитектурных особенностей ПЛИС

Андрей СТРОГОНОВ, д. т. н.

andreistrogonov@mail.ru Алексей БЫСТРИЦКИЙ, к. т. н.

bystritsky@bk.ru

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

На рис. 1 показаны структуры фильтров, характерные для реализации в базисе сигнальных цифровых процессоров, а на рис. 2 — структуры фильтров, характерные для реализации в базисе ПЛИС [1]. В качестве матричных умножи-

телей могут быть применены параллельные векторные умножители. На рис. 3а представлен 2-разрядный векторный умножитель с использованием двух идентичных таблиц перекодировки LUT1 и LUT2 для формирования частичных произведений P1(n)

и P2(n), которые необходимо сложить с учетом их веса. Каждая LUT образована из четырех LUT логических элементов (ЛЭ) ПЛИС. Результат вычисления P2(n) необходимо сдвинуть на один разряд влево. Такой умножитель может быть использован для струк-

Din(n-1) Din(n—2) Din(n-3) Din(n-4)

Преобразователь параллельного кода в последовательный

Din(n-1) Din(n—2) Din(n-3) Din(n—4)

Din(n)

У(п)

И

Рис. 1. Фильтры на четыре отвода для реализации в базисе цифровых сигнальных процессоров: а) параллельный; б) последовательный

D Q D Q D Q D Q D Q D Q —xout

Матричный умножитель

т

Матричный умножитель

е

т

yout

И

L»|D Q|—■ L»|D Q|—' L»|D Q|—' L»|D Q|—' L»|D Q

Битовый матричный умножитель

I

ï

Битовый матричный умножитель 1

Аккумулятор с использованием метода сдвига и сложения

| yout

И

Рис. 2. Обобщенное представление структур КИХ-фильтров: а) параллельных; б) последовательных [1]

8(1)

8(2)

/2

8(3)

8(4)

ни' ilil il

LUT LUT LUT

ЛЭ ЛЭ ЛЭ

Р2

LUT

ЛЭ

LUT LUT LUT

ЛЭ ЛЭ ЛЭ

Умножение на 2 '

Р1

У(п)

LUT ЛЭ

Рис. 3. Параллельный векторный умножитель четырех 2-разрядных сигналов на четыре 2-разрядные константы с использованием LUT ЛЭ в ПЛИС серии FLEX [2]

МЗР.

8 8(4)

МЗР. МЗР

8 -

8(3)

8 ^ 8(2)

8

МЗР

5(1) :

16*8 16x8 16*8 16*8 16*8 16x8 16x8 16*8

LUT LUT LUT LUT LUT LUT LUT LUT

Рис. 4. Параллельный векторный умножитель четырех 8-разрядных сигналов на четыре 8-разрядные константы с использованием LUT ЛЭ в ПЛИС серии FLEX [2]

туры фильтра 4 отвода 2 бита, при 2-разрядном представлении коэффициентов. В случае если число отводов останется постоянным (например, 4, в случае симметрии коэффициентов фильтра), а разрядность входного сигнала, подлежащего фильтрации, и коэффициентов фильтра составит 8 бит, то уже потребуется 8 LUT, каждая из которых будет содержать 8 LUT ЛЭ. При этом увеличивается и число многоразрядных сумматоров и операций сдвига (рис. 4).

Параллельные КИХ-фильтры, реализованные в базисе ПЛИС, обладая наивысшим быстродействием, позволяют получать результат фильтрации, например, для КИХ-фильтра со структурой 120 отводов 12 бит, уже после первого синхроимпульса, последовательные — через 12, а фильтр в базисе ЦОС-процессоров — через 120 синхроимпульсов [1].

Рис. 5 показывает использование параллельного векторного умножителя четырех 8-разрядных сигналов на четыре 8-разрядные константы в составе КИХ-фильтра на 8 отводов с симметричными коэффициентами [4]. Симметричность коэффициентов позволяет применить пресумматоры на выходах линии задержки, что и обеспечит формирование четырех 8-разрядных сигналов. Рис. 6а демонстрирует число задействованных конфигурируемых логических блоков (КЛБ) для реализации параллельного векторного умножителя в базисе ПЛИС серии XC4000. Для симметричного КИХ-фильтра со структурой 8 отводов 8 бит с точностью представления коэффициентов 8 бит потребуется 122 КЛБ ПЛИС серии XC4000 фирмы Xilinx, при этом обеспечивается быстродействие 50-70 MSPS [4].

В случае последовательной структуры (рис. 2б) применяется одна-единственная LUT для вычисления частичных произведений (рис. 7). Такой фильтр обрабатывает только один разряд входного сигнала в течение такта. Последовательно вычисляемые частичные произведения накапливаются в масштабирующем аккумуляторе. После N для несимметричного и N+1 тактов синхроимпульсов для симметричного фильтра на выходе появляется результат, где N — разрядность входного сигнала, подлежащего фильтрации. Для обеспечения правильной работы фильтра требуется управляющий автомат.

Производительность фильтра определяется как fdk/N для несимметричного и как fcik/N+1 для симметричного фильтра [5]. Рис. 6б показывает, что с ростом числа отводов производительность фильтра остается постоянной, в то время как у фильтра на базе ЦОС-процессора с использованием MAC-блоков она начинает резко падать при числе отводов более 16.

Рассмотрим особенности проектирования КИХ-фильтра на основе параллельной распределенной арифметики на примере структуры четыре отвода четыре бита. Ранее такая

со

С1

сз

Х1/2 [

ï 1 L 1

—Х1/41— г*-|Х1/1б|-1

со

С1

СЗ

Рис. 5. Использование параллельного векторного умножителя четырех 8-разрядных сигналов

на четыре 8-разрядные константы в составе КИХ-фильтра на 8 отводов с симметричными коэффициентами

в базисе ПЛИС XC4000, построенного с применением параллельной распределенной арифметики [4]

Разрядность входного сигнала

Число КЛБ

4 6 46 73 53 85 60 97 67 109 74 121 133 и |_ 5 60 50

8 92 107 122 137 152 167 182 ö О X 40

10 145 166 187 208 229 250 5 S 30

12 191 215 239 263 287 s « s 20

14 222 250 278 306 334 CL С 10

16 278 309 340 371 0

> SINGLE MAC

о В=8

□ В=12

« В=16

H

12 14 16 Разрядность

коэффициентов фильтра

100 150 200 Число отводов

и

Рис. 6. Число задействованных ресурсов для реализации параллельного векторного умножителя в базисе ПЛИС XC4000 [4] (а) и производительность фильтра (б) в зависимости от числа отводов, при частоте тактирования 120 МГц [5]

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Входной сигнал

10

П реобразоваталь параллельного кода в последовательный

Сдвиг

SUM(10,1)

10-разрядный Таблица перекодировки

сдвиговый регистр 32 слов * 10 бит

г 5° ADD

L □9 —

D1-□8-

D2-D7-

ADD

I

D3— □6

D4-D5-

Пресумматоры

(последовательные

сумматоры)

LOOK UP TABLE

DATA

A4

320 бит

SIGN EXT

siorT

10

XOR

1 Опеоаиия b3i

A10

Ю A A8 A

Масшта-

бирующий CL

AO аккуму-

лятор г

B10

B(9:0) В

С I LD /s

1 Операция взятия обратного кода плюс 1 к МЗР

Загрузка

Профильтрованный сигнал

Старший значащий байт

SUM(0)

Din

l| ш с

эа

Младший значащий байт

[6-9]. Для сохранения общности будем также считать, что на вход КИХ-фильтра поступают входные отсчеты -5, 3, 1 и 0. Правильные значения на выходе фильтра: 10, -1, -40, -10, 26, 6 и т. д. Исследования проведем на ПЛИС Cyclone III EP3C5E144C7. Главный критерий отбора — максимальная частота/частота, в наихудшем случае определенная по модели Slow 1200mV 85 С («медленная» модель, при напряжении VCC 1100 мВ и температуре +85 °C) путем проведения статического временного анализа.

В тестировании принимают участие следующие структуры фильтров: классическая параллельная с использованием аппаратных ЦОС-боков (собраны на мегафункции ALTMULT_ADD, [6]); систолическая структура [9]; поведенческое описание на языке VHDL с использованием оператора цикла без привязки к какой-либо структуре [7] посредством программных умножителей (ме-гафункция ALTMEMMULT) [6] и «готовый» фильтр на параллельной распределенной арифметике, реализованный с помощью ме-гаядра MegaCore FIR Compiler [8].

Уравнение КИХ-фильтра со структурой четыре отвода четыре бита (прямая реализация) представляется как арифметическая сумма произведений [3]:

Pout = C1d1+C2d2+C3d3+C4d4-

В случае параллельной распределенной арифметики уравнение КИХ-фильтра на четыре отвода записывается в виде [3]:

Р0М = 20XP0+21XP1+22XP2+23XP3. (1)

Частичные произведения Р0, Pj, Р2 и Р3:

р0= СА(0)+СА(.0)+СЛФ)+СЛФ) =

-Есд(О),

(2)

(3)

Р2= Cldl(2)+C2d2(2)+C3dî(2) +C4û?4(2) =

= £сД(2), (4)

л=1

Р3 = С1^(3)+ед(3)+Сз^(3)+СД(3) =

= 3).

(5)

Рис. 7. Симметричный КИХ-фильтр со структурой 10 отводов 10 бит с точностью представления коэффициентов 10 бит с использованием последовательной распределенной арифметики

структура фильтра использовалась в работах лочисленными, со знаком, равными С0 = -2, [6-9]. Коэффициенты фильтра возьмем це- С1 = -1, С2 = 7 и С3 = 6, то есть как в работах

В случае параллельной распределенной арифметики для КИХ-фильтра на четыре отвода необходимо иметь четыре идентичных массива памяти, параллельно адресуемых всеми битами всех входных переменных, и свертывающее иерархическое дерево многоразрядных сумматоров, осуществляющих соответствующее суммирование частичных произведений Р0, Р1, Р2 и Р3. В данном случае результат формируется за один такт и тем

d2 d3

d4

PO

P1

P2

P3

Рис. 9. Принцип подключения выходов линии задержки КИХ-фильтра на четыре отвода к 4-входовым LUT [3]

самым достигается наибольшее быстродействие структуры.

На рис. 8 показана линия задержки КИХ-фильтра, а на рис. 9 изображен принцип подключения выходов линии задержки КИХ-фильтра на 4 отвода к 4-входовым LUT [3]. Разрядность входной шины данных N = 4. Входные данные на линии задержки представлены с 4-битной точностью параллельным кодом. 4-входовая LUT обеспечивает 16 частичных произведений (на примере P0, представляющих собой комбинации сумм коэффициентов фильтра, показанных с 8-битной точностью).

Пример заполнения 4-входовой LUT есть в таблице 1, а описание на языке VHDL представлено ниже. На рис. 10 можно увидеть КИХ-фильтр со структурой четыре отвода четыре бита на распределенной параллельной арифметике. Фильтр состоит из четырех однотипных LUT, формирующих частичные произведения P0, Pj, P2 и P3 согласно формулам (2-5). Для суммирований значений с выходов LUT в соответствии с их весом (формула (1)) используются два 12- и один 14-разрядный сумматор с соответствующей коррекцией разрядности на входах, для того чтобы гарантированно предотвратить переполнение.

Таблица 1. Вариант заполнения 4-входовой LUT на примере частичного произведения P0

d4(0) d3(0) d2(0) d1(0) Выход LUT-таблицы, P0

0000 0

0001 С1

0010 С2

0011 С2+С1

0100 С3

1111 С4+С3+С2+С1

library IEEE;

use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; use IEEE.std_logic_arith.all; Entity PartialProd is

Port (D : in std_logic_vector(3 downto 0);

P : out std_logic_vector(9 downto 0)); -- 4 * 8 bit coeff => 10 bit product End PartialProd;

Architecture Behave of PartialProd is constant c1 : std_logic_vector := "11111110";

-- -2D

constant c2 : std_logic_vector := "11111111";

-- -1D

constant c3 : std_logic_vector := "00000111"; -- 7D

constant c4 : std_logic_vector := "00000110"; -- 6D

-- Compute all the partial products and store constant v0 : std_logic_vector := sxt("0", 10); constant v1 : std_logic_vector := sxt(c1, 10); constant v2 : std_logic_vector := sxt(c2, 10); constant v3 : std_logic_vector := v1 + v2; constant v4 : std_logic_vector := sxt(c3, 10); constant v5 : std_logic_vector := v4 + v1; constant v6 : std_logic_vector := v4 + v2; constant v7 : std_logic_vector := v4 + v3; constant v8 : std_logic_vector := sxt(c4, 10); constant v9 : std_logic_vector := v8 + v1;

constant v11 :

Begin

prodeval: process (D) begin case(d) is when "0000" => P <= v0 when "0001" => P <= v1 when "0010" => P <= v2 when "0011" => P <= v3 when "0100" => P <= v4; when "0101" => P <= v5 when "0110" => P <= v6; when "0111" => P <= v7 when "1000" => P <= v8 when "1001" => P <= v9; when "1010" => P <= v10 when "1011" => P <= v11 when "1100" => P <= v12 when "1101" => P <= v13 when "1110" => P <= v14 when "1111" => P <= v15 end case; end process; end behave;

coefficient for tap 1 coefficient for tap 2 coefficient for tap 3 coefficient for tap 4 them as constants.

std_ vector = v8 + v2

std_ vector = v8 + v3

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

std_ vector = v8 + v4

std_ vector = v8 + v5

std_ vector = v8 + v6

std_ vector = v8 + v7

На рис. 11 показана функциональная модель КИХ-фильтра со структурой четыре отвода четыре бита на распределенной параллельной арифметике в САПР ПЛИС Quartus II с использованием линии задержки на регистрах (рис. 11а) и линии задержки на базе встроенных блоков ОЗУ (рис. 11б). Мегафункция ALTSHIFT_TAPS, используемая в качестве линии задержки, представляет собой двухпортовое ОЗУ. Свертывающее иерархическое дерево многоразрядных сумматоров выполнено на мегафункциях LPM_ ADD_SUB. Для знакового разряда (Р3) необходимо сформировать дополнение до двух путем обращения Р3 с последующим прибавлением 1 к младшему разряду.

Листинг. Пример описания заполнения LUT на языке VHDL для КИХ-фильтра на четыре отвода

Обращение логически эквивалентно инверсии каждого бита в числе. Вентили «исключающее ИЛИ» можно применить для избирательной инверсии в зависимости от значения управляющего сигнала. Прибавление «1» можно организовать подключением входа переноса Спп одного из 12-разрядного сумматора к шине питания.

Прохождение единичного импульса по структуре КИХ-фильтра в случае использования линии задержки на регистрах показано на рис. 12. На выходе фильтра видим коэффициенты фильтра С0 = -2, С1 = -1, С2 = 7 и С3 = 6. На рис. 13 показаны временные диаграммы работы фильтра для случая, когда на вход КИХ-фильтра поступают входные отсчеты -5, 3, 1 и 0. Правильные значения на выходе фильтра: 10, -1, -40, -10, 26, 6 и т. д. На рис. 14 и 15 представлены временные диаграммы в случае использования линии задержки на базе встроенных блоков ОЗУ.

tap4[0],tap3[0],tap2[0],tap1 [0]

tap4[1 ],tap3[1 ],tap2[1 ],tap1 [1 ]

. tap4[2],tap3[2],tap2[2],tap1 [2]

tap4[3],tap3[3],tap2[3],tap1 [3]

D[3..0] pp.,0]

shifting.

И

D[3..0] PP..0]

ppj[9..01

D[3..0] P[9..0]

■ D[3..0] P[9..0] -

D[3..0] P[9..0]

□[3..0] P|B..O]

PP_2[9..0],

p_mult2_2[1^l]

p_mult2[10],p_mult2[10..0] X-

D[11..0] CD[11..0] SUB/ADD

p_mult2_2s[11..0]

jVCC

pp_2|9],pp_2[9],pp_2[9..0] X-

p_mujt2_2[10],p_mult2_2[10..0]

sum[11..0]%

pp_1[9],pp_1[9],pp_1[9..0]

p_mult2_2s[11..0]

sum[11 ],sum[11 ],sum[11 ..0] X-

■ B[11..OI P[13..O]

> tir_result[13..0]

Рис. 11. КИХ-фильтр со структурой четыре отвода четыре бита на распределенной параллельной арифметике в САПР ПЛИС Quartus II: а) линия задержки на регистрах; б) линия задержки на базе встроенных блоков ОЗУ; в) частичные произведения на базе LUT и свертывающее иерархическое дерево многоразрядных сумматоров

Выводы

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

тике позволяет для ПЛИС серии Cyclone III получить рекордное быстродействие за счет «безумножительных» схем умножения (табл. 2), не снижаемое при увеличении числа отводов фильтра и точности представления входных данных. Это особенно акту-

ально для проектов, содержащих низкопроизводительные (бюджетные) серии ПЛИС, а также в том случае, если в проекте решено отказаться от мегафункций умножителей, опционально использующих либо аппаратные умножители, встроенные в ЦОС-блоки

Таблица 2. Реализация параллельных КИХ-фильтров на 4 отвода в базисе ПЛИС Cyclone III EP3C5E144C7

Ресурсы ПЛИС Параллельная распределенная арифметика (рис. 11). Линия задержки на Параллельная распределенная арифметика, мегаядро Мегафункция ALTMULT_ADD. 4 умножителя и дерево сумматоров в блоке, внешняя Систолический КИХ-фильтр с однотипными процессорными элементами [9] КИХ-фильтр разработан на языке VHDL с использованием оператора цикла loop [7] Мегафункция АЦГМЕММиЦГ, программный умножитель на константу, 4 блока по 1 умножителю в каждом,

регистрах ОЗУ FIR Compiler [8] линия задержки из трех регистров [6] коэффициенты загружаются из внешнего порта [6]

Количество логических элементов 56 44 382 41 165 54 166

Количество LUT для реализации комбинационных функций 4О 44 342 29 132 42 146

Количество регистров для реализации последовательностной логики 16 4 253 22 65 22 116

Аппаратные ЦОС-блоки, встроенные в базис ПЛИС О (без использования мегафункций) О О 4 (умножитель 9x9) 0 (мегафункция LPM_MULT, умножители реализованы на LUT, 1 умножитель 4x4 занимает 24 LUT) О О (режим auto, 1 умножитель 4x4 занимает 2О lut+256 bits(Auto)+29 reg)

Максимальная частота/частота в наихудшем случае, МГц (временная модель Slow 1200mV 85С Model) 8О7/25О 3О5/2О5 89/24 233/233 206/206 182/182 3ОО/25О

(ALTMULT_ADD, ALTMULT_ACCUM), либо программные (ALTMEMMULT). Применение кода языка VHDL и ядра FIR Compiler (структура фильтра задается опционально) в отличие от фильтров, структура которых разрабатывается пользователем «вручную», приводит к пониженному быстродействию, однако при этом необходимо учитывать, что рассматриваемые примеры сильно упрощены. Для точной оценки производительности фильтров необходимо прибегнуть к помощи сравнительных таблиц из официальных документов, например таблицы 3 из [1].

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

Таблица 3. Тестирование КИХ-фильтра со структурой 97 отводов 8 бит с точностью представления коэффициентов 14 бит, реализованного с помощью мегаядра FIR Compiler на ПЛИС серии Cyclone III [1]

LUT для реализации Регистры ЛЭ для комбинационных последовательной функций логики Память Умножители Fmax, Быстродействие,

Регистры ЛЭ, бит Блоки памяти M9K 9x9 МГц MSPS

Параллельная распределенная арифметика с использованием ресурсов логических элементов, уровень конвейеризации 1, ЕР3С№256С6

3416 3715 I 2О8 I 3 1 - I 288 I 288 I

Параллельная распределенная арифметика с использованием ресурсов встроенных блоков памяти М9К, уровень конвейеризации 1, EP3C40F780C6

1948 2155 1 12ОО3О 1 48 1 - 1 283 1 283 1

Последовательная распределенная арифметика с использованием ресурсов встроенных блоков памяти М9К, уровень конвейеризации 1, ЕР3С№256С6

327 462 1 14167 1 8 1 - 1 323 36 1

Литература

1. FIR Compiler. User Guide. Software Version: 11.0. May 2011. Altera Corporation.

2. Application Note 73 Implementing FIR Filters in FLEX Devices, February 1998, ver 1.01.

3. Application Note AC120. Designing FIR Filters with Actel FPGAs.

4. Bruce Newgard. Seminar. Signal processing with XILINX FPGAs. June 9, 1996. xdsp.ppt. XILINX Hardware Digital Signal Processing.

5. www.xilinx.com. DS240 April 28, 2005. Product Specification. Distributed Arithmetic FIR Filter v9.0.

6. Строганов А., Быстрицкий А. Проектирование параллельных КИХ-фильтров в базисе ПЛИС // Компоненты и технологии. 2013. № 6.

7. Строгонов А., Быстрицкий А. КИХ-фильтр на распределенной арифметике: проектируем сами // Компоненты и технологии. 2013. № 3.

8. Строгонов А. КИХ-фильтры на параллельной распределенной арифметике // Компоненты и технологии. 2013. № 5.

9. Строгонов А., Быстрицкий А. Систолические КИХ-фильтры в базисе ПЛИС // Компоненты и технологии. 2013. № 8.

Рис. 12. Прохождение единичного импульса по структуре КИХ-фильтра в случае использования линии задержки на регистрах

Рис. 13. Временные диаграммы работы фильтра в случае использования линии задержки на регистрах (на вход КИХ-фильтра поступают входные отсчеты —5, 3, 1 и 0; правильные значения на выходе фильтра: 10, — 1,—40, — 10, 26, 6 и т. д.)

Рис. 14. Прохождение единичного импульса по структуре КИХ-фильтра в случае использования линии задержки на базе встроенных блоков ОЗУ

W- - «■ О

'-1_1- -: ГН Г~ 1_| LJ——!_— _—1_—L-r-L-T^i-J—■ —' -! --1

* м m |и и % ■ i i i H V 1 Ï k

И ■ ¡Í Е i - * ï L Í . < - i . ï t ■ i ï

Рис. 15. Временные диаграммы работы фильтра в случае использования линии задержки на базе встроенных блоков ОЗУ

i Надоели баннеры? Вы всегда можете отключить рекламу.