Смекни!
smekni.com

Разработка специализированного процессора для исполнения элементарных функций (стр. 2 из 3)

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

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

Листингпрограммы:

clear

clc

//== function convert real to bin ====

function [x_bin] = conv(n,m,x)

//преобразование целой части

x_int = abs(int(x));

x_tmp=x_int;

for j=1:m

x_tmp = x_tmp/2

if (x_tmp-int(x_tmp))==0

arr_tmp(j)=0

else

arr_tmp(j)=1

x_tmp = int(x_tmp)

end

end

x_cel = 0;

for j=1:m

x_cel = x_cel+arr_tmp(j)*2^(j-1)

end

//преобразование дробной части

x_real = x- x_int;

for i=1:n,

x_real = x_real * 2;

if x_real<1

arr(i)=0;

else

arr(i)=1;

x_real=x_real-1;

end,

x_real1=1-int(x_real)

end

x_new=0;

for i=1:n

x_new=x_new+arr(i)*2^(-i)

end

x_bin=x_cel+x_new

endfunction

//========================================

function [arth_i]=arth(x)

arth_i = 1/2*log((1+x)/(1-x));

endfunction

//== function arcth ====

//function [arcthZ] = arcth(Z,N)

Q0 = 0;

x0 = 1;

Z=2.25;

y0 = Z;

N=40;

Q(1)=Q0+arth(2^(-1));

r(1)=sign(1-y0);

x(1)=x0-r(1)*y0*2^(-1);

y(1)=y0-r(1)*x0*2^(-1);

for n=1:N

for k=2:n

i=1+int((k-1)/2);

r(k)=sign(1-y(k-1));

ARTH =arth(2^(-i));

Q(k)= Q(k-1)+r(k)*ARTH;

x(k)= x(k-1)-r(k)*y(k-1)*2^(-i);

y(k)= y(k-1)-r(k)*x(k-1)*2^(-i);

end

arthZ(n)= Q(n)

y_ist = 1/2*log((1+Z)/(1-Z))

// z_i = (exp(y_ist)+exp(-y_ist))/2

pogr(n)=(y_ist-arthZ(n))/y_ist*100;

end

scf(1);

clf();

plot(pogr);

xgrid();

//endfunction

for n=1:20

m=3;

Q(1)=Q0+arth(2^(-1));

Q(1)=conv(n,m,Q(1));

r(1)=sign(Z-x0);

x(1)=x0+r(1)*y0*2^(-1);

x(1)=conv(n,m,x(1));

y(1)=y0+r(1)*x0*2^(-1);

y(1)=conv(n,m,y(1));

last=26;

for k=2:last

i=1+int((k-1)/2);

r(k)=sign(Z-x(k-1));

ARTH =arth(2^(-i));

ARTH=conv(n,m,ARTH);

Q(k)= Q(k-1)+r(k)*ARTH;

Q(k)=conv(n,m,Q(k));

x(k)= x(k-1)+r(k)*y(k-1)*2^(-i);

x(k)=conv(n,m,x(k));

y(k)= y(k-1)+r(k)*x(k-1)*2^(-i);

y(k)=conv(n,m,y(k));

end

archZ(n)= Q(last);

y_ist = log(Z+sqrt(Z^2-1));

pogr(n)=(y_ist-archZ(n))/y_ist*100;

end

scf(2);

clf();

plot(pogr);

xgrid();

Рис.1.3 - График абсолютной погрешности для функции arcthZ при изменяющемся числе итераций


Рис.1.4 - График абсолютной погрешности для функции arcthZ при изменении разрядности дробной части

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

2.РАЗРАБОТКА СТРУКТУРНОЙ СХЕМЫ УСТРОЙСТВА

Устройства подключается через разъём к Управляющей компьютерной системе(УКС), от которой оно будет получать управляющие сигналы, данные и которому оно будет в ответ выдавать результат вычисления.

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

Так сигналы от УКС будут поступать на устройство ввода-вывода информации (УВВ), которое может присутствовать только абстрактно в нашем устройстве.

Из устройства ввода вывода данные будут поступать в ОЗУ, а управляющие сигналы непосредственно в блок управления. Блок управления (УУ) должен синхронизировать и контролировать работу всего модуля в целом. При этом он должен вырабатывать сигналы чтения и записи из ОЗУ и ПЗУ, а также сигналы управления блоком вычислений (ОБ).

В ОЗУ хранятся входные величины, промежуточные данные и результат. В ПЗУ может храниться микропрограмма вычисления, а также таблицы значений констант таких как Arth(2-i), log(1+ri2-i) и 2-i, .

Это один из возможных вариантов структурной схемы. Ее можно реализовать на ПЛИС или на интегральных схемах средней степени интеграции. Реализации на ПЛИС более дорогая и трудоемкая в сравнении с другими способами. На интегральных микросхемах средней степени интеграции устройство получится более дорогое, так как требуется большое количество дополнительных микросхем, и будет обладать меньшим быстродействием, чем при реализации на микроконтроллере. Поэтому мы остановимся на реализации устройства на микроконтроллере

2.1 Обоснование достаточности аппаратных средств и программных ресурсов

Данное устройство будет реализовано на микроконтроллере AVR фирмы ATMEL , так как они наиболее распространённые и доступные по цене. Для реализации данного устройства достаточно использовать 8-ми разрядный микроконтроллер ATmega16, который по своим параметрам вполне удовлетворяет всем требованиям проекта и имеет запас программных и аппаратных средств для введения дополнительных функций и усовершенствования данного специализированного процессора.

AT mega16 обладает следующими характеристиками:

· 8-разрядный высокопроизводительный AVR микроконтроллер с малым энергопотреблением

· Прогрессивная RISC архитектура

1. 130 высокопроизводительных команд, большинство команд выполняется за один тактовый цикл,

2. 32 8-разрядных рабочих регистра общего назначения

Полностью статическая работа

3. Производительность приближается к 16 MIPS (при тактовой частоте 16 МГц)

4. Встроенный 2-цикловый перемножитель

· Энергонезависимая память программ и данных

1. 16 Кбайтвнутрисистемнопрограммируемой Flash памяти (In-System Self-Programmable Flash) :

-обеспечивает 1000 циклов стирания/записи

- дополнительный сектор загрузочных кодов с независимыми битами блокировки

- Внутрисистемное программирование встроенной программой загрузки

- Обеспечен режим одновременного чтения/записи (Read-While-Write)

2. 512 байт EEPROM:

- Обеспечивает 100000 циклов стирания/записи

3. 1 Кбайт встроенной SRAM

- Программируемая блокировка, обеспечивающая защиту программных средств пользователя

· Интерфейс JTAG (совместимый с IEEE 1149.1)

· Программируемый последовательный USART

· Последовательный интерфейс SPI (ведущий/ведомый)

· Специальные микроконтроллерные функции

1.Сброс по подаче питания и программируемый детектор кратковременного снижения напряжения питания

2.Встроенный калиброванный RC-генератор

3. Внутренние и внешние источники прерываний

4. Шесть режимов пониженного потребления: Idle, Power-save, Power-down, Standby, Extended Standby и снижения шумов ADC

· Выводы I/O и корпуса

32 программируемые линии ввода/вывода

40-выводной корпус PDIP и 44-выводной корпус TQFP

· Рабочие напряжения 4,5 - 5,5 В

· Рабочая частота 0 - 16 МГц

· Корпус: DIP-40

Контролер имеет три внешних прерывания, подключаемых к одному из портов. Обмен информацией с УКС можно производить по интерфейсу SPI.

2.2 Выбор и обоснования режимов работы узлов микроконтроллера

Для ввода и вывода данных будем использовать интерфейс SPI (Serial Peripheral Interface) - полнодуплексный скоростной синхронный трёхпроводной интерфейс. В используемом МК интерфейс SPI реализован на старших выводах порта В.

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

За работу интерфейса отвечают 3 регистра:

· Регистр SPCR - регистр управления

SPIE - разрешение прерывания по окончанию передачи.

SPE - SPI включен. Если установлен этот бит, то выводы #SS, MISO,

MOSI и SCK работают как выводы SPI, иначе - как простые выводы порта.

DORD - направление передачи данных. Если установлен, то передача идёт с младшего бита, если сброшен - со старшего.

MSTR - если установлен, контроллер работает как Master, если сброшен - как Slave. Управляется также выводом #SS, если он настроен на ввод - при подаче "0" на #SS бит MSTR сбрасывается.

CPOL - определяет уровень на выходе SCK в режиме ожидания - SCK = CPOL

CPHA - если установлен, передача и приём бита производится по обратному фронту, если сброшен - по прямому.

SPR1, SPR0 - делитель тактовой частоты (F - частота генератора контроллера).

SPR1SPR0Частота

00F/4

01F/16

10F/64

11F/128

· Регистр SPSR - регистр состояния

· Регистр SPDR - регистр данных

Также мы испольуем линии порта D, на выводы которого подаются внешние прерывания – PD2(INT0) и PD3(INT1) .

Для задания работы портов используются регистры DDR и PORT, соответствующих портов. Режимы работы портов приведены в таблице1.

В те моменты, когда устройство не востребовано, будем переводить его в спящий режим Power Down, выход из которого осуществляется по прерыванию. Данный режим работы описан в таблице 2.

Прерывания будем обрабатывать по переднему фронту, для этого занесём соответствующее значение в регистр MCUCR.

2.3 Формирование тактовых импульсов

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

Использование встроенного RC-генератора с внутренней время задающей RC-цепочкой является наиболее экономичным решением, так как при этом не требуется никаких внешних компонентов.

Внутренний RC-генератора микроконтроллеров семейства мега может работать на нескольких фиксированных частотах.

Частота работы внутреннего RC-генератора определяется значениями битов CKSEL3-0 согласно табл.3.

В разрабатываемом устройстве высокая частота, а соответственно и высокая скорость работы не нужна, поэтому вполне достаточно будет выбрать частоту тактирования равную 4.0 МГц.

2.4 Организация сброса

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

Для предотвращения сбоев работы контролера и выполнения программы при скачке напряжения, используем встроенную схему сброса при снижении питания BOD, которая отслеживает напряжение питания. Если работа этой схемы разрешена, то при снижении питания ниже некоторого уровня она переводит контроллер в состояние сброса. Когда напряжение вновь увеличится до порогового значения, запускается таймер задержки сброса. После формирования задержки tTOUT внутренний сигнал сброса снимается и происходит запуск микроконтроллера.