Descargar la presentación
La descarga está en progreso. Por favor, espere
1
SEKVENCIRANJE MIKROINSTRUKCIJA
Kako se određuje sljedeća mikroinstrukcija?
2
2 načina sekvenciranja MPC<=MPC+1 inkrementiranjem MPC-a i
uslovni skokovi u mikroprogramu polja COND i ADRESA COND odlučuje o sljedećoj adresi – izbor je (MPC+1) ili ADRESA svaka mikroinstrukcija može imati dvije nasljednice!
3
-SEKVENCIJALNA LOGIKA
Određuje sljedeću adresu mikroinstrukcije za vrijeme četvrtog podciklusa Tada su ALU izlazi N i Z stabilni Na osnovu COND upravlja MMUX-om
4
COND polje Lijevi bit Desni bit Sljedeća adresa 1 Nema skoka - MPC+1
1 Nema skoka - MPC+1 Skok na ADRESA ako je N=1 Skok na ADRESA ako je Z=1 Skok na ADRESA Mmux = /LRN + L/RZ + LR Mmux = RN + LZ + LR
5
MAKROARHITEKTURA OGLEDNOG PROCESORA (programski model)
Memorijski prostor bitnih riječi 3 registra dostupna programeru (PC, AC i SP), a ostale vidi mikroprogramer !!!
6
3 načina adresiranja: DIREKTNO (12-bitno polje za apsolutnu adresu ) za pristup globalnim varijablama INDIREKTNO (izračunata adresa u AC) za pristup nizovima, tabelama itd. i LOKALNO (8-bitni offset u odnosu na SP) za pristup lokalnim varijablama. Sva tri načina su jednostavna i efikasna!!!
7
SKUP INSTRUKCIJA OGLEDNOG PROCESORA
Binarni kod Mnemonik Instrukcija Značenje 0000 xxxx xxxx xxxx LODD Napuni direktno ac:=m(x) 0001 xxxx xxxx xxxx STOD Smjesti direktno m(x):=ac 0010 xxxx xxxx xxxx ADDD Dodaj direktno ac:=ac+m(x) 0011 xxxx xxxx xxxx SUBD Oduzmi direktno ac:=ac-m(x) 0100 xxxx xxxx xxxx JPOS Skoči ako je (ac)0 if (ac) 0 then pc:=x 0101 xxxx xxxx xxxx JZER Skoči ako je (ac)=0 if (ac)=0 then pc:=x 0110 xxxx xxxx xxxx JUMP Bezuslovan skok pc:=x 0111 xxxx xxxx xxxx LOCO Napuni konstantu ac:=x (0 x 4096) 1000 xxxx xxxx xxxx LODL Napuni lokalno ac:=m(sp+x) 1001 xxxx xxxx xxxx STOL Smjesti lokalno m(sp+x):=ac 1010 xxxx xxxx xxxx ADDL Saberi lokalno ac:=ac+m(sp+x) 1011 xxxx xxxx xxxx SUBL Oduzmi lokalno ac:=ac-m(sp+x) 1100 xxxx xxxx xxxx JNEG Skoči ako je (ac)0 if (ac)0 then pc:=x
8
SKUP INSTRUKCIJA OGLEDNOG PROCESORA II
1101 xxxx xxxx xxxx JNZE Skoči ako je (ac)0 If (ac) 0 then pc:=x 1110 xxxx xxxx xxxx CALL Poziv procedure sp:=sp-1; m(sp):=pc; pc:=x PSHI Smjesti na stek indirektno sp:=sp-1; m(sp):=m(ac) POPI Pokupi sa steka indirektno m(ac):=m(sp); sp:=sp+1 PUSH Smjesti na stek sp:=sp-1; m(sp):=ac POP Pokupi sa steka ac:=m(sp); sp=sp+1 RETN Povratak iz procedure pc:=m(sp); sp:=sp+1 SWAP Zamijeni sadržaj AC i SP tmp:=ac; ac:=sp; sp:=tmp yyyy yyyy INSP Inkrementiraj SP sp:=sp+y (0y255) yyyy yyyy DESP Dekrementiraj SP sp:=sp-y (0y255)
9
U/I prostor? Ogledni procesor nema U/I instrukcija
U/I uređaji su u memorijskom prostoru - memorijski preslikani (mapirani).
10
MIKROPROGRAM Mikroprogram je program koji se izvršava na mikroarhitekturi i interpretira instrukcije procesora Pisanje mikroprograma/mikroinstrukcija u binarnoj formi - nije pogodno ! Potreban je simbolički jezik za pisanje
11
Simbolički jezik Za sabiranje sadržaja AC i A registara i smještaj rezultata u AC može se pisati ENC = 1, C = 1, B = 1, A = 10 (adr. A-reg.) Bolje je to izraziti “mikroasemblerskom” instrukcijom koji se jednoznačno pretvara u mašinsku mikroinstrukciju ac:=a+ac
12
Ostale ALU operacije... a:=band (ir,smask) operacija (A B)
ac:=a operacija A a:=inv(a) operacija /A logičko pomijeranje lshift - pomjeranje lijevo jedno mjesto npr. tir:= lshift (tir + tir) rshift - pomjeranje desno jedno mjesto.
13
Skokovi u mikroprogramu
"goto“ – bezuslovni skok uslovni - testiranjem N/Z - if n then goto 27 Dodjeljivanja i skokovi se mogu pisati u istoj liniji Samo za testiranje vrijednosti - "alu" alu:= tir; if n then goto 27 čitanja/pisanja memorije samo sa "rd" ili"wr"
14
Mikroasembler Mikroinstrukcija AMUX COND A LU SH MBR MAR RD WR ENC C B A D R mar:=pc; rd 2 1 00 Rd ir:=mbr 3 pc:=pc+1 6 mar:=ir; mbr:=ac; wr alu:=tir; if n then goto 15 4 15 ac:=inv(mbr) tir:=lshift(tir); if n then goto 25 25 alu:=ac; if z then goto 22 22 ac:=band(ir,amask); goto 0 8 sp:=sp+(-1); rd 7 tir:=lshift(ir+ir); if n then goto 69 69
15
MIKROPROGRAM OGLEDNOG PROCESORA
Osim PC, AC i SP, registri imaju uloge: - IR - instrukcijski registar, - TIR - privremeni IR - služi za dekodiranje ... - 0, +1 i -1 - registri sa ožičenim konstantama, - AMASK - adresna maska #0FFF za direktno ad. - SMASK - stek-maska #00FF za lokalno adres. Ostalih 6 registara nemaju posebnu namjenu i na raspolaganju su mikroprogrameru!
16
Sadržaj mikroprograma
0 mar:=pc; rd; glavna petlja - čitanje instrukcije 1 pc:=pc+1; rd; inkr. PC-a i drugi ciklus čitanja 2 ir:=mbr; if n then goto 28; početak dekodiranja instrukcije 1XXX ili 0XXX 3 tir:=lshift(ir+ir); if n then goto 19; prvo ALU pa shifter, 00XX ili 01XX? 4 tir:=lshift (tir); if n then goto 11; 000X ili 001X ?
17
5 alu:=tir; if n then goto 9; 0000 ili 0001 ?
6 mar:=ir; rd; LODD instrukcija 7 rd; 8 ac:=mbr; goto 0; 9 mar:=ir; mbr:=ac; wr; STOD instrukcija 10 wr; goto 0; 11 alu:=tir; if n then goto15; ili 0011 ? 12 mar:=ir;rd; ADDD instrukcija 13 rd; 14 ac:=mbr+ac; goto 0;
18
15 mar:=ir; rd; SUBD ! 16 ac:=ac+1; rd; (X-Z=X+1+ /Y) 17 a:=inv(mbr); 18 ac:=ac+a; goto 0; 19 tir:=lshift(tir); if n then goto 25; 010X ili 011X ? 20 alu:=tir; if n then goto 23; 0100 ili 0101 ? 21 alu:=ac; if n then goto 0; JPOS ! 22 pc:=band(ir, amask); goto 0; skok ako AC 0 23 alu:=ac; if z then goto 22; JZER ! 24 goto 0;
19
25 alu:=tir; if n then goto 27; 0110 ili 0111 ?
26 pc:=band(ir,amask); goto 0; JUMP ! 27 ac:=band(ir,amask); goto 0; LOCO ! 28 tir:=lshift(ir+ir); if n then goto 40; 10XX ili 11XX ? 29 tir:=lshift(tir); if n then goto 35; 100X ili 101X ? 30 alu:=tir; if n then goto 33; 1000 ili 1001 ? 31 a:=ir+sp; LODL ! 32 mar:=a; rd; goto 7; (nema maskiranja OPCOD-a !) ; na 7 se dovrši instrukcija
20
33 a:=ir+sp; 1001 - STOL instrukcija!
34 mar:=a; mbr:=ac; wr; goto 10; dovrši na 10 35 alu:=tir; if n then goto 38; ili 1011 ? 36 a:=ir+sp; ADDL instrukcija! 37 mar:=a; rd; goto 13; 38 a:=ir+sp; SUBL instrukcija! 39 mar:= a; rd; goto 16; 40 tir:=lshift(tir); if n then goto 46; 110X ili 111X ? 41 alu:=tir; if n then goto 44; 1100 ili 1101 ? 42 alu:=ac; if n then goto 22; JNEG ! 43 goto 0;
21
44 alu:=ac; if z then goto 0; 1101 - JNZE !
45 pc:=band(ir,amask); goto 0; skok 46 tir:=lshift(tir); if n then goto 50; 1110 ili 1111 ? 47 sp:=sp+(-1); CALL instrukcija! 48 mar:=sp; mbr:=pc; wr; 49 pc:=band(ir,amask); wr; goto 0; 50 tir:=lshift(tir); if n then goto 65; ispitati sljedeća 3 bita 51 tir:=lshift(tir); if n then goto 59; 52 alu:=tir; if n then goto 56; 53 mar:=ac; rd; PSHI instrukcija! 54 sp:=sp+(-1); rd; mbr <- (ac); 55 mar:=sp; wr; goto 10; mbr ->> m(sp-1); 56 mar:=sp; sp:=sp+(+1); rd; POPI ! 57 rd; ;mbr <- (sp) 58 mar:=ac; wr; goto 10; mbr -> m(ac)
22
59 alu:=tir; if n then goto 62; 1111 010 ili 1111 011 ?
60 sp:=sp+(-1); PUSH instrukcija 61 mar:=sp; mbr:=ac; wr; goto 10; 62 mar:=sp; sp:=sp+(+1); rd; POP instrukcija 63 rd; 64 ac:=mbr; goto 0; 65 tir:=lshift(tir); if n then goto 73; X ili X ? 66 alu:=tir; if n then goto 70; ili ? 67 mar:=sp; sp:=sp+(+1); rd; RETN instrukcija 68 rd; 69 pc:=mbr; goto 0; 70 a:=ac; SWAP instrukcija 71 ac:=sp; 72 sp:=a; goto 0; 73 alu:=tir; if n then goto 76; ili ? 74 a:=band(ir,smask); INSP instrukcija 75 sp:=sp+a; goto 0; 76 a:=band(ir,smask); DESP instrukcija 77 a:=inv(a); 78 a:=a+(+1); goto 75;
23
mar := pc; ac:= mbr; rd; goto 1;
Diskusija... PC se inkrementira u liniji 1 iako se to moglo uraditi i u liniji 0, ostavljajući liniju 1 za neke druge poslove (npr. traže li U/I uređaji obradu, DMA, refresh i sl.). Ako se linija 1 ne promijeni, procesor se može ubrzati promjenom linije 8 u: mar := pc; ac:= mbr; rd; goto 1; Time se počinje donošenje sljedeće instrukcije prije završetka tekuće - jednostavna forma protočne strukture (engl. pipeline). puno vremena gubi u dekodiranju instrukcija !
24
HORIZONTALNO ILI VERTIKALNO MIKROPROGRAMIRANJE?
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.