Линейное программирование симплекс-методом Данцига
Обновлено
Содержание
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 |
SUB Rx,Ry,Rz | ||||||||||||||||
КОП | 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 |
MIR - Microinstruction register - регистр микрокоманд (24 bit) | ||||||||||||||||||||||||
A | A MUX | B | B MUX | C | C MUX | RD | WR | ALU | COND | JMP ADDRESS | ||||||||||||||
КОП АЛУ | Операция АЛУ | |
00 | NOP | |
01 | ADD | |
10 | SHRA | |
11 | NAND |
COND | Куда переходим | ||
00 | NEXT | на следующую микрокоманду | |
01 | DECODE | декодирование команды, Address = [KOP]100 | |
10 | JMP | безусловный переход | |
11 | JC | условный переход по переносу (Carry Flag) |
Адрес | Микрокоманда | Пояснение | |
| 012 3 | IR_HI = NOP(PC); READPC = 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 | |||
| 2829 30 | Temp0 = NOP(Temp0); JC 30JMP 62 PC = NOP(IR_LO); JMP 0 | организация условного переходаесли условие не выполнилось, то завершить иначе записать в PC новый адрес из IR_LO | |
DEC Rx, Ry | |||
| 3637 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 | |||
| 44454647 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 = RzTemp0 = ( ! Rz) + 1 Rx = Ry + (-Rz) | |
LD Rx, address | |||
52 | Rx = NOP(IR_LO); READ; JMP 62 | чтение из ОЗУ (шина A - адрес) | |
ST Ry, address | |||
| 6061 | 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) |
Примеры выполнения каждой команды с указанием значения всех основных сигналов и содержимым основных регистров на каждом такте выполнения приведены на электронном носителе.
Основные сигналы и регистры
Сокращение | Примечание | |
CLOCK | синхронизирующий сигнал | |
C_SEL[2..0] | номер регистра выбранного в качестве приемника | |
A_SEL[2..0] | номер регистра выбранного в качестве источника 1 | |
B_SEL[2..0] | номер регистра выбранного в качестве источника 2 | |
Rx[2..0] | номер регистра приемника из IR (регистра команд) | |
Ry[2..0] | номер регистра источника 1 из IR (регистра команд) | |
Rz[2..0] | номер регистра источника 2 из IR (регистра команд) | |
MIR_A[2..0] | номер регистра приемника из MIR (р-ра микрокоманд) | |
MIR_B[2..0] | номер регистра источника 1 из MIR (р-ра микрокоманд) | |
MIR_C[2..0] | номер регистра источника 2 из MIR (р-ра микрокоманд) | |
AMUX | Откуда брать номер регистра (0 - из IR, 1 - из MIR) Эти сигналы управляют соответствующими мультиплексорами. | |
BMUX | ||
CMUX | ||
A_bus[7..0] | Данные на шинах источниках, выходящих из блока регистров | |
B_bus[7..0] | ||
C_ALU[7..0] | Результат выходящий из АЛУ | |
C_RAM[7..0] | Данные, считанные из ОЗУ | |
C_bus[7..0] | Выбранные данные для записи (С_ALU или C_RAM) | |
RD | сигнал чтения из ОЗУ | |
WR | сигнал записи в ОЗУ | |
KOP_ALU[1..0] | код операции АЛУ (поступает из MIR) | |
COND[1..0] | определение следующей микрокоманды (из MIR) | |
CBL_SEL[1..0] | результат работы Control Branch Logic (логика управления ветвлением) - определяет следующую микрокоманду | |
CF | флаг переноса, поступающий из АЛУ в Control Branch Logic | |
JMP_ADR[5..0] | адрес следующей микрокоманды (из MIR) | |
MIR[23..0] | полное значение регистра микрокоманд (24 бит) | |
PC | программный счетчик (адрес в ОЗУ) |
Среднее количество микрокоманд при выполнении команды процессора можно приблизительно оценить как 4 + 17/8 + 1 = 7 микрокоманд на команду процессора. Таким образом, при максимальной тактовой частоте в 33,3 МГц средняя производительность процессора составит 4, 7 MOPS (или 33,3 М мops / сек).
Тестовая программа | Количество команд процессора | Количество микрокоманд | Время выполнения, нс | N / сек | |
ПРИМЕР 1 | 3 | 18 | 540 | 1851851 | |
ПРИМЕР 2 | 5 | 34 | 1020 | 980398 |
Повысить производительность процессора можно одним из следующих способов:
§ Увеличить разрядность шины-приемника с 8 до 16 бит, и считывать команду из ОЗУ не за три такта, а за один;
§ Увеличить функциональность АЛУ, при этом можно будет сократить длину микрокода для некоторых команд (особенно для SUB и DEC);
§ Перейти от микропрограммного управления к управлению на основе жесткой логики;
§ Применить конвейеризацию;
§ Что-нибудь распараллелить.
