Содержание
1. Постановка задачи
2. Форматы команд и их кодировка
3. Структурная схема процессора
4. Регистры
5. АЛУ
6. Формат микрокоманд
7. Микрокод
8. Кодировка микрокода
9. Примеры выполнения команд
10. Основные сигналы и регистры процессора
11. Примеры программ
12. Определение производительности
Постановка задачи
Синтезировать структуру простого магистрального процессора с одним АЛУ, выполняющего 8 заданных команд. Разработать формат команд, кодировку команд. Разработать структурную схему процессора, функциональные схемы всех блоков процессора, функциональную схему процессора в целом с указанием всех шин и управляющих сигналов.
Разработать формат микрокоманд, организацию управления всеми устройствами процессора, микрокод для каждой из заданных команд. Привести примеры выполнения каждой команды с указанием значения всех основных сигналов и содержимого основных регистров на каждом такте. Привести 2 примера небольших программ с указанием значения основных сигналов и содержимого основных регистров на каждом такте.
Определить максимальную тактовую частоту процессора. Определить производительность процессора в операциях в секунду (IPS), а также выраженную в числе выполняемых тестовых программ в секунду. Указать способы повышения производительности процессора.
Характеристика процессора
Простой процессор магистрального типа с одноблочным универсальным АЛУ.
Разрядность регистров РОН и АЛУ процессора - 8 бит.
Число РОН - 4.
Адресуемая память - 256 слов.
Устройство управления - микропрограммное с ПЗУ микропрограмм.
Способ выполнения команд – последовательное выполнение или JMP или JC.
Адресация памяти - прямая.
Арифметика в дополнительном коде.
Вариант: 54 = «2 2 2 3»
Без использования непосредственной адресации.
3х-адресные команды.
Операции АЛУ: NOP, ADD + SHRA, NAND.
Состав команд: LD, ST, ADD, SHR + JC, DEC, SUB, NAND.
Форматы команд и их кодировка
Коды команд
КОП | Команда | Действие | |
000 | ADD Rx,Ry,Rz | Rx=Ry+Rz | сложение |
001 | NAND Rx,Ry,Rz | Rx=!(Ry&Rz) | И-НЕ |
010 | SHR Rx,Ry | Rx=Ry/2 | арифметический сдвиг вправо |
011 | JC address | jmp on carry | условный переход по переносу |
100 | DEC Rx,Ry | Rx=Ry-1 | декремент (уменьшение на 1) |
101 | SUB Rx,Ry,Rz | Rx=Ry-Rz | вычитание |
110 | LD Rx,address | Rx=Mem(address) | загрузка из ОЗУ в регистр |
111 | ST Ry,address | Mem(address)=Rx | запись из регистра в ОЗУ |
Формат команд
ADD Rx,Ry,Rz | ||||||||||||||||
КОП | Rx | Ry | Rz | не используется | ||||||||||||
0 | 0 | 0 | x | x | y | y | z | z |
NAND Rx,Ry,Rz | ||||||||||||||||
КОП | Rx | Ry | Rz | не используется | ||||||||||||
0 | 0 | 1 | x | x | y | y | z | z |
SHR Rx,Ry | ||||||||||||||||
КОП | Rx | Ry | не используется | |||||||||||||
0 | 1 | 0 | x | x | y | y |
JC address | ||||||||||||||||
КОП | не использ. | address | ||||||||||||||
0 | 1 | 1 | a | a | a | a | a | a | a | a |
DEC Rx,Ry | |||||||||||||||
КОП | Rx | Ry | не используется | ||||||||||||
1 | 0 | 0 | x | x | y | y |
КОП | Rx | Ry | Rz | не используется | |||||||||||||||||||
1 | 0 | 1 | x | x | y | y | z | z |
LD Rx,address | |||||||||||||||
КОП | Rx | не исп. | address | ||||||||||||
1 | 1 | 0 | x | x | a | a | a | a | a | a | a | a |
ST Rx,address | |||||||||||||||
КОП | не исп | Ry | address | ||||||||||||
1 | 1 | 1 | y | y | a | a | a | a | a | a | a | a |
Номер | При записи (по шине С) | При чтении (по шине A и B) | ||||
000 | 0 | Rg0 | программно-доступные регистры | Rg0 | программно-доступные регистры | |
001 | 1 | Rg1 | Rg1 | |||
010 | 2 | Rg2 | Rg2 | |||
011 | 3 | Rg3 | Rg3 | |||
100 | 4 | Temp0 | Temp0 | |||
101 | 5 | PC | PC | |||
110 | 6 | IR_HI (старшая часть IR) | IR | константа 1 | ||
111 | 7 | IR_LO (младшая часть IR) | IR_LO |
При чтении старшей части регистра команд, на шину A или B поступает единичная константа (00000001). Это вполне допустимо, т.к. старшая часть регистра команд имеет свои выходы из блока регистров: (КОП, Rx, Ry, Rz). Младшая часть регистра команд поступает на шины A или B в неизменном виде, т.к. в некоторых командах процессора в младшей части регистра команд находиться 8-битный адрес. Единичная константа применяется при инкрементировании счетчика команд, а также для получения константы -1 = 11111111 (см. микрокод для команды DEC).
Разрядность РОН (регистры общего назначения) – 8 бит
Разрядность PC (program counter) – 8 бит
Разрядность IR (регистр команд) – 16 бит (доступно два регистра по 8 бит)
АЛУ
Структурная схема АЛУ и его связь с другими блоками машины показаны на рисунке. В состав АЛУ входят регистры Рг1 - Рг7, в которых обрабатывается информация , поступающая из оперативной или пассивной памяти N1, N2, ...NS; логические схемы, реализующие обработку слов по микрокомандам, поступающим из устройства управления.
Закон переработки информации задает микропрограмма , которая записывается в виде последовательности микрокоманд A1,A2, ..., Аn-1,An. При этом различают два вида микрокоманд: внешние, то есть такие микрокоманды, которые поступают в АЛУ от внешних источников и вызывают в нем те или иные преобразования информации (на рис. 1 микрокоманды A1,A2,..., Аn), и внутренние, которые генерируются в АЛУ и воздействуют на микропрограммное устройство, изменяя естественный порядок следования микрокоманд. Например, АЛУ может генерировать признаки в зависимости от результата вычислений: признак переполнения, признак отрицательного числа, признак равенства 0 всех разрядов числа др. На рис. 1 эти микрокоманды обозначены р1, p2,..., рm.
Результаты вычислений из АЛУ передаются по кодовым шинам записи у1, у2, ...,уs, в ОЗУ.
Функции регистров, входящих в АЛУ:
Рг1 - сумматор (или сумматоры) - основной регистр АЛУ, в котором образуется результат вычислений;
Рг2, РгЗ - регистры слагаемых, сомножителей, делимого или делителя (в зависимости от выполняемой операции);
Рг4 - адресный регистр (или адресные регистры), предназначен для запоминания (иногда и формирования) адреса операндов и результата;
Ргб - k индексных регистров, содержимое которых используется для формирования адресов;
Рг7 - i вспомогательных регистров, которые по желанию программиста могут быть аккумуляторами, индексными регистрами или использоваться для запоминания промежуточных результатов.
Формат микрокоманд
MIR – Microinstruction register – регистр микрокоманд (24 bit) | |||||||||||||||||||||||
A | A MUX | B | B MUX | C | C MUX | RD | WR | ALU | COND | JMP ADDRESS |
A, B, C – номер регистра для осуществления чтения (A, B) или записи (C)
A MUX, B MUX, C MUX – откуда брать номер регистра
(0 – из команды IR, 1 – из микрокоманды MIR)
RD – чтение из ОЗУ
При этом адрес памяти берется с шины А, а результат подается на шину С
WR – запись в ОЗУ
При этом адрес памяти берется с шины А, а данные - с шины B
ALU – код операции АЛУ
КОП АЛУ | Операция АЛУ |
00 | NOP |
01 | ADD |
10 | SHRA |
11 | NAND |
COND – условие для определения адреса следующей выполняемой микрокоманды
COND | Куда переходим | |
00 | NEXT | на следующую микрокоманду |
01 | DECODE | декодирование команды, Address = [KOP]100 |
10 | JMP | безусловный переход |
11 | JC | условный переход по переносу (Carry Flag) |
JMP ADDRESS – адрес в памяти микропрограмм, куда осуществляется переход
Микрокод
Адрес | Микрокоманда | Пояснение |
0 1 2 3 | IR_HI = NOP(PC); READ PC = ADD(PC, IR_HI) IR_LO = NOP(PC); READ DECODE | чтение старшего слова команды переход к следующему слову (PC = PC + 1) чтение младшего слова команды декодирование считанной команды |
ADD Rx, Ry, Rz | ||
4 | Rx = ADD(Ry, Rz); JMP 62 | сложение содержимого регистров |
NAND Rx, Ry, Rz | ||
12 | Rx = NAND(Ry,Rz); JMP 62 | И-НЕ для содержимого регистров |
SHR Rx, Ry | ||
20 | Rx = SHR(Ry); JMP 62 | арифметич. сдвиг содержимого регистра |
JC address | ||
28 29 30 | Temp0 = NOP(Temp0); JC 30 JMP 62 PC = NOP(IR_LO); JMP 0 | организация условного перехода если условие не выполнилось, то завершить иначе записать в PC новый адрес из IR_LO |
DEC Rx, Ry | ||
36 37 38 | Temp0 = SHR(IR_HI) Temp0 = NAND(Temp0, Temp0) Rx = ADD(Ry,Temp0); JMP 62 | Temp0 = 0 (00000001 - 00000000) Temp0 = -1 (11111111) Rx = Ry + Temp0 = Ry + (-1) |
SUB Rx, Ry, Rz | ||
44 45 46 47 48 | Temp0 = SHR(IR_HI) Temp0 = ADD(Temp0, Rz) Temp0 = NAND(Temp0, Temp0) Temp0 = ADD(Temp0, IR_HI) Rx = ADD(Ry, Temp0); JMP 62 | Temp0 = 0 (00000001 - 00000000) Temp0 = 0 + Rz = Rz инвертировать Temp0 = Rz Temp0 = ( ! Rz) + 1 Rx = Ry + (-Rz) |
LD Rx, address | ||
52 | Rx = NOP(IR_LO); READ; JMP 62 | чтение из ОЗУ (шина A – адрес) |
ST Ry, address | ||
60 61 | Temp0 = NOP(Ry) Temp0 = NOP(IR_LO, Temp0); WRITE; JMP 62 | Temp0 = Ry (данные на шину B) запись в ОЗУ (шина A – адрес, шина B - данные) |
End: | ||
62 | PC = ADD(PC, IR_HI); JMP 0 | увеличение счетчика команд (PC=PC+1) |
Кодировка микрокода