Реферат: Микропроцессорные средства и системы

Контрольное задание, вариант № 7

Группа Э-41-З, студент **********

Министерство Образования Украины

Кременчугский Государственный Политехнический Институт

Кременчуг 1998

Преобразовать числа из десятичной системы счисления в двоичную и шестнадцатеричную: 5; 38; 93; 175; 264.

Десятичная система Двоичная система Шестнадцатеричная система
5 40 1 1 5
38 1 1 1 26
93 1 1 1 1 1 5D
175 1 1 1 1 1 1 AF
264 1 1 108

Задача № 2

Преобразовать числа, записанные в прямом двоичном коде в десятичный и шестнадцатеричный код: 0011; 1000010; 00011011000 .

Прямой двоичный код Десятичный код Шестнадцатеричный код
1 1 3 3
1 1 66 42
1 1 1 1 216 D8

Задача № 3

Выполнить следующие арифметические действия с двоичными числами, заданными в прямом коде: 0011 + 1000110; 10000001 — 1000110

+

1 1

+

3

-

1 1

-

1 2 9
1 1 1 7 1 1 1 7
1 1 1 7 3 1 1 1 1 1 5 9

Задача № 4

Выполнить следующее арифметическое действие в 8-ми разрядной сетке ( старший бит содержит знак числа ): 5 х 25

х

. 1 1 1

х

2 5
. 1 1 5
1 1 1
1 1 1
. 1 1 1 1 1 1 1 2 5

Контрольная работа № 2

Задача № 1

Определить размер памяти в килобайтах ( байтах ), если данная память адресуется с адреса A0EDH по адрес EF34H. Одна ячейка памяти занимает 8 бит

Для решения определим вначале кол-во ячеек памяти, адресуемых одним разрядом при 16- теричной системе адресации.

4-й разряд 3-й разряд 2-й разряд 1-й разряд H
4096 256 16 1 H

Таким образом, начальный и конечный адреса в десятичной системе будут :

A0EDH = 4096 * 10 + 256 * 0 + 16 * 14 + 1 * 13 + 1= 41198 ;

EF34H = 4096 * 14 + 256 * 15 + 16 * 3 + 1 * 4 +1 = 61237 .

61237 — 41198 = 20039.

20039 = 19 * 1024 + 583.

Итак, размер памяти будет 20039 байт или 19 кБ. 583 байт

Задача № 2

Символьная строка расположена в ОЗУ начиная с адреса 0006H. Известно, что под каждый символ отводится одна ячейка памяти. Число символов в строке = 731. Определить адрес для обращения к последнему символу строки.

Порядковый номер последней ячейки памяти в десятичной системе будет 731 + 6 = 737. Переведем 738 из десятичной системы в двоичную :

73710 = 0010111000012

Теперь переводим в 16 — теричную: 0010111000012 = 02E116

Ответ: адрес последнего символа 02E1H

Задача № 3

Составить программу на Ассемблере с комментариями:

Подсчитать число символов в строке, расположенной в области начиная с адреса 1000H и заканчивая адресом 2000Hбез учета пробелов, если известно, что каждый символ занимает одну ячейку памяти и пробел кодируется как 01H.

Максимальное число символов в строке 2000h -1000h=1000h=409610

После выполнения программы результат будет помещен в HL.

LXISP,3000h; указание вершины стека

LXIH,1000h; адрес 1-го элемента => в HL

LXID,1000h; загрузка счетчика в D,E

XRAA; обнуление аккумулятора

STA 2001h; обнуление счетчика количества символов

STA 2002h; обнуление счетчика количества символов

MVIB,01h; код пробела => в В

LOOP:

MOVA,M; загрузить символ из ячейки М в аккумулятор

CMPB; проверка на код пробела

JNZCOUNT; если не совпадает, переход к COUNT, иначе — дальше

INXH; адрес следующего символа

DCXD; уменьшить счетчик

JZEXIT; если счетчик = 0, на выход

JMPLOOP; в начало цикла

COUNT:

PUSHH; выгрузить содержимое HL в стек

LHLD 2001h; загрузить HL содержимым счетчика количества символов

INXH; увеличить счетчик на 1

SHLD 2001h; сохранить счетчик количества символов в 2001h, 2002h

POPH; восстановить в HL сохраненный адрес

RET; возврат из подпрограммы

EXIT:

LHLD 2001h; загрузить HL содержимым счетчика количества символов

END

Задача № 4

Составить программу на Ассемблере, направленную на решение математической функции:

Z = lg(x+1)

Натуральный и десятичный логарифмы одного и того же числа (в данном случае — выражения) связаны простым соотношением, позволяющим переходить от одного к другому :

lgx = Mlnx, где M = 1/ln10 = 0,434294481903252…

т.е., десятичный логарифм числа x = натуральному логарифму этого же числа, умноженному на постоянный множитель M = 0,434294481903252…, называемый модулем перехода от натуральных логарифмов к десятичным.

В соответствии с вышесказанным, lg (x+1) = 0,434294481903252…* ln(x+1)

Для вычисления ln(x+1) используем разложение в ряд :

ln(x+1) = x-x2 /2+x3 /3-x4 /4+x5 /5-x6 /6+x7 /7-x8 /8+…

В результате алгоритм решения сводится к четырем арифметическим действиям: +; — ; *; /.

Перед выполнением арифметических действий над числами с плавающей запятой условимся первое число размещать в регистрах EHL, второе – в регистрах DBC; результат операции оставлять в EHL.

Формат представления чисел с плавающей запятой :

S P P P P P P P P M M M M M M M M M M M M M M M
7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1-й байт 2-й байт 3-й байт

Где: S – знак числа ( 1-отрицательный, 0-положительный ), P0…P7 – 8-битный смещенный порядок, M1 … M15 – мантисса. Скрытый бит целой части мантиссы в нормализованных числах содержит 1

1000h X
1001h
1003h
1003h X2
1004h
1005h
1006h X3
1007h
1008h
1009h X4
100Ah
100Bh
100Ch X5
100Dh
100Eh
100Fh X6
1010h
1011h
1012h X7
1013h
1014h
1020h Адрес ячейки с текущим XN
1021h
1022h Текущий N

До начала вычислений число Х должно быть размещено в памяти по адресам 1000h-1002h.; начало цикла вычислений

CALC1:

LXI H,1003h; сохранение адреса первой ячейки

SHLD 1020h; для хранения XN

CALL LOAD; Загрузка Х в EHL

; цикл вычисления XN

CALC2: CALL LOAD1; Загрузка Х в DBC CALL MULF; Умножение чисел с плавающей точкой

MOV B,H; HL=>BC

MOVC,L

LHLD 1020h; загрузить адрес ячейки памяти для хранения Хn

MOV M,E; Хn => в память

INX H

MOV M,B

INX H

MOV M,C

INX H

SHLD 1020h; запомнить адрес ячейки памяти для следующего Хn

MOV H,B ;BC=>HL

MOVL,C

LDA 1021h; содержимое ячейки => в аккумулятор

CPI 15h; если получены все значения Хn ,

JZ CALC3; переход на CALC3

JMP CALC2; иначе- в начало

CALC3:

LXI H,1022h ;

MVI M,01h; загрузить в ячейку 1022h делитель

LXI H,1003h ;

SHLD 1020h; содержимое HL => в память

; цикл вычисления XN /NCALC4: MOV B,H; HL=>BC MOV C,L LHLD 1020h; загрузить адрес ячейки памяти для хранения N MOV E,M; Хn => в регистры INX H MOV B,M INX H MOV C,M SHLD 1020h; запомнить адрес ячейки памяти для следующего Хn

MOV H,B ;BC=>HL

MOV L,C

PUSH H ;

LXI H,1022h ;N => в ячейку С

MOV C,M

POP H ;

MVI D,00h

MVI B,00h

CALL DIVF; Деление чисел с плавающей точкой

MOV B,H; HL=>BC

MOVC,L

LHLD 1020h; загрузить адрес ячейки памяти для хранения Хn /N

DCX H ;

DCX H ;

MOV M,E; Хn /N => в память

INX H

MOV M,B

INX H

MOV M,C

INX H

SHLD 1020h; запомнить адрес ячейки памяти для следующего Хn /N

MOV H,B ;BC=>HL

MOV L,C

PUSH H ;

LXI H,1022h ;N => в ячейку С

MOV C,M; инкремент N

INR C

MOV M,C

POP H ;

LDA 1021h; содержимое ячейки => в аккумулятор

CPI 15h; если получены все значения Хn,

JZ CALC5; переход на CALC5

JMP CALC4; иначе- в начало

CALC5:

LXI H,1003h ;

SHLD 1020h ;

;

CALC6:

LHLD 1020h; загрузить адрес ячейки памяти для хранения N

MOV D,M; Хn/N => в регистры D,B,C.

INX H

MOV B,M

INX H

MOV C,M

INX H

SHLD 1020h; запомнить адрес ячейки памяти для следующего Хn/N

;

; вычисление ln(x+1)

CALC7: CALL LOAD; Загрузка Х в EHL CALL SUBF; Вычитание чисел с плавающей точкой CALL CALC8; загрузка Хn+1 /N+1 в регистры D,B,C. CALL ADDF; Сложение чисел с плавающей точкой CALL CALC8; загрузка Хn+1 /N+1 в регистры D,B,C. CALL SUBF; Вычитание чисел с плавающей точкой

CALL CALC8; загрузка Хn+1 /N+1 в регистры D,B,C.

CALL ADDF; Сложение чисел с плавающей точкой

CALL CALC8; загрузка Хn+1 /N+1 в регистры D,B,C.

CALL SUBF; Вычитание чисел с плавающей точкой

CALL CALC8; загрузка Хn+1 /N+1 в регистры D,B,C.

CALL ADDF; Сложение чисел с плавающей точкой

CALL CALC8; загрузка Хn+1 /N+1 в регистры D,B,C.

MVI D,00h; загрузка модуля пере-

MVI B,2Bh; хода в DBC

MVIC,2Bh

CALL MULF; Умножение ln(x+1) на модуль перехода к lg

JMP EXIT; на выход

;; загрузка Хn+1 /N+1 в регистры D,B,C.CALC8: PUSH H LHLD 1020h; загрузить адрес ячейки памяти для хранения N MOV D,M; Хn /N => в регистры D,B,C. INX H MOV B,M INX H MOV C,M INX H SHLD 1020h; запомнить адрес ячейки памяти для следующего Хn /N

POP H ;

RET ;

;

EXIT:

HLT; Останов

;

;

;

; Загрузка Х в EHLLOAD: LXI H,1000h; загрузка в HL адреса порядка Х MOV E,M; загрузка порядка Х в Е LHLD 1001h; загрузка мантиссы в HL

RET ;

; Загрузка Х в DBC

LOAD1:

PUSH H; выгрузка в стек HL

LXI H,1000h; загрузка в HL адреса порядка Х

MOV D,M; загрузка порядка Х в D

INX H ;

MOV B,M ;

INX H ;

MOV C,M; загрузка мантиссы в BC

POP H; загрузка из стека HL

RET ;

; Образование дополнительного кода числа в регистре HL

comp:

mov A,H ;

CMA ;

MOV H,A ;

MOV A,L ;

CMA ;

MOV L,A ;

INX H ;

RET ;

; Проверка знака и образование дополнительного кода

NEG:

MOV A,E ;

ORA E ;

JP NOTDK ;

CALL COMP; Образование дополнительного кода числа в регистре HL

NOTDK: RET ;

; Сдвиг содержимого HL вправо на 1 бит:

SHIFT:

MOV A,H ;

RAR ;

MOV H,A ;

MOV A,L ;

RAR ;

MOV L,A ;

RET ;

; Обмен содержимого регистров EHL и DBC

SWAP:

PUSH B ;

XTHL ;

POP B ;

MOV A,D ;

MOV D,E ;

MOV E,A ;

RET ;

; Восстановление числа с плавающей точкой

REC:

MOV A,H ;

ADD A ;

MOV A,E ;

RAL ;

MOV E,A ;

MOV A,H ;

ORI 80H ;

MOV H,A ;

RET ;

; Преобразование числа в стандартный формат

PACK:

LDA SIGN ;

ADD A ;

MOV A,E ;

MOV D,A ;

RAR ;

MOV E,A ;

MOV A,H ;

ANI 7FH ;

MOV H,A ;

MOV A,D ;

RRC ;

ANI 80H ;

ORA H ;

MOV H,A ;

RET ;

; Сложение чисел с плавающей точкой

ADDF:

MOV A,D ;

XRA E ;

JP ADDF1 ;

MOV A,D ;

XRI 80H ;

MOV D,A ;

JMP SUBF ;

;

ADDF1:

MOV A,D ;

ORA B ;

ORA C ;

JZ ADDF8 ;

MOV A,E ;

ORA H ;

ORA L ;

JNZ ADDF2 ;

CALL SWAP; Обмен содержимого регистров EHL и DBC

JMP ADDF8 ;

;

ADDF2:

MOV A,D ;

STA SIGN ;

CALL REC ;

CALL SWAP; Обмен содержимого регистров EHL и DBC

CALL REC; Восстановление числа с плавающей точкой

;

MOV A,E ;

SUB D ;

JNC ADDF3 ;

CALL SWAP; Обмен содержимого регистров EHL и DBC

MOV A,E ;

SUB D ;

;

; В EHL большее число, в аккумуляторе разность потенциалов

ADDF3:

JZ ADDF6 ;

CPI 16 ;

JC ADDF4 ;

JMP ADDF7 ;

;

; Можно сдвигать мантиссу меньшего числа

ADDF4:

MOV E,A ;

CALL SWAP; Обмен содержимого регистров EHL и DBC

ADDF5:

ORA A ;

CALL SHIFT; Сдвиг содержимого HL вправо на 1 бит:

INR E ;

DCR D ;

JNZ ADDF5 ;

;

; В регистре Е общий порядок. Можно складывать мантиссы

ADDF6:

DAD B ;

JNC ADDF7 ;

INR E ;

JZ ADDF8 ;

ORA A ;

CALL SHIFT; Сдвиг содержимого HL вправо на 1 бит:

;

ADDF7:

CALL PACK; Преобразование числа в стандартный формат

;

ADDF8:

RET ;

;

; Вычитание чисел с плавающей точкой

SUBF:

MOV A,D ;

XRA E ;

JP SUBF1 ;

MOV A,D ;

XRI 80H ;

MOV D,A ;

JMP ADDF; Сложение чисел с плавающей точкой

SUBF1:

MOV A,D ;

ORA B ;

ORA C ;

JZ SUBFA ;

MOV A,E ;

ORA H ;

ORA L ;

JNZ SUBF2 ;

CALL SWAP; Обмен содержимого регистров EHL и DBC

MOV A,E ;

XRI 80H ;

MOV E,A ;

JMP SUBFA ;

SUBF2:

MOV A,E ;

STA SIGN ;

CALL REC; Восстановление числа с плавающей точкой

CALL SWAP; Обмен содержимого регистров EHL и DBC

CALL REC; Восстановление числа с плавающей точкой

MOV A,D ;

SUB E ;

JNZ SUBF3 ;

MOV A,B ;

CMP H ;

JNZ SUBF3 ;

MOV A,C ;

CMP L ;

JNZ SUBF3 ;

MVI E,0 ;

LXI H,0 ;

JMP SUBFA ;

;

; операнды не равны, необходимо вычитать

SUBF3:

JNC SUBF4 ;

CALL SWAP; Обмен содержимого регистров EHL и DBC

LDA SIGN ;

XRI 80H ;

STA SIGN ;

;

SUBF4:

MOV A,D ;

SUB E ;

JZ SUBF7 ;

CPI 16 ;

JC SUBF5 ;

CALL SWAP; Обмен содержимого регистров EHL и DBC

JMP SUBF ;

;

; В регистре А разность порядков, в DBC больший операнд

SUBF5:

MOV E,A ;

SUBF6:

ORA A ;

CALL SHIFT; Сдвиг содержимого HL вправо на 1 бит:

DCR E ;

JNZ SUBF6 ;

;

; Вычесть мантиссы, результат в EHL

SUBF7:

MOV A,C ;

SUB L ;

MOV L,A ;

MOV A,B ;

SBB H ;

MOV H,A ;

MOV E,D ;

;

; нормализовать и проверить антипереполнение

SUBF8:

MOV A,H ;

ORA H ;

JM SUBF9 ;

DCR E ;

MOV A,E ;

CPI 0FFH ;

STC ;

JZ SUBFA ;

DAD H ;

JMP SUBF8 ;

;

SUBF9:

CALL PACK; Преобразование числа в стандартный формат

SUBFA:

RET ;

;

; Умножение чисел с плавающей точкой

MULF:

MOV A,E ;

ORA H ;

ORA L ;

JZ MULF8 ;

MOV A,D ;

ORA B ;

ORA C ;

JNZ MULF1 ;

CALL SWAP; Обмен содержимого регистров EHL и DBC

JMP MULF8 ;

;

; операнды ненулевые, можно умножать

MULF1:

MOV A,D ;

XRA E ;

STA SIGN ;

CALL REC; Восстановление числа с плавающей точкой

CALL SWAP; Обмен содержимого регистров EHL и DBC

CALL REC; Восстановление числа с плавающей точкой

MOV A,D ;

ADD E ;

JC MULF2 ;

SUI 127 ;

JNC MULF3 ;

JMP MULF8 ;

;

MULF2:

ADI 129 ;

JNC MULF3 ;

JMP MULF8 ;

;

; в аккумуляторе А смещенный порядок произведения

MULF3:

MOV C,A ;

MOV E,B ;

MVI D,0 ;

MOV A,H ;

LXI H,0 ;

XCHG ;

DAD H ;

XCHG ;

;

; начало цикла умножения

MULF4:

ORA A ;

RAR ;

JNC MULF5 ;

DAD D ;

;

MULF5:

JZ MULF6 ;

XCHG ;

DAD H ;

XHG ;

JMP MULF4 ;

;

; проверить нарушение нормализации

MULF6:

JNC MULF7 ;

CALL SHIFT; Сдвиг содержимого HL вправо на 1 бит:

INR C ;

STC ;

JZ MULF8 ;

;

MULF7:

MOV E,C ;

CALL PACK; Преобразование числа в стандартный формат

;

MULF8:

RET ;

;

; Деление чисел с плавающей точкой

DIVF:

MOV A,E ;

ORA H ;

ORA L ;

JZ DIVF7 ;

MOV A,D ;

ORA B ;

ORA C ;

STC ;

JZ DIVF7 ;

; операнды не равны нулю

MOV A,D ;

XRA E ;

STA SIGN ;

CALL REC; Восстановление числа с плавающей точкой

CALL SWAP; Обмен содержимого регистров EHL и DBC

CALL REC; Восстановление числа с плавающей точкой

CALL SWAP; Обмен содержимого регистров EHL и DBC

MOV A,E ;

SUB D ;

JNC DIVF1 ;

ADI 127 ;

CMC ;

JC DIVF7; возикло антипереполнение

JMP DIVF2; перейти на деление мантисс

;

DIVF1:

ADI 127; прибавить смещение

JC DIVF7; возникло антипереполнение

;

; можно начинать деление мантисс

DIVF2:

STA EXP ;

XCHG ;

LXI H,0 ;

MVI A,16; инициализировать счетчик

PUSH PSW ;

JMP DIVF4; войти в цикл деления

;

DIVF3:

PUSH PSW ;

DAD H; сдвинуть влево

XCHG; частное и остаток

DAD H ;

XCHG ;

;

DIVF4:

PUSH D; сохранить остаок в стеке

MOV A,E; вычесть делитель из остатка

SUB C ;

MOV E,A ;

MOV A,D ;

SBB B ;

MOV D,A ;

JC DIVF5 ;

POP PSW; удалить остаток из стека

INR L ;

PUSH D ;

;

DIVF5:

POP D; извлечь предыдущий остаток

POP PSW; извлечь счетчик

DCR A; декремент счетчика

JNZ DIVF3; повторить цикл деления

; деление мантисс закончено

LDA EXP ;

MOV E,A ;

; нормализовать частное

MOV A,H ;

ORA A ;

JM DIVF6 ;

DAD H ;

DCR E ;

CPI 0FFH; проверить антипереполнение

STC ;

JZ DIVF7; возникло антипереполнение

;

DIVF6:

CALL PACK; Преобразование числа в стандартный формат

DIVF7:

RET ;

;

Контрольная работа № 3

Задача № 1

Построить модель распределения адресного пространства с указанием диапазонов адресов в 16-й системе счисления. В качестве дешифратора адресов используется стандартный дешифратор, к информационным входам которого подключены линии А15, А12, А9 16-разрядной шины адреса.

Выходы дешиф-ратора Разряды адреса Диапазоны адресов
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Y0 X X X X X X X X X X X X X

0000h-01FFh, 0400h-05FFh, 0800h-0DFFh

2000h-21FFh, 2400h-25FFh, 2800h-2DFFh

4000h-41FFh, 4400h-45FFh, 4800h-4DFFh

6000h-61FFh, 6400h-65FFh, 6800h-6DFFh

Y1 X X X X 1 X X X X X X X X X

0200h-03FFh, 0600h-07FFh, 0A00h-0FFFh

2200h-23FFh, 2600h-27FFh, 2A00h-2FFFh

4200h-43FFh, 4600h-47FFh, 4A00h-4FFFh

6200h-63FFh, 6600h-67FFh, 6A00h-6FFFh

Y2 X X 1 X X X X X X X X X X X

1000h-11FFh, 1400h-15FFh, 1800h-1DFFh

3000h-31FFh, 3400h-35FFh, 3800h-3DFFh

5000h-51FFh, 5400h-55FFh, 5800h-5DFFh

7000h-71FFh, 7400h-75FFh, 7800h-7DFFh

Y3 X X 1 X X 1 X X X X X X X X X

1200h-13FFh, 1600h-17FFh, 1A00h-1FFFh

3200h-33FFh, 3600h-37FFh, 3A00h-3FFFh

5200h-53FFh, 5600h-57FFh, 5A00h-5FFFh

7200h-73FFh, 7600h-77FFh, 7A00h-7FFFh

Y4 1 X X X X X X X X X X X X X

8000h-81FFh, 8400h-85FFh, 8800h-8DFFh

A000h-A1FFh, A400h-A5FFh, A800h-ADFFh

C000h-C1FFh, C400h-C5FFh, C800h-CDFFh

E000h-E1FFh, E400h-E5FFh, E800h-EDFFh

Y5 1 X X X X 1 X X X X X X X X X

8200h-83FFh, 8600h-87FFh, 8A00h-8FFFh

A200h-A3FFh, A600h-A7FFh, AA00h-AFFFh

C200h-C3FFh, C600h-C7FFh, CA00h-CFFFh

E200h-E3FFh, E600h-E7FFh, EA00h-EFFFh

Y6 1 X X 1 X X X X X X X X X X X

9000h-91FFh, 9400h-95FFh, 9800h-9DFFh

B000h-B1FFh, B400h-B5FFh, B800h-BDFFh

D000h-D1FFh, D400h-D5FFh, D800h-DDFFh

F000h-F1FFh, F400h-F5FFh, F800h-FDFFh

Y7 1 X X 1 X X 1 X X X X X X X X X

9200h-93FFh, 9600h-97FFh, 9A00h-9FFFh

B200h-B3FFh, B600h-B7FFh, BA00h-BFFFh

D200h-D3FFh, D600h-D7FFh, DA00h-DFFFh

F200h-F3FFh, F600h-F7FFh, FA00h-FFFFh

В итоге адресное пространство размером в 64 Кбайт разбито на диапазоны для 8 устройств. В каждом диапазоне выделено 8 участков по 512 байт и 4 участка по 1536 байт.

Задача № 2

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

Наименование устройства Диапазон адресов Емкость (Кбайт)
ПЗУ1 0000h-03FFh 1
ОЗУ1 0400h-0BFFh 2
УВВ1 2000h-2FFFh 4
ПЗУ2 3000h-4FFFh 8
ОЗУ2 5000h-6FFFh 8
УВВ2 8000h-FFFFh 32

Так как наименьший блок имеет размер 1К ячеек, то разрешающая способность дешифратора должна обеспечивать деление адресного пространства с точностью до зон размером 1К ячеек. Анализируя шесть старших разрядов адреса, получаем необходимую точность, поскольку они делят все адресное пространство обьемом 64К ячеек на 26 = 64 части по 1К ячеек, что и требуется.

Выбираем за основу ПЗУ с 10 адресными входами 2716 ( К573РФ2 ), имеющее структуру 2К*8 бит. Выходы 00 — 05 этого ПЗУ подключаем к инверсным входам выбора кристалла соответсвующих микросхем.

Разрабатываем прошивку ПЗУ.

Устройство Диапазон адресов Адресные входы Выходы
A5 A4 A3 A2 A1 A0 0 1 2 3 4 5
ROM 1 0000h-03FFh 0 1 1 1 1 1
RAM 1 0400h-07FFh 1 1 0 1 1 1 1
0800h-0BFFh 1 1 0 1 1 1 1
- 0C00h-0FFFh 1 1 1 1 1 1 1 1
1000h-13FFh 1 1 1 1 1 1 1
1400h-17FFh 1 1 1 1 1 1 1 1
1800h-1BFFh 1 1 1 1 1 1 1 1
1C00h-1FFFh 1 1 1 1 1 1 1 1 1
IN-OUT 1 2000h-23FFh 1 1 1 0 1 1 1
2400h-27FFh 1 1 1 1 0 1 1 1
2800h-2BFFh 1 1 1 1 0 1 1 1
2C00h-2FFFh 1 1 1 1 1 1 1 1 1
ROM 2 3000h-33FFh 1 1 1 1 1 1 1 1
3400h-37FFh 1 1 1 1 1 1 1 1 1
3800h-3BFFh 1 1 1 1 1 1 1 1 1
3C00h-3FFFh 1 1 1 1 1 1 1 1 1 1
4000h-43FFh 1 1 1 1 1 1 1
4400h-47FFh 1 1 1 1 1 1 1 1
4800h-4BFFh 1 1 1 1 1 1 1 1
4C00h-4FFFh 1 1 1 1 1 1 1 1 1
RAM 2 5000h-53FFh 1 1 1 1 1 1 1 1
5400h-57FFh 1 1 1 1 1 1 1 1 1
5800h-5BFFh 1 1 1 1 1 1 1 1 1
5C00h-5FFFh 1 1 1 1 1 1 1 1 1 1
6000h-63FFh 1 1 1 1 1 1 1 1
6400h-67FFh 1 1 1 1 1 1 1 1 1
6800h-6BFFh 1 1 1 1 1 1 1 1 1
6C00h-6FFFh 1 1 1 1 1 1 1 1 1 1
- 7000h-73FFh 1 1 1 1 1 1 1 1 1
7400h-77FFh 1 1 1 1 1 1 1 1 1 1
7800h-7BFFh 1 1 1 1 1 1 1 1 1 1
7C00h-7FFFh 1 1 1 1 1 1 1 1 1 1 1
Устройство Диапазон адресов Адресные входы Выходы
A5 A4 A3 A2 A1 A0 0 1 2 3 4 5
IN-OUT 2 8000h-83FFh 1 1 1 1 1 1 1
8400h-87FFh 1 1 1 1 1 1 1 1
8800h-8BFFh 1 1 1 1 1 1 1 1
8C00h-8FFFh 1 1 1 1 1 1 1 1 1
9000h-93FFh 1 1 1 1 1 1 1 1
9400h-97FFh 1 1 1 1 1 1 1 1 1
9800h-9BFFh 1 1 1 1 1 1 1 1 1
9C00h-9FFFh 1 1 1 1 1 1 1 1 1 1
A000h-A3FFh 1 1 1 1 1 1 1 1
A400h-A7FFh 1 1 1 1 1 1 1 1 1
A800h-ABFFh 1 1 1 1 1 1 1 1 1
AC00h-AFFFh 1 1 1 1 1 1 1 1 1 1
B000h-B3FFh 1 1 1 1 1 1 1 1 1
B400h-B7FFh 1 1 1 1 1 1 1 1 1 1
B800h-BBFFh 1 1 1 1 1 1 1 1 1 1
BC00h-BFFFh 1 1 1 1 1 1 1 1 1 1 1
C000h-C3FFh 1 1 1 1 1 1 1 1
C400h-C7FFh 1 1 1 1 1 1 1 1 1
C800h-CBFFh 1 1 1 1 1 1 1 1 1
CC00h-CFFFh 1 1 1 1 1 1 1 1 1 1
D000h-D3FFh 1 1 1 1 1 1 1 1 1
D400h-D7FFh 1 1 1 1 1 1 1 1 1 1
D800h-DBFFh 1 1 1 1 1 1 1 1 1 1
DC00h-DFFFh 1 1 1 1 1 1 1 1 1 1 1
E000h-E3FFh 1 1 1 1 1 1 1 1 1
E400h-E7FFh 1 1 1 1 1 1 1 1 1 1
E800h-EBFFh 1 1 1 1 1 1 1 1 1 1
EC00h-EFFFh 1 1 1 1 1 1 1 1 1 1 1
F000h-F3FFh 1 1 1 1 1 1 1 1 1 1
F400h-F7FFh 1 1 1 1 1 1 1 1 1 1 1
F800h-FBFFh 1 1 1 1 1 1 1 1 1 1 1
FC00h-FFFFh 1 1 1 1 1 1 1 1 1 1 1 1

Схема дешифратора :


Карта памяти :

3FFh 7FFh BFFh FFFh
0000h ROM 1 RAM 1 - 0FFFh
1000h - 1FFFh
2000h IN-OUT 1 2FFFh
3000h ROM 2 3FFFh
4000h 4FFFh
5000h RAM 2 5FFFh
6000h 6FFFh
7000h - 7FFFh
8000h IN-OUT 2 8FFFh
9000h 9FFFh
A000h AFFFh
B000h BFFFh
C000h CFFFh
D000h DFFFh
E000h EFFFh
F000h FFFFh
000h 400h 800h C00h

Задача № 3

Разделить адресное пространство 64 килобайта на 18 равных частей. В качестве дешифратора адреса используется ПЛМ. Разбиение адресного пространства показать в виде схемы и таблицы.

Размер одной части 65536 / 18 = 3640 байт. Т.к. 3640 * 18 = 65520, последние 16 ячеек не будут использоваться.

Произведем разбиение 3640 байт на участки 2N :

3640 = 2048 + 1024 + 512 + 32 + 16 + 8

В результате получим 6 областей памяти по 18 участков в каждой :

0000h-8FFFh ( участки размером 2048 )

9000h-D7FFh ( участки размером 1024 )

D800h-FBFFh ( участки размером 512 )

FC00h-FE3Fh ( участки размером 32 )

FE40h-FF5Fh ( участки размером 16 )

FF60h-FFEFh ( участки размером 8 )

Прошивка ПЛМ 1

Область Диапазон адресов Разряды адреса

1

5

1

4

1

3

1

2

1

1

1

9 8 7 6 5 4 3 2 1
1 0000h-07FFh X X X X X X X X X X X
9000h-93FFh 1 1 X X X X X X X X X X
D800h-D9FFh 1 1 1 1 X X X X X X X X X
FC00h-FC1Fh 1 1 1 1 1 1 X X X X X
FE40h-FE4Fh 1 1 1 1 1 1 1 1 X X X X
FF60h-FF67h 1 1 1 1 1 1 1 1 1 1 X X X
2 0800h-0FFFh 1 X X X X X X X X X X X
9400h-97FFh 1 1 1 X X X X X X X X X X
DA00h-DBFFh 1 1 1 1 1 X X X X X X X X X
FC20h-FC3Fh 1 1 1 1 1 1 1 X X X X X
FE50h-FE5Fh 1 1 1 1 1 1 1 1 X X X X
FF68h-FF6Fh 1 1 1 1 1 1 1 1 1 1 1 X X X
3 1000h-17FFh 1 X X X X X X X X X X X
9800h-9BFFh 1 1 1 X X X X X X X X X X
DC00h-DDFFh 1 1 1 1 1 X X X X X X X X X
FC40h-FC5Fh 1 1 1 1 1 1 1 X X X X X
FE60h-FE6Fh 1 1 1 1 1 1 1 1 1 X X X X
FF70h-FF77h 1 1 1 1 1 1 1 1 1 1 1 X X X
4 1800h-1FFFh 1 1 X X X X X X X X X X X
9C00h-9FFFh 1 1 1 1 X X X X X X X X X X
DE00h-DFFFh 1 1 1 1 1 1 X X X X X X X X X
FC60h-FC7Fh 1 1 1 1 1 1 1 1 X X X X X
FE70h-FE7Fh 1 1 1 1 1 1 1 1 1 1 X X X X
FF78h-FF7Fh 1 1 1 1 1 1 1 1 1 1 X X X
5 2000h-27FFh 1 X X X X X X X X X X X
A000h-A3FFh 1 1 X X X X X X X X X X
E000h-E1FFh 1 1 1 1 X X X X X X X X X
FC80h-FC9Fh 1 1 1 1 1 1 1 X X X X X
FE80h-FE8Fh 1 1 1 1 1 1 1 1 X X X X
FF80h-FF87h 1 1 1 1 1 1 1 1 1 X X X
6 2800h-2FFFh 1 1 X X X X X X X X X X X
A400h-A7FFh 1 1 1 X X X X X X X X X X
E200h-E3FFh 1 1 1 1 X X X X X X X X X
FCA0h-FCBFh 1 1 1 1 1 1 1 1 X X X X X
FE90h-FE9Fh 1 1 1 1 1 1 1 1 1 X X X X
FF88h-FF8Fh 1 1 1 1 1 1 1 1 1 1 X X X
7 3000h-37FFh 1 1 X X X X X X X X X X X
A800h-ABFFh 1 1 1 X X X X X X X X X X
E400h-E5FFh 1 1 1 1 X X X X X X X X X
FCC0h-FCDFh 1 1 1 1 1 1 1 1 X X X X X
FEA0h-FEAFh 1 1 1 1 1 1 1 1 1 X X X X
FF90h-FF97h 1 1 1 1 1 1 1 1 1 1 X X X X
8 3800h-3FFFh 1 1 1 X X X X X X X X X X X
AC00h-AFFFh 1 1 1 1 X X X X X X X X X X
E600h-E7FFh 1 1 1 1 1 X X X X X X X X X
FCEOh-FCFFh 1 1 1 1 1 1 1 1 1 X X X X X
FEB0h-FEBFh 1 1 1 1 1 1 1 1 1 1 X X X X
FF98h-FF9Fh 1 1 1 1 1 1 1 1 1 1 X X X X
9 4000h-47FFh 1 1 1 X X X X X X X X X X
B000h-B3FFh 1 1 1 X X X X X X X X X X
E800h-E9FFh 1 1 1 1 X X X X X X X X X
FD00h-FD1Fh 1 1 1 1 1 1 1 X X X X X
FEC0h-FECFh 1 1 1 1 1 1 1 1 1 X X X X
FFA0h-FFA7h 1 1 1 1 1 1 1 1 1 1 X X X X

Прошивка ПЛМ 2

Область Диапазон адресов Разряды адреса

1

5

1

4

1

3

1

2

1

1

1

9 8 7 6 5 4 3 2 1
10 4800h-4FFFh 1 1 X X X X X X X X X X X
B400h-B7FFh 1 1 1 1 X X X X X X X X X X
EA00h-EBFFh 1 1 1 1 1 X X X X X X X X X
FD20h-FD3Fh 1 1 1 1 1 1 1 1 X X X X X
FED0h-FEDFh 1 1 1 1 1 1 1 1 1 1 X X X X
FFA8h-FFAFh 1 1 1 1 1 1 1 1 1 1 1 X X X
11 5000h-57FFh 1 1 1 X X X X X X X X X X X
B800h-BBFFh 1 1 1 1 X X X X X X X X X X
EC00h-EDFFh 1 1 1 1 1 X X X X X X X X X
FD40h-FD5Fh 1 1 1 1 1 1 1 1 X X X X X
FEE0h-FEEFh 1 1 1 1 1 1 1 1 1 1 X X X X
FFB0h-FFB7h 1 1 1 1 1 1 1 1 1 1 1 X X X
12 5800h-5FFFh 1 1 X X X X X X X X X X X
BC00h-BFFFh 1 1 1 1 1 X X X X X X X X X X
EE00h-EFFFh 1 1 1 1 1 1 X X X X X X X X X
FD60h-FD7Fh 1 1 1 1 1 1 1 1 1 X X X X X
FEF0h-FEFFh 1 1 1 1 1 1 1 1 1 1 1 X X X X
FFB8h-FFBFh 1 1 1 1 1 1 1 1 1 1 1 1 X X X
13 6000h-67FFh 1 1 1 X X X X X X X X X X X
C000h-C3FFh 1 1 X X X X X X X X X X
F000h-F1FFh 1 1 1 1 X X X X X X X X X
FD80h-FD9Fh 1 1 1 1 1 1 1 1 X X X X X
FF00h-FFOFh 1 1 1 1 1 1 1 1 X X X X
FFC0h-FFC7h 1 1 1 1 1 1 1 1 1 1 X X X
14 6800h-6FFFh 1 1 X X X X X X X X X X X
C400h-C7FFh 1 1 1 X X X X X X X X X X
F200h-F3FFh 1 1 1 1 1 X X X X X X X X X
FDA0h-FDBFh 1 1 1 1 1 1 1 1 1 X X X X X
FF10h-FF1Fh 1 1 1 1 1 1 1 1 1 X X X X
FFC8h-FFCFh 1 1 1 1 1 1 1 1 1 1 1 X X X
15 7000h-77FFh 1 1 1 1 X X X X X X X X X X X
C800h-CBFFh 1 1 1 X X X X X X X X X X
F400h-F5FFh 1 1 1 1 1 X X X X X X X X X
FDC0h-FDDFh 1 1 1 1 1 1 1 1 1 X X X X X
FF20h-FF2Fh 1 1 1 1 1 1 1 1 1 X X X X
FFD0h-FFD7h 1 1 1 1 1 1 1 1 1 1 1 X X X
16 7800h-7FFFh 1 1 1 X X X X X X X X X X X
CC00h-CFFFh 1 1 1 1 X X X X X X X X X X
F600h-F7FFh 1 1 1 1 1 1 X X X X X X X X X
FDE0h-FDFFh 1 1 1 1 1 1 1 1 1 1 X X X X X
FF30h-FF3Fh 1 1 1 1 1 1 1 1 1 1 X X X X
FFD8h-FFDFh 1 1 1 1 1 1 1 1 1 1 1 X X X X
17 8000h-87FFh 1 1 X X X X X X X X X X X
D000h-D3FFh 1 1 1 X X X X X X X X X X
F800h-F9FFh 1 1 1 1 1 X X X X X X X X X
FE00h-FE1Fh 1 1 1 1 1 1 1 X X X X X
FF40h-FF4Fh 1 1 1 1 1 1 1 1 1 X X X X
FFE0h-FFE7h 1 1 1 1 1 1 1 1 1 1 1 X X X X
18 8800h-8FFFh 1 X X X X X X X X X X X
D400h-D7FFh 1 1 1 1 X X X X X X X X X X
FA00h-EBFFh 1 1 1 1 1 1 X X X X X X X X X
FE20h-FE3Fh 1 1 1 1 1 1 1 1 X X X X X
FF50h-FF5Fh 1 1 1 1 1 1 1 1 1 1 X X X X
FFE8h-FFEFh 1 1 1 1 1 1 1 1 1 1 1 X X X X

В результате получена таблица прошивки ПЛМ для разделения адресного пространства 64 кБ на 18 несплошных равных частей.

Исходя из требуемого количества произведений ( 18 * 6 = 108 ) и количества выходных функций (18), выбираем в качестве элементной базы выпускаемую фирмой ADVANCEDMICRODEVICES микросхему ПЛМ PLS30S16. Эта микросхема позволяет за счет мультиплексирования четырех адресных входов с выходами иметь от 12 до 17 входов и от 8 до 12 выходов при количестве произведений до 64.

Для решения поставленной задачи берем две ПЛМ, запараллеленные входы которых подключены к шине адреса, а выходы – к входам выбора кристалла соответствующих микросхем.

Технические данные на ПЛМ PLS30S16 фирмы AMD :

— IC MASTER/Windows -

(Title) :PLD|BIP||OTPRC

Section :PROGRAMMABLE LOGIC DEVICES

CAT0 :PLD

Category :Bipolar

CAT1 :BIP

MinorA :One-Time

Programmable~Registered/Combinatorial Outputs

CAT3 :OTPRC

MDD Code :AMD

Manufacturer's Name:ADVANCED MICRO DEVICES

Device Number :PLS30S16-40

Disc :*93

Date :10/26/92

Oper :BAC

Transcode :E

RBASE :30S16

MBase :PLS30S16

Data Book :DATASHEET

Propagation Delay (:40

Maximum Clock (MHz):22.2

Product Terms :64

Flip-Flops :12

Dedicated Inputs :12-17

Bidirectional I/Os :8-12

Standby Current (mA:225

Active Current (mA):225

Pins :28

Has Image :N

еще рефераты
Еще работы по информатике, программированию