Arhitectura Sistemelor de Calcul

Cuprins:

Tema proiectului…………………………………………pag 3

Microprograme pentru instructiuni………………………pag 4

Descrierea semnalelor de comanda si microoperatiile…. pag 9

4. Codificarea instructiunilor……………………………….pag 10

5. Codificarea dupa functie…………………………………pag 19

6. Bibliografie………………………………………………pag 25

=== proiect ===

Cuprins:

Tema proiectului…………………………………………pag 3

Microprograme pentru instructiuni………………………pag 4

Descrierea semnalelor de comanda si microoperatiile…. pag 9

4. Codificarea instructiunilor……………………………….pag 10

5. Codificarea dupa functie…………………………………pag 19

6. Bibliografie………………………………………………pag 26

Tema proiectului.

Sa se proiecteze unitatea de comanda pentru un microprocessor capabil sa execute urmatorul set de instructiuni :

FETCH , PUSH R , POP R , CMP RM , AND RM , OR RM , XRA , CPR data , DCR AC , INC AC , ADC AC , SBC AC , ADD AC , SBB AC , SBI data , SWIT data , ACI data , ADI data , JMP adr , JMPZ adr , JMPC adr , CALL adr , RET , RC , RZ , HALT , NOT AC , ROTD AC , ROTS AC , ROTDC AC , ROTSC AC , DD AC , DS AC , DDC AC , DSC AC , STORE AC , LOAD AC .

In implementare , se va tine cont de precizarile urmatoare :

Unitatea de comanda sa fie microprogramata (se va utiliza codificarea dupa functie)

Adresarea memoriei se va realiza prin metoda segmentarii.

Microprograme pentru instructiuni.

Mai jos am prezentat microprogramele pentru instructiunile care sunt necesare pentru proiectarea unei unitati de comanda microprogramate unde adresarea memoriei se va face prin metoda segmentarii.

Fiecare instructiune este luata separat si detaliata , de exemplu la o instructiune nu vom scrie primul rand si ultimul ci o vom detalia , vor fi scrisi toti pasii cum s-a ajuns la final.

FETCH (aducerea din memorie a instructiunii/operandului )

RAV ← PC C

MS ← TABS(RAV(S)) C

RA ← MS(B) + RAV(C) C

RM ← MP(RA) C

RAC ← RM(OP) C

PC ← PC + 1 C

PUSH R ( depunerea in stiva a registrului general R)

RS ← RS – 1 C

RA ← RS C

RM ← R C

MP(RA) ← RM C

POP R ( extragerea din stiva a registrului R )

RA ← RS C

RM ← MP(RA) C

R ← RM C

RS ← RS + 1 C

CMP RM ( compara registrul acumulator cu registrul memoriei RM )

AC ← AC – RM C

AND RM ( SI logic intre acumulator si RM )

AC ← AC AND RM C

OR RM ( SAU logic intre acumulator si RM )

AC ← AC OR RM C

XRA ( SAU EXCLUSIV intre acumulator si RM )

AC ← AC XOR RM C

CPR data ( compara continutul acumulatorului cu continutul locatiei de la adresa data )

RA ← RM ( data ) C

RM ← MP(RA) C

CMP RM C

DCR AC ( decrementeaza registrul acumulator )

AC ← AC – 1 C

INC AC ( incrementeaza registrul acumulator )

AC ← AC + 1 C

ADC AC ( aduna la continutul acumulatorului registrul RM si fanionul de transport C )

AC ← AC + RM + C C

SBC AC ( scade din continutul acumulatorului registrul RM si fanionul de transport C )

AC ← AC – RM – C C

ADD AC ( aduna la continutul acumulatorului registrul RM )

AC ← AC + RM C

SBB AC (scade din continutul acumulatorului registrul RM )

AC ← AC – RM C

SBI data ( scadere “ cu imprumut ” )

RA ← RM ( data ) C

RM ← MP ( RA ) C

SBC AC C

SWIT data ( scadere “ fara imprumut ” )

RA ← RM ( data ) C

RM ← MP ( RA ) C

SBB AC C

ACI data ( aduna la continutul acumulatorului continutul locatiei de la adresa data si fanionul de transport C )

RA ← RM ( data ) C

RM ← MP ( RA ) C

ADC AC C

ADI data ( aduna la continutul acumulatorului continutul locatiei de la adresa data )

RA ← RM ( data ) C

RM ← MP ( RA ) C

ADD AC C

JMP adr ( salt neconditionat la adresa adr )

PC ← RM ( adr ) C

JMPZ adr ( salt conditionat de fanionul de zero, Z=1 )

If (z=1)

PC ← RM ( adr ) C

JMPC adr ( salt conditionat de fanionul de transport, C=1 )

If (C==1)

PC ← RM ( adr ) C

CALL adr ( apel de subrutina )

R ← PC C

R ← CF C

PUSH R CCCC

PC ← RM ( adr ) C

RET ( revenire din subrutina )

RA ← RS C

RM ← MP(RA) C

R ← RM C

PC ← R C

RS ← RS + 1 C

RC ( revenire din subrutina conditionata de C=1 )

If (C==1)

RET

RZ ( revenire din subrutina conditionata de Z=1 )

If (Z==1)

RET

HALT ( oprire procesor )

NOT AC ( complementarea continutului registrului acumulator )

AC ← C

ROTD AC ( rotire la dreapta a registrului acumulator )

ROTD AC C

ROTS AC ( rotire la stanga a registrului acumulator )

ROTS AC C

ROTDC AC ( rotire la dreapta a registrului acumulator daca C=1 )

If (C==1)

ROTD AC C

ROTSC AC ( rotire la stanga a registrului acumulator daca C=1 )

If (C==1)

ROTS AC C

DD AC ( deplasare la dreapta a registrului acumulator )

DD AC C

DS AC ( deplasare la stanga a registrului acumulator )

DS AC C

DDC AC ( deplasare la dreapta a registrului acumulator daca C=1 )

If (C==1)

DD AC C

DSC AC ( deplasare la stanga a registrului acumulator daca C=1 )

If (C==1)

DS AC C

STORE AC ( scrierea in memorie a continutului acumulatorului )

RA ← RM ( adr ) C

RM ← AC C

MP(RA) ← RM C

LOAD AC ( citirea din memorie in acumulator a unei locatii de memorie )

RA ← RM ( adr ) C

RM ← MP(RA) C

AC ← RM C

In dreptul fiecarei instructiuni a fost scris si semnalul de comanda care ii corespunde . Aceste semnale sunt scrise in ordine la punctul 3 al proiectului.

3. Descrierea semnalelor de comanda si microoperatiile .

In continuare semnalele de comanda sunt scrise in ordine cronologica:

C RAV ← PC

C MS ← TABS(RAV(S))

C RA ← MS(B) + RAV(C)

C RM ← MP(RA)

C RAC ← RM(OP)

C PC ← PC + 1

C RS ← RS – 1

C RA ← RS

C RM ← R

C MP(RA) ← RM

C R ← RM

C RS ← RS + 1

C CMP RM

C AND RM

C OR RM

C XRA RM

C RA ← RM ( adr )

C AC ← AC – 1

C AC ← AC + 1

C AC ← AC + RM + C

C AC ← AC – RM – C

C AC ← AC + RM

C AC ← AC – RM

C PC ← RM ( adr )

C R ← PC

C R ← CF

C PC ← R

C CF ← R

C AC ←

C ROTD AC

C ROTS AC

C DD AC

C DS AC

C RM ← AC

C AC ← RM

4. Codificarea instructiunilor.

Codificarea instructiunilor se face în cod binar. Coniderand formatul realizat din adresa in M.C. / conditie de salt / adresa de salt / semnale de comanda avem tabelul din fig de mai jos. Campurile adresa memoriei si adresa de salt contin 7 biti iar campul conditie de salt e codificat pe 3 biti :

000 – se executa salt neconditionat ;

001 – se executa salt conditionat de AC=0 ;

010 – se executa salt conditionat de fanionul de zero Z; Z=1

011 – se executa salt conditionat de fanionul de transport C; C=1

100 – nu exista salt ;

In continuare este scris programul in pseudocod dupa care am intocmit tabelul memoriei de comanda.

FETCH : RAV ← PC C

MS ← TABS(RAV(S)) C

RA ← MS(B) + RAV(C) C

RM ← MP(RA) C

RAC ← RM(OP) C

PC ← PC + 1 C

PUSH R : RS ← RS – 1 C

RA ← RS C

RM ← R C

MP(RA) ← RM C

Goto FETCH

POP R : RA ← RS C

RM ← MP(RA) C

R ← RM C

RS ← RS + 1 C

Goto FETCH

CMP RM: AC ← AC – RM C

If AC=0 goto Test

Goto FETCH

Test: z ← 1

Goto FETCH

AND RM : AC ← AC AND RM C

Goto FETCH

OR RM : AC ← AC OR RM C

Goto FETCH

XRA : AC ← AC XOR RM C

Goto FETCH

CPR data: RA ← RM ( data ) C

RM ← MP(RA) C

Goto CMP RM

DCR AC : AC ← AC – 1 C

Goto FETCH

INC AC : AC ← AC + 1 C

Goto FETCH

ADC AC : AC ← AC + RM + C C

Goto FETCH

SBC AC : AC ← AC – RM – C C

Goto FETCH

ADD AC : AC ← AC + RM C

Goto FETCH

SBB AC : AC ← AC – RM C

Goto FETCH

SBI data : RA ← RM ( data ) C

RM ← MP ( RA ) C

Goto SBC AC

SWIT data : RA ← RM ( data ) C

RM ← MP ( RA ) C

Goto SBB AC

ACI data : RA ← RM ( data ) C

RM ← MP ( RA ) C

Goto ADC AC

ADI data: RA ← RM ( data ) C

RM ← MP ( RA ) C

Goto ADD AC

JMP adr : PC ← RM ( adr ) C

Goto FETCH

JMPZ adr : If (z=1) Goto JMP adr

Goto FETCH

JMPC adr : If (C==1) Goto JMP adr

Goto FETCH

CALL adr : R ← PC C

R ← CF C

PUSH R CCCC

PC ← RM ( adr ) C

Goto FETCH

RET : RA ← RS C

RM ← MP(RA) C

R ← RM C

PC ← R C

RS ← RS + 1 C

Goto FETCH

RC : If (C==1) Goto RET adr

Goto FETCH

RZ : If (Z==1) Goto RET adr

Goto FETCH

HALT : Goto HALT

NOT AC : AC ← C

Goto FETCH

ROTD AC : ROTD AC C

Goto FETCH

ROTS AC : ROTS AC C

Goto FETCH

ROTDC AC : If (C==1) Goto ROTD AC

Goto FETCH

ROTSC AC : If (C==1) Goto ROTS AC

Goto FETCH

DD AC : DD AC C

Goto FETCH

DS AC : DS AC C

Goto FETCH

DDC AC : If (C==1) Goto DD AC

Goto FETCH

DSC AC : If (C==1) Goto DS AC

Goto FETCH

STORE AC : RA ← RM ( adr ) C

RM ← AC C

MP(RA) ← RM C

Goto FETCH

LOAD AC : RA ← RM ( adr ) C

RM ← MP(RA) C

AC ← RM C

Goto FETCH

5.Codificarea dupa functie :

Deoarece instructiunile sunt foarte multe , le-am impartit in functie de cele mai importante operatii astfel :

Coloana P.C. este codificata pe 3 biti si contine semnalele :

000 – nu exista operatie

001 – C

010 – C

011 – C

100 – C

101 – C

110 – C

111 – C

Coloana R.M. este codificata pe 3 biti si contine semnalele :

000 – nu exista operatie

001 – C

010 – C

011 – C

100 – C

101 – C

110 – C

111 – C

Coloana A.C. este codificata pe 4 biti si contine semnalele :

0000 – nu exista operatie

0001 – C

0010 – C

0011 – C

0100 – C

0101 – C

0110 – C

0111 – C

1000 – C

1001 – C

1010 – C

1011 – C

1100 – C

1101 – C

1110 – C

1111 – C

Coloana R. este codificata pe 3 biti si contine semnalele :

000 – nu exista operatie

001 – C

010 – C

011 – C

100 – C

101 – C

In tabelul urmator este prezentata codificarea dupa functie :

6. Bibliografie .

Daniela E. Popescu – Arhitectura si organizarea sistemelor conventionale de calcul ( curs ) edit. Universitatii din Oradea 2003

D. Popescu , C. Popescu – Arhitectura sistemelor de calcul ( indrumator de laborator ) edit. Universitatii din Oradea 2003

Similar Posts