Автор работы: Пользователь скрыл имя, 06 Июня 2013 в 12:40, курсовая работа
В курсовом проекте необходимо разработать систему дополнительной обработки данных (СДОД), которая эмулирует функционирование потоковых SIMD-расширений (SSE – Striming SIMD Extensions) архитектуры IA-32 методами микроконтроллера (МК) семейства PIC18XX2.
СДОД должна включать:
микроконтроллер указанного типа;
внешняю память, дополняющаю внутреннюю память МК до 256 Кб, имея в своем распоряжении предложенные микросхемы памяти, которые сотавляют:
1. Выбор варианта задания.
2. Схема функциональная.
3. Анализ задания и описание алгоритма функции.
4. Описание работы устройства.
5. Описание программы
Министерство образования
Днепропетровский национальный университет
Радиофизический факультет
Кафедра ЭВМ
по дисциплине
“Цифровые ЭВМ”
Выполнил:
ст. гр. КИ-10у-1в
Похил А.В.
Проверил:
доц. каф. ЭВМ
Пащенко В.А.
Днепропетровск
2012
Содержание.
1. Выбор варианта задания.
2. Схема функциональная.
3. Анализ задания и описание алгоритма функции.
4. Описание работы устройства.
5. Описание программы
6. Приложение 1. Схема электрическая принципиальная.
7. Приложение 2. Листинг программы.
1. Выбор варианта задания.
Номер моей зачетной книжки – 012248.
0100 1000
Из таблиц получаем следующие данные:
Команда – SQRTPD (извлечение квадратного корня числа)
Тип микроконтроллера – PIC18C442
ППЗУ – 27С128
РПЗУ – 25ХХ640
В курсовом проекте необходимо разработать систему дополнительной обработки данных (СДОД), которая эмулирует функционирование потоковых SIMD-расширений (SSE – Striming SIMD Extensions) архитектуры IA-32 методами микроконтроллера (МК) семейства PIC18XX2.
СДОД должна включать:
а) устройство программируемой постоянной памяти (ППЗУ) с паралельным побайтным доступом;
б) устройство перепрограммируемой постоянной памяти (РПЗУ) с последовательным побитным доступом.
В процессе функционирования СДОД должна:
2. Схема функциональная.
СДОД состоит из таких функциональных частей:
МК – микроконтроллер серии PIC18CXX;
ППЗУ – устройство программируемой постоянной памяти;
РПЗУ – устройство перепрограммируемой постоянной памяти.
Данные считываются из ППЗУ и поступают в МК через паралельный подчиненный порт (PSP). Затем соответствующим образом обрабатываются и записываются в РПЗУ через главный синхронный последовательный порт (MSSP).
3. Анализ задания и описание алгоритма функции.
Необходимо построить алгоритм вычисления квадратного корня числа.
Одним из популярных и достаточно быстрых методов вычисления квадратного корня числа является метод Newton-Raphson’а. Конечно этот метод быстр в терминах математики, т.к. интенсивно использует операцию деления, которая занимает много итераций МК. В PIC18CXX2 проблем с операцией деления нет, т.к. она является одной из основных. Однако с помощью одного цикла аппаратного умножения и используя алгоритм немного отличный от метода Newton-Raphson’а, можно реализовать операцию вычисления квадратного корня числа без приминения операции деления (сохраняя процессорное время). Следующий алгоритм демонстрирует это.
Используя бинарную природу МК квадратный корень может быть найден очень быстро. Каждый разряд двоичного числа представляет собой степень 2-ки. Сдвигая каждый бит вправо (или тоже самое степень 2-ки) и сравнивая результат с предполагаемым значением (т.е. квадратом предполагаемого результата), получаем искомый корень. Если квадрат предполагаемого значения больше чем аргумент, то бит сдвигаем, если меньше – переходим к следующему биту. Т. о. мы все ближе и ближе к настоящему значению.Блок-схема алгоритма представлена на рисунке 1.
Рассмотрим работу алгоритма на примере.
A =
A2 = 0xCF48
Шаг A Описание
1 1000 0000 (0x80) этот квадрат меньше чем 0xСF48, след. цикл
новый бит
2 1100 0000 (0xC0) этот квадрат меньше чем 0xСF48, след. цикл
новый бит
3 1110 0000 (0xE0) этот квадрат меньше чем 0xСF48, след. цикл
новый бит
4 1111 0000 (0xF0) это больше чем 0xСF48, сдвигаем бит
новый бит
5 1110 1000 (0xE8) это больше чем 0xСF48, сдвигаем бит
новый бит
6 1110 0100 (0xE4) этот квадрат меньше чем 0xСF48, след. цикл
новый бит
7 1110 0110 (0xE6) этот квадрат меньше чем 0xСF48, след. цикл
новый бит
8 1110 0111 (0xE7) это больше чем 0xСF48, сдвигаем бит
новый бит
9 1110 0110 (0xE6) правый бит выпал и алгоритм останавливается, хотя
можно продолжать и дальше для более точного вычисления
Таким образом мы получаем результат
0xE6.
4. Описание работы устройства.
Работа PSP.
Чтение из ППЗУ происходит через PSP (Parallel Slave Port).
Порт D используется для передачи младших разрядов адреса, а также после их фиксации в защелке для обмена байтом данных. Порт D образует PSP вместе с портом E, контакты которого 0-2, соответственно содержат сигналы “чтения”, “записи” и ALE (управление защелкой).
Порт B используется для передачи старших разрядов адреса, из которых A15 выбирает одну из 2-х микросхем. В качестве защелки микросхема 74LS373, которая представляет собой 8-разрядный буферный регистр с потенциальным управлением. Назначение защелки – демультиплексирование младших разрядов адреса и шины данных.
Цикл чтения начинается
с подачи адреса на 16-разрядную шину,
затем младшие разряды
Контакты порта D стают входами. Потенциал на линии RD становится низким, что включает выходные буферы выбранной микросхемы памяти. С некоторой задержкой на линиях порта D появляются данные. Затем RD становится равным 1 и выходные буферы закрываются.
Выводы порта D снова становятся выходами, на которых присутствуют младшие разряды адреса.
Работа MSSP.
Запись в РПЗУ происходит через MSSP (Master Synchronous Serial Port).
В частности используется шина передачи I2C. (Master). Физически интерфейс этой шины состоит из двух линий: одна для синхронизации (SCL) и вторая для данных (SDA). I2C протокол обеспечивает 7-ми или 10-тяи битную адресацию
Для управления портом MSSP применяются регистры: SSPSTAT, SSPCON1, SSPCON2. С помощью этих регистров порт настраивается на протокол передачи I2C.
Порт A используется для передачи данных. В частности назначение его контактов таково:
RA0 – выбор банка;
RA1 – последовательный вход;
RA2 – синхронизация;
В первую очередь по сигналу на входе SI выбираем банк памяти, с которым мы хотим работать. Затем на вход SDA передаем данные. При этом нужно соответствующим образом изменять состояние регистра SSPSTAT.
5. Описание программы.
При написании программной
части курсового проекта
Программа состоит из 2-х частей, размещенных в файлах PROC.ASM и MAIN.ASM. В 1-м файле содержится код, реализующий выполнение операции извлечения квадратного корня, а также подпрограммы чтения и записи в ППЗУ и РПЗУ. Во 2-м – пример использования этих подпрограмм.
Файл PROC.ASM содержит код таких функций:
Sqrt32 – функция извлечения квадратного корня из 32-разрядного аргумента;
Squar – функция нахождения квадрата 16-разрядного аргумента;
Init_PSP – подпрограмма инициализации порта PSP;
Init_I2C – подпрограмма инициализации порта I2C;
ReadPSP – функция чтения байта из ППЗУ;
WriteI2C – функция записи байта в РПЗУ.
Sqrt32. Алгоритм работы этой функции был рассмотрен выше, поэтому подробно описывать ее работу не будем. Используемые переменные:
ARGA3-ARGA0 – аргумент функции;
RES1, RES0 – результат;
Пусть имеется два числа A1A2 и B1B2 которые необходимо перемножить, где A1 , A2 , B1 , B2 – соответствующие цифры этих чисел. Тогда имеем:
A1 A2
B1 B2
A1B2 A2B2
A1B1 A2B1
A1B1 A1B2+ A2B1 A2B2 - соответствующие разряды результата
При возведении в квадрат нужно принять A=B.
Init_PSP. Используется стандартная процедура инициализации порта.
Переменныая ADLOW_IMAGE – хранит младший адрес. Используются порты МК – порт B и порт D. Эти порты конфигурируются регистром TRIS.
Init_I2C. Используется тоже стандартная процедура инициализации порта. Сначала выбираем нужный банк памяти, затем частоту передачи сигналов (20 или 40 МГц), и затем инициализируем порт для работы в режиме I2C.
Листинг программы.
Файл MAIN.ASM
; ******************************
list p=18C442
#include P18C442.INC
; ******************************
; ******************************
EXTERN ARGA0, ARGA1, ARGA2, ARGA3
EXTERN RES0, RES1
EXTERN Sqrt
; ******************************
; ******************************
W equ 0 ; стандартные константы
F equ 1
a equ 0
; ******************************
; ******************************
R_Vctr CODE 0x0000
goto Main
; ******************************
; ******************************
; Calling Routine
SRoot CODE
Main
movlw 0xCF ; аргумент равен 0xCF48
movwf ARGA1, a ;
movlw 0x48 ;
movwf ARGA0, a ;
call Init_PSP ; инициализация PSP
call ReadPSP ; чтение из ППЗУ
call Sqrt ; Sqrt(0xCF48)
; RES0 теперь содержит 0xE6
call Init_I2C ; инициализация MSSP
call WriteI2C ; запись в РПЗУ
bra Main
; ******************************
END
Файл PROC.ASM
#include P18C442.INC
; ******************************
; ******************** Квадратный корень ******************************
; Sqrt32(ARGA3:ARGA2:ARGA1:
Sqrt32 clrf TEMP0, a ; обнулить временное решение
clrf TEMP1, a
clrf BITLOC0, a ; установить 1-й бит
clrf RES0, a
movlw 0x80
movwf BITLOC1, a ; BitLoc = 0x8000
movwf RES1, a ; RES = 0x8000
Squar16 movff RES0, ARG1L ; квадрат гипотезы
movff RES1, ARG1H
call Sq16
movf SQRES0, W, a ; ARGA - PROD сравнение
subwf ARGA0, W, a
movf SQRES1, W, a
subwfb ARGA1, W, a
movf SQRES2, W, a
subwfb ARGA2, W, a
movf SQRES3, W, a
subwfb ARGA3, W, a
btfsc STATUS, C, a
bra NxtBt16 ; если больше, то след. бит
; если меньше, то сдвинуть вправо
addlw 0x00 ; clear carry
movff TEMP0, RES0 ; переместить последнее правильное
movff TEMP1, RES1 ; решение вRES0
rrcf BITLOC1, F, a ; затем сдвинуть бит и его установить
rrcf BITLOC0, F, a
movf BITLOC1, W, a ; назад в RES1:RES0
iorwf RES1, F, a
movf BITLOC0, W, a
iorwf RES0, F, a
btfsc STATUS, C, a ; если последнее значение было ; протестировано, то
bra Done32 ; выход
bra Squar16 ; вернуться к другому тестированию
NxtBt16 addlw 0x00 ; clear carry
movff RES0, TEMP0 ; скопировать последнее правильное значение
movff RES1, TEMP1
rrcf BITLOC1, F, a ; сдвинуть бит
rrcf BITLOC0, F, a
movf BITLOC1, W, a ; и записать снова в RES1:RES0
iorwf RES1, F, a
movf BITLOC0, W, a
iorwf RES0, F, a
btfsc STATUS, C, a ; если это последнее значение
bra Done32 ; выход
bra Squar16
Done32 movff TEMP0,RES0 ; поместиь окончательный результат в ; RES1:RES0
movff TEMP1,RES1
return
GLOBAL Sqrt32
; ******************************
; ******************* Квадрат числа *****************************
Информация о работе Разработка системы дополнительной обработки данных