107
ELEKTRONSKI FAKULTET U NIŠU KATEDRA ZA ELEKTRONIKU SEMINARSKI RAD VHDL OPIS PROCESORA Predmet: Mikroprocesorska tehnika Profesor: Prof.dr. Mile Stojčev Student: Bratislav Džombić (8627) Niš, jun 2006.

VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

ELEKTRONSKI FAKULTET U NIŠU KATEDRA ZA ELEKTRONIKU

SEMINARSKI RAD

VHDL OPIS PROCESORA

Predmet: Mikroprocesorska tehnika

Profesor: Prof.dr. Mile Stojčev

Student: Bratislav Džombić (8627)

Niš, jun 2006.

Page 2: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

1

SADRŽAJ

UVOD ...................................................................................................................................................... 3

1. VHDL .................................................................................................................................................. 4 1.1. Šta je VHDL? ........................................................................................................................................... 4 1.2. VHDL dizajn ............................................................................................................................................ 4 1.3. Nivoi apstrakcije ...................................................................................................................................... 6 1.4. Osnovna struktura VHDL-a ................................................................................................................... 8

2. PROCESOR ........................................................................................................................................ 9 2.1. Osnovno o procesoru ............................................................................................................................... 9 2.2. Kratka istorija........................................................................................................................................ 10 2.3. Procesor JASP........................................................................................................................................ 11 2.4. Računarski sistem .................................................................................................................................. 12

3. REGISTRI......................................................................................................................................... 13 3.1. Registri JASP-a ...................................................................................................................................... 13

3.1.1. Registri opšte namene (A i B) ........................................................................................................................... 14 3.1.2. Registri ALU (ALUx, ALUy, ALUr) ............................................................................................................... 14 3.1.3. Programski brojač (PC)..................................................................................................................................... 14 3.1.4. Inkrementer (INC)............................................................................................................................................. 15 3.1.5. Memorijsko adresni registar (MAR) ................................................................................................................. 15 3.1.6. Prihvatni registar memorije (MDR) .................................................................................................................. 15 3.1.7. Pokazivač magacina (SP) .................................................................................................................................. 15 3.1.8. Instrukcioni registar (IR)................................................................................................................................... 15 3.1.9. Procesorsko statusni registar (PSR) .................................................................................................................. 16

3.2. VHDL opis registara.............................................................................................................................. 16 3.2.1. VHDL opis bloka reg ........................................................................................................................................ 16 3.2.2. VHDL opis bloka INC....................................................................................................................................... 18 3.2.3. VHDL opis bloka IR ......................................................................................................................................... 19 3.2.4. VHDL opis bloka ProsOper (Blok za proširenje operanda)............................................................................. 20 3.2.5. VHDL opis bloka PSR ...................................................................................................................................... 21

4. ARITMETIČKO-LOGIČKA JEDINICA......................................................................................... 24 4.1. Aritmetičko-logička kola ....................................................................................................................... 25 4.2 VHDL opis aritmetičkih i logičkih kola ALU....................................................................................... 26

4.2.1. VHDL opis bloka Potpuni sabirač (FA) ........................................................................................................... 26 4.2.2. VHDL opis bloka ALUADD ............................................................................................................................. 27 4.2.3. VHDL opis bloka ALUADC.............................................................................................................................. 29 4.2.4. VHDL opis bloka KOMP (Kolo za komplementiranje) .................................................................................... 30 4.2.5. VHDL opis bloka ALUSUB .............................................................................................................................. 31 4.2.6. VHDL opis bloka ALUSL ................................................................................................................................. 33 4.2.7. VHDL opis bloka ALUSR ................................................................................................................................. 34 4.2.8. VHDL opis bloka ALUAND.............................................................................................................................. 35

Page 3: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

2

4.2.9. VHDL opis bloka ALUOR ................................................................................................................................ 36 4.2.10. VHDL opis bloka ALUNOT ............................................................................................................................ 38 4.2.11. VHDL opis bloka ALUNEG............................................................................................................................ 39 4.2.12. VHDL opis bloka ALUINC ............................................................................................................................. 40 4.2.13. VHDL opis bloka ALUDEC............................................................................................................................ 42 4.2.14. VHDL opis bloka ALUSWAP.......................................................................................................................... 43 4.2.15. VHDL opis bloka CSD (Dekoder kontrolnih signala) .................................................................................... 44 4.2.16. VHDL opis bloka ALK (Aritmetičko-logička kola) ......................................................................................... 47

4.3. Jedinica za spregu sa magistralom ....................................................................................................... 51 4.3.1. VHDL opis bloka DBC (Jednica za spregu) ..................................................................................................... 51

4.4. VHDL opis bloka ALU .......................................................................................................................... 52 5. UPRAVLJAČKA JEDINICA ........................................................................................................... 54

5.1. Instrukcije procesora JASP .................................................................................................................. 55 5.1.1. Tabela instrukcija, njihovih mikroprogramskih rutina i rasporeda mikroinstrukcija u mikromemoriji ............ 56

5.2. Mikroinstrukcije .................................................................................................................................... 77 5.2.1. Mikroinstrukcije za premeštanje podataka........................................................................................................ 79 5.2.2. ALU mikroinstrukcije ....................................................................................................................................... 80 5.2.3 Testne mikroinstrukcije...................................................................................................................................... 81 5.2.4. Kontrolne mikroinstrukcije ............................................................................................................................... 81 5.2.5. Primer sadržaja mikromemorije ........................................................................................................................ 81

5.3. VHDL opis blokova upravljačke jedinice ............................................................................................ 83 5.3.1. VHDL opis bloka InterruptController (Kontroler prekida).............................................................................. 83 5.3.2. VHDL opis bloka CondBlk (Blok uslova grananja) ......................................................................................... 84 5.3.3. VHDL opis bloka Logika .................................................................................................................................. 85 5.3.4. VHDL opis bloka SA (Selektor adresa) ............................................................................................................ 86 5.3.5. VHDL opis bloka AdrMapper (Adresni maper)................................................................................................ 87 5.3.6. VHDL opis bloka MicroMAR ........................................................................................................................... 88 5.3.7. VHDL opis bloka MicroINC ............................................................................................................................. 89 5.3.8. VHDL opis bloka microMemory (Mikromemorija) .......................................................................................... 90 5.3.9. VHDL opis bloka MicroMDR ........................................................................................................................... 91 5.3.10. VHDL opis bloka CU (Upravljačka jedinica) ................................................................................................ 93

5.4. Kolo prekida........................................................................................................................................... 95 5.4.1. VHDL opis bloka IntOR ................................................................................................................................... 95

6. PROCESOR JASP............................................................................................................................ 97

7. MEMORIJA.................................................................................................................................... 103 7.1. VHDL opis bloka Memory.................................................................................................................. 104

LITERATURA .................................................................................................................................... 106

Page 4: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

3

UVOD

Procesor koji je predmet ovog seminarskog rada ima naziv JASP (eng. Just Another Simulated Processor). To je primer vrlo jednostavnog 16-bitnog procesora koji je osmišljen isključivo u edukacione svrhe i opisan je u knjizi “Fundamentals of Computer Architecture”, čiji je autor Mark Burrell. Njegov cilj je da pokaže osnove rada procesora. JASP ima minaman broj komponenata koje su neophodne za jednostavne operacije. Rad je podeljen na sedam poglavlja:

- prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4, 5 i 6 opisuju komponente procesora i sam procesor - u sedmom poglavlju je dat VHDL opis memorije.

Seminarski rad je rađen u okviru predmeta “Mikroprocesorska tehnika”, iz IX semestra

nastavnog programa Elektronskog fakulteta u Nišu.

Page 5: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

4

1. VHDL

1.1. Šta je VHDL?

VHDL (eng. Very-high-speed-integrated-circuit Hardware Description Language) je jezik za opis digitalnih elektronskih sistema koji je razvijen u okviru programa razvoja vrlo brzih integrisanih kola. Prva standardizovana verzija IEEE Std 1076 iz 1987. godine proširena je i standardizovana 1993. Priključivanje godine uz naziv ima smisla kada se uzme u obzir da razvoj tehnologije nameće nove zahteve jeziku, tako da IEEE komitet za standardizaciju svakih pet godina razmatra primedbe koje stižu od korisnika VHDL-a kako bi se povećala efikasnost jezika.

VHDL može da se primenjuje u svim fazama projektovanja: opis, verifikaciju (simulaciju),

sintezu i dokumentovanje. Osnovna prednost jeste mogućnost jednostavnog opisa projekta na višim nivoima apstrakcije.

VHDL je projektovan da zadovolji potrebe u procesu projektovanja: 1. omogućava opis strukture sistema, tj. dekompozicije na podsisteme i međusobne povezanosti

podsistema, 2. omogućava specifikaciju funkcije sistema korišćenjem jednostavnih formi programskog

jezika, 3. omogućava simulaciju sistema pre izrade, tako da se alternative projekta mogu porediti i

testirati bez trošenja vremena i novca koje zahteva prototipovanje hardvera.

1.2. VHDL dizajn

Postoji nekoliko koraka u VHDL dizajnu, ovi koraci su primenjivi na bilo kom VHDL dizajnu.

Page 6: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

5

VHDL dizajn

Hierarhija (blok dijagram) podrazumeva izradu blokova na nivou blok dijagram strukture . Definišu se moduli i njihova povezanost. Kodiranje. Pisanje VHDL koda za module u predhodnom koraku, njihovih interfejsa i internih detalja. Pošto je VHDL tekstualni jezik može se koristiti bilo koji tekstualni editor. Većina okruženja za rad sa VHDL-om nudi specijalizovani VHDL tekst editor. Uključuje automatsko izdvajanje ključnih reči i još neke pogodnosti. Kompilacija. Kada se napiše kod potrebno ga je kompajlirati. VHDL kompajler analizira kod i traži sintaksne greške, proverava kompatibilnost sa ostalim modulima. Takođe kreira interne informacije koje su potrebne za simulaciju kasnije. Simulacija. VHDL simulator dozvoljava korisniku da definiše i primeni ulaze na strukturu koju je definisao u VHDL-u, i da posmatra izlaze iz te strukture, bez potrebe za fizičkom realizacijom. Za velike projekte VHDL daje mogućnost kreiranja „test bench” –eva koji automatski stimulišu ulaze i porede ih sa očkivanim izlazima. Verifikacija. Simlacija je samo jedan deo većeg procesa koji se zove verifikacija. Svrha simulacije je da se verifikuje da li kolo radi onako kako je predviđeno. U velikim projektima najveća pažnja se posvećuje za vreme kodiranja i posle, za definisanje test vektora koji testiraju kolo za veliki opseg logičkih uslova. Postoje dva nivoa verifikacije:

• Funkcionalni, posmatra se samo da li kolo zadovoljava funkcionalno, sva kašnjenja su nula

• Vremenska verifikacija, posmatra se funkcionisanje kola sa uključenim kašnjenjima (procenjenim)

Vremenska verifikacija na ovom nivou je ograničena jer vremenske karakteristike kola zavise od sinteze, detaljna vremenska verifikacija se vrši posle sinteze. Sinteza. Priroda i alati u ovom procesu su raznoliki i zavise od primenjene tehnologije. Mogu se izvojiti tri osnovna koraka:

• Sinteza. Konvertovanje VHDL opisa u skup primitiva ili komponenata koje mogu biti ostvarene u primenjenoj tehnologiji. Na primer sa PLD ili CPLD komponentama alat za sintezu može generisati sume proizvoda.

Page 7: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

6

• Fitovanje. Alatka za fitovanje mapira sintetizovane primitive ili komponente u raspoložive resurse komponenete. Za PLD i CPLD je to dodeljivanje jednačina (sume proizvoda) raspoloživim AND-OR elementima. Dizajner često zadaje uslov fiteru u smislu raspodele modula u čipu, odnosno dodelu ulaznih i izlaznih pinova odgovarajućim signalima.

• Vremenska verifikacija. Jedino u ovom momentu je moguće precizno utvrditi vremenske parametre kola (kašnjenja u zavisnosti od dužina žica, električnog opterećenja itd...). Obično se primenjuju isti test vektori kao u vreme funkcionalne verifikacije, ali u ovom slučaju oni se primenjuju na komponentu koja će se fizički realizovati.

Na dijagramu VHDL dizajna, je pokazano da ako nisu zadovoljeni neki zahtevi u dizajnu

moraju se ponovo preduzeti neki koraci. Može se desiti da ako se ne zadovolje vremenski kriterijumi ceo dizajn pretrpi izmene (najgori mogući slučaj).

1.3. Nivoi apstrakcije

Projektanti integrisanih kola mogu da primene metodologiju za opis-i-sintezu ASIC♣ kola na sledećih nekoliko nivoa apstrakcije:

• gejt nivou (eng. gate level) – klasičnim postupcima prekidačke algebre moguće je

sintetizovati logiku funkcionalne i upravljačke jedinice. • RTL nivou (eng. register transfer level) – opisuje se ponašanje ASIC kola pomoću

programa, algoritama, dijagrama toka, toka podataka, skupa instrukcija, ili generalizovanog FSM-a♣♣ kod koga svako stanje obavlja neko proizvoljno složeno izračunavanje.

• visokom nivou (eng. behavioral level) – predstavlja sekvenca zadataka koja transformiše prezentaciju ponašanja u RTL dizajn. Dizajn čine funkcionalne jedinice kakve su ALU jedinice i multiplekseri, elementi za pamćenje kakvi su memorije i registarska polja, i sprežne jedinice kakve su multiplekseri i magistrale.

Opšti oblik strukture sistema za sintezu ASIC kola na visokom nivou (eng. high level

synthesis) prikazan je na slici

♣ integrisana kola za specifične aplikacije (eng. Application-Specific Integrated Circuit) ♣♣ konačna mašina (eng. Finite State Machine)

Page 8: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

7

Opšti oblik sistema za sintezu ASIC kola na visokom nivou

Kompilator vrši konverziju opisa na nivou ponašanja (eng. behavioral level) u internu prezentaciju. RTL biblioteka sadrži fizičke i simulacione modele komponenata koji se koriste u toku sinteze. Netlister generiše konačnu RTL strukturu, koju čini netlista RTL komponenata i simulacioni model za svaku komponentu.

Da bi verifikovali korektnost sintetizovanog dizajna, projektant može prvo, da zada i simulira

opis-na-ulazu, zatim da generiše netlistu pomoću simulacionog okruženja, i na kraju da je pridoda sistemu za sintezu visokog-nivoa.

Glavne prednosti sinteze visokog-nivoa su poboljšana produktivnost i bolja efikasnost u procesu projektovanja (projektovanje se vrši na abstraktnijem nivou, gde projektanti mogu da specificiraju, modeliraju, verifikuju, sintetizuju, i otklanjaju greške u dizajnu za kraće vreme).

Page 9: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

8

1.4. Osnovna struktura VHDL-a

VHDL je zasnovan na principima strukturnog programiranja. Pozajmljene su ideje iz Pascala i Ade. Glavna ideja je definisati interface hardverskog modula, dok se sakrivaju interni detalji. Svaki moduo u okviru VHDL opisa (moduo može biti elementarni ili složen, sastavljen iz više elementarnih modula) se satoji iz dva dela:

• Entity • Architecture

Entity je interfejs sistema. Sistem ima neke ulaze i izlaze preko kojih komunicira sa okolinom (ulazno-izlazni portovi). Dizajn uvek počinje od entitija. Architecture. Sistem se projektuje da bi se izvršila neka transformacija od ulaza do izlaza. Ta transformacija se ostvaruje u unutrašnjim elementima modula i ona je definisana u okviru arhitekture.

entity x_or is port ( in1 : in bit ; in2 : in bit ; out1 : out bit) ; end x_or; architecture behavior of x_or is begin process(in1, in2) begin if in1 = in2 then out1 <= '0' after 10 ns; else out1 <= '1' after 10 ns; end if; end process; end behavior;

Page 10: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

9

2. PROCESOR

2.1. Osnovno o procesoru U okviru svakog računara nalazi se komponenta pod nazivom procesor, formalnije nazvana centralna procesorska jedinica (eng. Central Processing Unit – CPU). Procesor ima dve uloge: da dekodira i izvršava skup mašinskih instrukcija (tj. računarski program) i da vrši obradu podataka.

Procesor obavlja tri osnovne operacije: • Koristeći aritmetičko-logičku jedinicu ALU (eng.

Arithmetic/Logic Unit) izvršava matematičke operacije nad podacima,

• Upisuje ili čita podatke iz memorije ili komunicira sa ulazno/izlaznim uređajima,

• Donosi odluku da pređe na novu instrukciju ili novi skup instrukcija. Odgovarajućom kombinacijom osnovnih operacija procesor može da obavi znatno složenije zadatke.

Procesor je po strukturi veoma složeno električno kolo, realizovano kao jedinstveno integrisano kolo. Integrisano kolo (često nazivano i čip (eng. chip) predstavlje električno kolo koje je u potpunosti izvedeno na jednom komadu silicijuma. Kod savremenih procesora stepen integracije je veoma visok, tako da procesori sadrže stotine miliona tranzistora na centimetru kvadratnom. To su dakle VLSI kola (eng. Very Large Scale of Integration). Dimenzije procesora su male i njegova površina ne prelazi nekoliko centimetara kvadratnih.

Kako se radi o glavnoj komponenti računarskog sistema njegove performanse imaju presudan uticaj na performanse sistema. Osnovni kvalitet procesora je u njegovoj brzini rada. Elementi koji utiču na brzinu rada procesora su:

• Radna učestanost (takt) – kod savremenih PC procesora reda GHz, • Širina magistrale (propusnost) – kod savremenih PC procesora 32 ili 64 bita, • Skup instrukcija – tj. koliko je instrukcija potrebno da se izvrši određena operacija itd.

Mera za ocenjivanje performansi procesora je MIPS (eng. Million Instructions Per Second).

Ona označava broj prosečnih instrukcija (izražen u milionima) koje procesor izvrši u jednoj sekundi. Zavisi od učestanosti pojavljivanja instrukcije i radne učestanosti (takta) procesora. Mera koja se odnosi na brzinu izvršavanja instrukcija u pokretnom zarezu zove se MFLOPS (eng. Million Floating Point Instructions Per Second).

Pentium 4 procesor kompanije Intel

Page 11: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

10

2.2. Kratka istorija

Prvi mikroprocesor je bio Intel 4004, napravljen 1971. godine. Gledajući iz perspektive sadašnjeg vremena, to je bio slab procesor, sposoban samo da sabira i oduzima. Ipak, njegov veliki značaj je bio u tome što sve bilo na jednom čipu.

Prvi mikroprocesor koji se našao u kućnim računarima bio je Intel

8080, 8-bitni procesor nastao 1974. godine. Od tada do danas mikroprocesori dobili na brzini, efikasnosti i kompleksnosti. Kao dobar primer može da posluži tabela u kojoj su date osobine vodećih Intel-ovih procesora kroz 30-to godišnju istoriju:

Ime Godina

proizvodnje Broj

tranzistora Mikroni

Radna učestanost

Propusnost MIPS

8080 1974 6,000 6 2 MHz 8 bita 0.64

8088 1979 29,000 3 5 MHz 16 bita

8-bit bus 0.33

80286 1982 134,000 1.5 6 MHz 16 bita 1

80386 1985 275,000 1.5 16 MHz 32 bita 5

80486 1989 1,200,000 1 25 MHz 32 bita 20

Pentium 1993 3,100,000 0.8 60 MHz 32 bita

64-bit bus 100

Pentium II 1997 7,500,000 0.35 233 MHz 32 bita

64-bit bus ~300

Pentium III 1999 9,500,000 0.25 450 MHz 32 bita

64-bit bus ~510

Pentium 4 2000 42,000,000 0.18 1.5 GHz 32 bita

64-bit bus ~1,700

Pentium 4 "Prescott" 2004 125,000,000 0.09 3.6 GHz 32 bita

64-bit bus ~7,000

Intel 4004

Page 12: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

11

2.3. Procesor JASP

Struktura procesora predstavlja skup njegovih gradivnih blokova. Ti blokovi su hijerarhiski organizovani i omogućavaju izvršavanje skupa instrukcija, koji je definisan za posmatrani procesor.

Na sledećoj slici prikazani su gradivni blokovi procesora JASP.

Blok šema procesora JASP

JASP u sebi sadrži:

• Registre (označeni žutom bojom) – mesta gde se mogu smestiti delovi podataka • Aritmetičko-logičku jedinicu ili ALU – izvršava matematičke operacije. ALU sadrži i

neke registre.

Upravljačka jedinica

SP

INC

PC

IR

MAR

MDR

A

B

ALU

ALUx ALUy

ALUr

PSR

Page 13: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

12

• Upravljačka jedinicu (eng. Control Unit) – koja pokreće procesor • Magistrale – provodne linije koje međusobno povezuju komponente.

Sa obzirom na širok spektar procesora koji danas postoje tako je njihova struktura različita. Međutim, blokovi koji se nalaze u JASP-u mogu se smatrati karakterističnim za većinu procesora.

2.4. Računarski sistem Kao što je već rečeno, procesor izvršava kompjuterski program, koji predstavlja skup mašinskih instrukcija kojima korisnik opisuje zadatke koje daje računaru. Međutim, program nije smešten u procesoru. Program je smešten u memoriji. Instrukcije i podaci definisani u okviru programa nalaze se u memorijskim lokacijama i procesor im selektivno pristupa.

Računar sa memorisanim programom

Procesor koji je odgovarajućim magistralama povezan sa memorijom predstavlja računarski sistem. Sistem sa slike se naziva računar sa memorisanim programom (eng. Stored program computer). Ovakav sistem često se naziva i von Neumann-ov računar, po matematičaru John von Neumann-u koji je još 1945. razvio ovu strukturu na Prinston Institutu za napredne nauke. Još uvek je osnova za gotovo sve računare i do današnjih dana.

adrese

Instrukcije i podaci

memorija

instrukcije

podaci

procesor

registri

Page 14: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

13

3. REGISTRI

Registar čini grupa elemenata za pamćenje iz koje se može čitati ili u koju se može vršiti upis. Takođe, između bitova registra može postojati logička veza kojom se realizuju određene transformacije nad podacima. Na primer, pomerački registar (eng. shift register) sadrži logiku kojom se ostvaruje cirkulacija sadržaja među memorijskim elementima. Brojači (eng. counters) su registri koji sadrže dodatnu logiku kojom se obezbeđuje da sadržaj registra prolazi kroz unapred definisanu sekvencu stanja. Ako se ova stanja interpretiraju kao binarni ili BCD broj, sekvenca stanja se može povećavati (brojač broji naviše - inkrementiranje) ili smanjivati (brojač koji broji naniže - dekrementiranje).

3.1. Registri JASP-a

Kao što se može videti na blok šemi (slika 5) JASP sadrži 12 registara, od kojih se 3 nalaze u sastavu aritmetičko logičke jedinice (ALU). Svi registri su 16-bitni.

Registar Opis

A Registar opšte namene A – čuva podatak za tekuću naredbu

B Registar opšte namene B – čuva podatak za tekuću naredbu

ALUx Registar X aritmetičko-logičke jedinice – čuva podatak nad kojim će se izvršiti operacija u ALU

ALUy Registar Y aritmetičko-logičke jedinice – čuva podatak nad kojim će se izvršiti operacija u ALU

ALUr Registar R aritmetičko-logičke jedinice – prihvata rezultat operacije izvršene u ALU

PC Programski brojač (eng. Program Counter) – u njemu se nalazi adresa sledeće instrukcije koju treba izvršiti

INC Inkrementer (eng. Incrementer) – prihvata sadržaj programskog brojača i uvećava ga za jedan.

MAR Memorijsko adresni registar (eng. Memory Address Register) – čuva adresu memorijske lokacije iz koje se čita ili u koji se upisuje podatak.

Page 15: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

14

MDR Prihvatni registar memorije (eng. Memory Data Register) – čuva podatak koji se čita iz adresirane lokacije.

SP Pokazivač magacina (eng. Stack Pointer) – čuva adresu vrha (eng. Top of the Stack – TOS) memorijskog bloka magacin (eng. Stack).

IR Instrukcioni registar (eng. Instruction Register) – čuva instrukciju koja se tekuće izvršava

PSR Procesorsko statusni registar (eng. Processor Status Register) – čuva i označava stanje procesorskog sistema.

3.1.1. Registri opšte namene (A i B)

Uloga registara opšte namene A i B je prihvatanje podataka koji se zatim predaju funkcionalnim jedinicama koje sa tim podacima manipulišu.

Na primer, ako želimo da izvršimo sabiranje brojeva 5 i 3 to ćemo obaviti na sledeći način:

MOVE #$05,A Broj 5 upisujemo u registar A MOVE #$03,B Broj 3 upisujemo u registar B ADD B,A Vrši se sabiranje sadržaja registara A i B i rezultat se smešta u registar A

U ovom primeru navedni su neposredni operandi 5 i 3, ali u registre A i B može se memorisati sadržaj memorijske lokacije, sadržaj drugog registra i slično.

3.1.2. Registri ALU (ALUx, ALUy, ALUr) Registri ALUx i ALUy su ulazni registri aritmetičko-logičke jednice (ALU). Da bi ALU obavila traženu operaciju nad određenim vrednostima te vrednosti moraju se smestiti u registre ALUx i ALUy (ili samo u ALUx). Neke operacije (kao ADD, ADC, AND, SUB) se izvršavaju nad vrednostima oba registra, dok se operacije INC, DEC, SWAP, NOT, NEG i sl. obavljaju samo nad jenim operandom i tada se odgovarajuća vrednost smešta samo u registar ALUx. Rezultat operacije ALU se smešta u izlazni registar aritmetičko-logičke jedinice ALUr, gde je dostupan za dalju manipulaciju podacima.

3.1.3. Programski brojač (PC)

Kada se pribavlja instrukcija iz memorije uvek se pretpostavlja da PC sadrži adresu naredne instrukcije koju treba pribaviti. Na primer, ako je neki program smešten u memoriju sa početkom na memorijskoj lokaciji #0000 onda PC mora sadržati vrednost #0000 pre početka operacije pribavljanja instrukcije. Samo na taj način će prva instrukcija programa biti prva instrukcija koja će biti pribavljena. Ako je program smešten u memoriju u sukcesivnim memorijiskim lokacijama onda se inkrementiranjem sadržaja progamskog brojača dolazi do lokacija naredne instrukcije programa.

Page 16: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

15

3.1.4. Inkrementer (INC) Inkrementer (eng. Incrementer) je binarni brojač koji vrednost svakog upisanog podatka

(binarni broj dužine 16 bita) uvećava za 1 (dodaje binarni broj 1). Na primer, ako u inkrementer upišemo binarni broj 4 on će zapamtiti binarni broj 5. Struktura brojača je u osnovi ista kao i struktura ostalih registara osim što inkrementer sadrži i kolo koje mu omogućava inkrementiranje.

Inkrementer se može smatrati registrom koji je dodat programskom brojaču u cilju obavljanja

jednistvene funkcije ova dva kola. Postavlja se pitanje: Zašto se koristi posebno kolo za inkrementiranje kada takvu operaciju obavlja i ALU? Odgovor leži u brzini rada. Naime, inkrementiranje vrednosti programskog brojača se obavlja vrlo često – u svakom ciklusu pribavljanja instrukcije iz memorije i neophodno je da se to obavi što je moguće brže. Korišćenjem inkrementera ažuriranje vrednosti programskog brojača se može obaviti u jednom mikroprogramskom ciklusu, dok bi korišćenje ALU zahtevalo više mikroprogramskih ciklusa (smeštanje vrednosti PC u registar ALU ALUx, odabir operacije inkrementiranje, vraćanje sadržaja iz ALUr u PC). Takođe, svako korišćenje ALU ima za posledicu promenu statusnih markera sadržanih u PSR, što dalje komplikuje ceo proces.

3.1.5. Memorijsko adresni registar (MAR) Spada u grupu adresnih registara opšte namene. U ovom registru se, u datom ciklusu, nalazi adresa memorijske lokacije čiji sadržaj čitamo ili u koju upisujemo sadržaj, u toku istog ciklusa. Znači, prilikom komunikacije sa memorijom uvek pretpostavljamo da se tražena memorijska lokacija već nalazi upisana u MAR.

3.1.6. Prihvatni registar memorije (MDR) Ovo je registar za podatke koji prima i čuva podatak pročitan iz memorije. Tako je pribavljeni podatak dostupan za dalju manipulaciju nad podacima. Drugim rečima, u MDR se nalazi instrukcija koju treba izvršiti.

3.1.7. Pokazivač magacina (SP) Magacin (eng. Stack) predstavlja memorijski blok u kojem se čuvaju neki podaci. Na vrh magacina (eng. Top Of Stack – TOS) ukazuje vrednost koja se nalazi u registru pokazivač magacina (eng. Stack Pointer – SP). Početak magacina se nalazi na unapred usvojenoj i fiksnoj adresi. Kada se obavljaju operacije nad magacinom SP se inkrementira ili dekrementira, dok svi elementi ostaju na istim memorijskim lokacijama.

3.1.8. Instrukcioni registar (IR) Instrukcioni registar predstavlja specijalizovani registar u koji se iz MDR smešta tekuća instrukcija. Ovaj registar je poseban po tome što na svom izlazu daje memorisanu instrukciju razdvojenu na opkôd i operand. Ovo je značajno jer se opkôd dalje prosleđuje upravljačkoj jednici koja ga dekodira (utvrđuje o kojoj se instrukciji zapravo radi) i na osnovu toga započinje njeno izvršenje.

Page 17: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

16

IR X X X X X X X X X X X X X X X X opkôd operand

3.1.9. Procesorsko statusni registar (PSR) Procesorsko-statusni registar je specijalizovani registar u kojem se čuvaju markeri (eng. flags) koje ALU postavlja kao rezultat izvršenja operacije, kao i markeri prekida. Za razliku od od ostalih registara ne koristi se ceo sadržaj PSR već određeni bitovi. Na sledećoj slici je prikazan raspored markera u PSR-u kod procesora JASP:

PSR - - I E - v v v - - - - V N Z C

Svaki od markera ima svoje značenje i ulogu u radu procesora. Mogu se podeliti u dve grupe: - markeri koji se odnose na mehanizam prekida i - markeri nastali kao rezultat izvršenja operacije u ALU. Markeri prekida: - I – zahtev prekida (eng. Interrupt Request) – ako je vrednost ovog bita 1 znači da postoji

zahtev za prekidom, - E – dozvola prekida (eng. Interrupt Enable) – ako je vrednost ovog bita 1 znači da su

prekidi dozvoljeni, - vvv – vektor prekida – ukazuje na to kako će procesor postupati sa prekidom (servisirati

prekid). U procesoru JASP ovaj 3-bitni vektor može imati vrednost od 0 do 7. To znači da procesor JASP može raditi sa 8 vrsta prekida. Vrednosti vektora prekida su u stvari adrese 8 memorijiskih lokacija na kojima se nalaze rutine za postupanje sa određenim prekidom.

Markeri ALU: - V – premašaj (eng. Overflow) – ovaj bit ima vrednost 1 kada ALU nije dovoljno velike

širine da prihvati rezultat, - N – negativna vrednost - ovaj bit ima vrednost 1 kada je rezultat poslednje ALU operacije

je niz bitova koji predstavljaju negativnu vrednost, - Z – nula - ovaj bit ima vrednost 1 kada je rezulta poslednje ALU operacije je niz bitova

koji predstavljaju nulu, - C – prenos (eng. carry) - bit ima vrednost 1 kada je prilikom poslednje ALU operacije

generisan bit prenosa.

3.2. VHDL opis registara

3.2.1. VHDL opis bloka reg Blok reg predstavlja 16-bitni registar, koji se u okviru izvršne jedinice koristi kao:

- registri opšte namene (A i B), - registri ALU (ALUx, ALUy i ALUr),

Page 18: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

17

- programski brojač (PC), - memorijsko adresni registar (MAR), - prihvatni registar memorije (MDR), - pokazivač magacina (SP).

Blok reg ima 3 jednobitna ulaza:

- Clk – ulaz taktnog signala (kad je =1 registar pamti sadržaj na ulazu),

- Rst – ulaz signala za resetovanje sadržaja registra na nulu, - En – ulaz za dozvolu izlaza podataka (kada je =0 registar je

otkačen sa magistrale, a kada je =1 memorisani sadržaj registra se pojavljuje na izlazu),

kao i jedan 16-bitni ulazno/izlazni port Data koji je ulaz za podatak koji se dovodi u registar, odnosno izlaz za podatak koji je već memorisan u registru. ------------------------------------------------------------------------------ -- -- Title : Registar -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity reg is port(Clk, Rst, En : in STD_LOGIC; Data : inout STD_LOGIC_VECTOR(15 downto 0)); end reg; architecture reg_arch of reg is signal DataTmp: STD_LOGIC_VECTOR(15 downto 0); begin process (Clk, Rst) begin if (Rst = '1') then DataTmp <= (others => '0'); elsif (Clk'event and Clk = '1') then DataTmp <= Data; end if; end process; Data <= DataTmp when En = '1' else (others => 'Z'); end reg_arch;

Page 19: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

18

3.2.2. VHDL opis bloka INC Blok INC predstavlja 16-bitni registar brojačkog tipa, koji se u okviru izvršne jedinice koristi kao inkrementer. Blok INC ima 3 jednobitna ulaza:

- Clk – ulaz taktnog signala (kad je =1 registar pamti sadržaj na ulazu),

- Rst – ulaz signala za resetovanje sadržaja registra na nulu, - En – ulaz za dozvolu izlaza podataka (kada je =0 registar je

otkačen sa magistrale, a kada je =1 memorisani sadržaj registra se pojavljuje na izlazu),

kao i jedan 16-bitni ulazno/izlazni port Data koji je ulaz za podatak koji se dovodi u registar, odnosno izlaz za podatak koji je već memorisan u registru. ------------------------------------------------------------------------------ -- -- Title : Inkrementer -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; entity INC is port( Clk, Rst, En : in STD_LOGIC; Data : inout STD_LOGIC_VECTOR(15 downto 0)); end INC; architecture INC_arch of INC is signal DataTmp: STD_LOGIC_VECTOR(15 downto 0); begin process (Clk, Rst) begin if (Rst = '1') then DataTmp <= (others => '0'); elsif (Clk'event and Clk = '1') then DataTmp <= Data + 1; end if; end process; Data <= DataTmp when En = '1' else (others => 'Z'); end INC_arch;

Page 20: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

19

3.2.3. VHDL opis bloka IR Blok IR predstavlja 16-bitni registar brojačkog tipa, koji se u okviru izvršne jedinice koristi kao instrukcioni registar. Blok IR ima sledeće portove:

- Clk – ulaz taktnog signala (kad je =1 registar pamti sadržaj na ulazu),

- Rst – ulaz signala za resetovanje sadržaja registra na nulu, - En – ulaz za dozvolu izlaza podataka (kada je =0 registar je

otkačen sa magistrale, a kada je =1 memorisani sadržaj registra se pojavljuje na izlazu),

- 16-bitni ulaz IRin – ulaz na koji se dovodi instrukcija, - 8-bitni izlaz opcode – izlaz opkoda instrukcije, usmeren ka

upravljačkoj jednici, - 8-bitni izlaz operand – izlaz operanda instrukcije.

------------------------------------------------------------------------------ -- -- Title : IR -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity IR is port( Clk, Rst, En : in STD_LOGIC; IRin : in STD_LOGIC_VECTOR(15 downto 0); opcode : out STD_LOGIC_VECTOR(7 downto 0); operand : out STD_LOGIC_VECTOR(7 downto 0)); end IR; architecture IR_arch of IR is signal IRtmp: STD_LOGIC_VECTOR(15 downto 0); begin process (Clk, Rst) begin if (Rst = '1') then IRtmp <= (others => '0'); elsif (Clk'event and Clk = '1') then IRtmp <= IRin; end if; end process; opcode <= IRtmp(15 downto 8) when En = '1' else (others => 'Z'); operand <= IRtmp(7 downto 0) when En = '1' else (others => 'Z'); end IR_arch;

Page 21: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

20

3.2.4. VHDL opis bloka ProsOper (Blok za proširenje operanda) Blok za proširenje operanda nije registar, ali je u funkcionalnom smislu pridruženo kolo registru IR. Uloga bloka za proširenje je da od 8-bitnog binarnog broja koji predstavlja operand, dobijen deljenjem instrukcije u IR, generiše 16-bitni broj iste vrednosti, kojim se može dalje manipulisati.

Proces proširenja se može obaviti na dva načina: - proširenjem nulama i - proširenjem znakom.

Proširenje nulama – ispred operanda se dodaje 8-bitna binarna nula, kao na slici:

X X X X X X X X

↓ 0 0 0 0 0 0 0 0 X X X X X X X X

Proširenje znakom – ispred operanda se dodaje 8-bitna nula ili jednica u zavisnosti od znaka operanda (tj. od bita najveće težine).

0 X X X X X X X

↓ 0 0 0 0 0 0 0 0 0 X X X X X X X

1 X X X X X X X

↓ 1 1 1 1 1 1 1 1 1 X X X X X X X

Blok ProsOper ima sledeće portove:

- 8-bitni ulaz Oper – ulaz operanda iz instrukcionog registra,

- jednobitni ulaz znak – kontrolni signal (ako je =0 proširuje se nulama, ako je =1 proširuje se znakom),

- 16-bitni izlaz Operand – izlaz proširene vrednosti operanda.

------------------------------------------------------------------------------

Page 22: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

21

-- -- Title : ProsOper -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ProsOper is port(znak : in STD_LOGIC; Oper : in STD_LOGIC_VECTOR(7 downto 0); Operand : out STD_LOGIC_VECTOR(15 downto 0)); end ProsOper; architecture ProsOper_arch of ProsOper is begin process (znak, Oper) begin if (znak = '0') then Operand <= "00000000" & Oper; elsif (znak = '1') then if (Oper(7) = '1') then Operand <= "11111111" & Oper; elsif (Oper(7) = '0') then Operand <= "00000000" & Oper; end if; end if; end process; end ProsOper_arch;

3.2.5. VHDL opis bloka PSR Blok PSR se u okviru izvršne jedinice koristi kao procesorsko-statusni registar. Blok PSR ima sledeće portove:

- jednobitni ulaz Clk – taktni signal registra, - jednobitni ulaz Rst – signal reseta sadržaja registra, - jednobitne ulaze C, N, V, Z – statusni markeri iz bloka ALU, - jednobitne ulaze I, E – markeri prekida, - 16-bitni ulaz IntVec – ulaz za vektor prekida. Ovaj ulaz je 16-

bitni jer je vezan na magistralu podataka, ali PSR pamti samo prva tri bita (tri bita najmanje težine) podatka koji se dovodi,

- jednobitni ulaz PSRSel – selektorski signal kojim se određuje da li će se na izlazu PSR pojaviti ceo sadržaj registra ili samo proširena 16-bitna vrednost vektora prekida. Vektor prekida je adresa memorijske lokacije u kojoj se nalaze interuppt handler-i i proširuje se sa "0000000011110" jer adresira

Page 23: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

22

određenih sedan lokacija memorije čije su adrese od (00F0)hex do (00F7)hex. To se može videti u mapi memorije u poglavlju 7. Memorija.

- jednobitne izlaze PSRC, PSRN, PRSV, PRSZ – izlazi zapamćenih vrednosti markera ALU,

- jednobitne izlaze PSRE, PSRI – izlazi zapamćenih vrednosti markera prekida, - 16-bitni izlaz PSRout – izlaz za podatke ragistra PSR.

------------------------------------------------------------------------------ -- -- Title : PSR -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ -- Sadrzaj PSR "--IE-vvv----VNZC" -- vvv je IntVec (Interuppt Vector) library IEEE; use IEEE.STD_LOGIC_1164.all; entity PSR is port(Clk, Rst,En, I, E, V, N, Z, C, PSRSel : in STD_LOGIC; IntVec : in STD_LOGIC_VECTOR(15 downto 0); PSRI, PSRE, PSRV, PSRN, PSRZ, PSRC : out STD_LOGIC; PSRout : out STD_LOGIC_VECTOR(15 downto 0)); end PSR; architecture PSR_arch of PSR is signal Itmp, Etmp, Vtmp, Ztmp, Ntmp, Ctmp : STD_LOGIC; signal IntVectmp : STD_LOGIC_VECTOR(15 downto 0); signal PSRtmp : STD_LOGIC_VECTOR(15 downto 0); begin process (Clk, Rst ) begin if (Rst = '1') then Itmp <= '0'; Etmp <= '0'; Vtmp <= '0'; Ztmp <= '0'; Ntmp <= '0'; Ctmp <= '0'; IntVectmp <= (others => '0'); elsif (Clk'event and Clk = '1') then Itmp <= I; Etmp <= E; Vtmp <= V; Ztmp <= Z; Ntmp <= N; Ctmp <= C; IntVectmp <= "0000000011110" & IntVec(2 downto 0); end if; end process;

Page 24: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

23

process (PSRSel, En) begin if(PSRSel = '1' and En = '1') then PSRout <= IntVectmp; elsif (PSRSel = '0' and En = '1')then PSRout <= "00" & Itmp & Etmp & '0' & IntVectmp & "0000" & Vtmp & Ntmp & Ztmp & Ctmp; elsif (En = '0') then PSRout <= (others => 'Z'); end if; end process; PSRI <= Itmp; PSRE <= Etmp; PSRV <= Vtmp; PSRZ <= Ztmp; PSRN <= Ntmp; PSRc <= Ctmp; end PSR_arch;

Page 25: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

24

4. ARITMETIČKO-LOGIČKA JEDINICA Aritmetičko-logička jedinica (eng. Arithmetic Logic Unit – ALU) je deo procesora zadužen za obradu podataka. ALU, kao što mu i ime govori, izvršava aritmetičke i logičke operacije nad podacima. U aritmetičke operacije spadaju binarno sabiranje i oduzimanje, dok su logičke operacije I, ILI ili NE operacije. Na sledećoj slici nalazi se blok šema unutrašnjosti aritmetičko-logičke jednice procesora JASP.

ALU čine nekoliko osnovnih komponeneta:

- registri ALU – ALUx, ALUy, ALUr – registri u kojima se čuvaju podaci sa kojima se vrši operacija, kao i rezultat operacije,

- kolo za spregu sa magistralom – DBC (eng. Data Bus Conection) – kolo pomoću kojeg registru selektivno pristupaju magistrali za podatke,

- aritmetičko-logička kola –ALK – skup kola koja obavljaju aritmetičke i logičke operacije, kao i kolo kojim se vrši selekcija operacije.

Page 26: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

25

4.1. Aritmetičko-logička kola Artimetičko-logička jedinica, kao što joj ime govori, je sposobna da obavlja aritmetičke i logičke operacije nad binarnim brojevima. Za svaku aritmetičku i logičku operaciju projektovano je posebno kolo, a skup tih kola zajedno sa kolom pomoću kojeg se vrši izbor željene operacije čine blok Aritmetičko-logička kola (ALK). U sledećoj tabeli prikazane su operacije koje podržava aritmetičko-logička jednica procesora JASP:

ALUsel Operacija RTL Opis

0000 ADD ALUr=[ALUx]+[ALUy] Sabiranje u dvojičnom komplementu. Sadržaj ALUx i ALUy se sabiraju i rezultat se smešta u ALUr

0001 ADC ALUr=[ALUx]+[ALUy]+[PSR(c)] Sabiranje u dvojičnom komplementu. Sadržaj ALUx i ALUy i marker C se sabiraju i rezultat se smešta u ALUr

0010 SUB ALUr=[ALUx]-[ALUy] Oduzimanje u dvojičnom komplementu. Sadržaj ALUx i ALUy se oduzimaju i rezultat se smešta u ALUr

0011 SL ALUr=[ALUx]<<1 Logičko pomeranje sadržaja ALUx u levo i smeštanje rezultata u ALUr

0100 SR ALUr=[ALUx]>>1 Logičko pomeranje sadržaja ALUx u desno i smeštanje rezultata u ALUr

0101 AND ALUr=[ALUx]&[ALUy] Izvodi se logička operacija I nad bitovima ALUx i ALUy i rezultat se smešta u ALUr

0110 OR ALUr=[ALUx]|[ALUy] Izvodi se logička operacija ILI nad bitovima ALUx i ALUy i rezultat se smešta u ALUr

0111 NOT ALUr=~[ALUx] Izvodi se logička operacija NE nad bitovima ALUx i rezultat se smešta u ALUr

1000 NEG ALUr=~[ALUx]+1 Izvodi se komplementiranje u dvojičnom komplementu nad ALUx i rezultat se smešta u ALUr

1001 INC ALUr=[ALUx]+1 Dodaje se 1 sadržaju ALUx i rezultat se smešta u ALUr

1010 DEC ALUr=[ALUx]-1 Oduzima se 1 od sadržaja ALUx i rezultat se smešta u ALUr

1011 SWAP ALUr(7:0)=[ALUx(15:8)] ALUr(15:8)=[ALUx(7:0)]

Zamena mesta bajta najveće težine sa bajtom najmanje težine i rezultat se smešta u ALUr

Page 27: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

26

Da bi se u VHDL-u mogao opisati blok ALK potrebno je pre toga opasati sve komponente koje ga sačinjavaju.

4.2 VHDL opis aritmetičkih i logičkih kola ALU

4.2.1. VHDL opis bloka Potpuni sabirač (FA) Potpuni sabirač (eng. Full Adder) je gradivni element svih aritmetičkih kola koje vrše operacije u dvojičnom komplementu. Potpuni sabirač je kolo koje vrši sabiranje u dvojičnom komplementu generišući zbir i bit prenosa. Na sledećim slikama prikazana je logička šema potpunog sabirača koji sabira dva bita, kao i tbaloca istinitosti ovog kola.

U našem slučaju je potrebno izvršiti sabiranje 16-bitnih brojeva. Tada se 16 potpunih sabirača vezuje u rednu vezu, tako što će izlaz CarryOut prvog sabirača biti vezan na CarryIn ulaz drugog itd. Blok FA ima sledeće portove:

- FAin – 3-bitni ulaz čiji bitovi predstavljaju ulaze X, Y i carryIn na sledeći način: FAin(2)=X, Fain(1)=Y, Fain(0)=Cin,

- Cout – jednobitni izlaz bita prenosa,

X Y Cin S Cout

0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1

Page 28: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

27

- S – izlaz rezultata, odnosno zbira. ------------------------------------------------------------------------------ -- -- Title : FA – Full Adder -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ -- FAin(2)=X, Fain(1)=Y, Fain(0)=Cin library IEEE; use IEEE.STD_LOGIC_1164.all; entity FA is port(FAin : in STD_LOGIC_VECTOR(2 downto 0); S, Cout : out STD_LOGIC); end FA; architecture FA_arch of FA is begin process ( FAin ) begin if FAin = "000" then S <= '0'; Cout <= '0'; elsif FAin = "001" or FAin = "010" or FAin = "100" then S <= '1'; Cout <= '0'; elsif FAin = "011" or FAin = "101" or FAin = "110" then S <= '0'; Cout <= '1'; elsif FAin = "111" then S <= '1'; Cout <= '1'; end if; end process; end FA_arch;

4.2.2. VHDL opis bloka ALUADD Blokom ALUADD opisano je kolo koje izvršava operaciju ADD. Blok ALUADD ima sledeće portove:

- jednobitni ulaz En – signal dozvole, - 16-bitni ulaz X – ulaz podataka, - 16-bitni ulaz Y – ulaz podataka,

Page 29: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

28

- jednobitne izlaze C, N, V, Z – signali markera generisani u toku operacije, - 16-bitni izlaz R – izlaz rezultata operacije.

------------------------------------------------------------------------------ -- -- Title : ALUADD -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALUADD is port( En : in STD_LOGIC; X, Y : in STD_LOGIC_VECTOR(15 downto 0); Z, N, V, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end ALUADD; architecture ALUADD_arch of ALUADD is component FA is port (FAin : in STD_LOGIC_VECTOR(2 downto 0); S, Cout : out STD_LOGIC); end component FA; signal Ztmp, Vtmp : STD_LOGIC; signal S : STD_LOGIC_VECTOR (15 downto 0); signal CoutTmp : STD_LOGIC_VECTOR(15 downto 0); begin F0: for i in 0 to 15 generate F1: if i = 0 generate FA0:FA port map ( FAin(0) => '0', FAin(1) => Y(i), FAin(2) => X(i), Cout => CoutTmp(i), S => S(i)); end generate; F2: if i >= 1 and i <= 15 generate FA1:FA port map ( FAin(0) => CoutTmp(i-1), FAin(1) => Y(i), FAin(2) => X(i), Cout => CoutTmp(i), S => S(i)); end generate; end generate; Vflag: process ( X(15), Y(15), S(15) ) begin if X(15)='0' and Y(15)='0' and S(15)='1' then Vtmp <= '1'; elsif X(15)='1' and Y(15)='1' and S(15)='0' then Vtmp <= '1'; else Vtmp <= '0'; end if; end process Vflag;

Page 30: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

29

Zflag: process ( S ) begin if S="0000000000000000" then Ztmp <= '1'; else Ztmp <= '0'; end if; end process Zflag; Z <= Ztmp when En='1' else 'Z'; V <= Vtmp when En='1' else 'Z'; C <= CoutTmp(15) when En='1' else 'Z'; N <= S(15) when En='1' else 'Z'; R <= S when En='1' else "ZZZZZZZZZZZZZZZZ"; end ALUADD_arch;

4.2.3. VHDL opis bloka ALUADC Blokom ALUADC opisano je kolo koje izvršava operaciju ADC. Blok ALUADC ima sledeće portove:

- jednobitni ulaz En – signal dozvole, - jednobitni ulaz PSRc – ulaz markera C iz registra PSR, - 16-bitni ulaz X – ulaz podataka, - 16-bitni ulaz Y – ulaz podataka, - jednobitne izlaze C, N, V, Z – signali markera generisani u

toku operacije, - 16-bitni izlaz R – izlaz rezultata operacije.

------------------------------------------------------------------------------ -- -- Title : ALUADC -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALUADC is port( En, PSRc : in STD_LOGIC; X, Y : in STD_LOGIC_VECTOR(15 downto 0); V, Z, N, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end ALUADC; architecture ALUADC_arch of ALUADC is component FA is port (

Page 31: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

30

FAin : in STD_LOGIC_VECTOR(2 downto 0); S, Cout : out STD_LOGIC); end component FA; signal Ztmp, Vtmp : STD_LOGIC; signal S : STD_LOGIC_VECTOR (15 downto 0); signal CoutTmp : STD_LOGIC_VECTOR(15 downto 0); begin F0: for i in 0 to 15 generate F1: if i = 0 generate FA0:FA port map ( FAin(0) => PSRc, FAin(1) => Y(i), FAin(2) => X(i), Cout => CoutTmp(i), S => S(i)); end generate; F2: if i >= 1 and i <= 15 generate FA1:FA port map ( FAin(0) => CoutTmp(i-1), FAin(1) => Y(i), FAin(2) => X(i), Cout => CoutTmp(i), S => S(i)); end generate; end generate; Vflag: process ( X(15), Y(15), S(15) ) begin if X(15)='0' and Y(15)='0' and S(15)='1' then Vtmp <= '1'; elsif X(15)='1' and Y(15)='1' and S(15)='0' then Vtmp <= '1'; else Vtmp <= '0'; end if; end process Vflag; Zflag: process ( S ) begin if S="0000000000000000" then Ztmp <= '1'; else Ztmp <= '0'; end if; end process Zflag; Z <= Ztmp when En='1' else 'Z'; V <= Vtmp when En='1' else 'Z'; C <= CoutTmp(15) when En='1' else 'Z'; N <= S(15) when En='1' else 'Z'; R <= S when En='1' else "ZZZZZZZZZZZZZZZZ"; end ALUADC_arch;

4.2.4. VHDL opis bloka KOMP (Kolo za komplementiranje) Kolo za komplementiranje je sastavni deo kola ALUSUB. Ovo kolo vrši komplementiranje u dvojičnom komplementu 16-bitnog binarnog broja.

Page 32: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

31

------------------------------------------------------------------------------ -- -- Title : KOMP -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity KOMP is port( A : in STD_LOGIC_VECTOR(15 downto 0); B : out STD_LOGIC_VECTOR(15 downto 0)); end KOMP; architecture KOMP_arch of KOMP is component FA is port ( FAin : in STD_LOGIC_VECTOR(2 downto 0); S, Cout : out STD_LOGIC); end component FA; signal notA, CoutTmp : STD_LOGIC_VECTOR(15 downto 0); begin NOTop: for i in 0 to 15 generate notA(i) <= not (A(i)) ; end generate NOTop; F0: for i in 0 to 15 generate F1: if i = 0 generate FA0:FA port map ( FAin(0) => '1', FAin(1) => notA(i), FAin(2) => '0', Cout => CoutTmp(i), S => B(i)); end generate; F2: if i >= 1 and i <= 15 generate FA1:FA port map ( FAin(0) => CoutTmp(i-1), FAin(1) => notA(i), FAin(2) => '0', Cout => CoutTmp(i), S => B(i)); end generate; end generate F0; end KOMP_arch;

4.2.5. VHDL opis bloka ALUSUB Blokom ALUSUB opisano je kolo koje izvršava operaciju SUB i izvršava aritmetičku operaciju oduzimanja. Ono je sastavljeno od prethodno opisanih kola KOMP i ALUADD. Princip oduzimanja je sledeći: na ulaz X dovodi se umanjenik, a na ulaz Y umanjilac. Blokom KOMP se vrši

Page 33: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

32

komplementiranje vrednosti Y (promena znaka), a zatim se vrši sabiranje. Na sledećoj slici prikazan je način povezivanja KOMP i ALUADD u okviru ALUSUB:

Blok ALUSUB ima sledeće portove:

- jednobitni ulaz En – signal dozvole, - 16-bitni ulaz X – ulaz podataka, - 16-bitni ulaz Y – ulaz podataka, - jednobitne izlaze C, N, V, Z – signali markera generisani u toku

operacije, 16-bitni izlaz R – izlaz rezultata operacije. ------------------------------------------------------------------------------ -- -- Title : ALUSUB -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALUSUB is port( En : in STD_LOGIC; X, Y : in STD_LOGIC_VECTOR(15 downto 0); V, Z, N, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end ALUSUB; architecture ALUSUB_arch of ALUSUB is component ALUADD port ( En : in STD_LOGIC; X, Y : in STD_LOGIC_VECTOR(15 downto 0); V, Z, N, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component; component KOMP port ( A : in STD_LOGIC_VECTOR(15 downto 0);

Page 34: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

33

B : out STD_LOGIC_VECTOR(15 downto 0)); end component; signal notY : STD_LOGIC_VECTOR (15 downto 0); begin Kompl : KOMP port map(A => Y, B => notY ); Adder : ALUADD port map(X => X, Y => notY, En => En, N => N, R => R, V => V, Z => Z, C => C); end ALUSUB_arch;

4.2.6. VHDL opis bloka ALUSL

Blokom ALUSL opisano je kolo koje izvršava operaciju SL (eng. Shift Left). Blok ALUSL ima sledeće portove:

- jednobitni ulaz En – signal dozvole, - 16-bitni ulaz X – ulaz podataka, - jednobitne izlaze C, N, V, Z – signali markera generisani u

toku operacije, - 16-bitni izlaz R – izlaz rezultata operacije.

------------------------------------------------------------------------------ -- -- Title : ALUSL -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALUSL is port( En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); V, Z, N, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0) ); end ALUSL; architecture ALUSL_arch of ALUSL is signal Rtmp : STD_LOGIC_VECTOR(15 downto 0); signal Ztmp : STD_LOGIC; begin

Page 35: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

34

SL: for i in 0 to 15 generate SL0: if i=0 generate Rtmp(i) <= '0'; end generate; SL1: if i >= 1 and i <= 15 generate Rtmp(i) <= X(i-1); end generate; end generate; Zflag: process ( Rtmp ) begin if Rtmp="0000000000000000" then Ztmp <= '1'; else Ztmp <= '0'; end if; end process Zflag; N <= X(14) when En = '1' else 'Z'; C <= X(15) when En = '1' else 'Z'; Z <= Ztmp when En = '1' else 'Z'; V <= '0' when En = '1' else 'Z'; R <= Rtmp when En = '1' else "ZZZZZZZZZZZZZZZZ"; end ALUSL_arch;

4.2.7. VHDL opis bloka ALUSR

Blokom ALUSR opisano je kolo koje izvršava operaciju SR (eng. Shift Right). Blok ALUSR ima sledeće portove:

- jednobitni ulaz En – signal dozvole, - 16-bitni ulaz X – ulaz podataka, - jednobitne izlaze C, N, V, Z – signali markera generisani u

toku operacije, - 16-bitni izlaz R – izlaz rezultata operacije.

------------------------------------------------------------------------------ -- -- Title : ALUSR -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALUSR is port(

Page 36: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

35

En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); V, Z, N, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0) ); end ALUSR; architecture ALUSR_arch of ALUSR is signal Rtmp : STD_LOGIC_VECTOR(15 downto 0); signal Ztmp : STD_LOGIC; begin SR: for i in 0 to 15 generate SR0: if i >= 0 and i <= 14 generate Rtmp(i) <= X(i+1); end generate; SR1: if i=15 generate Rtmp(i) <= '0'; end generate; end generate; Zflag: process ( Rtmp ) begin if Rtmp="0000000000000000" then Ztmp <= '1'; else Ztmp <= '0'; end if; end process Zflag; N <= Rtmp(15) when En = '1' else 'Z'; C <= X(0) when En = '1' else 'Z'; Z <= Ztmp when En = '1' else 'Z'; V <= '0' when En = '1' else 'Z'; R <= Rtmp when En = '1' else "ZZZZZZZZZZZZZZZZ"; end ALUSR_arch;

4.2.8. VHDL opis bloka ALUAND Blokom ALUAND opisano je kolo koje izvršava operaciju AND (logičko I). Blok ALUAND ima sledeće portove:

- jednobitni ulaz En – signal dozvole, - 16-bitni ulaz X – ulaz podataka, - 16-bitni ulaz Y – ulaz podataka, - jednobitne izlaze C, N, V, Z – signali markera generisani u

toku operacije, - 16-bitni izlaz R – izlaz rezultata operacije.

Page 37: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

36

------------------------------------------------------------------------------ -- -- Title : ALUAND -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALUAND is port( En : in STD_LOGIC; X, Y : in STD_LOGIC_VECTOR(15 downto 0); Z, N, V, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end ALUAND; architecture ALUAND_arch of ALUAND is signal Rtmp : STD_LOGIC_VECTOR(15 downto 0); signal Ztmp : STD_LOGIC; begin ANDop: for i in 0 to 15 generate Rtmp(i) <= X(i) and Y(i); end generate; Zflag: process ( Rtmp ) begin if Rtmp="0000000000000000" then Ztmp <= '1'; else Ztmp <= '0'; end if; end process Zflag; N <= Rtmp(15) when En = '1' else 'Z'; C <= '0' when En = '1' else 'Z'; Z <= Ztmp when En = '1' else 'Z'; V <= '0' when En = '1' else 'Z'; R <= Rtmp when En = '1' else "ZZZZZZZZZZZZZZZZ"; end ALUAND_arch;

4.2.9. VHDL opis bloka ALUOR Blokom ALUOR opisano je kolo koje izvršava operaciju OR (logičko ILI). Blok ALUOR ima sledeće portove:

- jednobitni ulaz En – signal dozvole,

Page 38: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

37

- 16-bitni ulaz X – ulaz podataka, - 16-bitni ulaz Y – ulaz podataka, - jednobitne izlaze C, N, V, Z – signali markera generisani u toku operacije, - 16-bitni izlaz R – izlaz rezultata operacije.

------------------------------------------------------------------------------ -- -- Title : ALUOR -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALUOR is port( En : in STD_LOGIC; X, Y : in STD_LOGIC_VECTOR(15 downto 0); V, Z, N, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end ALUOR; architecture ALUOR_arch of ALUOR is signal Rtmp : STD_LOGIC_VECTOR(15 downto 0); signal Ztmp : STD_LOGIC; begin ORop: for i in 0 to 15 generate Rtmp(i) <= X(i) or Y(i); end generate; Zflag: process ( Rtmp ) begin if Rtmp="0000000000000000" then Ztmp <= '1'; else Ztmp <= '0'; end if; end process Zflag; N <= Rtmp(15) when En = '1' else 'Z'; C <= '0' when En = '1' else 'Z'; Z <= Ztmp when En = '1' else 'Z'; V <= '0' when En = '1' else 'Z'; R <= Rtmp when En = '1' else "ZZZZZZZZZZZZZZZZ"; end ALUOR_arch;

Page 39: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

38

4.2.10. VHDL opis bloka ALUNOT Blokom ALUNOT opisano je kolo koje izvršava operaciju NOT (logičko NE). Blok ALUNOT ima sledeće portove:

- jednobitni ulaz En – signal dozvole, - 16-bitni ulaz X – ulaz podataka, - jednobitne izlaze C, N, V, Z – signali markera generisani u toku

operacije, - 16-bitni izlaz R – izlaz rezultata operacije.

------------------------------------------------------------------------------ -- -- Title : ALUNOT -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALUNOT is port( En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); V, Z, N, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end ALUNOT; architecture ALUNOT_arch of ALUNOT is signal Rtmp : STD_LOGIC_VECTOR(15 downto 0); signal Ztmp : STD_LOGIC; begin NOTop: for i in 0 to 15 generate Rtmp(i) <= not (X(i)) ; end generate; Zflag: process ( Rtmp ) begin if Rtmp="0000000000000000" then Ztmp <= '1'; else Ztmp <= '0'; end if; end process Zflag; N <= Rtmp(15) when En = '1' else 'Z'; C <= '0' when En = '1' else 'Z'; Z <= Ztmp when En = '1' else 'Z'; V <= '0' when En = '1' else 'Z';

Page 40: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

39

R <= Rtmp when En = '1' else "ZZZZZZZZZZZZZZZZ"; end ALUNOT_arch;

4.2.11. VHDL opis bloka ALUNEG Blokom ALUNEG opisano je kolo koje izvršava operaciju NEG. Blok ALUNEG ima sledeće portove:

- jednobitni ulaz En – signal dozvole, - 16-bitni ulaz X – ulaz podataka, - jednobitne izlaze C, N, V, Z – signali markera generisani u

toku operacije, - 16-bitni izlaz R – izlaz rezultata operacije.

------------------------------------------------------------------------------ -- -- Title : ALUNEG -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALUNEG is port( En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); Z, N, V, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0) ); end ALUNEG; architecture ALUNEG_arch of ALUNEG is component FA is port ( FAin : in STD_LOGIC_VECTOR(2 downto 0); S, Cout : out STD_LOGIC); end component FA; signal notX : STD_LOGIC_VECTOR(15 downto 0); signal S : STD_LOGIC_VECTOR(15 downto 0); signal CoutTmp : STD_LOGIC_VECTOR(15 downto 0); signal Ztmp, Vtmp : STD_LOGIC; begin NOTop: for i in 0 to 15 generate notX(i) <= not (X(i)) ;

Page 41: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

40

end generate; F0: for i in 0 to 15 generate F1: if i = 0 generate FA0:FA port map ( FAin(0) => '1', FAin(1) => notX(i), FAin(2) => '0', Cout => CoutTmp(i), S => S(i)); end generate; F2: if i >= 1 and i <= 15 generate FA1:FA port map ( FAin(0) => CoutTmp(i-1), FAin(1) => notX(i), FAin(2) => '0', Cout => CoutTmp(i), S => S(i)); end generate; end generate; Vflag: process ( X(15), S(15) ) begin if X(15)='1' and S(15)='1' then Vtmp <= '1'; else Vtmp <= '0'; end if; end process Vflag; Zflag: process ( S ) begin if S="0000000000000000" then Ztmp <= '1'; else Ztmp <= '0'; end if; end process Zflag; N <= S(15) when En = '1' else 'Z'; V <= Vtmp when En='1' else 'Z'; Z <= Ztmp when En = '1' else 'Z'; C <= CoutTmp(15) when En = '1' else 'Z'; R <= S when En = '1' else "ZZZZZZZZZZZZZZZZ"; end ALUNEG_arch;

4.2.12. VHDL opis bloka ALUINC Blokom ALUINC opisano je kolo koje izvršava operaciju INC (inkrementiranje). Blok ALUINC ima sledeće portove:

- jednobitni ulaz En – signal dozvole, - 16-bitni ulaz X – ulaz podataka, - jednobitne izlaze C, N, V, Z – signali markera generisani u

toku operacije, - 16-bitni izlaz R – izlaz rezultata operacije.

------------------------------------------------------------------------------

Page 42: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

41

-- -- Title : ALUINC -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALUINC is port( En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); V, Z, N, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end ALUINC; architecture ALUINC_arch of ALUINC is component FA is port ( FAin : in STD_LOGIC_VECTOR(2 downto 0); S, Cout : out STD_LOGIC); end component FA; signal Ztmp, Vtmp : STD_LOGIC; signal S, CoutTmp : STD_LOGIC_VECTOR (15 downto 0); begin F0: for i in 0 to 15 generate F1: if i = 0 generate FA0:FA port map ( FAin(0) => '1', FAin(1) => X(i), FAin(2) => '0', Cout => CoutTmp(i), S => S(i)); end generate; F2: if i >= 1 and i <= 15 generate FA1:FA port map ( FAin(0) => CoutTmp(i-1), FAin(1) => X(i), FAin(2) => '0', Cout => CoutTmp(i), S => S(i)); end generate; end generate; Vflag: process ( X(15), S(15) ) begin if X(15)='1' and S(15)='1' then Vtmp <= '1'; else Vtmp <= '0'; end if; end process Vflag; Zflag: process ( S ) begin if S="0000000000000000" then Ztmp <= '1'; else Ztmp <= '0'; end if; end process Zflag; N <= S(15) when En = '1' else 'Z';

Page 43: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

42

V <= Vtmp when En='1' else 'Z'; Z <= Ztmp when En = '1' else 'Z'; C <= CoutTmp(15) when En = '1' else 'Z'; R <= S when En = '1' else "ZZZZZZZZZZZZZZZZ"; end ALUINC_arch;

4.2.13. VHDL opis bloka ALUDEC Blokom ALUDEC opisano je kolo koje izvršava operaciju DEC (dekrementiranje). Blok ALUDEC ima sledeće portove:

- jednobitni ulaz En – signal dozvole, - 16-bitni ulaz X – ulaz podataka, - jednobitne izlaze C, N, V, Z – signali markera generisani u

toku operacije, - 16-bitni izlaz R – izlaz rezultata operacije.

------------------------------------------------------------------------------ -- -- Title : ALUDEC -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALUDEC is port( En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); V, Z, N, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end ALUDEC; architecture ALUDEC_arch of ALUDEC is component FA is port ( FAin : in STD_LOGIC_VECTOR(2 downto 0); S, Cout : out STD_LOGIC); end component FA; signal Ztmp, Vtmp : STD_LOGIC; signal S, CoutTmp : STD_LOGIC_VECTOR (15 downto 0);

Page 44: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

43

begin F0: for i in 0 to 15 generate F1: if i = 0 generate FA0:FA port map ( FAin(0) => '0', FAin(1) => X(i), FAin(2) => '1', Cout => CoutTmp(i), S => S(i)); end generate; F2: if i >= 1 and i <= 15 generate FA1:FA port map ( FAin(0) => CoutTmp(i-1), FAin(1) => X(i), FAin(2) => '1', Cout => CoutTmp(i), S => S(i)); end generate; end generate; Vflag: process ( X(15), S(15) ) begin if X(15)='1' and S(15)='1' then Vtmp <= '1'; else Vtmp <= '0'; end if; end process Vflag; Zflag: process ( S ) begin if S="0000000000000000" then Ztmp <= '1'; else Ztmp <= '0'; end if; end process Zflag; N <= S(15) when En = '1' else 'Z'; V <= Vtmp when En='1' else 'Z'; Z <= Ztmp when En = '1' else 'Z'; C <= CoutTmp(15) when En = '1' else 'Z'; R <= S when En = '1' else "ZZZZZZZZZZZZZZZZ"; end ALUDEC_arch;

4.2.14. VHDL opis bloka ALUSWAP Blokom ALUSWAP opisano je kolo koje izvršava operaciju SWAP (zamena mesta). Blok ALUSWAP ima sledeće portove:

- jednobitni ulaz En – signal dozvole, - 16-bitni ulaz X – ulaz podataka, - jednobitne izlaze C, N, V, Z – signali markera generisani u

toku operacije, - 16-bitni izlaz R – izlaz rezultata operacije.

------------------------------------------------------------------------------

Page 45: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

44

-- -- Title : ALUSWAP -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALUSWAP is port( En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); V, Z, N, C : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end ALUSWAP; architecture ALUSWAP_arch of ALUSWAP is signal Rtmp : STD_LOGIC_VECTOR(15 downto 0); signal Ztmp : STD_LOGIC; begin Rtmp(7 downto 0) <= X(15 downto 8); Rtmp(15 downto 8) <= X(7 downto 0); Zflag: process ( Rtmp ) begin if Rtmp="0000000000000000" then Ztmp <= '1'; else Ztmp <= '0'; end if; end process Zflag; N <= X(7) when En = '1' else 'Z'; C <= '0' when En = '1' else 'Z'; Z <= Ztmp when En = '1' else 'Z'; V <= '0' when En = '1' else 'Z'; R <= Rtmp when En = '1' else "ZZZZZZZZZZZZZZZZ"; end ALUSWAP_arch;

4.2.15. VHDL opis bloka CSD (Dekoder kontrolnih signala) Dekoder kontrolnih signala ALU je kolo pomoću kojeg se vrši izbor operacije koju će ALU obaviti. 4-bitni kontroni signali se dovode na ulaz ovod kola, gde se generiše signal dozvole za kolo koje vrši odabranu operaciju. U sledećoj tabeli prikazani su kontrolni kodovi i operacija ALU koja se njima bira:

ALUsel Operacija

Page 46: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

45

ALUsel Operacija 0000 ADD 0001 ADC 0010 SUB 0011 SL 0100 SR 0101 AND 0110 OR 0111 NOT 1000 NEG 1001 INC 1010 DEC 1011 SWAP

Blok CSD (Control Signal Decoder) ima sledeće portove:

- 4-bitni ulaz Sel – ulaz selektroskih signala, - 12-bitni izalz EnBUS – izlaz signala dozvole,

grupisan u jednistvenu magistralu. ------------------------------------------------------------------------------ -- -- Title : CSD -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity CSD is port( Sel : in STD_LOGIC_VECTOR(3 downto 0); EnBUS : out STD_LOGIC_VECTOR(11 downto 0)); end CSD; architecture CSD_arch of CSD is begin with Sel select EnBUS <="000000000001" when "0000", -- En signal za ADD blok "000000000010" when "0001", -- En signal za ADC blok "000000000100" when "0010", -- En signal za SUB blok "000000001000" when "0011", -- En signal za SL blok "000000010000" when "0100", -- En signal za SR blok "000000100000" when "0101", -- En signal za AND blok "000001000000" when "0110", -- En signal za OR blok "000010000000" when "0111", -- En signal za NOT blok "000100000000" when "1000", -- En signal za NEG blok "001000000000" when "1001", -- En signal za INC blok "010000000000" when "1010", -- En signal za DEC blok "100000000000" when "1011", -- En signal za SWAP blok "000000000000" when others; -- nijedan blok nema dozvolu

Page 47: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

46

end CSD_arch;

Page 48: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

47

4.2.16. VHDL opis bloka ALK (Aritmetičko-logička kola) Blok aritmetičko-logičkih kola je skup svih operacionih kola ALU zajedno sa dekoderom kontrolnih signala. Sledeća slika pokazuje vezu između elemenata ALK:

Page 49: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

48

Blok ALK ima sledeće portove: - 4-bitni ulaz ALUsel – ulaz kontrolnih (selektorskih)

signala, - 16-bitni ulaz ALUx – ulaz podataka, - 16-bitni ulaz ALUy – ulaz podataka, - jednobitni ulaz PSRc – ulaz markera C iz PSR-a, - 16-bitni izlaz ALUr – izlaz rezultata operacije, - jednobitne izlaze Cout, Nout, Vout, Zout – izlazi

statusnih markera. ------------------------------------------------------------------------------ -- -- Title : ALK -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity ALK is port(PSRc : in STD_LOGIC; ALUx, ALUy : in STD_LOGIC_VECTOR(15 downto 0); ALUsel : in STD_LOGIC_VECTOR(3 downto 0); Vout, Zout, Nout, Cout : out STD_LOGIC; ALUr : out STD_LOGIC_VECTOR(15 downto 0)); end ALK; architecture ALK_arch of ALK is component ALUADC port (En, PSRc : in STD_LOGIC; X, Y : in STD_LOGIC_VECTOR(15 downto 0); C, N, V, Z : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component; component ALUADD port (En : in STD_LOGIC; X, Y : in STD_LOGIC_VECTOR(15 downto 0); C, N, V, Z : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component; component ALUAND port (En : in STD_LOGIC; X, Y : in STD_LOGIC_VECTOR(15 downto 0); C, N, V, Z : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component; component ALUDEC port (En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); C, N, V, Z : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component;

Page 50: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

49

component ALUINC port (En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); C, N, V, Z : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component; component ALUNEG port (En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); C, N, V, Z : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component; component ALUNOT port (En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); C, N, V, Z : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component; component ALUOR port (En : in STD_LOGIC; X, Y : in STD_LOGIC_VECTOR(15 downto 0); C, N, V, Z : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component; component ALUSL port (En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); C, N, V, Z : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component; component ALUSR port (En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); C, N, V, Z : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component; component ALUSUB port (En : in STD_LOGIC; X, Y : in STD_LOGIC_VECTOR(15 downto 0); C, N, V, Z : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component; component ALUSWAP port (En : in STD_LOGIC; X : in STD_LOGIC_VECTOR(15 downto 0); C, N, V, Z : out STD_LOGIC; R : out STD_LOGIC_VECTOR(15 downto 0)); end component; component CSD port (Sel : in STD_LOGIC_VECTOR(3 downto 0); EnBUS : out STD_LOGIC_VECTOR(11 downto 0)); end component; signal EnBUS : STD_LOGIC_VECTOR (11 downto 0); begin Cntr : CSD port map(Sel => ALUsel, EnBUS => EnBUS); U1 : ALUADD

Page 51: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

50

port map(En => EnBUS(0),X => ALUx,Y => ALUy,R => ALUr,V => Vout,Z => Zout,N => Nout,C => Cout); U2 : ALUADC port map(En => EnBUS(1),PSRc => PSRc,X => ALUx,Y => ALUy,R => ALUr,V => Vout,Z => Zout,N => Nout,C => Cout); U3 : ALUSUB port map(En => EnBUS(2),X => ALUx,Y => ALUy,R => ALUr,V => Vout,Z => Zout,N => Nout,C => Cout); U4 : ALUSL port map(En => EnBUS(3),X => ALUx,R => ALUr,V => Vout,Z => Zout,N => Nout,C => Cout); U5 : ALUSR port map(En => EnBUS(4),X => ALUx,R => ALUr,V => Vout,Z => Zout,N => Nout,C => Cout); U6 : ALUAND port map(En => EnBUS(5),X => ALUx,Y => ALUy,R => ALUr,V => Vout,Z => Zout,N => Nout,C => Cout); U7 : ALUOR port map(En => EnBUS(6),X => ALUx,Y => ALUy,R => ALUr,V => Vout,Z => Zout,N => Nout,C => Cout); U8 : ALUNOT port map(En => EnBUS(7),X => ALUx,R => ALUr,V => Vout,Z => Zout,N => Nout,C => Cout); U9 : ALUNEG port map(En => EnBUS(8),X => ALUx,R => ALUr,V => Vout,Z => Zout,N => Nout,C => Cout); U10 : ALUINC port map(En => EnBUS(9),X => ALUx,R => ALUr,V => Vout,Z => Zout,N => Nout,C => Cout); U11 : ALUDEC port map(En => EnBUS(10),X => ALUx,R => ALUr,V => Vout,Z => Zout,N => Nout,C => Cout); U12 : ALUSWAP port map(En => EnBUS(11),X => ALUx,R => ALUr,V => Vout,Z => Zout,N => Nout,C => Cout); end ALK_arch;

Page 52: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

51

4.3. Jedinica za spregu sa magistralom Jednica za spegu sa magistalom je kolo ALU čiji zadatak je da selektivno dozvoljava pristup registara ALU magistrali podataka. Selektorski kôd i njegov rezultat su prikazani u sledećoj tabeli:

Kôd Rezultat 00 Svi registri ALU su otkačeni sa magistale 01 ALUx je povezan na magistralu 10 ALUy je povezan na magistralu 11 ALUr je povezan na magistralu

4.3.1. VHDL opis bloka DBC (Jednica za spregu) Blok DBC ima sledeće portove:

- 2-bitni ulaz BusCode – ulaz selektorskih signala, - 16-bitni ulaz R – ulaz na koji je vezan registar ALUr, - 16-bitni ulaz/izlaz Data – port koji je direktno vezan za

magistralu podataka, - 16-bitni izlaz X – izlaz vezan na registar ALUx, - 16-bitni izlaz Y– izlaz vezan na registar ALUy.

------------------------------------------------------------------------------ -- -- Title : DBC -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity DBC is port( BusCode : in STD_LOGIC_VECTOR(1 downto 0); X, Y : inout STD_LOGIC_VECTOR(15 downto 0); R : in STD_LOGIC_VECTOR(15 downto 0); Data : inout STD_LOGIC_VECTOR(15 downto 0)); end DBC; architecture DBC_arch of DBC is begin process (BusCode)

Page 53: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

52

begin if (BusCode = "00") then Data <= (others =>'Z'); elsif (BusCode = "01") then X <= Data; elsif (BusCode = "10") then Y <= Data; elsif (BusCode = "11") then Data <= R; end if; end process; end DBC_arch;

4.4. VHDL opis bloka ALU Blok ALU (aritmetičko-logička jednica) ima sledeće portove:

- jednobitne ulaze ALUxClk, ALUyClk, ALUrClk – ulazi taktnih signala registara ALU,

- jednobitne ulaze ALUxEn, ALUyEn, ALUrEn – ulazi dozvole registara ALU,

- 4-bitni ulaz ALUsel – selektorski signali koji se bira operacija,

- 2-bitni ualz BusCode – selektorski signali kojima se vrši povezivanje registara sa magistralom podataka,

- jednobitni ulaz PSRc – ulaz markera C iz PSR-a, - jednobitni ulaz ResetALU – signali reseta za registre ALU, - jednobitne izlaze C, N, V, Z – izlazi statusnih markera, - 16-bitni ulaz/izlaz DataBus – direktno vezan na magistralu

podataka. ------------------------------------------------------------------------------ -- -- Title : No Title -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.std_logic_1164.all;

Page 54: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

53

entity ALU is port(ALUxEn, ALUxClk, ALUyEn, ALUyClk, ALUrEn, ALUrClk : in STD_LOGIC; PSRc, ResetALU : in STD_LOGIC; BusCode : in STD_LOGIC_VECTOR(1 downto 0); ALUsel : in STD_LOGIC_VECTOR(3 downto 0); V, N, Z, C : out STD_LOGIC; DataBus : inout STD_LOGIC_VECTOR(15 downto 0)); end ALU; architecture ALU_arch of ALU is component ALK -- Aritmeticko logicka kola port (ALUsel : in STD_LOGIC_VECTOR(3 downto 0); PSRc : in STD_LOGIC; ALUx, ALUy : in STD_LOGIC_VECTOR(15 downto 0); Vout, Nout, Zout, Cout : out STD_LOGIC; ALUr : out STD_LOGIC_VECTOR(15 downto 0)); end component; component dbc -- Jedinica za spregu sa magistralom port (BusCode : in STD_LOGIC_VECTOR(1 downto 0); R : in STD_LOGIC_VECTOR(15 downto 0); Data : inout STD_LOGIC_VECTOR(15 downto 0); X : inout STD_LOGIC_VECTOR(15 downto 0); Y : inout STD_LOGIC_VECTOR(15 downto 0)); end component; component reg port (Clk, En, Rst : in STD_LOGIC; Data : inout STD_LOGIC_VECTOR(15 downto 0)); end component; signal R : STD_LOGIC_VECTOR (15 downto 0); signal X : STD_LOGIC_VECTOR (15 downto 0); signal Y : STD_LOGIC_VECTOR (15 downto 0); begin ALUr : reg port map(Clk => ALUrClk,Data => R,En => ALUrEn,Rst => ResetALU); ALUx : reg port map(Clk => ALUxClk,Data => X,En => ALUxEn,Rst => ResetALU); ALUy : reg port map(Clk => ALUyClk,Data => Y,En => ALUyEn,Rst => ResetALU); ArLogKolo : ALK port map(Cout => C,ALUsel => ALUsel,Nout => N,PSRc => PSRc,ALUr => R,Vout => V,ALUx => X,ALUy => Y,Zout => Z); SpregaMag : dbc port map(BusCode => BusCode,Data => DataBus,R => R,X => X,Y => Y); end ALU_arch;

Page 55: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

54

5. UPRAVLJAČKA JEDINICA

Upravljačka jedinica služi za generisanje upravljačkih signala. Postoje dva osnovna koncepta realizacije upravljačke jedinice:

- koncept upravljačke jedinice sa direktnim upravljanjem (eng. hardwired control) - koncept upravljačke jedinice sa mikroprogramskim upravljanjem (eng. microprogrammed

control)

Kod koncepta direktnog upravljanja upravljačka jedinica se realizuje kao sekvencijalno logičko kolo. Glavna prednost ovakve upravljačke jedinice je velika brzina rada sa minimalnim hardverom, a nedostatak u tome što kada se jednom isprojektuje, svaka izmena zahteva redizajn kola. Zato se ovaj tip upravljačke jedinice često sreće kod RISC procesora i neprogramabilnih kontrolera.

Koncept upravljačke jedinice sa mikroprogramskim upravljanjem zahteva realizaciju upravljačke jedinice na bazi ROM ili RAM memorije u kojoj se smeštaju vrednosti upravljačkih signala, koji će biti aktivirani u odgovarajućem trenutku.

Glavne prednosti ovakvog načina realizacije upravljačke jedinice su: - lako uvođenje dodatnih instrukcija; - greške se brže i lakše otklanjaju; - ukupno projektovanje procesora je pojednostavljeno; - korišćenjem mikroprogramske emulacije moguće je ostvarivanje kompatibilnosti sa

drugom mašinom.

Glavni nedostatak ovog pristupa je manja brzina rada u odnosu na direktno upravljanje. Ipak je ovaj način realizacije upravljačke jedinice široko rasprostranjen, gotovo u svim slučajevima kada brzina rad nije od presudnog značaja. Kod upravljačkih jedinica ovog tipa, pri projektovanju se često pravi kompromis između nivoa dekodiranja i kapaciteta memorije koji je upotrebljen za pamćenje upravljačkih signala. Najekstremniji slučaj po pitanju zauzeća memorije je kada nema kodiranja, tj. kada se upravljački signali direktno pamte u memoriji. U slučaju složenih procesora broj upravljačkih signala može biti veliki tako da bi bio potreban popriličan RAM u okviru procesora. Zato se koristi kodiranje kombinacija upravljačkih signala. To dodatno usložnjava kontrolnu jedinicu, ali štedi mikroprogramsku memoriju. Maksimalno kodiranje takođe utiče negativno na aspekt uvođenja novih instrukcija, jer uvođenje novih instrukcija zahteva potpuni redizajn dekodera. Upravljačka jednica procesora JASP je realizovana kao upravljačka jedinica sa mikroprogramskom memorijom. Na sledećoj slici prikazana je blok šema upravljačke jednice procesora JASP:

Page 56: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

55

Upravljačka jedinica JASP-a sadrži sledeće blokove:

- InterruptController – kontroler prekida, - adrmapper – adresni maper, - CondBlk – blok uslova markera, - Logika – blok koji određuje ulov za izbor adrese, - MicroINC – registar intkementer, - SA – selektor adresa, - MicroMAR – memorijsko adresni registar, - microMemory – memorija u čije su lokacije upisani kontrolni signali, - micromdr – registar kontrolnih signala.

5.1. Instrukcije procesora JASP Zadatak svakog procesora je da izvršava program smešten u memoriji. Program čini sekvenca instrukcija. Instrukcije sa kojima radi procesor JASP su 16-bitne. Format instrukcije prikazan je na sledećoj slici:

X X X X X X X X X X X X X X X X Opkôd Operand

Instrukcija se može podeliti na dva 8-bitna dela:

- Opkôd – operacioni deo – definiše tip instrukcije i način adresiranja, - Operand – definiše lokaciju podatka potrebnom instrukciji.

U sledećoj tabeli prikazana je lista svih intrukcija procesora JASP zajedno sa rutinama na RTL

(eng. Register Transfer Level) nivou kao i adresama mikromemorije čijim su lokacijama ove rutine smeštene. Adrese mikromemorijskih lokacija dobijene su proširivanjem operanda za četiri bita, odnosno četiri nule (0000)bin. Ovo nije ispoštovano samo kod istrukcije ADD #data,A jer je ona

Page 57: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

56

proširen sa (0110)bin zato jer se ispred nje nalazi rutina fetch. Jedna od najbitnih instrukcija je instrukcija pribavljanja instrukcije ili Fetch. Fetch, kod JASP, ima 6 mikroinstrukcija i nalazi se na samom početku mikromemorije, na lokaciji sa adresom (000)hex. Na ovaj način obezbeđeno je da pri startovanju procesora prva rutina koja se obavi bude rutina fetch.

5.1.1. Tabela instrukcija, njihovih mikroprogramskih rutina i rasporeda mikroinstrukcija u mikromemoriji

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

FETCH

MAR<-[PC] INC<-[PC] PC<-[INC] MDR<-[M[MAR]] IR<-[MDR] CU<-[IR(opcode)]

000 001 002 003 004 005

00 ADD #data,A

ALUx<-[A] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] A<-[ALUr]

006 007 008 009

01 ADD #data,B

ALUx<-[B] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] B<-[ALUr]

010 011 012 013

02 ADD addr,A

MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]+[ALUy] A<-[ALUr]

020 021 022 023 024 025

03 ADD addr,B

MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]+[ALUy] B<-[ALUr]

030 031 032 033 034 035

04 ADD (addr),A

MAR<-[IR(operand)] MDR<-[M(MAR)] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]+[ALUy] A<-[ALUr]

040 041 042 043 044 045 046 047 048

Page 58: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

57

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

05 ADD (addr),B

MAR<-[IR(operand)] MDR<-[M(MAR)] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]+[ALUy] B<-[ALUr]

050 051 052 053 054 055 056 057 058

06 ADD B,A

ALUy<-[B] ALUx<-[A] ALUr=[ALUx]+[ALUy] A<-[ALUr]

060 061 062 063

07 ADD A,B

ALUy<-[A] ALUx<-[B] ALUr=[ALUx]+[ALUy] B<-[ALUr]

070 071 072 073

08 ADD (B),A

MAR<-[B] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]+[ALUy] A<-[ALUr]

080 081 082 083 084 085

09 ADD (A),B

MAR<-[A] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]+[ALUy] B<-[ALUr]

090 091 092 093 094 095

0A ADD B+addr,A

ALUy<-[IR(operand)] ALUx<-[B] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]+[ALUy] A<-[ALUr]

0A0 0A1 0A2 0A3 0A4 0A5 0A6 0A7 0A8

0B ADD A+addr,B

ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]+[ALUy] B<-[ALUr]

0B0 0B1 0B2 0B3 0B4 0B5 0B6 0B7 0B8

10 ADC #data,A

ALUx<-[A] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy]+[PSR(c)] A<-[ALUr]

100 101 102 103

Page 59: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

58

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

11 ADC #data,B

ALUx<-[B] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy]+[PSR(c)] B<-[ALUr]

110 111 112 113

12 ADC addr,A

MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]+[ALUy]+[PSR(c)] A<-[ALUr]

120 121 122 123 124 125

13 ADC addr,B

MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]+[ALUy]+[PSR(c)] B<-[ALUr]

130 131 132 133 134 135

14 ADC (addr),A

MAR<-[IR(operand)] MDR<-[M(MAR)] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]+[ALUy]+[PSR(c)] A<-[ALUr]

140 141 142 143 144 145 146 147 148

15 ADC (addr),B

MAR<-[IR(operand)] MDR<-[M(MAR)] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]+[ALUy]+[PSR(c)] B<-[ALUr]

150 151 152 153 154 155 156 157 158

16 ADC B,A

ALUy<-[B] ALUx<-[A] ALUr=[ALUx]+[ALUy]+[PSR(c)] A<-[ALUr]

160 161 162 163

17 ADC A,B

ALUy<-[A] ALUx<-[B] ALUr=[ALUx]+[ALUy]+[PSR(c)] B<-[ALUr]

170 171 172 173

18 ADC (B),A

MAR<-[B] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]+[ALUy]+[PSR(c)] A<-[ALUr]

180 181 182 183 184 185 186

Page 60: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

59

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

19 ADC (A),B

MAR<-[A] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]+[ALUy]+[PSR(c)] B<-[ALUr]

190 191 192 193 194 195

1A ADC B+addr,A

ALUy<-[IR(operand)] ALUx<-[B] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]+[ALUy]+[PSR(c)] A<-[ALUr]

1A0 1A1 1A2 1A3 1A4 1A5 1A6 1A7 1A8

1B ADC A+addr,B

ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]+[ALUy]+[PSR(c)] B<-[ALUr]

1B0 1B1 1B2 1B3 1B4 1B5 1B6 1B7 1B8

20 SUB #data,A

ALUx<-[A] ALUy<-[IR(operand)] ALUr=[ALUx]-[ALUy] A<-[ALUr]

200 201 202 203

21 SUB #data,B

ALUx<-[B] ALUy<-[IR(operand)] ALUr=[ALUx]-[ALUy] B<-[ALUr]

210 211 212 213

22 SUB addr,A

MAR<-[IR(operand)] MDR<-[M(MAR)] ALUx<-[A] ALUy<-[MDR] ALUr=[ALUx]-[ALUy] A<-[ALUr]

220 221 222 223 224 225

23 SUB addr,B

MAR<-[IR(operand)] MDR<-[M(MAR)] ALUx<-[B] ALUy<-[MDR] ALUr=[ALUx]-[ALUy] B<-[ALUr]

230 231 232 233 234 235

Page 61: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

60

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

24 SUB (addr),A

MAR<-[IR(operand)] MDR<-[M(MAR)] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M(MAR)] ALUx<-[A] ALUy<-[MDR] ALUr=[ALUx]-[ALUy] A<-[ALUr]

240 241 242 243 244 245 246 247 248

25 SUB (addr),B

MAR<-[IR(operand)] MDR<-[M(MAR)] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M(MAR)] ALUx<-[B] ALUy<-[MDR] ALUr=[ALUx]-[ALUy] B<-[ALUr]

250 251 252 253 254 255 256 257 258

26 SUB B,A ALUy<-[A] ALUx<-[B] ALUr=[ALUx]-[ALUy] A<-[ALUr]

260 261 262 263

27 SUB A,B ALUx<-[B] ALUy<-[A] ALUr=[ALUx]-[ALUy] B<-[ALUr]

270 271 272 273

28 SUB (B),A

MAR<-[B] MDR<-[M(MAR)] ALUx<-[A] ALUy<-[MDR] ALUr=[ALUx]-[ALUy] A<-[ALUr]

280 281 282 283 284 285

29 SUB (A),B

MAR<-[A] MDR<-[M(MAR)] ALUx<-[B] ALUy<-[MDR] ALUr=[ALUx]-[ALUy] B<-[ALUr]

290 291 292 293 294 295

2A SUB B+addr,A

ALUy<-[IR(operand)] ALUx<-[B] ALUr=[ALUx]-[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]-[ALUy] A<-[ALUr]

2A0 2A1 2A2 2A3 2A4 2A5 2A6 2A7 2A8

Page 62: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

61

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

2B SUB A+addr,B

ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]-[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]-[ALUy] B<-[ALUr]

2B0 2B1 2B2 2B3 2B4 2B5 2B6 2B7 2B8

32 SHL addr

MAR<-[IR(operand)] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=[ALUx]<<1 MDR<-[ALUr] [M[MAR]]<-MDR

320 321 322 323 324 325

34 SHL (addr)

MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=[ALUx]<<1 MDR<-[ALUr] [M[MAR]]<-MDR

340 341 342 343 344 345 346 347 348

36 SHL A ALUx<-[A] ALUr=[ALUx]<<1 A<-[ALUr]

360 361 362

37 SHL B ALUx<-[B] ALUr=[ALUx]<<1 B<-[ALUr]

370 371 372

38 SHL (A)

MAR<-[A] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=[ALUx]<<1 MDR<-[ALUr] [M[MAR]]<-MDR

380 381 382 383 384 385

39 SHL (B)

MAR<-[B] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=[ALUx]<<1 MDR<-[ALUr] [M[MAR]]<-MDR

390 391 392 393 394 395

3A SHL A+addr

ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=[ALUx]<<1 MDR<-[ALUr] M[MAR]<-[MDR]

3A0 3A1 3A2 3A3 3A4 3A5 3A6 3A7 3A8

Page 63: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

62

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

3B SHL B+addr

ALUy<-[IR(operand)] ALUx<-[B] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=[ALUx]<<1 MDR<-[ALUr] M[MAR]<-[MDR]

3B0 3B1 3B2 3B3 3B4 3B5 3B6 3B7 3B8

42 SHR addr

MAR<-[IR(operand)] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=[ALUx]>>1 MDR<-[ALUr] [M[MAR]]<-MDR

420 421 422 423 424 425

44 SHR (addr)

MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=[ALUx]>>1 MDR<-[ALUr] [M[MAR]]<-MDR

440 441 442 443 444 445 446 447 448

46 SHR A ALUx<-[A] ALUr=[ALUx]>>1 A<-[ALUr]

460 461 462

47 SHR B ALUx<-[B] ALUr=[ALUx]>>1 B<-[ALUr]

470 471 472

48 SHR (A)

MAR<-[A] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=[ALUx]>>1 MDR<-[ALUr] [M[MAR]]<-MDR

480 481 482 483 484 485

49 SHR (B)

MAR<-[B] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=[ALUx]>>1 MDR<-[ALUr] [M[MAR]]<-MDR

490 491 492 493 494 495

4A SHR A+addr

ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=[ALUx]>>1 MDR<-[ALUr] M[MAR]<-[MDR]

4A0 4A1 4A2 4A3 4A4 4A5 4A6 4A7 4A8

Page 64: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

63

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

4B SHR B+addr

ALUy<-[IR(operand)] ALUx<-[B] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=[ALUx]>>1 MDR<-[ALUr] M[MAR]<-[MDR]

4B0 4B1 4B2 4B3 4B4 4B5 4B6 4B7 4B8

50 AND #data,A ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]&[ALUy] A<-[ALUr]

500 501 502 503

51 AND #data,B ALUy<-[IR(operand)] ALUx<-[B] ALUr=[ALUx]&[ALUy] B<-[ALUr]

510 511 512 513

52 AND addr,A

MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]&[ALUy] A<-[ALUr]

520 521 522 523 524 525

53 AND addr,B

MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]&[ALUy] B<-[ALUr]

530 531 532 533 534 535

54 AND (addr),B

MAR<-[IR(operand)] MDR<-[M(MAR)] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]&[ALUy] A<-[ALUr]

540 541 542 543 544 545 546 547 548

55 AND (addr),B

MAR<-[IR(operand)] MDR<-[M(MAR)] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]&[ALUy] B<-[ALUr]

550 551 552 553 554 555 556 557 558

56 AND B,A ALUx<-[B] ALUy<-[A] ALUr=[ALUx]&[ALUy] A<-[ALUr]

560 561 562 563

Page 65: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

64

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

57 AND A,B ALUy<-[A] ALUx<-[B] ALUr=[ALUx]&[ALUy] B<-[ALUr]

570 571 572 573

58 AND (B),A

MAR<-[B] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]&[ALUy] A<-[ALUr]

580 581 582 583 584 585

59 AND (A),B

MAR<-[A] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]&[ALUy] B<-[ALUr]

590 591 592 593 594 595

5A AND B+addr,A

ALUy<-[IR(operand)] ALUx<-[B] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]&[ALUy] A<-[ALUr]

5A0 5A1 5A2 5A3 5A4 5A5 5A6 5A7 5A8

5B AND A+addr,B

ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]&[ALUy] B<-[ALUr]

5B0 5B1 5B2 5B3 5B4 5B5 5B6 5B7 5B8

60 OR #data,A ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]|[ALUy] A<-[ALUr]

600 601 602 603

61 OR #data,B ALUy<-[IR(operand)] ALUx<-[B] ALUr=[ALUx]|[ALUy] B<-[ALUr]

610 611 612 613

62 OR addr,A

MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]|[ALUy] A<-[ALUr]

620 621 622 623 624 625

Page 66: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

65

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

63 OR addr,B

MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]|[ALUy] B<-[ALUr]

630 631 632 633 634 635

64 OR (addr),A

MAR<-[IR(operand)] MDR<-[M(MAR)] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]|[ALUy] A<-[ALUr]

640 641 642 643 644 645 646 647 648

65 OR (addr),B

MAR<-[IR(operand)] MDR<-[M(MAR)] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]|[ALUy] B<-[ALUr]

650 651 652 653 654 655 656 657 658

66 OR B,A ALUx<-[B] ALUy<-[A] ALUr=[ALUx]|[ALUy] A<-[ALUr]

660 661 662 663

67 OR A,B ALUy<-[A] ALUx<-[B] ALUr=[ALUx]|[ALUy] B<-[ALUr]

670 671 672 673

68 OR (B),A

MAR<-[B] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]|[ALUy] A<-[ALUr]

680 681 682 683 684 685

69 OR (A),B

MAR<-[A] MDR<-[M(MAR)] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]|[ALUy] B<-[ALUr]

690 691 692 693 694 695

Page 67: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

66

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

6A OR B+addr,A

ALUy<-[IR(operand)] ALUx<-[B] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]|[ALUy] A<-[ALUr]

6A0 6A1 6A2 6A3 6A4 6A5 6A6 6A7 6A8

6B OR A+addr,B

ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]|[ALUy] B<-[ALUr]

6B0 6B1 6B2 6B3 6B4 6B5 6B6 6B7 6B8

72 NOT addr

MAR<-[IR(operand)] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=~[ALUx] MDR<-[ALUr] M[MDR]<-[MDR]

720 721 722 723 724 725

74 NOT (addr)

MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=~[ALUx] MDR<-[ALUr] M[MDR]<-[MDR]

740 741 742 743 744 745 746 747 748

76 NOT A ALUx<-[A] ALUr=~[ALUx] A<-[ALUr]

760 761 762

77 NOT B ALUx<-[B] ALUr=~[ALUx] B<-[ALUr]

770 771 772

78 NOT (A)

MAR<-[A] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=~[ALUx] MDR<-[ALUr] M[MDR]<-[MDR]

780 781 782 783 784 785

79 NOT (B)

MAR<-[B] MDR<-[M[MAR]] ALUx<-[MDR] ALUr=~[ALUx] MDR<-[ALUr] M[MDR]<-[MDR]

790 791 792 793 794 795

Page 68: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

67

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

7A NOT A+addr

ALUx<-[A] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] ALUx<-[MDR] ALUr=~[ALUx] MDR<-[ALUr] M[MDR]<-[MDR]

7A0 7A1 7A2 7A3 7A4 7A5 7A6 7A7

7B NOT B+addr

ALUx<-[B] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] ALUx<-[MDR] ALUr=~[ALUx] MDR<-[ALUr] M[MDR]<-[MDR]

7B0 7B1 7B2 7B3 7B4 7B5 7B6 7B7

7C SWAP A ALUx<-[A] ALUr(7:0)=[ALUx(15:8)];ALUr(15:8)=[ALUx(7:0)] A<-[ALUr]

7C0 7C1 7C2

7D SWAP B ALUx<-[B] ALUr(7:0)=[ALUx(15:8)];ALUr(15:8)=[ALUx(7:0)] A<-[ALUr]

7D0 7D1 7D2

80 CMP #data,A ALUx<-[A] ALUy<-[IR(operand)] ALUr=[ALUx]-[ALUy]

800 801 802

81 CMP #data,B ALUx<-[B] ALUy<-[IR(operand)] ALUr=[ALUx]-[ALUy]

810 811 812

82 CMP addr,A

MAR<-[IR(operand)] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]-[ALUy]

820 821 822 823 824

83 CMP addr,B

MAR<-[IR(operand)] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]-[ALUy]

830 831 832 833 834

84 CMP (addr),A

MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[A] ALUr=[ALUx]-[ALUy]

840 841 842 843 844 845 846 847

Page 69: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

68

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

85 CMP (addr),B

MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] ALUy<-[MDR] ALUx<-[B] ALUr=[ALUx]-[ALUy]

850 851 852 853 854 855 856 857

86 CMP B,A ALUx<-[A] ALUy<-[B] ALUr=[ALUx]-[ALUy]

860 861 862

87 CMP A,B ALUx<-[B] ALUy<-[A] ALUr=[ALUx]-[ALUy]

870 871 872

88 CMP (B),A

MAR<-[B] MDR<-[M[MAR]] ALUx<-[A] ALUy<-[MDR] ALUr=[ALUx]-[ALUy]

880 881 882 883 884

89 CMP (A),B

MAR<-[A] MDR<-[M[MAR]] ALUx<-[B] ALUy<-[MDR] ALUr=[ALUx]-[ALUy]

890 891 892 893 894

8A CMP B+addr,A

ALUx<-[B] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUx<-[A] ALUy<-[MDR] ALUr=[ALUx]-[ALUy]

8A0 8A1 8A2 8A3 8A4 8A5 8A6 8A7

8B CMP A+addr,B

ALUx<-[A] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] ALUx<-[B] ALUy<-[MDR] ALUr=[ALUx]-[ALUy]

8B0 8B1 8B2 8B3 8B4 8B5 8B6 8B7

8C PUSH A

MAR<-[SP] MDR<-[A] M[MAR]<-[MDR] ALUx<-[SP] ALUr<-[ALUx]-1 SP<-[ALUr]

8C0 8C1 8C2 8C3 8C4 8C5

Page 70: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

69

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

8D PUSH B

MAR<-[SP] MDR<-[B] M[MAR]<-[MDR] ALUx<-[SP] ALUr<-[ALUx]-1 SP<-[ALUr]

8D0 8D1 8D2 8D3 8D4 8D5

8E POP A

ALUx<-[SP] ALUr<-[ALUx]+1 SP<-[ALUr] MAR<-[SP] MDR<-[M[MAR]] A<-[MDR]

8E0 8E1 8E2 8E3 8E4 8E5

8F POP B

ALUx<-[SP] ALUr<-[ALUx]+1 SP<-[ALUr] MAR<-[SP] MDR<-[M[MAR]] B<-[MDR]

8F0 8F1 8F2 8F3 8F4 8F5

90 MOVE #data,A A<-[IR(operand)] 900 91 MOVE #data,B B<-[IR(operand)] 910

92 MOVE addr,A MAR<-[IR(operand)] MDR<-[M[MAR]] A<-[MDR]

920 921 923

93 MOVE addr,B MAR<-[IR(operand)] MDR<-[M[MAR]] B<-[MDR]

930 931 932

94 MOVE (addr),A

MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] A<-[MDR]

940 941 942 943 944 945

95 MOVE (addr),B

MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] B<-[MDR]

950 951 952 953 954 955

96 MOVE B,A MDR<-[B] A<-[MDR]

960 961

97 MOVE A,B MDR<-[A] B<-[MDR]

970 971

98 MOVE (B),A MAR<-[B] MDR<-[M[MAR]] A<-[MDR]

980 981 982

99 MOVE (A),B MAR<-[A] MDR<-[M[MAR]] B<-[MDR]

990 991 992

Page 71: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

70

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

9A MOVE B+addr,A

ALUy<-[IR(operand)] ALUx<-[B] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] A<-[MDR]

9A0 9A1 9A2 9A3 9A4 9A5

9B MOVE A+addr,B

ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] B<-[MDR]

9B0 9B1 9B2 9B3 9B4 9B5

A2 MOVE A,addr MAR<-[IR(operand)] MDR<-[A] M[MAR]<-[MDR]

A20 A21 A22

A3 MOVE B,addr MAR<-[IR(operand)] MDR<-[B] M[MAR]<-[MDR]

A30 A31 A32

A4 MOVE A,(addr)

MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[A] M[MAR]<-[MDR]

A40 A41 A42 A43 A44 A45

A5 MOVE B,(addr)

MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[B] M[MAR]<-[MDR]

A50 A51 A52 A53 A54 A55

A6 MOVE #data,SP SP<-[IR(operand)] A60

A7 MOVE addr,SP MAR<-[IR(operand)] MDR<-[M[MAR]] SP<-[MDR]

A70 A71 A72

A8 MOVE A,(B) MAR<-[B] MDR<-[A] M[MAR]<-[MDR]

A80 A81 A82

A9 MOVE B,(A) MAR<-[A] MDR<-[B] M[MAR]<-[MDR]

A90 A91 A92

AA MOVE A,B+addr

ALUy<-[IR(operand)] ALUx<-[B] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[A] M[MAR]<-[MDR]

AA0 AA1 AA2 AA3 AA4 AA5

Page 72: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

71

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

AB MOVE B,A+addr

ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[B] M[MAR]<-[MDR]

AB0 AB1 AB2 AB3 AB4 AB5

AC MOVE (addr),SP

MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] SP<-[MDR]

AC0 AC1 AC2 AC3 AC4 AC5

AD MOVE A,SP MDR<-[A] SP<-[MDR]

AD0 AD1

AE MOVE B,SP MDR<-[B] SP<-[MDR]

AE0 AE1

B0 BCC #dis

if(PSR(c)==0) ALUx<-[PC] ALUy<-[IR(operand)] ALUr<-[ALUx]+[ALUy] PC<-[ALUr]

B00 B01 B02 B03 B04

B1 BCS #dis

if(PSR(c)==1) ALUx<-[PC] ALUy<-[IR(operand)] ALUr<-[ALUx]+[ALUy] PC<-[ALUr]

B10 B11 B12 B13 B14

B2 BCC addr if(PSR(c)==0) PC<-[IR(operand)]

B20 B21

B3 BCS addr if(PSR(c)==1) PC<-[IR(operand)]

B30 B31

B4 BCC (addr)

if(PSR(c)==0) MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(opernad)] IR<-[MDR] PC<-[IR(operand)]

B40 B41 B42 B43 B45 B46 B47

B5 BCS (addr)

if(PSR(c)==1) MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(opernad)] IR<-[MDR] PC<-[IR(operand)]

B50 B51 B52 B53 B54 B55 B56

B8 BPL #dis

if(PSR(n)==0) ALUx<-[PC] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] PC<-[ALUr]

B80 B81 B82 B83 B84

Page 73: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

72

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

B9 BMI #dis

if(PSR(n)==1) ALUx<-[PC] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] PC<-[ALUr]

B90 B91 B92 B93 B94

BA BPL addr if(PSR(n)==0) PC<-[IR(operand)]

BA0 BA1

BB BMI addr if(PSR(n)==1) PC<-[IR(operand)]

BB0 BB1

BC BPL (addr)

if(PSR(n)==0) MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] PC<-[IR(operand)]

BC0 BC1 BC2 BC3 BC4 BC5 BC6 BC7

BD BMI (addr)

if(PSR(n)==1) MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] PC<-[IR(operand)]

BD0 BD1 BD2 BD3 BD4 BD5 BD6 BD7

C0 BNE #dis

if(PSR(z)==0) ALUx<-[PC] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] PC<-[ALUr]

C00 C01 C02 C03 C04

C1 BEQ #dis

if(PSR(z)==1) ALUx<-[PC] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] PC<-[ALUr]

C10 C11 C12 C13 C14

C2 BNE addr if(PSR(z)==0) PC<-[IR(operand)]

C20 C21

C3 BEQ addr if(PSR(z)==1) PC<-[IR(operand)]

C30 C31

C4 BNE (addr)

if(PSR(z)==0) MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] PC<-[IR(operand)]

C40 C41 C42 C43 C44 C45 C46 C47

Page 74: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

73

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

C5 BEQ (addr)

if(PSR(z)==1) MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] PC<-[IR(operand)]

C50 C51 C52 C53 C54 C55 C56 C57

C8 BVC #dis

if(PSR(v)==0) ALUx<-[PC] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] PC<-[ALUr]

C80 C81 C82 C83 C84

C9 BVS #dis

if(PSR(z)==1) ALUx<-[PC] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] PC<-[ALUr]

C90 C91 C92 C93 C94

CA BVC addr if(PSR(v)==0) PC<-[IR(operand)]

CA0 CA1

CB BVS addr if(PSR(v)==1) PC<-[IR(operand)]

CB0 CB1

CC BVC (addr)

if(PSR(v)==0) MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] PC<-[IR(operand)]

CC0 CC1 CC2 CC3 CC4 CC5 CC6 CC7

CD BVS (addr)

if(PSR(v)==0) MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] PC<-[IR(operand)]

CD0 CD1 CD2 CD3 CD4 CD5 CD6 CD7

D0 JSR addr

ALUx<-[PC] MDR<-{ALUx] MAR<-[SP] M[MAR]<-[MDR] ALUx<-[SP] ALUr=[ALUx]-1 SP<-[ALUr] PC<-[IR(operand)]

D00 D01 D02 D03 D04 D05 D06 D07

Page 75: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

74

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

D1 JSR (addr)

ALUx<-[PC] MDR<-{ALUx] MAR<-[SP] M[MAR]<-[MDR] ALUx<-[SP] ALUr=[ALUx]-1 SP<-[ALUr] MDR<-[M[MAR]] PC<-[MDR]

D10 D11 D12 D13 D14 D15 D16 D17 D18

D2 JSR A

ALUx<-[PC] MDR<-{ALUx] MAR<-[SP] M[MAR]<-[MDR] ALUx<-[SP] ALUr=[ALUx]-1 SP<-[ALUr] MDR<-[A] PC<-[MDR]

D20 D21 D22 D23 D24 D25 D26 D27 D28

D3 JSR B

ALUx<-[PC] MDR<-{ALUx] MAR<-[SP] M[MAR]<-[MDR] ALUx<-[SP] ALUr=[ALUx]-1 SP<-[ALUr] PC<-[B]

D30 D31 D32 D33 D34 D35 D36 D37

D4 JSR (A)

ALUx<-[PC] MDR<-{ALUx] MAR<-[SP] M[MAR]<-[MDR] ALUx<-[SP] ALUr=[ALUx]-1 SP<-[ALUr] MAR<-[A] MDR<-[M[MAR]] PC<-[MDR]

D40 D41 D42 D43 D44 D45 D46 D47 D48 D49

D5 JSR (B)

ALUx<-[PC] MDR<-{ALUx] MAR<-[SP] M[MAR]<-[MDR] ALUx<-[SP] ALUr=[ALUx]-1 SP<-[ALUr] MAR<-[B] MDR<-[M[MAR]] PC<-[MDR]

D50 D51 D52 D53 D54 D55 D56 D57 D58 D59

Page 76: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

75

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

D6 JSR A+addr

ALUx<-[PC] MDR<-{ALUx] MAR<-[SP] M[MAR]<-[MDR] ALUx<-[SP] ALUr=[ALUx]-1 SP<-[ALUr] ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] PC<-[MDR]

D60 D61 D62 D63 D64 D65 D66 D67 D68 D69 D6A D6B D6C

D7 JSR B+addr

ALUx<-[PC] MDR<-{ALUx] MAR<-[SP] M[MAR]<-[MDR] ALUx<-[SP] ALUr=[ALUx]-1 SP<-[ALUr] ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] PC<-[MDR]

D70 D71 D72 D73 D74 D75 D76 D77 D78 D79 D7A D7B D7C

D8 JSR #dis

ALUx<-[PC] MDR<-{ALUx] MAR<-[SP] M[MAR]<-[MDR] ALUx<-[SP] ALUr=[ALUx]-1 SP<-[ALUr] ALUx<-[PC] ALUy<-[IR(operand)] ALUr=[ALUx]+[ALUy] PC<-[ALUr]

D80 D81 D82 D83 D84 D85 D86 D87 D88 D89 D8A

E0 JMP addr PC<-[IR(operand)] E00

E1 JMP (addr)

MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] MAR<-[IR(operand)] MDR<-[M[MAR]] IR<-[MDR] PC<-[IR(operand)]

E10 E11 E12 E13 E14 E15 E16

E2 JMP A MDR<-[A] PC<-[MDR]

E20 E21

E3 JMP B PC<-[B] E30

Page 77: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

76

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

E4 JMP (A) MAR<-[A] MDR<-[M[MAR]] PC<-[MDR]

E40 E41 E42

E5 JMP (B) MAR<-[B] MDR<-[M[MAR]] PC<-[MDR]

E50 E51 E52

E6 JMP A+addr

ALUy<-[IR(operand)] ALUx<-[A] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] PC<-[MDR]

E60 E61 E62 E63 E64 E65

E7 JMP B+addr

ALUy<-[IR(operand)] ALUx<-[B] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] PC<-[MDR]

E70 E71 E72 E73 E74 E75

E8 JMP #dis

ALUx<-[PC] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] PC<-[MDR]

E80 E81 E82 E83 E84

F0 HALT HALT F00

F1 RTS

ALUx<-[SP] ALUr=[ALUx]+1 SP<-[ALUr] MAR<-[SP] MDR<-[M[MAR]] PC<-[MDR]

F10 F11 F12 F13 F14 F15

F2 NOP NOP F20 F3 INTE PSR(E)=1 F30 F4 INTD PSR(E)=0 F40 FA TRAP #data

PSR(IntVec)<-[IR(operand)] PSR(I)<-1

FA0 FA1

Page 78: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

77

Opk

od (

hex

.)

Mnemonik RTL

Adr

ese

mik

rom

emor

ije

(hex

.)

Interrupt routine

PSR(I)=0 MAR<-[SP] MDR<-[PSR] M[MAR]<-[MDR] ALUx<-[SP] ALUr=[ALUx]-1 SP<-[ALUr] ALUx<-[PC] MDR<-[ALUx] M[MAR]<-[MDR] ALUx<-[SP] ALUr=[ALUx]-1 SP<-[ALUr] PSR(E)=0 ALUy<-[JUMPERS(IntBase)] ALUx<-[PSR(IntVec)] ALUr=[ALUx]+[ALUy] MAR<-[ALUr] MDR<-[M[MAR]] PC<-[MDR]

FD0 FD1 FD2 FD3 FD4 FD5 FD6 FD7 FD8 FD9 FDA FDB FDC FDD FDE FDF FE0 FE1 FE2 FE3

FF RTI (Return from interrupt)

ALUx<-[SP] ALUr=[ALUx]+1 SP<-[ALUr] MAR<-[SP] MDR<-[M[MAR]] PC<-[MDR] ALUx<-[SP] ALUr=[ALUx]+1 SP<-[ALUr] MAR<-[SP] MDR<-[M[MAR]] PSR<-[MDR]

FF0 FF1 FF2 FF3 FF4 FF5 FF6 FF7 FF8 FF9 FFA FFB

Ako se analizira RTL opis mikroinstrukcija u tabeli instrukcija može se videti da su mikroprogramske rutine kombinacija ograničenog broja mikroinstrukcija.

5.2. Mikroinstrukcije

Format mikroinstrukcije:

cond BT Kontrolni signali Adresa naredne mikroinstrukcije

Broj bitova

4 1 36 12

Page 79: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

78

- cond – određuje da li će se naredna adresa mikroinstrukcije biti uzeta sa ulaza 0 (tekuća

adresa + 1) ili će biti uzeta sa ulaza 1 (addr) multipleksera u okviru mikrosekvencera u zavisnosti od stanja markera.

- branch target (BT) – određuje da li se adresa naredne mikroinstrukcije uzima sa ulaza 2 ( koji se snabdeva adresom iz mapera) ili ne.

- Kontrolni signali –predstavlja kontrolne signale koji se direktno vode na hardver izvršne jedinice.

- Adresa naredne mikroinstrukcije – ovo polje specificira prvu adresu naredne rutine. Ovo polje se koristi na kraju svake rutine kako bi se adresirala FETCH rutina.

Kontrolni signali su raspoređeni kao što je prikazano u tabeli koja sledi:

Register Output Enable (dozvola izlaza registara)

Register Clock (taktni signal registara

– upis u registar) Mem

orija

PC

INC

SP

IR

M

AR

M

DR

A

B

A

LUx

ALU

y A

LUr

PC

INC

SP

IR

M

AR

M

DR

A

B

A

LUx

ALU

y A

LUr

PSR

R

W

CS A

LU c

ontr

ol

ALU

dat

a bu

s

Pros

irenj

e op

eran

da

PRS(

E)

PSR

(I)

PSR

Sel

X X X X X X X X X X X X X X X X X X X X X X X X X XXXX XX X X X X

- Register Output Enable signali – dozvola da se sadržaj određenog registra pojavi na

magistrali, vode se na En ulaze registara, - Register Clock signali – taktni signal registra, odnosno dozvola upisa podatka koji je na

ulazu u registar, vode se na Clk ulaze registara, - Memorija RW i CS signali – signal izbora između upisa i čitanja (RW) i chip select

signal (CS) memorije, vode se na RW i CS ulaze memorije, respektivno, - ALU control signali – selektorski signali ALU, vode sa na ulaz ALUsel aritmetičko-

logičke jedinice, - ALU data bus signali – selektorski signali koji određuju pristup registara ALU megistrali

podataka, vode se na BusCode ulaz aritmetičko-logičke jedinice, - Proširenje operanda – selektorski signal koji određuje na koji način će operand biti

proširen, vodi se na ulaz znak bloka za proširenje operanda, - PSR(E) – setuje vrednost markera prekida E (Interuppt Enable), vodi se na ulaz E PSR

registra, - PSR(I) - setuje vrednost markera prekida I (Interuppt Request), vodi se na ulaz I PSR

registra, - PSRSel – selektorski signal PSR registra, vodi se na PSRSel ulaz ovog kola.

Mikroinstrukcije se mogu podeliti u četiri grupe:

1) Mikroinstrukcije za premeštanje podataka (eng. Data Movement micro-instructions), 2) ALU mikroinstrukcije, 3) Testne mikroinstrukcije, 4) Kontrolne mikroinstrukcije (eng. Processor Control micro-instructions)

Page 80: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

79

5.2.1. Mikroinstrukcije za premeštanje podataka To su mikroinstrukcije koje sadrže odgovarajuće kontrolne signale pomoću kojih se vrši premeštanje podataka među registrima. U sledećoj tabeli prikazane su sve mikroinstrukcije ovog tipa i kontorlni signali karakteristični za njih:

Register Output Enable Register Clock

Mem

orija

Mikroinstrukcije

PC

INC

SP

IR

M

AR

M

DR

A

B

A

LUx

ALU

y A

LUr

PSR

PC

IN

C

SP

IR

MA

R

MD

R

A

B

ALU

x A

LUy

ALU

r PS

R

RW

C

S ALU

con

trol

ALU

dat

a bu

s

Pros

irenj

e PR

S(E)

PS

R(I)

PS

RSe

l

A<-[MDR] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 A<-[ALUr] 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0

A<-[IR(operand)] 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0

B<-[MDR] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 B<-[ALUr] 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0

B<-[IR(operand)] 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 B<-[PC] 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0

PC<-[IR(operand)] 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PC<-[ALUr] 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0

PC<-[B] 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PC<-[MDR] 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PC<-[INC] 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 INC<-[PC] 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

ALUx<-[MDR] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 ALUx<-[A] 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 ALUx<-[B] 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0

ALUx<-[IR(operand)] 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 ALUx<-[PC] 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0

ALUx<-[ALUr] 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ALUx<-[SP] 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0

ALUy<-[A] 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 ALUy<-[B] 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0

ALUy<-[IR(operand)] 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0

MAR<-[PC] 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 MAR<-[IR(operand)] 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

MAR<-[ALUr] 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 MAR<-[A] 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 MAR<-[B] 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

MAR<-[SP] 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 MAR<-[MDR] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

MDR<-[A] 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 MDR<-[B] 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0

MDR<-[ALUr] 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 MDR<-[ALUx] 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 MDR<-[PSR] 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0

MDR<-[M[MAR]] 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0

Page 81: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

80

Register Output Enable Register Clock

Mem

orija

Mikroinstrukcije

PC

INC

SP

IR

M

AR

M

DR

A

B

A

LUx

ALU

y A

LUr

PSR

PC

IN

C

SP

IR

MA

R

MD

R

A

B

ALU

x A

LUy

ALU

r PS

R

RW

C

S ALU

con

trol

ALU

dat

a bu

s

Pros

irenj

e PR

S(E)

PS

R(I)

PS

RSe

l

M[MAR]<-[MDR] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 CU<-[IR(opcode)] 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

IR<-[MDR] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

SP<-[ALUx] 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 SP<-[ALUr] 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 SP<-[MDR] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

SP<-[IR(operand)] 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

PSR<-[MDR] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ALUy<-

[JUMPERS(IntBase)] 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1

ALUx<-[PSR(IntVec)] 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 PSR(IntVec)<-[IR(operand)] 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0

PSR(IntVec)<-[MDR] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0

5.2.2. ALU mikroinstrukcije

To su mikroinstrukcije koje sadrže odgovarajuće kontrolne signale pomoću kojih se vrši biranje operacije koju ALU treba da izvrši. U sledećoj tabeli prikazane su sve mikroinstrukcije ovog tipa i kontorlni signali karakteristični za njih:

Mikroinstrukcije

ALU

con

trol

ALUr=[ALUx]+[ALUy] 0 0 0 0

ALUr=[ALUx]+[ALUy]+[PSR(c)] 0 0 0 1

ALUr=[ALUx]-[ALUy] 0 0 1 0

ALUr=[ALUx]<<1 0 0 1 1

ALUr=[ALUx]>>1 0 1 0 0

ALUr=[ALUx]&[ALUy] 0 1 0 1

ALUr=[ALUx]|[ALUy] 0 1 1 0

ALUr=~[ALUx] 0 1 1 1

ALUr=~[ALUx]+1 1 0 0 0

ALUr=[ALUx]+1 1 0 0 1

ALUr=[ALUx]-1 1 0 1 0 ALUr(7:0)=[ALUx(15:8)] ALUr(15:8)=[ALUx(7:0)]

1 0 1 1

Page 82: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

81

5.2.3 Testne mikroinstrukcije To su mikroinstrukcije čiji je zadatak da provere stanje pojedinih markera.

Mikroinstrukcije cond

if(PSR(v)==1) 0 0 1 0

if(PSR(v)==0) 0 0 1 1

if(PSR(z)==1) 0 1 0 0

if(PSR(z)==0) 0 1 0 1

if(PSR(n)==1) 0 1 1 0

if(PSR(n)==0) 0 1 1 1

if(PSR(c)==1) 1 0 0 0

if(PSR(c)==0) 1 0 0 1

5.2.4. Kontrolne mikroinstrukcije To su mikroinstrukcije koje postavljaju markere prekida I i E na određeno stanje. U ovu grupu takođe spadaju i ALU Data Bus signali i signali za kontrolu memorije koji su već navedeni.

5.2.5. Primer sadržaja mikromemorije

U sledećoj tabeli prikazan je primer prvih nekoliko desetina memorijskih lokacija mikromemorije:

Register Output Enable Register Clock

Mem

orija

Adr

esa

(hex

)

cond BT

PC

INC

SP

IR

M

AR

M

DR

A

B

A

LUx

ALU

y A

LUr

PSR

PC

IN

C

SP

IR

MA

R

MD

R

A

B

ALU

x A

LUy

ALU

r PS

R

RW

C

S ALU

con

trol

ALU

dat

a bu

s

Pros

irenj

e PR

S(E)

PS

R(I)

PS

RSe

l

sledeca adresa

000 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 001 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 002 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 003 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 004 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

005 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

006 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X X X X X 007 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 X X X X X X X X X X X X 008 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

009 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

010 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X X X X X 011 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 X X X X X X X X X X X X 012 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

013 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

020 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 021 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 022 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 X X X X X X X X X X X X 023 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X X X X X

Page 83: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

82

Register Output Enable Register Clock

Mem

orija

Adr

esa

(hex

)

cond BT

PC

INC

SP

IR

M

AR

M

DR

A

B

A

LUx

ALU

y A

LUr

PSR

PC

IN

C

SP

IR

MA

R

MD

R

A

B

ALU

x A

LUy

ALU

r PS

R

RW

C

S ALU

con

trol

ALU

dat

a bu

s

Pros

irenj

e PR

S(E)

PS

R(I)

PS

RSe

l

sledeca adresa

024 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

025 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

030 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 031 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 032 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 X X X X X X X X X X X X 033 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X X X X X 034 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

035 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

040 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 041 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 042 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 043 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 044 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 045 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 X X X X X X X X X X X X 046 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X X X X X 047 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

048 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

050 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 051 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 052 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 053 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 054 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 055 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 X X X X X X X X X X X X 056 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X X X X X 057 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

058 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

060 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 X X X X X X X X X X X X 061 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X X X X X 062 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

063 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

070 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 X X X X X X X X X X X X 071 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X X X X X 072 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

073 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

080 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 081 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 082 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 X X X X X X X X X X X X 083 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X X X X X 084 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

085 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

090 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 091 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 092 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 X X X X X X X X X X X X 093 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X X X X X 094 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

095 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0A0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 X X X X X X X X X X X X 0A1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X X X X X 0A2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 0A3 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 X X X X X X X X X X X X 0A4 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X 0A5 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 X X X X X X X X X X X X 0A6 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 X X X X X X X X X X X X 0A7 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X X X X X X X X

0A8 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Iz ove tabele se može videti da je na kraju svake rutine postavljena kao sledeća adresa adresa fetch rutine. Na taj način se obezbeđuje da se po svakoj završenoj intrukciji pribavi nova iz memorije.

Page 84: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

83

Treba još napomenuti da se u jednom taktnom intervalu izvršava jedna mikroinstrukcija. Otuda veza između učestanosti taktnih intervala i brzine rada procesora. Na primer procesor čija je taktna učestanost 2GHz obavljeće jednu mikroinstukciju za 5x10-10s, što treba pomožiti sa brojem mikroinstrukcija konkretne instrukcije da bi se dobilo vreme potrebno za izvršenje te instrukcije. Iz ovoga se može zaključiti da je bitan faktor za povećanje brzine rada procesora sa mikroprogramskim upravljanjem i svođenje mikroprogramskih rutina na što je moguće manji broj mikroinstrukcija.

5.3. VHDL opis blokova upravljačke jedinice

5.3.1. VHDL opis bloka InterruptController (Kontroler prekida) Ovim blokom se, u okviru upravljačke jednice, predstavlja Kontroler prekida. Njegova uloga je da na izlazu daje signal prekida ukoliko su prekidi dozvoljeni (PSR(E) =1) i postoji zahtev za prekidom. Blok InterruptController ima sledeće portove:

- jednobitni ulaz E – signal dozvole prekida (ako je =1 prekidi su dozvoljeni),

- jednobitni ulaz I – signal zahteva prekida (ako je =1 postoji zahtev za prekidom, bilo spoljni ili unutrašnji),

- jednobitni izlaz Int – ako su i E i I jednice na ovom izlazu se pojavljuje signal (=1) koji govori upravljačkoj jednici da se mora izvršiti prekid.

------------------------------------------------------------------------------ -- -- Title : InterruptController -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity InterruptController is port(E : in STD_LOGIC; I : in STD_LOGIC; Int : out STD_LOGIC); end InterruptController; architecture InterruptController_arch of InterruptController is begin process (E, I) begin if (E = '1' and I = '1') then Int <= '1'; else

Page 85: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

84

Int<= '0'; end if; end process; end InterruptController_arch;

5.3.2. VHDL opis bloka CondBlk (Blok uslova grananja) Ovaj blok ispituje statusne markere iz ALU (koji se čuvaju u PSR) i na osnovu toga generiše signal koji dozvoljava grananje ili ne. Blok CondBlk ima sledeće portove:

- jednobitne ulaze C, N, V, Z – ulazi statusnih markera, - 4-bitni ulaz cond – signal na ovom ulazu je satstavni deo

mikroinstukcije, a naročito e bitan koj instrukcija grananja jer se ovim signal generiše koji marker treba proveriti da bi se izvršilo grananje,

- jednobitni izlaz condOut – signal sa ovog izlaza se vodi na blok logika i učestvuje u donošenju odluke izbora naredne mikroinstrukcije.

------------------------------------------------------------------------------ -- -- Title : Blok uslova grananja -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.numeric_std.all; entity CondBlk is port( V, Z, N, C : in STD_LOGIC; cond : in STD_LOGIC_VECTOR(3 downto 0); condOut : out STD_LOGIC); end CondBlk; architecture CondBlk_arch of CondBlk is begin process (cond, V, Z, N, C) begin if (cond = "0000") then condOut <= '0'; elsif (cond = "0001") then condOut <= '1'; elsif (cond = "0010") then condOut <= V; elsif (cond = "0011") then condOut <= not(V); elsif (cond = "0100") then condOut <= Z; elsif (cond = "0101") then condOut <= not(Z);

Page 86: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

85

elsif (cond = "0110") then condOut <= N; elsif (cond = "0111") then condOut <= not(N); elsif (cond = "1000") then condOut <= C; elsif (cond = "1001") then condOut <= not(C); end if; end process; end CondBlk_arch;

5.3.3. VHDL opis bloka Logika Ovo je blok u kome se, na osnovu rezultata iz Bloka uslova grananja i signala BT, generiše selektorski signal za izbor naredne adrese mikromemorije, odnosno naredne mikroistrukcije.

Blok Logika ima sledeće portove: - jednobitni ulaz BT – ovde se dovodi signal BT (eng. Branch Target)

koji je sastavni deo svake mikroistrukcije, - jednobitni ulaz Rst – signal resetovanja koji za posledicu ima

generisanje selektorskog signala koji se bira novi opkod. Na ovaj način se obezbeđuje da prilikom resetovanja procesora prva adresa mikroprogramskog ciklusa bude adresa fetch ciklusa,

- jednobitni ulaz condOut – signal sa izlaza Bloka uslova grananja, - 2-bitni izlaz sel – seletorski signal koj se vodi na selektor adresa.

------------------------------------------------------------------------------ -- -- Title : Logika -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity Logika is port( BT : in STD_LOGIC; condOut : in STD_LOGIC; Rst : in STD_LOGIC; sel : out STD_LOGIC_VECTOR(1 downto 0)); end Logika; architecture Logika_arch of Logika is begin process (BT, condOut, Rst) begin if (BT = '1') then sel <= "10"; elsif (BT = '0' and condOut = '0') then sel <= "00"; elsif (BT = '0' and condOut = '1') then sel <= "01";

Page 87: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

86

elsif (rising_edge(Rst)) then sel <= "10"; end if; end process; end Logika_arch;

5.3.4. VHDL opis bloka SA (Selektor adresa) Selektor adresa je multiplekser koji odlučuje koja će od tri raspoložive adrese mikromemorije biti prosleđena adresnom ulazu mikromemorije.

Blok SA ima sledeće portove: - 12-bitni ulaz Adr0 – mikromemorijska adresa koja

dolazi sa izlaza adresnog mapera i predstavlja adresu generisanu na osnovu opkoda, tj. prvu adresu mikroprogramske rutine date instrukcije,

- 12-bitni ulaz Adr1 - mikromemorijska adresa koja je sastavni deo mikroinstrukcije. Ova adresa ukazuje na prvu lokaciju mikro rutine operacije Fetch,

- 12-bitni ulaz Adr2 – inkrementovana tekuća mikromemorijska adresa. Prilikom izvršavanja rutina ovo će biti najćešće korišćena adresa jer su mikroinstrukcije rutina smešten u sukcesivnim lokacijama,

- 2-bitni ulaz Sel – selektorski signal na osnovu kojeg se odrežuje koja će od adresa sa ulaza biti prosleđena na izlaz,

- 12-bitni izlaz AdrOut – izlaz odabrane adrese koje se vodi na mikro MAR registar. ------------------------------------------------------------------------------ -- -- Title : Selektor Adresa -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity SA is port(Sel : in STD_LOGIC_VECTOR(1 downto 0); Adr0, Adr1, Adr2 : in STD_LOGIC_VECTOR(11 downto 0); AdrOut : out STD_LOGIC_VECTOR(11 downto 0)); end SA; architecture SA_arch of SA is begin process (Sel, Adr0, Adr1, Adr2) begin

Page 88: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

87

if (Sel = "00") then AdrOut <= Adr0; -- adresa iz mapera (novi opkod) elsif (Sel = "01") then AdrOut <= Adr1; -- adresa iz mikromemorije elsif (Sel = "10") then AdrOut <= Adr2; -- inkrementovana tekuca adresa end if; end process; end SA_arch;

5.3.5. VHDL opis bloka AdrMapper (Adresni maper) Ovo je blok u kojem se, na osnovu opkoda instrukcije, generiše adresa prve mikroinstrukcije u rutini. To se radi prostim dodavanjem 4-bitnog broja nula postojećem opkodu. Izuzetak od ovoga je samo u slučaju prve aritmetičke instrukcije ADD #data, A. Naime, da bi se omogućilo da FETCH rutina bude smeštena u prvim lokacijama mikromemorije, ADD #data,A će imati prvu adresu koja je proširena brojem 6 (jer FETCH ima 6 mikroinstrukcija). Blok AdrMapper ima sledeće portove:

- 8-bitni ulaz Opkod – dovodi se opkod instrukcije, - jednobitni ulaz Prekid – ako je signal na ovom

ulazu =1 znači da postoji prekid (dozvoljen je i postoji zahtev). Tada adresni maper generiše adresu mikroprogramske rutine prekida (eng. Interuppt Routine),

- 12-bitni izlaz PrvaAdresa – generisana mikro adresa. ------------------------------------------------------------------------------ -- -- Title : Adresni Mapper -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity AdrMapper is port(Prekid : in STD_LOGIC; Opkod : in STD_LOGIC_VECTOR(7 downto 0); PrvaAdresa : out STD_LOGIC_VECTOR(11 downto 0)); end AdrMapper; architecture AdrMapper_arch of AdrMapper is begin process (Opkod) begin

Page 89: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

88

if (Prekid = '0') then if (Opkod = "00000000") then PrvaAdresa(11 downto 0) <= Opkod & "0110"; -- mikroadresa ADD #data,A rutine else PrvaAdresa(11 downto 0) <= Opkod & "0000"; -- mikroadresa bilo koje rutine end if; elsif (Prekid = '1') then PrvaAdresa(11 downto 0) <= "111111010000"; -- mikroadresa rutine prekida end if; end process; end AdrMapper_arch;

5.3.6. VHDL opis bloka MicroMAR

Ovo je 12-bitni memorijsko adresni registar u kojem se čuva tekuća adresa mikromemorije. Blok MicroMAR ima sledeće portove:

- 12-bitni ulaz AdrIn – mikroprogramska adresa dobijena iz selektora adresa,

- jednobitni ulaz Clk – takt registra, - jednobitni ulaz Rst – reset registra, - 12-bitni izlaz AdrOut – adresa kojom se obraća

mikromemoriji. ------------------------------------------------------------------------------ -- -- Title : MicroMAR -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity MicroMAR is port( Clk, Rst : in STD_LOGIC; AdrIn : in STD_LOGIC_VECTOR(11 downto 0); AdrOut : out STD_LOGIC_VECTOR(11 downto 0)); end MicroMAR; architecture MicroMAR_arch of MicroMAR is signal AdrTmp: STD_LOGIC_VECTOR(11 downto 0); begin process (Clk, Rst)

Page 90: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

89

begin if (Rst = '1') then AdrTmp <= (others => '0'); elsif (Clk'event and Clk = '1') then AdrTmp <= AdrIn; end if; end process; AdrOut <= AdrTmp; end MicroMAR_arch;

5.3.7. VHDL opis bloka MicroINC

Ovo je 12-bitni registar inkrementer koji tekuću adresu mikromemorije uvećava za 1. Blok MicroINC ima sledeće portove: - jednobitni ulaz Clk – takt registra, - jednobitni ulaz Rst – reset registra, - 12-bitni ulaz INCin – ulaz za podatke registra, - 12-bitni izlaz INCout – inkrementovana adresa sa ulaza.

------------------------------------------------------------------------------ -- -- Title : MicroINC -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; entity MicroINC is port( Rst, Clk : in STD_LOGIC; INCin : in STD_LOGIC_VECTOR(11 downto 0); INCout : out STD_LOGIC_VECTOR(11 downto 0)); end MicroINC; architecture MicroINC_arch of MicroINC is signal INCTmp: STD_LOGIC_VECTOR(11 downto 0); begin process (Clk, Rst) begin if (Rst = '1') then INCTmp <= (others => '0');

Page 91: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

90

elsif (Clk'event and Clk = '1') then INCTmp <= INCin + 1; end if; end process; INCout <= INCTmp; end MicroINC_arch;

5.3.8. VHDL opis bloka microMemory (Mikromemorija) Ovo blok je memorija upravljačke jednice u kojoj se nalaze mikroinstrukcije. Memorijske adrese su 12-bitne što znači da poseduje 4096 memorijskih lokacija. Blok microMemory ima sledeće portove:

- 12-bitni ulaz Address – adresni ulaz mikromemorije,

- 52-bitni izlaz microData – izlaz podataka iz lokacija mikromemorije, odnosno kontrolni signali.

------------------------------------------------------------------------------ -- -- Title : microMemory -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity microMemory is port(Address : in STD_LOGIC_VECTOR(11 downto 0); microData : inout STD_LOGIC_VECTOR(52 downto 0)); end microMemory; architecture microMemory_arch of microMemory is type ram_type is array (0 to 4095) of STD_LOGIC_VECTOR(52 downto 0); signal ram_tmp: ram_type; begin microData <= ram_tmp(conv_integer(Address)); -- citanje end microMemory_arch;

Page 92: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

91

5.3.9. VHDL opis bloka MicroMDR Ovo je 52-bitni memorijski registar podataka koji memoriše tekuću mikroinstrukciju i deli je na odgovarajuće kontrolne signale na svom izlazu. Blok MicroMDR ima sledeće portove:

- jednobitni ulaz Clk – takt registra, - jednobitni ulaz Rst – reset registra, - 52-bitni ulaz microData – sadržaj memorijske lokacije

mikromemorije, - 12-bitni izlaz Adresa – adresa naredne mikroinstrukcije

specificirana u okviru tekuće mikroinstrukcije, - jednobitni izlaz BT – signal BT specificiran u okviru

tekuće mikroinstrukcije, - 36-bitni izlaz Control – kontolni signali koji upravljaju radom izvršne jedinice, - 4-bitni izlaz cond – signal uslova grananja.

------------------------------------------------------------------------------ -- -- Title : MicroMDR -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity MicroMDR is port( Clk, Rst : in STD_LOGIC; microData : in STD_LOGIC_VECTOR(52 downto 0); BT : out STD_LOGIC; cond : out STD_LOGIC_VECTOR(3 downto 0); Control : out STD_LOGIC_VECTOR(35 downto 0); Adresa : out STD_LOGIC_VECTOR(11 downto 0)); end MicroMDR; architecture MicroMDR_arch of MicroMDR is signal DataTmp: STD_LOGIC_VECTOR(52 downto 0); begin process (Clk, Rst) begin if (Rst = '1') then DataTmp <= (others => '0'); elsif (Clk'event and Clk = '1') then DataTmp <= microData; end if; end process; cond(3 downto 0) <= DataTmp(52 downto 49); BT <= DataTmp(48);

Page 93: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

92

Control(35 downto 0) <= DataTmp(47 downto 12); Adresa(11 downto 0) <= DataTmp(11 downto 0); end MicroMDR_arch;

Page 94: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

93

5.3.10. VHDL opis bloka CU (Upravljačka jedinica) Kada je završen opis svih gradivnih blokova može se izvršiti i strukturni VHDL opis i samog bloka upravljačke jednice, koji opisuje veze između pojedinih blokova. Blok CU ima sledeće portove:

- jednobitni ulaz Clock – taktni signal procesora, - 8-bitni ulaz Opkod – opkod tekuće instrukcije, - jednobitni ulaz Reset – signal kojim se resetuje stanje

procesora, pritom sadržaj mikromemorije ostaje isti, - jednobitni ulazi IntEnable i IntRequest – signali dozvole

i zahteva prekida, - jednobitni ulazi Cin, Nin, Vin, Zin – statusni markeri

ALU koji se dovode iz PSR, - 36-bitni izlaz Control – upravljački signali izvršne

jedinice. ------------------------------------------------------------------------------ -- -- Title : Upravljacka jedinica -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.std_logic_1164.all; entity CU is port(Clock,Reset,IntEnable,IntRequest,Cin,Nin,Vin,Zin : in STD_LOGIC; Opkod : in STD_LOGIC_VECTOR(7 downto 0); Control : out STD_LOGIC_VECTOR(35 downto 0)); end CU; architecture CU_arch of CU is component adrmapper port (Opkod : in STD_LOGIC_VECTOR(7 downto 0); Prekid : in STD_LOGIC; PrvaAdresa : out STD_LOGIC_VECTOR(11 downto 0)); end component; component CondBlk

Page 95: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

94

port (C : in STD_LOGIC; N : in STD_LOGIC; V : in STD_LOGIC; Z : in STD_LOGIC; cond : in STD_LOGIC_VECTOR(3 downto 0); condOut : out STD_LOGIC); end component; component InterruptController port (E : in STD_LOGIC; I : in STD_LOGIC; Int : out STD_LOGIC); end component; component Logika port (BT : in STD_LOGIC; Rst : in STD_LOGIC; condOut : in STD_LOGIC; sel : out STD_LOGIC_VECTOR(1 downto 0)); end component; component MicroINC port (Clk : in STD_LOGIC; INCin : in STD_LOGIC_VECTOR(11 downto 0); Rst : in STD_LOGIC; INCout : out STD_LOGIC_VECTOR(11 downto 0)); end component; component MicroMAR port (AdrIn : in STD_LOGIC_VECTOR(11 downto 0); Clk : in STD_LOGIC; Rst : in STD_LOGIC; AdrOut : out STD_LOGIC_VECTOR(11 downto 0)); end component; component MicroMDR port (Clk : in STD_LOGIC; Rst : in STD_LOGIC; microData : in STD_LOGIC_VECTOR(52 downto 0); Adresa : out STD_LOGIC_VECTOR(11 downto 0); BT : out STD_LOGIC; Control : out STD_LOGIC_VECTOR(35 downto 0); cond : out STD_LOGIC_VECTOR(3 downto 0)); end component; component microMemory port (Address : in STD_LOGIC_VECTOR(11 downto 0); microData : inout STD_LOGIC_VECTOR(52 downto 0)); end component; component SA port (Adr0 : in STD_LOGIC_VECTOR(11 downto 0); Adr1 : in STD_LOGIC_VECTOR(11 downto 0); Adr2 : in STD_LOGIC_VECTOR(11 downto 0); Sel : in STD_LOGIC_VECTOR(1 downto 0); AdrOut : out STD_LOGIC_VECTOR(11 downto 0)); end component; signal BT, Prekid, condOut : STD_LOGIC; signal Adr0,Adr1,Adr2,adresa: STD_LOGIC_VECTOR (11 downto 0); signal cond : STD_LOGIC_VECTOR (3 downto 0); signal microData : STD_LOGIC_VECTOR (52 downto 0); signal SAout : STD_LOGIC_VECTOR (11 downto 0); signal Sel : STD_LOGIC_VECTOR (1 downto 0); begin

Page 96: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

95

U1 : adrmapper port map(Opkod => Opkod,Prekid => Prekid,PrvaAdresa => Adr0); U2 : MicroMAR port map(AdrIn => SAout,AdrOut => adresa,Clk => Clock,Rst => Reset); U3 : SA port map(Adr0 => Adr0,Adr1 => Adr1,Adr2 => Adr2,AdrOut => SAout,Sel => Sel); U4 : MicroINC port map(Clk => Clock,INCin => adresa,INCout => Adr2,Rst => Reset); U5 : microMemory port map(Address => adresa,microData => microData); U6 : MicroMDR port map(Adresa => Adr1,BT => BT,Clk => Clock,Control => Control,Rst => Reset,cond => cond,microData => microData); U7 : Logika port map(BT => BT,Rst => Reset,condOut => condOut,sel => Sel); U8 : CondBlk port map(C => Cin,N => Nin,V => Vin,Z => Zin,cond => cond,condOut => condOut); U9 : InterruptController port map(E => IntEnable,I => IntRequest,Int => Prekid); end CU_arch;

5.4. Kolo prekida Kolo prekida nije kolo koje je sastavni deo upravljačke jednice, ali se nalazi pred ulazom za prekide upravljačke jednice. To je jednostavno ILI kolo koje ima ulogu ne dozvoli da više zahteva za prekidom dođe na ulaz upravljačke jednice. Naime, prekidi mogu biti generisani kao spoljni ali i kao unutrašnji (kontrolnim signalima procesora ili softverski).

5.4.1. VHDL opis bloka IntOR Blok IntOR ima lsedeće portove:

- jednobitni ulaz IntSpoljnji – ulaz na koji se dovodi spoljnji zahtev za prekidom,

- jednobitni ulaz IntUnutr – ulaz na koji se dovodi unutrašnji zahtev za prekidom, prethodno sačuvan u registru PSR,

- jednobitni izlaz Interuppt – izlaz na kojem je generisan signal zahteva za prekidom.

------------------------------------------------------------------------------ -- -- Title : IntOR -- Design : JASP -- Author : Bratislav Dzombic (8627)

Page 97: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

96

-- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; entity IntOR is port(IntSpoljnji : in STD_LOGIC; IntUnutr : in STD_LOGIC; Interuppt : out STD_LOGIC); end IntOR; architecture IntOR_arch of IntOR is begin process (IntSpoljnji, IntUnutr) begin if (IntSpoljnji = '0'and IntUnutr = '1') then Interuppt <= '0'; else Interuppt <= '1'; end if; end process; end IntOR_arch;

Page 98: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

97

6. PROCESOR JASP U ovom poglavlju biće prikazan i VHDL opis procesora JASP. Do sada opisana kola su povezana na sledeći način:

Blok JASP ima sledeće portove:

- jednobitni ulaz Interrupt – ulaz signala spoljnoh zahteva za prekidom,

- jednobitni ulaz MainClock – ulaz taktnog signala procesora,

- jednobitni ulaz MainReset – ulaz signala kojim se resetuje stanje procesora, ne menjajući sadržaj mikromemorije,

- 16-bitni izlaz Adresa – izlaz ka adresnom ulazu memorije,

- jednobitni izlaz MemCS – kontrolni signal memorije (Chip Select), - jednobitni izlaz MemRW – kontrolni signal memorije (dozvola upisa i čitanja),

Page 99: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

98

- 16-bitni ulaz/izlaz Podaci – port preko kojeg se podaci šalju memoriji, odnosno preko kojeg se dobojaju iz memorije.

------------------------------------------------------------------------------ -- -- Title : Procesor JASP -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.std_logic_1164.all; entity JASP is port(Interrupt : in STD_LOGIC; MainClock : in STD_LOGIC; MainReset : in STD_LOGIC; MemCS : out STD_LOGIC; MemRW : out STD_LOGIC; Adresa : out STD_LOGIC_VECTOR(15 downto 0); Podaci : inout STD_LOGIC_VECTOR(15 downto 0)); end JASP; architecture JASP_arch of JASP is component ALU port ( ALUrClk : in STD_LOGIC; ALUrEn : in STD_LOGIC; ALUsel : in STD_LOGIC_VECTOR(3 downto 0); ALUxClk : in STD_LOGIC; ALUxEn : in STD_LOGIC; ALUyClk : in STD_LOGIC; ALUyEn : in STD_LOGIC; BusCode : in STD_LOGIC_VECTOR(1 downto 0); PSRc : in STD_LOGIC; ResetALU : in STD_LOGIC; C : out STD_LOGIC; N : out STD_LOGIC; V : out STD_LOGIC; Z : out STD_LOGIC; DataBus : inout STD_LOGIC_VECTOR(15 downto 0)); end component; component CU port ( Cin : in STD_LOGIC; Clock : in STD_LOGIC; IntEnable : in STD_LOGIC; IntRequest : in STD_LOGIC; Nin : in STD_LOGIC; Opkod : in STD_LOGIC_VECTOR(7 downto 0); Reset : in STD_LOGIC; Vin : in STD_LOGIC; Zin : in STD_LOGIC;

Page 100: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

99

Control : out STD_LOGIC_VECTOR(35 downto 0)); end component; component INC port ( Clk : in STD_LOGIC; En : in STD_LOGIC; Rst : in STD_LOGIC; Data : inout STD_LOGIC_VECTOR(15 downto 0)); end component; component IntOR port ( IntSpoljnji : in STD_LOGIC; IntUnutr : in STD_LOGIC; Interuppt : out STD_LOGIC); end component; component IR port ( Clk : in STD_LOGIC; En : in STD_LOGIC; IRin : in STD_LOGIC_VECTOR(15 downto 0); Rst : in STD_LOGIC; opcode : out STD_LOGIC_VECTOR(7 downto 0); operand : out STD_LOGIC_VECTOR(7 downto 0)); end component; component ProsOper port ( Oper : in STD_LOGIC_VECTOR(7 downto 0); znak : in STD_LOGIC; Operand : out STD_LOGIC_VECTOR(15 downto 0)); end component; component psr port ( C : in STD_LOGIC; Clk : in STD_LOGIC; E : in STD_LOGIC; En : in STD_LOGIC; I : in STD_LOGIC; IntVec : in STD_LOGIC_VECTOR(15 downto 0); N : in STD_LOGIC; PSRSel : in STD_LOGIC; Rst : in STD_LOGIC; V : in STD_LOGIC; Z : in STD_LOGIC; PSRC : out STD_LOGIC; PSRE : out STD_LOGIC; PSRI : out STD_LOGIC; PSRN : out STD_LOGIC; PSRV : out STD_LOGIC; PSRZ : out STD_LOGIC; PSRout : out STD_LOGIC_VECTOR(15 downto 0)); end component; component reg port ( Clk : in STD_LOGIC; En : in STD_LOGIC; Rst : in STD_LOGIC; Data : inout STD_LOGIC_VECTOR(15 downto 0)); end component;

Page 101: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

100

signal ALUc : STD_LOGIC; signal ALUn : STD_LOGIC; signal ALUv : STD_LOGIC; signal ALUz : STD_LOGIC; signal Int1 : STD_LOGIC; signal Int2 : STD_LOGIC; signal PSRc : STD_LOGIC; signal PSRe : STD_LOGIC; signal PSRn : STD_LOGIC; signal PSRv : STD_LOGIC; signal PSRz : STD_LOGIC; signal Control : STD_LOGIC_VECTOR (35 downto 0); signal DataBus : STD_LOGIC_VECTOR (15 downto 0); signal Oper : STD_LOGIC_VECTOR (7 downto 0); signal Opkod : STD_LOGIC_VECTOR (7 downto 0); begin A : reg port map( Clk => Control(17), Data => DataBus, En => Control(29), Rst => MainReset); ALJ : ALU port map( ALUsel(0) => Control(6), ALUsel(1) => Control(7), ALUsel(2) => Control(8), ALUsel(3) => Control(9), ALUrClk => Control(13), ALUrEn => Control(25), ALUxClk => Control(15), ALUxEn => Control(27), ALUyClk => Control(14), ALUyEn => Control(26), BusCode(0) => Control(4), BusCode(1) => Control(5), C => ALUc, DataBus => DataBus, N => ALUn, PSRc => PSRc, ResetALU => MainReset, V => ALUv, Z => ALUz); B : reg port map( Clk => Control(16), Data => DataBus, En => Control(28), Rst => MainReset); MAR : reg port map( Clk => Control(19), Data => DataBus, En => Control(31), Rst => MainReset); MDR : reg port map(

Page 102: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

101

Clk => Control(18), Data => DataBus, En => Control(30), Rst => MainReset); PC : reg port map( Clk => Control(23), Data => DataBus, En => Control(35), Rst => MainReset); PSRreg : psr port map( C => ALUc, Clk => Control(12), E => Control(2), En => Control(24), I => Control(1), IntVec => DataBus, N => ALUn, PSRC => PSRc, PSRE => PSRe, PSRI => Int1, PSRN => PSRn, PSRSel => Control(0), PSRV => PSRv, PSRZ => PSRz, PSRout => DataBus, Rst => MainReset, V => ALUv, Z => ALUz); Prosirenje : ProsOper port map( Oper => Oper, Operand => DataBus, znak => Control(3)); SP : reg port map( Clk => Control(21), Data => DataBus, En => Control(33), Rst => MainReset); U1 : CU port map( Cin => PSRc, Clock => MainClock, Control => Control, IntEnable => PSRe, IntRequest => Int2, Nin => PSRn, Opkod => Opkod, Reset => MainReset, Vin => PSRv, Zin => PSRz); U2 : IntOR port map( IntSpoljnji => Interrupt, IntUnutr => Int1, Interuppt => Int2); inkrement : INC

Page 103: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

102

port map( Clk => Control(22), Data => DataBus, En => Control(34), Rst => MainReset); instrreg : IR port map( Clk => Control(20), En => Control(32), IRin => DataBus, Rst => MainReset, opcode => Opkod, operand => Oper); Adresa <= DataBus; MemCS <= Control(10); MemRW <= Control(11); DataBus <= Podaci; Podaci <= DataBus; end JASP_arch;

Page 104: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

103

7. MEMORIJA Procesor, kao što je već rečeno, sa memorijom čini osnovu računarskog sistema. Memorija je element koji je sposoban da pamti veći broj podataka, kojima može selektivno da se pristupa. RAM (eng. Random Access Memory) je memorija iz koje se mogu čitati i u koju se mogu upisivati podaci. Memorija koju ovde opisujemo je RAM memorija koja koristi 16-bitne adrese, što znači da ima maksimalno do 65535 memorijskih lokacija. U svakoj lokaciji može se zapamtiti podatak dužine 16 bita. U sledećoj tabelu prikazana je mapa memorije:

FFFF

Ne postoji u osnovnoj konfiguaciji

1000 0FFF RAM

Korisnički programi i podaci

0100 00FF

Rezervisano

00F8 00F7

Tabela vektora prekida

00F0 00EF Rezervisano 00EE Tajmer 00ED Godina 00EC Mesec 00EB Dan 00EA Čas 00E9 Minut

00E8 Sekunda

Sistemski sat

00E7

Za komunikaciju sa periferijama

00E4 00E3 OSR 00E2 ODR 00E1 ISR

00E0 IDR 00DF RAM

Korisnički programi i podaci

0000

Page 105: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

104

7.1. VHDL opis bloka Memory Blok memorije ima sledeće portove:

- 16-bitni ulaz Address – adresni ulaz memorije, - jednobitni ulaz CS – chip select signal, u slučaju da je

CS=1 memorija je dostupna za korišćenje, u slučaju CS=0 isključuje sve funkcije RAM-a, ne menjajući mu sadržaj. Ovo je prednost po pitanju potrošnje energije,

- jednobitni ulaz RW – kontrolni signal kojim se određuje da li se iz memorije čita (RW=1) ili se u memoriju upisuje podatak (RW=0),

- 16-bitni ulaz/izlaz Data – ulaz, odnosno izlaz podataka. ------------------------------------------------------------------------------ -- -- Title : Memorija -- Design : JASP -- Author : Bratislav Dzombic (8627) -- Company : Elektronski Fakultet u Nisu -- ------------------------------------------------------------------------------ library IEEE; use IEEE.STD_LOGIC_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity Memory is port( RW : in STD_LOGIC; -- citanje (1) ili upis (0) u memoriju CS : in STD_LOGIC; -- CS=1 RAM ukljucen, CS=0 RAM iskljucen Address : in STD_LOGIC_VECTOR(15 downto 0); -- adresa mem. lokacije Data : inout STD_LOGIC_VECTOR(15 downto 0)); -- port podataka end Memory; architecture Memory_arch of Memory is type ram_type is array (0 to 65535) of STD_LOGIC_VECTOR(15 downto 0); signal ram_tmp: ram_type; begin process (Address, RW, CS) begin if (CS = '1') then if (RW = '1') then Data <= ram_tmp(conv_integer(Address)); -- citanje else ram_tmp(conv_integer(address)) <= Data; -- upis end if; else Data <= (others => 'Z'); -- stanje za CS=0 end if; end process;

Page 106: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

105

end Memory_arch;

Page 107: VHDL opis procesora JASPes.elfak.ni.ac.rs/Papers/Bratislav Dzombic (8627) - VHDL...Rad je podeljen na sedam poglavlja: - prva dva su teorijski uvod u VHDL i rad procesora, - 3, 4,

Bratislav Džombić (8627) VHDL opis procesora JASP

106

LITERATURA

• Mark Burrell – „Fundamentals of Computer Architecture”, Palgrave Macmillan, 2004

• Mile Stojčev – “RICS, CISC i DSP procesori”, Elektronski Fakultet Niš, 1997

• Mile K. Stojčev, Saša S. Ristić, Miloš D. Krstić – “Zbirka zadataka iz mikroprocesora i mikroračunara”, Elektronski Fakultet Niš, 1999

• Prof.dr Milunka Damnjanović (kao urednik) i grupa predavača na Elektronskom fakultetu u Nišu – “Praktikum laboratorijskih vežbanja iz projektovanja i testiranja elektronskih kola i sitema”, Elektronski Fakultet Niš, 2000

• J. Mirkowski, M. Kapustka, Z. Skowronski, A. Biniszkiewicz – “Interactive VHDL Tutorial REV.2.1”, Evita ™, 1998