Фильтр низкой частоты на ПЛИС EPF10K20RC240-4 семейства FLEX10K фирмы Altera, страница 3

Максимальный старший разряд будет 17-м, все разряды которые выше будут знаковыми, значит, выходные отсчеты будут браться с 17-го до 10-го

6.  Регистры.

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

7.  Цифровой индикатор.

Необходимо два цифровых индикатора. Так как выходной код имеет разрядность 8, то выходные данные для удобства будут отображаться на индикаторе в виде двух 16-тиричных чисел.

8.  Устройство против дребезга.

Предназначено для устранения дребезга контактов. Также с помощью этого устройства можно из последовательности входных синхронизирующих импульсов вырезать импульсы для запуска.

На вход устройства подается сигнал с контактов PB1, PB2.

На вход CLK подается  тактовая частота 25,175 МГц. Выход схемы подключается к входам CE  всех регистров. Импульс запуска реализуется поочередным нажатием контактов PB1 и PB2.

Структурную схему можно реализовать двумя способами.

1.   Обычный способ:

Отсчеты поступают на вход схемы, затем при подаче тактового импульса отсчеты проходят через сдвигающий регистр, потом происходит перемножении и суммирование отсчетов.

2.   Конвейерный способ:

В конвейерной схеме по сравнению с обычной схемой, не тратится время на то пока отсчеты «пройдут» по все схеме, в это время начинается вычисление суммы и произведения предыдущих отсчетов.


Структурная схема устройства.


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

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

Необходимо два преобразователя кода, для того чтобы преобразовывать входной параллельный восьми разрядный прямой код в параллельный восьми разрядный дополнительный код, а затем преобразовать параллельный 8-ми разрядный дополнительный код в выходной параллельный 8-ми разрядный прямой код.

При преобразовании кода используются следующие методы:

1. Выделение знакового разряда.

2. Если знаковый разряд равен 1, то это положительное число и при переводе в дополнительном коде остается таким же.

3. Если знаковый разряд равен 0, то это отрицательное число и для перевода этого числа из прямого в дополнительной код надо сначала отбросить знаковый разряд. Значащею часть необходимо инвертировать и прибавить двоичную единицу.

·  Сдвигающий регистр.

Реализуется на dffe триггерах. Так как разрядность данных равна 8, а количество отсчетов равно 7, то необходимо 8 строк и 7 столбцов dffe триггеров. Тактирование триггеров осуществляется по входам входы clk и clock_en.

·  Двухвходовый сумматор.

Для того чтобы избежать переполнения сделаем разрядность выходных данных больше разрядности полученной суммы. Так как по заданию порядок фильтра равен  7 и при этом коэффициенты семеричные относительно центрального коэффициента то, удобнее использовать двухвходовый сумматор, на который будут поступать отсчеты,  умноженные на одинаковые коэффициенты. При сложении двух 8-ми разрядных чисел получается 9-ти разрядное число, по этому будем использовать 9-ти разрядный выход.

·  Регистры

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

·  Перемножители.

Реализован  с помощью встроенной функции MegaWizard Plug-In Manager.

Умножитель имеет только один вход, так как коэффициент умножений задан заранее.

В того чтобы программу можно было использовать для любых значений коэффициентов в качестве параметра задан множитель, для исключения гонок был добавлен регистр на основе dffe триггеров. Так как при умножении 9-ти разрядного числа на 8-ми разрядный коэффициент получается 17-ти разрядное число, то выходные данные будут 17-ти разрядные.

Работа конвейера заключается в следующем:

Сначала отсчет после преобразователя кода (ПК в ДК) поступает на сдвигающий регистр, при этом отсчет поступивший в предыдущий момент времени сдвигается на одну позицию. Затем отсчеты суммируются промежуточными сумматорами и поступают на вход умножителей. Далее отсчеты умножаются на коэффициенты фильтра и поступают на вход четырех-входового сумматора (основного сумматора). Значения поступившие на вход основного сумматора в суммируются и поступают на вход преобразователя кода (ДК в ПК ), преобразуются и поступают на выход. Таким образом выполняется поэтапное вычисление. В конвейерной схеме по сравнению с обычной схемой, не тратится время пока отсчеты «пройдут» по все схеме, в это время начинается вычисление суммы и произведения других отсчетов.


5.         Оценка быстродействия устройства

В результате Timing Analyzer было получено, что самую большую, задержка равною 23 нс. имеет умножителя, следовательно, быстродействие фильтра будет определяться именно задержкой умножителя, фильтр будет успевать обрабатывать полученную информацию.


6.         Отладка разработанной программы. Результаты отладки

Правильность работы фильтра осуществляется по импульсной характеристике.

Для этого на вход фильтра  необходимо подать самый большой по амплитуде отсчет, а на выходе, в соответствующие моменты времени, должно получаться масштабированное  произведение входного отсчета и коэффициента фильтра ai, представленное в прямом коде. При поступлении результата с основного сумматора на вход преобразователя кода необходимо учитывать сдвиг. Сдвиг на 8 разрядов в право эквивалентен умножению на   2-8.

Таблица . Рассчитанные выходные отсчеты при подаче на вход фильтра 127(10)=7F(16).

dec ai

dec*127

bin

Bin [17-10]

доп. код HEX

прям. код HEX

38

4826

00001001011011010

0000100

04

04

81

10287

00010100000101111

0001010

0A

0A

115

14605

00011100100001101

0001110

0E

0E

127

16256

00011111110000001

0001111

0F

0F

115

14605

00011100100001101

0001110

0E

0E

81

10287

00010100000101111

0001010

0A

0A

38

4826

00001001011011010

0000100

04

04