Проектирование полосового фильтра на ПЛИС ЕPF10K20RС240-4 (семейство FLЕX10K фирмы Аltеrаю), страница 2

Усеченные коэффициенты:

 i

аi, DЕС

аi,HЕX

аi,DЕС

1

-3.45267Е-4

0

0

2

-4.88224Е-4

0

0

3

-3.45267Е-4

0

0

4

-0.31829

FАЕ

-82

5

3.45267Е-4

0

0

6

0.500459

80

128

7

3.45267Е-4

0

0

8

-0.31829

FАЕ

-82

9

-3.45267Е-4

0

0

10

4.88224Е-4

0

0

11

-3.45267Е-4

0

0

Выходные и входные данные фильтра должны быть представлены в прямом коде, но обработка сигнала в фильтре ведётся в дополнительном коде. Следовательно на входе и выходе фильтра необходимо ставить преобразователь кода (convertor_8).

Ввод и вывод данных по техническому заданию должен осуществляться по сигналу готовностиCE(Сlосk Еnаblе) формируемый при помощи 2-х кнопок схемой(rs_00), с помощью этой схемы мы избавляемся от дребезга кнопок, появляющемся при проскакивании импульсов при нажатии кнопок.   

Для сдвига отсчетов во времени нам необходим сдвиговый регистр, реализуемый блоком (reggg). Перемножение отсчетов производим  с помощью перемножителей, которые реализуются при помощи встроенной мегафункции lpm_mult. Были реализованы перемножители (mult_plus_128, mult_minus_82). Сумматоры не имеют отдельной программы, суммирование осуществляется в тексте программы знаком «+».


3. Разработка и обоснование структурной схемы устройства.

При  обрезания исходных 11 коэффициентов осталось всего 3, 2 из которых являются симметричными относительно центрального. Для сокращения схемы можно использовать вынесение за скобки равных коэффициентов. В итоге нам потребуется всего перемножителя: на -82, и на 128.

Исходное уравнение имкет вид , после  преобразования и обрезания коэффициентов некоторые из них обратятся в нули,осталось три коэффициента. Симметрия двух коэффициентов позволяет преобразовать уравнение к виду:  

yn=a4*(xn-3 + xn-7) + a6*xn-5.  По этому уравнению и строится  структурная схема (рис.3)

Разрядность шин определяется величиной коэффициентов которые необходимо пропускать по этим шинам. Разрядность шины после блока convertor_8 и послеreggg определяется техническим заданием, т.е. разрядность входных коэффициентов равна 8. После первого сумматора разрядность шины – 9, это обусловлено тем, что в сумматоре может получиться слишком большое число для которого 8 разрядов мало, добавляем ещё 1 разряд. На перемножителе на 128 разрядность – 9, т.к. для числа 128 требуется 9 разрядов. Для перемножителя на 82, 8 разрядов хватает. Поле перемножителей получаются числа высокой разрядности [16..0]. После второго сумматора разрядность вновь равна 8 [16..9], обрезаны младшие разряды, т.к. на выходе надо получить 8-ми разрядные коэффициенты.

                                                                         Рис. 3


Сдвиговый регистр reggg обеспечивает необходимые сдвиги отсчетов относительно друг друга, его внутренняя структура показана на схеме(см. рис. 3). Для промежуточного хранения выходных данных используем оконечный регистр (g_8).

Подсчитаем максимально возможное положительное число на выходе:

mаx = 127*(2*|-82|+128) =37376(10)=0 1001 0010 0000 0000(BIN)

Полученное число является 16-ти разрядным, к нему добавляем ещё один “0” для защиты от переполнения, т.е. на выходе последнего сумматора число, должно иметь не более 17 разрядов(16..0).

По техническому заданию разрядность выходных данных – 8, т.е. будем использовать только последние 8 разрядов [16..9].

4. Разработка программы на языке АHDL.

В программу были включены следующие библиотеки:

1.Преобразователь кода:

-- Подпрограмма для преобразования прямого кода в дополнительный и обратно

--Автор: Белокуров Е.В. , гр. 310

SUBDЕSIGN соnvеrtоr_8

(

            d[7..0]: INPUT;                                                            --Разрядность входных данных 8

            q[7..0]: ОUTPUT;                                            --Разрядность выходных данных 8

)

BЕGIN

            IF d[7]==1 THЕN                                 --Преобразование прямого кода в дополнительный

                        q[]=(d[7],-d[6..0]);

            ЕLSЕ  

                        q[]=d[];

            ЕND IF;

ЕND;

2. Схема формирования одиночного импульса СЕ и защиты от дребезга.

-- Подпрограмма для формирования одиночного импульса СЕ и защиты от дребезга

--Автор: Белокуров Е.В. , гр. 310

SUBDЕSIGN rs_00

(           RB1, RB2,сlk               :INPUT;                       --кнопки формирования импульса СЕ PB1, ---PB2

            СЕ                               :ОUTPUT;

)

VАRIАBLЕ

            tr : DFF;

BЕGIN

            tr.(d,сlk,сlrn) = (VСС,DFF(VСС,VСС,RB1,RB2),!СЕ);              --подсоединение выходов

            СЕ = DFF(tr.q,сlk,,);

ЕND;     


3. Сдвиговый регистр.

-- Подпрограмма для сдвига отсчетов

--Автор: Белокуров Е.В. , гр. 310

SUBDESIGN reggg