Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 800631

.pdf
Скачиваний:
21
Добавлен:
01.05.2022
Размер:
9.89 Mб
Скачать

Рис.3.12. Фрагмент схемы КИХ-фильтра. Линия задержки

151

Рис. 3.13. Временные диаграммы работы КИХ-фильтра на распределенной арифметике

151

152

Рис. 3.14. Настройки мегаядра FIR Compiler САПР

Рис. 3.15.Тестовая схема КИХ-фильтра

ПЛИС Quartus II

с использованием мегаядра FIR

 

Compiler

152

 

153

Рис. 3.16. Временные диаграммы работы КИХ-фильтра на мегаядре FIR Compiler

Рис. 3.17. Временные диаграммы работы КИХ-фильтра на четыре отвода по коду языка VHDL (пример 2)

153

Разработаем код высокоуровневого языка описания аппаратных средств VHDL КИХ-фильтра (пример 1 и пример 2) с использованием прямой реализации по формуле y C0 x0 С1x1 С2 x2 C3 x3 и посмотрим временные диаграммы (рис. 3.17). Сравнивая временные диаграммы (рис. 3.13 и рис. 3.16 с рис. 3.17), видим, что профильтрованные значения на выходе у трех фильтров совпадают, однако у фильтров на распределенной арифметике “нужные” выходные значения обновляются через каждые 4 такта. Существенным отличием является наличие у разных фильтров различных вспомогательных сигналов. Дополнительно мегафункция FIR Compiler имеет встроенный интерфейс, облегчающий взаимодействие с периферийными устройствами.

library ieee;

 

 

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_arith.all;

package coeffs is

 

entity filter_4 is

type coef_arr is array (0 to 3) of

port (din : in std_logic_vector(3 downto

signed(3 downto 0);

 

0);

 

constant

coefs:

coef_arr:=

reset, clk : in std_logic;

coef_arr'("1110", "1111", "0111",

Sout : out std_logic_vector(7 downto 0));

"0110");

 

 

end filter_4;

end coeffs;

 

 

ARCHITECTURE a OF filter_4 IS

library ieee;

 

 

constant С0: std_logic_vector(3 downto

use ieee.std_logic_1164.all;

0) :="1110";

use ieee.std_logic_arith.all;

constant С1: std_logic_vector(3 downto

use work.coeffs.all;

 

0) :="1111";

entity fir_var is

 

constant С2: std_logic_vector(3 downto

port (clk,

reset,

clk_ena: in

0) :="0111";

std_logic;

 

 

constant С3: std_logic_vector(3 downto

date: in signed (3 downto 0);

0) :="0110";

q_reg: out signed (9 downto 0));

signal

x0,x1,x2,x3:std_logic_vector(3

end fir_var;

 

 

downto 0);

 

 

 

 

signal m0,m1,m2,m3:std_logic_vector(7

 

 

 

downto 0);

 

154

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;

BEGIN m0<=(signed(x0)*signed(C0)); m1<=(signed(x1)*signed(C1)); m2<=(signed(x2)*signed(C2)); m3<=(signed(x3)*signed(C3));

Sout<=(signed(m0)+signed(m1)+

signed(m2)+signed(m3));

process(clk,reset) begin

if reset='1' then x0<=(others=>'0'); x1<=(others=>'0'); x2<=(others=>'0'); x3<=(others=>'0');

elsif (clk'event and clk='1') then x0(3 downto 0) <=din(3 downto 0); x1(3 downto 0) <=x0(3 downto 0); x2(3 downto 0) <=x1(3 downto 0); x3(3 downto 0) <=x2(3 downto 0); end if;

end process; END a;

Пример 1. Код языка VHDL

Пример 2. Код языка VHDL

КИХ-фильтра на четыре

КИХ-фильтра на четыре отвода

отвода

(вариант)

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

155

3.2. КИХ-фильтры на параллельной распределенной арифметике

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

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

 

 

 

K

 

 

 

 

y Сk

xk ,

(3.6)

 

 

 

k 1

 

 

где

y отклик цепи;

xk

k я

входная

переменная;

Сk

весовой коэффициент k й входной переменной, который

является постоянным для всех n ;

K - число отводов фильтра.

 

Если рассматривать входные переменные xk как целые

десятичные числа со знаком в дополнительном двоичном коде, то

 

 

B 2

 

 

 

xk xk (B 1) 2B 1 xkb 2b ,

 

(3.7)

 

 

b 0

 

 

 

где B разрядность

кода;

x

2B 1

знаковый разряд.

 

 

 

k (B 1)

 

 

 

Подставим выражение (3.7) в (3.6), получим:

 

K

 

 

B 2

 

 

 

y Ck

xk (B 1) 2B 1 xkb 2b

 

k 1

 

 

b 0

 

 

(3.8)

K

 

K

B 2

 

 

 

 

 

 

xk ( B 1) 2B 1Ck xkb 2b Ck

 

 

k 1

 

k 1 b 0

 

 

 

Раскроем все суммы в выражении (3.8) и сгруппируем числа по степеням B :

156

y x10 C1 x20 C2 x30 C3 ... xK 0 CK 20

x11 C1 x21 C2 x31 C3 ... xK1 CK 21

x12 C1 x22 C2 x32 C3 ... xK 2 CK 22

....

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(3.9)

....

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

C x

C

2

x

 

C

 

... x

K ( B 2)

С

K

2B 2

1( B 2)

1

2( B 2)

 

 

3( B 2)

3

 

 

 

 

 

x

C

x

C

2

x

C

... x

K ( B 1)

С

K

2B 1

1( B 1)

1

2( B 1)

 

3( B 1)

 

3

 

 

 

 

 

 

Каждое выражение в квадратной скобке представляет собой сумму операций И над одним разрядом входной переменной xk , определяемую весовым фактором B всех k

входных переменных и всеми битами весовых коэффициентов

Ck .

Для структуры КИХ-фильтра с восемью отводами на распределенной арифметике с несимметричными коэффициентами выражение в квадратной скобке для индекса b может быть записано в виде

[sumb] x1b C1 x2b C2 x3b C3 x4b C4

 

x5bC5 x6bC6 x7bC7 x8bC8

,

 

и для фильтра с симметричными коэффициентами:

 

[sumb] (x1b x8b ) C1 (x2b x7b ) C2 .

 

(x3b x6b ) C3 (x4b x5b ) C4

 

Рассмотрим построение КИХ-фильтра на основе параллельной распределённой арифметики на примере структуры восемь отводов восемь бит. Перепишем уравнение (3.9) в следующем виде:

y [sum0] [sum1]21 [sum2] 22 .....

(3.10)

[sum6] 26 [sum7] 27

157

при этом под обозначениями sum0, sum1 и т.д. подразумеваются выражения, заключённые соответственно в первых квадратных скобках, во вторых и т.д.

Преобразуем содержимое формулы (3.10) в массив подобных сумм на основе двухвходовых сумматоров:

y [sum0] [sum1]21 [sum2] [sum3]21 22 [sum4] [sum5]21 24

(3.11)

[sum6] [sum7]21 26

 

 

 

или

 

 

 

y [sum0] [sum1]21 [sum2] [sum3]21 22

 

(3.12)

[sum4] [sum5]21 [sum6] [sum7]21 22 24

 

 

 

 

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

Выше приведенные уравнения (3.11) и (3.12) полностью эквивалентны по своему значению, однако в последнем случае имеется возможность построения свёртывающего иерархического дерева многоразрядных сумматоров, что намного упрощает введение конвейера и достижение максимального быстродействия. В итоге всё дерево будет включать в себя восемь многоразрядных сумматоров. Данная структура на основе параллельной распределённой

158

арифметики обеспечивает практически предельное быстродействие при значительном объёме задействованных ресурсов.

 

Если рассматривать входные переменные xk в формате

с фиксированной

 

 

 

запятой

( xk

дробные

 

значения,

 

xk

 

1,

 

 

 

 

 

 

xk 0 знаковый разряд), то

 

 

 

 

 

 

 

 

B 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xk xk 0 xkb 2 b ,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y(n) Ck

 

xk 0 xkb 2 b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b 1

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

(3.13)

 

 

 

 

K

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K B 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xk 0 Ck

xkb Ck 2 b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k 1 b 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Аналогично выражению (3.9) уравнение КИХ-фильтра

для формата с фиксированной запятой будет иметь вид

 

 

 

 

y(n) x

С x

20

С

2

x

30

С

3

... x

K 0

С

K

20

 

 

 

 

 

 

 

10

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

С x

21

С

2

 

x

31

С

3

... x

K1

С

K

2 1

 

 

 

 

 

 

 

 

 

 

11

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

С x

22

С

2

x

32

 

С

3

 

... x

K 2

С

K

2 2

 

 

 

 

 

 

 

 

 

 

12

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

....

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(3.14)

....

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

С x

2( B

2)

 

С

2

 

x

3( B 2)

С

3

... x

K ( B 2)

С

K

2 ( B 2)

 

1( B 2)

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

С

x

2( B 1)

С

2

 

x

3( B 1)

С

3

... x

K ( B 1)

 

С

K

2 ( B 1).

 

 

 

 

1( B 1)

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Переформулируем выражение (3.14) и представим его в следующем виде и сравним с уравнением (3.13):

159

 

K

B 1

K

 

 

 

y(n) Ck xk 0 Ck xkb

2 b

 

 

k 1

b 1

k 1

 

,

(3.15)

 

B 1

 

 

 

P0

 

 

 

 

2 b Pb

 

 

 

 

 

b 1

 

 

 

 

 

где P частичные произведения (значения в квадратных скобках выражения (3.14), представляющие комбинации сумм коэффициентов фильтра, которые предварительно вычисляются), а масштабирование частичных произведений может быть параллельным или последовательным.

Видим, что изменение в формулах приводит к перестройке аппаратных ресурсов фильтра (рис. 3.18). По формуле (3.13) получается фильтр с использованием операций умножения с накоплением, а по формуле (3.15) - фильтр на распределенной арифметике без операций явного умножения. А выражения для КИХ-фильтра, представленные целочисленными и дробными значениями, отличаются вычислениями знакового разряда и весовых коэффициентов. Например, для КИХ-фильтра на восемь отводов с целочисленными значениями старший знаковый разряд - это

выражение [sum7] с весом 27 ,

а для фильтра с дробными

значениями это [sum0] с весом 20 .

 

 

Дополнительный код, целочисленные значения

 

B 2

 

2B 1 PB 1

 

y(n) 2b Pb

(3.16)

b 0

 

 

 

Дополнительный код, дробные значения

 

 

y(n) P0

B 1

 

 

2 b Pb

(3.17)

 

b 1

 

 

160