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

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, правда, при этом для вычисления результата в общем случае потребуется три рабочих такта.

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