Автор работы: Пользователь скрыл имя, 13 Июня 2014 в 23:44, отчет по практике
Синтезировать структуру простого магистрального процессора с одним АЛУ, выполняющего заданные команды. Разработать формат команд, кодировку команд. Разработать структурную схему процессора, функциональные схемы всех блоков процессора, функциональную схему процессора в целом с указанием всех шин и управляющих сигналов. Разработать формат микрокоманд, организацию управления всеми устройствами процессора, микрокод для каждой из заданных команд. Привести примеры выполнения каждой команды с указанием значения всех основных сигналов и содержимого основных регистров на каждом такте. Привести 2 примера небольших программ с указанием значения основных сигналов и содержимого основных регистров на каждом такте.
Постановка задачи
Форматы команд и их кодировка
Формат регистра команд
Регистры
Структурная схема процессора
Схема РОН
Формат микрокоманд
Микрокод
Кодировка микрокода
Примеры выполнения команд
Примеры программ
Схема управляющего устройства
Схема управления переходом
Схема формирования адреса микрокоманды
Управляющие сигналы и регистры процессора
Определение производительности
Выводы по проделанной работе
А, В, С - номер регистра для осуществления чтения (В, С) или записи (А).
AMUX, BMUX, CMUX - бит, показывающий откуда брать номер регистра:
0 - из регистра IR,
1 - из регистра MIR.
RD - чтение из ОЗУ. При этом адрес
памяти берется с шины В, а результат подается
на шину С.
WR - запись в ОЗУ. При этом адрес памяти
берется с шины В, а данные - с шины А.
ALU - код операции АЛУ:
Код операции |
Операция |
00 |
INC |
01 |
ADD |
10 |
SHL |
11 |
OR |
COND - условие для определения адреса следующей выполняемой микрокоманды:
COND |
Операция |
Комментарий |
00 |
JMP |
Безусловный переход |
01 |
JNZ |
Переход, если !=0 |
10 |
JIR |
Переход, если выставлен бит непосредственной адресации |
11 |
DECODE |
Декодирование команды, address=[КОР]011 |
JMP ADR - адрес в памяти микропрограмм, куда осуществляется переход.
Микрокод
Команда |
Адрес |
Микрокоманда |
Комментарий | |
десятичный |
двоичный | |||
IF |
0 |
000000 |
MOVR IR,[PC]; JMP 1 |
Загрузка команды в IR |
ID |
1 |
000001 |
DECODE |
Декодирование команды |
LD |
3 |
000011 |
IF IR[7] THEN JMP 5 |
переход, если выставлен флаг непосредственной адресации |
4 |
000100 |
MOVR Rd,[Rs]; JMP 63 |
чтение из памяти | |
5 |
000101 |
temp0=IR[8..15]; JMP 6 |
запись 8 старших байтов из IR в регистр | |
6 |
000110 |
MOVR Rd,temp0; JMP 63 |
чтение из памяти | |
ST |
11 |
001011 |
IF IR[7] THEN JMP 13 |
переход, если выставлен флаг непосредственной адресации |
12 |
001100 |
MOVM [Rd],Rs; JMP 63 |
запись в память | |
13 |
001101 |
temp0=IR[8..15]; JMP 14 |
запись 8 старших байтов из IR в регистр | |
14 |
001110 |
MOVM temp0,Rs; JMP 63 |
запись в память | |
ADD |
19 |
010011 |
IF IR[7] THEN JMP 21 |
переход, если выставлен флаг непосредственной адресации |
20 |
010100 |
Rd=ADD (Rd),Rs; JMP 63 |
сложение | |
21 |
010101 |
temp0=IR[8..15]; JMP 22 |
запись 8 старших байтов из IR в регистр | |
22 |
010110 |
Rd=ADD Rd,temp0; JMP 63 |
сложение | |
JNZ |
27 |
011011 |
temp0=IR[8..15]; JNZ 29 |
запись 8 старших байтов из IR в регистр |
28 |
011100 |
JMP 63 |
нет перехода, выполнение следущей команды | |
29 |
011101 |
PC=temp0; JMP 0 |
переход по флагу Zerro | |
INC |
35 |
100011 |
Rd=INC Rd; JMP 63 |
инкремент |
OR |
43 |
101011 |
IF IR [7] THEN JMP 45 |
переход, если выставлен флаг непосредственной адресации |
44 |
101100 |
Rd=OR Rd,Rs; JMP 63 |
операции ИЛИ | |
45 |
101101 |
temp0=IR[8..15]; JMP 46 |
запись 8 старших байтов из IR в регистр | |
46 |
101110 |
Rd=OR Rd,temp0; JMP 63 |
операции ИЛИ | |
SHL |
51 |
110011 |
Rd=ADD Rd,Rd; JMP 63 |
сдвиг влево |
JMP |
59 |
111011 |
temp0=IR[8..15]; JMP 60 |
запись 8 старших байтов из IR в регистр |
60 |
111100 |
PC=temp0; JMP 0 |
безусловный переход | |
63 |
111111 |
PC=ADD PC, temp1; JMP 0 |
увеличение РС и переход на выполнение следующей команды | |
Кодировка микрокоманд
Команда |
Адрес |
MEM |
A |
A M U X |
B |
B M U X |
C |
C M U X |
RD |
WR |
ALU |
COND |
JMP ADR |
IF |
0 |
1 |
000 |
0 |
110 |
1 |
111 |
1 |
1 |
0 |
00 |
00 |
000001 |
ID |
1 |
0 |
000 |
0 |
000 |
0 |
000 |
0 |
0 |
0 |
00 |
11 |
000000 |
LD |
3 |
0 |
000 |
0 |
000 |
0 |
000 |
0 |
0 |
0 |
00 |
10 |
000101 |
4 |
0 |
000 |
0 |
000 |
0 |
000 |
0 |
1 |
0 |
00 |
00 |
111111 | |
5 |
0 |
000 |
0 |
100 |
0 |
100 |
1 |
0 |
0 |
00 |
00 |
000110 | |
6 |
0 |
000 |
0 |
000 |
1 |
000 |
0 |
1 |
0 |
00 |
00 |
111111 | |
ST |
11 |
0 |
000 |
0 |
000 |
0 |
000 |
0 |
0 |
0 |
00 |
10 |
001100 |
12 |
0 |
000 |
0 |
000 |
0 |
000 |
0 |
0 |
1 |
00 |
00 |
111111 | |
13 |
0 |
000 |
0 |
100 |
0 |
100 |
1 |
0 |
0 |
00 |
00 |
001110 | |
14 |
0 |
000 |
0 |
000 |
1 |
000 |
0 |
0 |
1 |
00 |
00 |
111111 | |
ADD |
19 |
0 |
000 |
0 |
000 |
0 |
000 |
0 |
0 |
0 |
00 |
10 |
010101 |
20 |
0 |
000 |
0 |
000 |
0 |
000 |
0 |
0 |
0 |
10 |
00 |
111111 | |
21 |
1 |
000 |
0 |
100 |
0 |
100 |
1 |
0 |
0 |
00 |
00 |
010110 | |
22 |
0 |
100 |
0 |
000 |
1 |
000 |
0 |
0 |
0 |
10 |
00 |
111111 | |
JNZ |
27 |
1 |
000 |
0 |
100 |
0 |
100 |
1 |
0 |
0 |
00 |
10 |
011101 |
28 |
0 |
000 |
0 |
000 |
0 |
000 |
0 |
0 |
0 |
00 |
00 |
111111 | |
29 |
0 |
100 |
1 |
110 |
0 |
110 |
1 |
0 |
0 |
00 |
00 |
000000 | |
INC |
35 |
0 |
000 |
0 |
000 |
0 |
000 |
0 |
0 |
0 |
11 |
00 |
111111 |
OR |
43 |
0 |
000 |
0 |
000 |
0 |
000 |
0 |
0 |
0 |
00 |
10 |
101101 |
44 |
0 |
000 |
0 |
000 |
0 |
000 |
0 |
0 |
0 |
01 |
00 |
111111 | |
45 |
1 |
000 |
0 |
100 |
0 |
100 |
1 |
0 |
0 |
00 |
10 |
101110 | |
46 |
0 |
000 |
0 |
000 |
1 |
000 |
0 |
0 |
0 |
01 |
00 |
111111 | |
SHL |
51 |
0 |
000 |
0 |
000 |
0 |
000 |
0 |
0 |
0 |
10 |
00 |
111111 |
JMP |
59 |
1 |
000 |
0 |
100 |
0 |
100 |
1 |
0 |
0 |
00 |
00 |
111100 |
60 |
0 |
100 |
1 |
110 |
0 |
110 |
1 |
0 |
0 |
00 |
00 |
000000 | |
63 |
0 |
110 |
1 |
110 |
1 |
110 |
1 |
0 |
0 |
10 |
00 |
000000 |
Примеры выполнения команд
Команда |
Адрес МК |
Микрокоманда |
LD Rd,[Rs] |
0 |
IF |
1 |
DECODE | |
3 |
IF IR[7] THEN JMP 5 | |
4 |
MOVR Rd,[Rs], JMP 63 | |
63 |
PC=ADD(PC,temp1); JMP 0 | |
Количество тактов равно 5 | ||
LD Rd,Adr |
0 |
IF |
1 |
DECODE | |
3 |
IF IR[7] THEN JMP | |
5 |
temp0=IR[8..15]; JMP 6 | |
6 |
MOVR Rd,temp0; JMP 63 | |
63 |
PC=ADD(PC,temp1); JMP 0 | |
Количество тактов равно 6 | ||
ST (Rd),Rs |
0 |
IF |
1 |
DECODE | |
11 |
IF IR[7] THEN JMP | |
12 |
MOVM [Rd],Rs; JMP 63 | |
63 |
PC=ADD(PC,temp1); JMP 0 | |
Количество тактов равно 5 | ||
ST Adr,Rs |
0 |
IF |
1 |
DECODE | |
11 |
IF IR[7] THEN JMP | |
13 |
temp0=IR[8..15]; JMP 6 | |
14 |
MOVM temp0,Rs; JMP 63 | |
63 |
PC=ADD(PC,temp1); JMP 0 | |
Количество тактов равно 6 | ||
ADD (Rd),Rs |
0 |
IF |
1 |
DECODE | |
19 |
IF IR[7] THEN JMP | |
20 |
Rd=ADD [Rd],Rs; JMP 63 | |
63 |
PC=ADD(PC,temp1); JMP 0 | |
Количество тактов равно 5 | ||
ADD Rd,Const |
0 |
IF |
1 |
DECODE | |
19 |
IF IR[7] THEN JMP | |
21 |
temp0=IR[8..15]; JMP 6 | |
22 |
Rd=ADD Rd,temp0; JMP 63 | |
63 |
PC=ADD(PC,temp1); JMP 0 | |
Количество тактов равно 6 | ||
JNZ ADR (есть переход) |
0 |
IF |
1 |
DECODE | |
27 |
temp0=IR[8..15]; JMP 6 | |
29 |
PC=temp0; JMP 0 | |
Количество тактов равно 4 | ||
JNZ ADR (нет перехода) |
0 |
IF |
1 |
DECODE | |
27 |
temp0=IR[8..15]; JMP 6 | |
28 |
JMP 63 | |
63 |
PC=ADD(PC,temp1); JMP 0 | |
Количество тактов равно 5 | ||
INC Rd |
0 |
IF |
1 |
DECODE | |
35 |
Rd=INC Rd; JMP 63 | |
63 |
PC=ADD(PC,temp1); JMP 0 | |
Количество тактов равно 4 | ||
OR Rd,Rs |
0 |
IF |
1 |
DECODE | |
43 |
IF IR[7] THEN JMP | |
44 |
Rd=OR Rd,Rs; JMP 63 | |
63 |
PC=ADD(PC,temp1); JMP 0 | |
Количество тактов равно 5 | ||
OR Rd,Const |
0 |
IF |
1 |
DECODE | |
43 |
IF IR[7] THEN JMP | |
45 |
temp0=IR[8..15]; JMP 6 | |
46 |
Rd=OR Rd,temp0; JMP 63 | |
63 |
PC=ADD(PC,temp1); JMP 0 | |
Количество тактов равно 6 | ||
SHL Rd |
0 |
IF |
1 |
DECODE | |
51 |
Rd=ADD Rd,Rd; LMP 63 | |
63 |
PC=ADD(PC,temp1); JMP 0 | |
Количество тактов равно 4 | ||
JMP ADR |
0 |
IF |
1 |
DECODE | |
59 |
temp0=IR[8..15]; JMP 63 | |
60 |
PC=temp0; JMP 0 | |
Количество тактов равно 4 |
Примеры программ
Команда |
№ такта |
адрес МК |
Рег А |
Рег В |
Рег С |
Рег D |
temp0 |
temp1 |
PC |
LD A,6 |
1 |
0 |
- |
- |
- |
- |
- |
1 |
0 |
2 |
1 |
- |
- |
- |
- |
- |
1 |
0 | |
3 |
3 |
- |
- |
- |
- |
- |
1 |
0 | |
4 |
5 |
- |
- |
- |
- |
6 |
1 |
0 | |
5 |
6 |
6 |
- |
- |
- |
6 |
1 |
0 | |
б |
63 |
6 |
- |
- |
- |
6 |
1 |
1 | |
LD B,7 |
7 |
0 |
6 |
- |
- |
- |
6 |
1 |
1 |
8 |
1 |
6 |
- |
- |
- |
6 |
1 |
1 | |
9 |
3 |
6 |
- |
- |
- |
- |
1 |
1 | |
10 |
5 |
6 |
- |
- |
- |
7 |
1 |
1 | |
11 |
6 |
6 |
7 |
- |
- |
7 |
1 |
1 | |
12 |
63 |
6 |
7 |
- |
- |
7 |
1 |
2 | |
ADD A,B |
13 |
0 |
6 |
7 |
- |
- |
7 |
1 |
2 |
14 |
1 |
6 |
7 |
- |
- |
7 |
1 |
2 | |
15 |
19 |
6 |
7 |
- |
- |
7 |
1 |
2 | |
16 |
20 |
13 |
7 |
- |
- |
7 |
1 |
2 | |
17 |
63 |
13 |
7 |
- |
- |
7 |
1 |
3 | |
SHL A |
18 |
0 |
13 |
7 |
- |
- |
7 |
1 |
3 |
19 |
1 |
13 |
7 |
- |
- |
7 |
1 |
3 | |
20 |
35 |
6 |
7 |
- |
- |
7 |
1 |
3 | |
21 |
63 |
6 |
7 |
- |
- |
7 |
1 |
4 |
Схема управляющего устройства
Схема управления переходом
Схема формирования адреса следующей микрокоманды
COND |
Куда переходим | |
00 |
JMP |
безусловный переход |
01 |
JNZ |
переход ели не 0 |
10 |
JC |
переход если CF=1 |
11 |
DECODE |
декодирование команды, Address=[KOP]011 |
Управляющие сигналы и регистры
Сигнал/Регистр |
Комментарий |
Счетчик адреса МК |
Адрес следующей микрокоманды (6-ти битный) |
MIR |
25 битный регистр микрокоманд |
Cond |
Сигнал, определяющий какой адрес будет подан со схемы формирования адреса МК |
AMUX |
Селектор регистрового мультиплексора шины А |
BMUX |
Селектор регистрового мультиплексора шины В |
CMUX |
Селектор регистрового мультиплексора шины С |
IR |
16-ти битный регистр команд |
PC |
8-ми битный программный |
ZeroFlag |
Флаг нуля |
IR[7] |
Сигнал непосредственной адресации |
JZ/JNZ |
Сигнал наличия/отсутствия перехода по нулю |
JMP ADR |
Адрес следующей микрокоманды |
КОП |
Код операции, загруженной из памяти в IR |
KOПALU |
Код операции АЛУ |
RD |
Сигнал чтения информации из памяти |
WR |
Сигнал записи информации в память |
MEM |
Сигнал подачи на шину А непосредственного значения из IR |
MEM+RD |
Сигнал чтения команды из памяти |