Documente Academic
Documente Profesional
Documente Cultură
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
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
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)
Adresa Memorie
MAS RS MAD RD
PC: OPCODE 0 1 N 01 M
Adresa Memorie
MAS RS MAD RD
PC: COD 10 N 10 M
Adresa Memorie
PC: 11 M 11 N
PC+2: Index src
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.
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
RESET
MIR18 * MIR17 1
BUSY = 1 2
BUSY= 0
BUSY = 1 3
MIR18 LDMIR
MIR17 STEP
g JUMPI
SEQ
Busy ( secvenţiator ) MREQ
WR
InMDRMEM
CLK InIRMEM
CLK
RESET