- •«Разработка процессора»
- •Гопта е. А.
- •1. Постановка задачи
- •2. Разработка формата команд, кодировки команд
- •3. Разработка структурной схемы процессора:
- •4. Разработка блока алу:
- •5. Разработка блока рон:
- •6. Разработка управляющего устройства уу.
- •7. Формат микрокоманд
- •Оценка размера памяти микропрограмм.
- •Формат микрокоманд:
- •Загрузка и декодирование.
- •Команда nor rd, Imm8.
- •Команда inc rd.
- •Команда st rd, Imm8, rs.
Команда nor rd, Imm8.
Начальный адрес в памяти микропрограмм 0100000b = 32d.
Адрес 32. В temp0 поместить rd, продолжить со следующей микрокоманды.
temp0 ← SET (RD, IR)
A=*; B=111; C=100;
AMUX=0; BMUX=CMUX=1;
WR=RD=0;
ALU=000;
COND=NEXT;
Адрес 33. Поместить в temp0 результат NAND над rd и temp0 ( инвертированный rd), продолжить со след. микрокоманды.
temp0 ← NAND (RD, temp0)
A=*; B=100; C=100;
AMUX=0; BMUX=CMUX=1;
WR=RD=0;
ALU=100;
COND=NEXT;
Адрес 34. Поместить в temp1 результат NAND над ir и ir ( инвертированный ir), продолжить со следующей микрокоманды.
temp1 ← NAND (IR, IR)
A=111; B=111; C=101;
AMUX=BMUX=CMUX=1;
WR=RD=0;
ALU=100;
COND=NEXT;
Адрес 35. Поместить в temp0 результат NAND над temp0 и temp1, продолжить со следующей микрокоманды.
temp0← NAND (temp0, temp1)
A=100; B=100; C=101;
AMUX=BMUX=CMUX=1;
WR=RD=0;
ALU=100;
COND=NENT;
Адрес 36. Поместить в rd результат инвертирования temp0, продолжить с адреса 106
RD ← NAND (temp0, temp0); GOTO 106
A=100; B=100; C=*;
AMUX=1; BMUX=1; CMUX=0;
WR=RD=0;
ALU=100;
COND=JImm;
JMPADDR=1101010;
Команда inc rd.
Начальный адрес в памяти микропрограмм 010 1000b = 40d.
Адрес 40. Переместить в регистр rd результат сложения rd и temp1, продолжить с адреса 106.
RD ← ADD (RD, temp1); GOTO 106.
A=*; B=101; C=*;
AMUX=0; BMUX=1; CMUX=0;
WR=RD=0;
ALU=001;
COND=JImm;
JMPADDR=1101010;
Команда SHRA rd, rs.
Начальный адрес в памяти микропрограмм 011 0000b = 48d.
Адрес 48. Поместить в регистр rd результат сдвига вправо регистра rs, продолжить с адреса 106
RD ← SHRA (RS, IR); GOTO 106.
A=*; B=111; C=*;
AMUX=0; BMUX=1; CMUX=0;
WR=RD=0;
ALU=011;
COND=JImm;
JMPADDR=1101010;
Команда SLC rd, rs.
Начальный адрес в памяти микропрограмм 011 1000b = 56d.
Адрес 56. Поместить в регистр rd результат сдвига влево регистра rs, продолжить с адреса 106.
RD ← SLC (RS, IR); GOTO 106.
A=*; B=111; C=*;
AMUX=0; BMUX=1; CMUX=0;
WR=RD=0;
ALU=010;
COND=JImm;
JMPADDR=1101010;
Команда JC Imm8.
Начальный адрес в памяти микропрограмм 1000 000b = 64d.
Адрес 64. Поместить в temp0 ir. Если CF = 0, то продолжить с микрокоманды 106.
temp0 ← SET (temp0, IR)
A=100; B=111; C=100;
AMUX=BMUX=CMUX=1;
WR=RD=0;
ALU=000;
COND=JC;
JMPADDR=1101010;
Адрес 65. Переслать регистр temp0 в регистр pс; продолжить с 0 микрокоманды.
PC← SET (temp0, temp0); GOTO 0
A=100; B=100; C=110;
AMUX=BMUX=CMUX=1;
WR=RD=0;
ALU=000;
COND=JImm;
JMPADDR=0;
Команда JC rs,Imm8.
Начальный адрес в памяти микропрограмм 1001 000b = 72d.
Адрес 72. Поместить в temp0 результат сложения rs и ir. Если CF=0 то продолжить с микрокоманды 106.
temp0 ← ADD (RS, IR); GOTO 106
A=*; B=111; C=100;
AMUX=0; BMUX=CMUX=1;
RD=1; WR= 0;
ALU=000;
COND=JC;
JMPADDR=1101010;
Адрес 73. Переслать регистр temp0 в регистр pс; продолжить с 0 микрокоманды.
PC← SET (temp0, temp0); GOTO 0
A=100; B=100; C=110;
AMUX=BMUX=CMUX=1;
RD=WR= 0;
ALU=000;
COND=JImm;
JMPADDR=0;
Команда LD rd, Imm8.
Начальный адрес в памяти микропрограмм 1010 000b = 80d.
Адрес 80. Переслать ir через АЛУ, произвести чтение памяти, продолжить с адреса 106.
RD ← SET (IR, IR); GOTO 106
A=111; B=111; C=*;
AMUX=BMUX=1; CMUX=0;
RD=10; WR= 0;
ALU=000;
COND=JImm;
JMPADDR=1101010;
Команда LD rd, Imm8, rs.
Начальный адрес в памяти микропрограмм 1011 000b = 88d.
Адрес 88. Поместить в temp0 результат сложения rs и ir, продолжить со следующей микрокоманды.
temp0 ← ADD (RS, IR)
A=*; B=111; C=100;
AMUX=0; BMUX=CMUX=1;
RD=01; WR= 0;
ALU=000;
COND=NEXT;
Адрес 89. Произвести чтение памяти, продолжить с адреса 106.
RD ← SET (temp0, temp0); READ; GOTO 106
A=100; B=100; C=*;
AMUX=1; BMUX=1; CMUX=0;
RD=10; WR= 0;
ALU=000;
COND=JImm;
JMPADDR=1101010;
Команда ST rd, Imm8.
Начальный адрес в памяти микропрограмм 110 0000b = 96d.
Адрес 96. Переслать rd в регистр temp0
temp0 ← NOP (RD, IR)
A=*; B=111; C=100;
AMUX=0; BMUX=CMUX=1;
RD=WR= 0;
ALU=000;
COND=NEXT;
Адрес 97. Переслать ir и temp0 через АЛУ, произвести запись в память, продолжить с адреса 106.
temp1 ← ADD (IR, temp0); GOTO 106
A=111; B=100; C=101;
AMUX=BMUX=CMUX=1;
RD=0; WR= 1;
ALU=001;
COND=JImm;
JMPADDR=1101010;
