Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРС_ПКИМС_ПЛИС.doc
Скачиваний:
42
Добавлен:
05.06.2015
Размер:
2 Мб
Скачать
☆

4.2. Схемы вычисления функций

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

Типичная схема вычисления значения функции двух переменных F(X,Y) с помощью ПЗУ представлена на рис 4.2.1.

ROM

A[11..0] F[11..0]

X[6..0]

A[5..0]

F(X,Y)

A[11..6]

Y[5..0]

Рис 4.2.1. Типичная схема вычисления значения функции двух переменных с помощью ПЗУ

Представленная схема построена на базе 12-разрядного ПЗУ объёмом 4096 слов. Каждой паре входных аргументов X и Y, заданных с точностью в 6 двоичных разрядов и вместе образующих 12 разрядный адрес ПЗУ соответствует одно выходное слово F, заданное с точностью 12 разрядов.

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

Однако при разработке схем вычисления функций при таком подходе могут возникать проблемы больших объёмом ПЗУ при большом числе разрядов задания значений аргументов. В этом случае можно ценой небольшой потери точности в 24 раза уменьшить объём ПЗУ используя методы линейной экстраполяции функций.

Рассмотрим пример функции одной переменной F(X). Пусть ПЗУ имеет разрядность n, а разрядность аргумента равна m (m>n). При этом разрядные сетки адреса ПЗУ A и аргумента X имеют вид, показанных на рис 4.2.2.

A

i i+1 i+2 i+3

X

j j+1 j+2 j+3 j+4 j+5 j+6

Рис 4.2.2. Разрядные сетки аргумента X и адреса ПЗУ A для случая m=n-1.

Положим для простоты, что m=n-1, тогда для значений аргументов, не попадающих в разрядную сетку значений адреса (Xj+1, Xj+3, Xj+5,) значение функции можно вычислить по стандартной интерполяционной формуле

F(Xj+1)=( F(Xj) + F(Xj+2) )/2

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

Данная схема вычислений может применятся и при значениях m=n-2, однако при этом время вычисления значений функции будет занимать не один а два такта, поскольку придётся сначала рассчитать значение функции на сетке с m=n-1, а только затем перейти к расчётам на сетке с m=n-2.

Естественно при этом удваивается объём аппаратуры, необходимой для реализации соответствующих вычислений.

Рассмотрим блок схему интерполяционного вычислителя, которая приведена на Рис 4.2.3.

CLC

ROM

A[7..0] F[11..0]

RG

CLC

D[11..0]

A[7..0]

SUM

A[11..0]

S[12..0]

B[11..0]

F[11..0]

Рис 4.2.3. Блок схема вычислителя значения функции с линейной интерполяцией.

Вычислитель значения функции с линейной интерполяцией состоит из ПЗУ размером 256 12-разрядных слов. 12-разрядного регистра-защелки RG и 12-разрядного сумматора SUM. На первом такте своей работы на адресный вход ПЗУ поступает значение Xj, и происходит считывание значение F(Xj), которое записывается а в регистр RG. На следующем такте работы на адресный вход ПЗУ поступает значение Xj+2, считывается значение F(Xj+2). после чего сумматором SUM вычисляется сумма F(Xj) + F(Xj+2). Затем на выход вычислителя выводится ответ с выхода сумматора со сдвигом двоичного кода на один разряд вправо.

Аналогичный подход можно применять и для соотношения m=n-2, правда, при этом для вычисления результата в общем случае потребуется три рабочих такта.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]