Sunteți pe pagina 1din 21

Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC

UNIVERSITATEA „LUCIAN BLAGA”, SIBIU


FACULTATEA DE INGINERIE „HERMAN OBERTH” , SIBIU

AN UNIVERSITAR 2010-2011

AN 3 SEM 2

DISCIPLINA:

Arhitectura Calculatoarelor

TEMA PROIECTULUI:
Proiectarea Unităţii De Control Microrogramate Aferentă Unui Procesor CISC

Coordonator:
S.l. Drd. ing. Horia Caprita

Autor:
Brincoveanu Dorin 232/2

® Brincoveanu Dorin 232/2 An Universitar 2011-2012


Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
A. ARHITECTURA PROCESORULUI:

SBUS – busul operandului sursă


DBUS – busul operandului destinaţie
RBUS – busul rezultatului
FLAG – registrul de flag-uri: N, Z, V, C
REGISTER FILE – file de registre generale (16 registre×16 biţi notate R0R15)
SP – stack pointer (registrul pointer de stivă)
T – registru tampon (pentru memorări temporare – invizibil programatorului)
PC – program counter (instruction pointer).
IVR – interrupt vector register (registrul vectorului de întrerupere)
ADR – address register (registrul de adrese); are rolul de a adresa locaţiile de memorie
MDR – memory data register (registru de date aferent memoriei); furnizează datele de scris în
memorie în ciclurile de scriere şi respectiv este încărcat cu datele citite din memorie în ciclurile
de citire
IR – instruction register (registrul instrucţiunii)
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC

Codificarea registrilor generali:


Reg Cod Reg Cod Reg Cod Reg Cod
R0 0000 R4 0100 R8 1000 R12 1100
R1 0001 R5 0101 R9 1001 R13 1101
R2 0010 R6 0110 R10 1010 R14 1110
R3 0011 R7 0111 R11 1011 R15 1111

B. FORMATUL INSTRUCŢIUNII
Setul de instrucţiuni este format din patru clase de instrucţiuni:
b1) instrucţiuni cu doi operanzi
Cei doi operanzi sunt denumiţi operand sursă şi respectiv operand destinaţie. Pentru localizarea lor se vor
defini patru moduri de adresare: imediat, registru direct, registru indirect şi indexat. În funcţie de modul
de adresare operandul (sursă sau destinaţie) se poate afla într-un registru general sau într-o locaţie de
memorie. Setul de instrucţiuni este perfect ortogonal, permiţând orice combinaţie în ceea ce priveşte
localizarea celor doi operanzi:
Localizare operand sursă Localizare operand destinaţie
registru registru
registru memorie
memorie registru
memorie Memorie
Formatul instrucţiunii cu doi operanzi este:
4biti 2biti 4biti 2biti 4biti
OPCODE MAS RS MAD RD
OPCODE – opcode-ul instrucţiunii (codul operaţiei)
MAS/MAD – mod adresare (operand) sursă/destinaţie
RS/RD – registrul (general utilizat pentru adresarea operandului) sursă/destinaţie
În cazul acestor instrucţiuni rezultatul se depune peste operandul destinaţie care se va pierde.
În această clasă se definesc următoarele instrucţiuni:
 instrucţiuni de transfer:
MOV dest, src ;op. dest.  op. src
;op. dest.=operand destinaţie
;op. src.=operand sursă
Exemple:
MOV R0,R1 ;R0  R1
MOV R4,(R2) ;R4  locaţia de memorie adresată de R2
MOV (R3),124(R5) ;locaţia de memorie adresată de R3  locaţia de memorie
;adresată de R5+124; 124 va fi indexul (adresare indexată)
 instrucţiuni aritmetice:
ADD dest,src ; op. dest.  op. dest. + op. src.
SUB dest,src; op. dest.  op. dest. - op. src.
Exemple:
ADD (R6),R0 ; locaţia de memorie adresată de R6  locaţia de
memorie
; adresată de R6 + R0
SUB R3,R5 ; R3  R3 – R5
 instrucţiuni logice:
CMP dest, src ; op. dest. – op. src. (fără depunerea rezultatului ci doar
; pentru poziţionarea flag-urilor de condiţii)
AND dest, src ; op.dest.  op.dest AND op.src.
OR dest, src ; op.dest.  op.dest OR op.src.
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
XOR dest, src ; op.dest.  op.dest XOR op.src.

Exemple:
CMP R0,(R1) ; R0 – locaţia de memorie adresată de R1 cu poziţionarea
; flag-urilor de condiţii conform cu rezultatul scăderii
AND R2,R4 ; R2  R2 AND R4
OR R1,(R5) ; R1  R1 OR locaţia de memorie adresată de R5
XOR R3,R0 ; R3  R3 XOR R0
b2) instrucţiuni cu un operand
Operandul unic referit de instrucţiunile din această clasă va fi operandul destinaţie care va fi localizat pe
baza aceloraşi patru moduri de adresare.
Formatul instrucţiunilor cu un operand este:
10biti 2biti 4biti
OPCODE MAD RD
OPCODE – opcode-ul instrucţiunii (codul operaţiei)
MAD – mod de adresare operand destinaţie
RD – registru general utilizat pentru adresarea operandului destinaţie
În această clasă se definesc următoarele instrucţiuni:
 instrucţiuni logice şi aritmetice:
CLR dest ; dest  0
NEG dest ; dest  dest
INC dest ; dest  dest+1
DEC dest ; dest  dest – 1
Exemple:
CLR (R0) ; locaţia de memorie adresată de R0  0
NEG R3 ; R3  R 3
INC (R2) ; locaţia de memorie adresată de R2  locaţia de
; memorie adresată de R2 + 1
DEC R5 ; R5  R5 – 1
 instrucţiuni de deplasare şi rotire aritmetică şi logică:
ASL dest ; deplasare aritmetică la stânga dest (Arithmetic
; Shift Left)
ASR dest ; deplasare aritmetică la dreapta dest (Arithmetic
; Shift Right)
LSR dest ; deplasare logică la dreapta dest (Logical
; Shift Right)
ROL dest ; rotire la stânga dest (ROtate Left)
ROR dest ; rotire la dreapta dest (ROtate Right)
RLC dest ; rotire la stânga cu carry (Rotate Left through
; Carry)
RRC dest ; rotire la dreapta cu carry (Rotate Right through
; Carry)
Exemple:
ASL R1 ; R1  R1 deplasat aritmetic la stânga cu o poziţie
ASR (R2) ; locaţia de memorie adresată de R2  conţinutul
; locaţiei de memorie adresată de R2 deplasat la
; dreapta cu o poziţie
LSR 14(R0) ; locaţia de memorie de la adresa R0+14 
; conţinutul locaţiei de memorie de la adresa
; R0+14 deplasat logic la dreapta cu o poziţie
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
RLC R7 ; R7  R7 rotit la stânga împreună cu carry

 instrucţiunile JMP, CALL, PUSH şi POP


JMP adr ; salt la adresa specificată (adr = operand sursă
specificat în instrucţiune)
CALL adr ; apel procedură specificată de la adresa specificată
; (adr = operand sursă specificat în instrucţiune)
PUSH Ri ; salvare în stivă registru general Ri
POP Ri ; restaurare din stivă registru general Ri

Exemple:
JMP 36(R1) ; salt la adresa R1+36
CALL 1248H ; apel procedură de la adresa 1248H
PUSH R3 ; stiva  R3
POP R5 ; R5  stiva (conţinutul locaţiei din vârful stivei)

b3) instrucţiunile de salt (salturi relative la PC denumite aici instrucţiuni de branch)


Formatul instrucţiunilor de salt este:
8biti 8biti
OPCODE OFFSET
OPCODE – opcode-ul instrucţiunii (codul operaţiei)
OFFSET – număr cu semn (cod complementar) care indică sensul saltului şi numărul de adrese sărit.
Dacă semnul OFFSET-ului este minus, saltul va fi înapoi, iar dacă semnul este plus saltul va
fi înainte. Saltul este relativ la PC-ul curent. Prin PC_curent se înţelege adresa instrucţiunii
care succede în program instrucţiunii de branch.
În această clasă se definesc următoarele instrucţiuni:
BR ; salt relativ necondiţionat (branch)
BNE ; salt dacă flag-ul Z=0 (branch if not equal)
BEQ ; salt dacă flag-ul Z=1 (branch if equal)
BPL ; salt dacă flag-ul S=0 (branch if plus)
BMI ; salt dacă flag-ul S=1 (branch if minus)
BCS ; salt dacă flag-ul C=1 (branch if carry is set)
BCC ; salt dacă flag-ul C=0 (branch if carry is clear)
BVS ; salt dacă flag-ul V=1 (branch if overflow is set)
BVC ; salt dacă flag-ul V=0 (branch if overflow is clear)
Exemple:
BR adr ; salt necondiţionat la adresa adr. Asamblorul va
; calcula OFFSET-ul ca rezultat al diferenţei
; adr – PC_curent)
BEQ ET1 ; salt dacă Z=0 la eticheta ET1 (OFFSET-ul va fi
; dat de diferenţa dintre adresa etichetei specificate
; şi PC-ul curent)
b4) instrucţiuni diverse
Formatul acestor instrucţiuni este:
16biti
OPCODE
OPCODE – opcode-ul instrucţiunii (codul operaţiei)
În această clasă se definesc următoarele instrucţiuni:
 instrucţiuni de poziţionare a flag-urilor de condiţii
CLC ; C  0 (clear carry)
CLV ; V  0 (clear overflow)
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
CLZ ; Z  0 (clear zero)
CLS ; S  0 (clear sign)
CCC ; C/V/Z/S  0 (clear condition code)
SEC ; C  1 (set carry)
SEV ; V  1 (set overflow)
SEZ ; Z  1 (set zero)
SES ; S  1 (set sign)
SCC ; C/V/Z/S  1 (set condition code)
 instrucţiunile: NOP, RET, RETI, HALT, WAIT, PUSH PC, POP PC, PUSH FLAG,
POP FLAG
NOP ; nici o operaţie (No OPeration)
RET ; revenire din procedură (RETurn)
RETI ; revenire din întrerupere (RETurn from Interrupt)
HALT ; oprire
WAIT ; aşteptare (deblocare din WAIT doar prin
; întrerupere)
PUSH PC ; stiva  PC
POP PC ; PC  conţinutul locaţiei din vârful stivei
PUSH FLAG ; stiva  FLAG (registrul de flag-uri)
POP FLAG ; FLAG  conţinutul locaţiei din vârful stivei
Codificarea instructiunilor:
IR 15 IR 14 IR 13 Tip Instructiune
0 X X 2 operanzi
1 0 X 1 operand
1 1 0 Salt
1 1 1 Diverse
Instructiune IR
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
3.1 Instructiuni cu 2 operanzi ( 4 biti ):
OPCOD MAS RS MAD RD
0 X X X - - - - - - - - - - - -
Instructiuni de transfer:
MOV 0 0 0 0 - - - - - - - - - - - -
Instructiuni aritmetice:
ADD 0 0 0 1 - - - - - - - - - - - -
SUB 0 0 1 0 - - - - - - - - - - - -
Instructiuni logice:
CMP 0 0 1 1 - - - - - - - - - - - -
AND 0 1 0 0 - - - - - - - - - - - -
OR 0 1 0 1 - - - - - - - - - - - -
XOR 0 1 1 0 - - - - - - - - - - - -
3.2 Instructiuni cu 1 operand ( 10 biti ) :
OPCOD MAD RD
1 0 X X X X X X X X - - - - - -
Instructiuni logice si aritmetice:
CLR 1 0 0 0 0 0 0 0 X X - - - - - -
NEG 1 0 0 0 0 0 0 1 X X - - - - - -
INC 1 0 0 0 0 0 1 0 X X - - - - - -
DEC 1 0 0 0 0 0 1 1 X X - - - - - -
Instructiuni de deplasare si rotire aritmetice si logice :
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
ASL 1 0 0 0 0 1 0 0 X X - - - - - -
ASR 1 0 0 0 0 1 0 1 X X - - - - - -
LSR 1 0 0 0 0 1 1 0 X X - - - - - -
ROL 1 0 0 0 0 1 1 1 X X - - - - - -
ROR 1 0 0 0 1 0 0 0 X X - - - - - -
RLC 1 0 0 0 1 0 0 1 X X - - - - - -
RRC 1 0 0 0 1 0 1 0 X X - - - - - -
Instructiunile JMP, CALL, PUSH si POP
JMP 1 0 0 0 1 0 1 1 X X - - - - - -
PUSH 1 0 0 0 1 1 0 0 X X - - - - - -
POP 1 0 0 0 1 1 0 1 X X - - - - - -
CALL 1 0 0 0 1 1 1 0 X X - - - - - -
3.3 Instructiuni de salt ( 8 biti )
OPCOD OFFSET
1 1 0 X X X X X - - - - - - - -
BR 1 1 0 0 0 0 0 0 - - - - - - - -
BNE 1 1 0 0 0 0 0 1 - - - - - - - -
BEQ 1 1 0 0 0 0 1 0 - - - - - - - -
BPL 1 1 0 0 0 0 1 1 - - - - - - - -
BMI 1 1 0 0 0 1 0 0 - - - - - - - -
BCS 1 1 0 0 0 1 0 1 - - - - - - - -
BCC 1 1 0 0 0 1 1 0 - - - - - - - -
BVS 1 1 0 0 0 1 1 1 - - - - - - - -
BVC 1 1 0 0 1 0 0 0 - - - - - - - -
3.4 Instructiuni diverse ( 16 biti ):
OPCOD
1 1 1 X X X X X X X X X X X X X
Instructiuni de pozitionare a flag-urilor de conditii
CLC 1 1 1 0 0 0 0 0 X X X X X X X X
CLV 1 1 1 0 0 0 0 1 X X X X X X X X
CLZ 1 1 1 0 0 0 1 0 X X X X X X X X
CLS 1 1 1 0 0 0 1 1 X X X X X X X X
CCC 1 1 1 0 0 1 0 0 X X X X X X X X
SEC 1 1 1 0 0 1 0 1 X X X X X X X X
SEV 1 1 1 0 0 1 1 0 X X X X X X X X
SEZ 1 1 1 0 0 1 1 1 X X X X X X X X
SES 1 1 1 0 1 0 0 0 X X X X X X X X
SCC 1 1 1 0 1 0 0 1 X X X X X X X X
Alte instructiuni:
NOP 1 1 1 0 1 0 1 0 X X X X X X X X
RET 1 1 1 0 1 0 1 1 X X X X X X X X
HALT 1 1 1 0 1 1 0 0 X X X X X X X X
WAIT 1 1 1 0 1 1 0 1 X X X X X X X X
PUSH PC 1 1 1 0 1 1 1 0 X X X X X X X X
POP PC 1 1 1 0 1 1 1 1 X X X X X X X X
PUSH FLAG 1 1 1 1 0 0 0 0 X X X X X X X X
POP FLAG 1 1 1 1 0 0 0 1 X X X X X X X X
END 1 1 1 1 1 1 1 0 X X X X X X X X
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
C. Modurile de adresare
MAS/MAD sunt câmpuri de doi biţi care permit codificarea a patru moduri de adresare.
MAS/MAD Denumire mod adresare
0 0 Imediat
0 1 registru direct
1 0 registru indirect
1 1 Indexat
Localizarea operandului în cadrul celor patru moduri de adresare se realizează conform
următoarelor scheme de principiu:
c1) imediat:

Adresa Memorie Unitatea adresabilă în memorie este


octetul, iar codul unei instrucţiuni
este pe 16 biţi (1 word). Dacă
instrucţiunea se află în memorie la
INSTRUCTIUNE adresa PC, atunci operandul imediat
PC:
se va afla la adresa PC+2 (imediat
PC+2: OPERAND după instrucţiune). La adresa PC+4
se va găsi codul următoarei
instrucţiuni.
c2) registru direct:

Adresa Memorie

MAS RS MAD RD
PC: OPCODE 0 1 N 01 M

RM: Operand destinaţie

RN: Operand sursa


În cazul modului de adresare registru direct operandul sursă (destinaţie) sa găseşte în registrul general
selectat de adresa codificată binar în câmpul RS (RD) din codul instrucţiunii. În mod uzual, registrul
general selectat de câmpul RS se numeşte registru sursă iar registrul selectat de câmpul RD se numeşte
registru destinaţie. Putem astfel conchide: în cazul modului de adresare registru direct operandul sursă
(destinaţie) sa găseşte în registrul sursă ( registrul destinaţie).
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
c3) registru indirect:

Adresa Memorie

MAS RS MAD RD
PC: COD 10 N 10 M

RM: Adresa operand destinaţie

RN: Adresa operand sursa


În cazul modului de adresare registru indirect operandul sursă (destinaţie) se găseşte în memorie. Adresa
locaţiei de memorie ce conţine operandul sursă (destinaţie) se găseşte în registrul general selectat de
adresa codificată binar în câmpul RS (RD) din codul instrucţiunii. În concluzie, în registrul sursă
(destinaţie) nu găsim operandul (ca la c2) ci adresa operandului sursă (destinaţie).
c4) indexat:

Adresa Memorie

PC: 11 M 11 N
PC+2: Index src

PC+4: Index dest

R M: Adresa sursa
Adresa operand sursa

R N: Adresa destinaţie
Adresa operand dest.

Operandul sursă (destinaţie) se află în memorie. Adresa operandului sursă (destinaţie) se obţine pritr-o
operaţie de adunare. Se adună la registrul sursă (destinaţie) indexul sursă (destinaţie) codificat binar pe 16
biţi şi plasat în memorie imediat după codul instrucţiunii. Dacă instrucţiunea are adresare indexată atât la
sursă cât şi la destinaţie (ca în figura de mai sus), atunci indexul sursă va fi plasat imediat după codul
instrucţiunii (la adresa PC+2) iar indexul destinaţie va fi plasat la PC+4. La PC+6 se va găsi codul
următoarei instrucţiuni. Dacă instrucţiunea are adresare indexată doar la unul dintre operanzi (fie sursă,
fie destinaţie), atunci indexul (sursă sau destinaţie) va fi plasat imediat după codul instrucţiunii (la adresa
PC+2). La adresa PC+4 va fi codul următoarei instrucţiuni.
Observaţie: În cazul instrucţiunilor cu doi operanzi modurile de adresare pot apărea în orice combinaţie
(ortogonalitate). Exemple:
 mod adresare imediat la operandul sursă, mod adresare registru direct la operandul destinaţie
 mod adresare registru direct la operandul sursă, mod adresare indexat la operandul destinaţie
 mod adresare registru indirect la operandul sursă, mod adresare imediat la operandul destinaţie
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
Comenzi:
SBUS: DBUS:
Out_0s 0001 Out_0d 0001
Out_GPRs 0010 Out_GPRd 0010
Out_MDRs 0011 Out_MDRd 0011
Out_Ts 0100 Out_NMDRd 0100
Out_-1s 0101 Out_Td 0101
Out_1s 0110 Out_NTd 0110
Out_IR[offset]s 0111 Out_PCd 0111
Out_PCs 1000 Out_FLAGd 1000
Out_SPd 1001

ALU: RBUS:
SUM 0001 In_ADR 001
AND 0010 In_T 010
OR 0011 In_PC 011
XOR 0100 In_FLAG 100
ASL 0101 In_GPR 101
ASR 0110 In_MDR 110
LSR 0111
ROL 1000
ROR 1001
RLC 1010
RRC 1011

OTHER:
+2PC 0001 INDEX:
Out_COND 0010 IR14,IR13,IR12 001
Cin+Out_COND 0011 IR12,IR11,IR10,IR9,IR8 010
-2SP 0100 IR5,IR4 011
+2SP 0101 IR11,IR10 100
A(0)C 0110
A(0)V 0111 Conditi:
A(0)Z 1000 JUMPI 0001
A(0)S 1001 JMP 0010
A(0)(CVZS) 1010 B4 0011
A(1)C 1011 B3 0100
A(1)V 1100 B2 0101
A(1)Z 1101 RD 0110
A(1)S 1110 Z 0111
A(1)(CVZS) 1111 S 1000
C 1001
MEM: V 1010
IFCH 01
WRITE 10
READ 11
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC

D. FORMATUL MICROINSTRUCTIUNII

E. MICROPROGRAMUL DE EMULARE
IFCH:
Out_0s , Out_PCd , SUM , In_ADR , +2PC , IFCH , IF B4 JUMPI (IR12,IR11,IR10,IR9,IR8) CLC ELSE STEP
none , none , none , none , none , none , IF B3 JUMPI (IR12,IR11,IR10,IR9,IR8) BR ELSE STEP
none , none , none , none , none , none , IF B2 JUMPI (IR5,IR4) IM_D ELSE STEP
none , none , none , none , none , none , JUMPI (IR11,IR10) IM_S
IM_S:
Out_0s , Out_PCd , SUM , In_ADR , +2PC , READ , STEP
Out_0s , Out_MDRd , SUM , In_T , none , none , JUMPI (IR5,IR4) IM_D
RD_S:
Out_GPRs , none , SUM , In_T , none , none , JUMPI (IR5,IR4) IM_D
_RD
Out_0s , Out_MDRd , SUM , In_GPR , none , none , JMP IFCH
RI_S
Out_GPRs , none , SUM , In_ADR , none , READ , STEP
Out_0s , Out_MDRd , SUM , In_T , none , none , JUMPI (IR5,IR4) IM_D
RX_S
Out_0s , Out_PCd , SUM , In_ADR , none , READ , STEP
Out_GPRs , Out_MDRd , SUM , In_ADR , +2PC , READ , STEP
Out_0s , Out_MDRd , SUM , In_T , none , none , JUMPI (IR5,IR4) IM_D
IM_D
Out_0s , Out_PCd , SUM , In_ADR , +2PC , READ , IF B2 JUMPI (IR12,IR11,IR10,IR9,IR8) CLR ELSE STEP
one , none , none , none , none , none , JUMPI (IR14,IR13,IR12) MOV
RD_D
Out_0s , Out_GPRd , SUM , In_MDR , none , none , IF B2 JUMPI (IR12,IR11,IR10,IR9,IR8) CLR ELSE STEP
none , none , none , none , none , none , JUMPI (IR14,IR13,IR12) MOV
RI_D
Out_0s , Out_GPRd , SUM , In_ADR , none , READ , IF B2 JUMPI (IR12,IR11,IR10,IR9,IR8) CLR ELSE STEP
none , none , none , none , none , none , JUMPI (IR14,IR13,IR12) MOV
RX_D
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
Out_0s , Out_PCd , SUM , In_ADR , none , READ , STEP
Out_MDRs , Out_GPRd , SUM , In_ADR , +2PC , READ , IF B2 JUMPI (IR12,IR11,IR10,IR9,IR8) CLR ELSE STEP
none , none , none , none , none , none , JUMPI (IR14,IR13,IR12) MOV
MOV
Out_Ts , Out_0d , SUM , In_MDR , none , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
ADD
Out_MDRs , Out_Td , SUM , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
SUB
Out_MDRs , Out_NTd , SUM , In_MDR , Cin+Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
CMP
Out_MDRs , Out_NTd , SUM , In_MDR , Cin+Out_COND , none , JMP IFCH
NOT_RD
none , none , none , none , none , WRITE , JMP IFCH
AND
Out_MDRs , Out_Td , AND , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
OR
Out_MDRs , Out_Td , OR , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
XOR
Out_MDRs , Out_Td , XOR , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
CLR
Out_0s , Out_0d , SUM , In_MDR , none , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
NEG
Out_0s , Out_NMDRd , SUM , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
INC
Out_1s , Out_MDRd , SUM , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
DEC
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
Out_-1s , Out_MDRd , SUM , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
ASL
Out_0s , Out_MDRd , ASL , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
ASR
Out_0s , Out_MDRd , ASR , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
LSR
Out_0s , Out_MDRd , LSR , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
ROL
Out_0s , Out_MDRd , ROL , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
ROR
Out_0s , Out_MDRd , ROR , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
RLC
Out_0s , Out_MDRd , RLC , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
RRC
Out_0s , Out_MDRd , RRC , In_MDR , Out_COND , none , IF RD JMP _RD ELSE STEP
none , none , none , none , none , none , JMP NOT_RD
JMP
Out_0s , Out_MDRd , SUM , In_PC , none , none , JMP IFCH
none , none , none , none , none , none , none
PUSH
Out_0s , Out_GPRd , SUM , In_MDR , -2SP , none , STEP
Out_0s , Out_SPd , SUM , In_ADR , none , WRITE , JMP IFCH
POP
Out_0s , Out_SPd , SUM , In_ADR , none , READ , STEP
Out_0s , Out_MDRd , SUM , In_GPR , +2SP , none , JMP IFCH
CALL
Out_PCs , Out_MDRd , SUM , In_T , none , none , STEP
Out_0s , Out_PCd , SUM , In_MDR , -2SP , none , STEP
Out_0s , Out_SPd , SUM , In_ADR , none , WRITE , STEP
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
Out_0s , Out_Td , SUM , In_PC , none , none , JMP IFCH
BR
Out_IR[offset]s , Out_PCd , SUM , In_PC , none , none , JMP IFCH
none , none , none , none , none , none , none
BNE
none , none , none , none , none , none , IF NZ JMP BR ELSE STEP
none , none , none , none , none , none , JMP NOP
BEQ
none , none , none , none , none , none , IF Z JMP BR ELSE STEP
none , none , none , none , none , none , JMP NOP
BPL
none , none , none , none , none , none , IF NS JMP BR ELSE STEP
none , none , none , none , none , none , JMP NOP
BMI
none , none , none , none , none , none , IF S JMP BR ELSE STEP
none , none , none , none , none , none , JMP NOP
BCS
none , none , none , none , none , none , IF C JMP BR ELSE STEP
none , none , none , none , none , none , JMP NOP
BCC
none , none , none , none , none , none , IF NC JMP BR ELSE STEP
none , none , none , none , none , none , none , JMP NOP
BVS
none , none , none , none , none , none , IF V JMP BR ELSE STEP
none , none , none , none , none , none , none , JMP NOP
BVC
none , none , none , none , none , none , IF NV JMP BR ELSE STEP
none , none , none , none , none , none , none , JMP NOP
CLC
none , none , none , none , A(0)C , none , JMP IFCH
none , none , none , none , none , none , none
CLV
none , none , none , none , A(0)V , none , JMP IFCH
none , none , none , none , none , none , none
CLZ
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
none , none , none , none , A(0)Z , none , JMP IFCH
none , none , none , none , none , none , none
CLS
none , none , none , none , A(0)S , none , JMP IFCH
none , none , none , none , none , none , none
CCC
none , none , none , none , A(0)(CVZS) , none , JMP IFCH
none , none , none , none , none , none , none
SEC
none , none , none , none , A(1)C , none , JMP IFCH
none , none , none , none , none , none , none
SEV
none , none , none , none , A(1)V , none , JMP IFCH
none , none , none , none , none , none , none
SEZ
none , none , none , none , A(1)Z , none , JMP IFCH
none , none , none , none , none , none , none
SES
none , none , none , none , A(1)S , none , JMP IFCH
none , none , none , none , none , none , none
SCC
none , none , none , none , A(1)(CVZS) , none , JMP IFCH
none , none , none , none , none , none , none
NOP
none , none , none , none , none , none , JMP IFCH
none , none , none , none , none , none , none
RET
Out_0s , Out_SPd , SUM , In_ADR , none , READ , STEP
Out_0s , Out_MDRd , SUM , In_PC , +2SP , none , JMP IFCH
HALT
none , none , none , none , none , none , none
none , none , none , none , none , none , none
WAIT
none , none , none , none , none , none , JMP WAIT
none , none , none , none , none , none , none
PUSH_PC
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
Out_0s , Out_PCd , SUM , In_MDR , -2SP , none , STEP
Out_0s , Out_SPd , SUM , In_ADR , none , WRITE , JMP IFCH
POP_PC
Out_0s , Out_SPd , SUM , In_ADR , none , READ , STEP
Out_0s , Out_MDRd , SUM , In_PC , +2SP , none , JMP IFCH
PUSH_FLAG
Out_0s , Out_FLAGd , SUM , In_MDR , -2SP , none , STEP
Out_0s , Out_SPd , SUM , In_ADR , none , WRITE , JMP IFCH
POP_FLAG
Out_0s , Out_SPd , SUM , In_ADR , none , READ , STEP
Out_0s , Out_MDRd , SUM , In_FLAG , +2SP , none , JMP IFCH
F. Organigrama de principiu a microprogramului de emulare
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
G. Blocul de decodificare microcomezi
Generarea comenzilor pentru selecţia sursei pe SBUS, DBUS şi pentru ALU se face prin
decodificare câmpurilor:
MIR38-35(câmpul SURSA SBUS)
MIR34-31(câmpul SURSA DBUS)
MIR30-27(câmpul OPERAŢIE ALU)
Toate aceste comenzi sunt de tip NIVEL. Decodificatorul este validat în starea ST1 a
automatului SEQ (starea de execuţie a microinstrucţiunii).
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC

Generarea comenzilor de tip InRegistru se face prin prin decodificarea câmpului MIR26-24
(câmpul DESTINAŢIE RBUS). Acest câmp codifică 8 destinaţii de tip registru şi o destinaţie
NONE.

Validarea decodificatorului se face cu:


ST1=1 - în starea ST1 a automatului SEQ (starea de execuţie a microinstrucţiunii).
CLK=1 – doar pe durata impulsului de tact (comenzi de tip IMPULS)
InMDRREG - este comanda generata din microinstrucţiune în starea ST1 a automatului SEQ.
InMDRMEM - este comanda generata de SEQ în starea ST3.

Generarea comenzilor Shift & Other Operations se face prin prin decodificarea câmpului MIR23-19
(câmpul OTHER OPERATIONS).
Decodificatorul este validat în starea ST1 a automatului SEQ (starea de execuţie a microinstrucţiunii).

Câmpul OPERAŢIE I/E al microinstrucţiunii (MIR18,17) este decodificat direct de către automatul SEQ.
H. Blocul de selecţie index
Câmpul MIR10-8 are rol de selector de index. Microadresa de salt se obţine adunând indexul selectat de
acest bloc, la o microadresă de bază preluată chiar din microinstrucţine.
µADR DE SALT = MIR7-0 + INDEX/sel. cu MIR10-8
Blocul de selecţie index operează atât pentru succesorii JUMPI, cât şi pentru succesorii JMP. De fapt,
prin generarea unui index egal cu zero, blocul de selecţie index transformă succesorii JUMPI în
succesori JMP.
Pentru instrucţiunile care apar s-au definit 4 indecşi, dintre care primul va fi zero.
INDEX 1 : IR14,IR13,IR12
INDEX 2 : IR12,IR11,IR10,IR9,IR8
INDEX 3: IR5,IR4
INDEX 4: IR11,IR10
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
I. Blocul de generare a funcţiei globale de ramificaţie g

Multiplexorul selectează condiţia din microinstrucţiune (f). La execuţia microinstrucţiunii, se va testa de


fapt funcţia globală de ramificaţie g, pentru a se decide succesorul corespunzător : STEP sau
JUMPI(JUMP).
g=f  MIR11 , unde bitul MIR11 specifică modul de test al condiţiei (pe fals sau adevărat). Dacă g=1 se
execută succesorul JUMPI(JUMP), dacă g=0 se execută STEP.
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC
J. Organigrama de funcţionare a automatului SEQ
Proiect Arhitectura Calculatoarelor: Proiectarea Unităţii De Control Microprogramate Aferentă Unui Procesor CISC

Graful de tranziţii al automatului SEQ

RESET

MIR18 * MIR17  1

MIR18 * MIR17  0 BUSY = 0

BUSY = 1 2

BUSY= 0

BUSY = 1 3

Schema bloc a automatului SEQ

MIR18 LDMIR

MIR17 STEP
g JUMPI
SEQ
Busy ( secvenţiator ) MREQ

WR

InMDRMEM
CLK InIRMEM

CLK

RESET

S-ar putea să vă placă și