You are on page 1of 11

Finalni laboratorijski projekat – Procesor 2014/15

FINALNI LABORATORIJSKI PROJEKAT


Procesor

Potrebno predznanje
 Urađen laboratorijski zadatak 5
 Arhitekture procesora
 Projektovanje upravljačke jedinice digitalnih sistema
 Osnovno znanje asemblerskog programiranja

Šta će biti naučeno tokom izrade vežbe?


Tokom izrade projekta:

 Proširidete strukturu za računanje koju ste realizovali u prethodnoj vežbi


 Dodadete instrukcioni registar i programski brojač u vaš procesor
 Implementiradete dve memorije – za podatke i instrukcije
 Projektovadete opštu upravljačku jedinicu zasnovanu na automatu koja odgovara na instrukcije
 Definisadete skup instrukcija za procesor
 Implementiradete aritmetičke instrukcije, skokove i instrukcije za rad sa memorijom
 Programiradete vaš procesor

Apstrakt i motivacija
Tokom izrade finalnog projekta, primenidete čitavo znanje koje ste stekli tokom semestra. Digitalni sistemi su
svoju najvedu mod pronašli u domenu računanja, tako da de vaš konačni zadatak biti da napravite univerzalnu
strukturu za računanje – procesor. Ovaj procesor de ipak biti dosta jednostavniji od modernih procesora, ali de
sadržati sve osnovne elemente koje ima i svaki moderan procesor – aritmetičko-logičku jedinicu, upravljačku
jedinicu, registre, pristup memoriji. Vaš procesor de podržavati aritmetičke instrukcije, instrukcije skoka i
instrukcije pristupa memoriji. Projektujudi ovaj procesor, naučidete principe procesorske arhitekture i primenidete
vaše znanje stečeno na ovom predmetu da napravite veoma koristan sistem. I naravno, na kraju dete modi pisati
programe za vaš sopstveni procesor!

Šta treba doneti na termin laboratorijske vežbe?


 Blok šemu i opis automata za upravljačku jedinicu procesora.
 VHDL opis krajnjeg koraka u realizaciji sistema (međukoraci nisu potrebni) – krajnji korak je poslednji
korak koji uspete da realizujete.
 Testbench za krajnji korak sistema.
 Generisanu .bit datoteku za krajnji korak sistema.

1
Finalni laboratorijski projekat – Procesor 2014/15

ZADACI

1. Pripremni koraci
Ukoliko ste uspešno uradili laboratorijski zadatak 5, otvorite isti projekat. Kao prvi korak, dodademo još neke
komponente u naš projekat, koje de biti potrebne kako bi naša upravljačka jedinica postala opšta i podržavala rad
sa instrukcijama.

1.1. Brojač

U datoteci cnt.vhd realizovati 16-bitni brojač sa dozvolom upisa i brojanja. Brojač treba da ima mogudnost
paralelnog upisa, uvedanja vrednosti za 1 i čuvanja stare vrednosti. Signal dozvole rada brojača iEN ima vedi
prioritet od signala dozvole upisa.

Tabela 1-1. Prolazi brojača

Prolaz Smer Funkcija


iCLK in signal takta
inRST in signal reseta, aktivan na niskom logičkom nivou
iD [15:0] in ulazni podatak
signal dozvole brojača, aktivan na visokom nivou,
iEN in
ako je na niskom nivou brojač zadržava vrednost
signal dozvole upisa, ako je na visokom nivou brojač
iLOAD in preuzima vrednost sa ulaza ID, a ako je na niskom
nivou brojač uvedava vrednost za 1
oQ [15:0] out vrednost brojača

1.2. Memorija za instrukcije

U datoteci instr_rom.vhd realizovati kombinacionu ROM memoriju kapaciteta 32 reči širine 15 bita. ROM
memorija de se koristiti za čuvanje instrukcija procesora, odn. programa. ROM memorija ima omogudeno samo
čitanje, zbog čega se realizuje kombinaciono.

Tabela 1-2. Prolazi memorije

Prolaz Smer Funkcija


iA [4:0] in adresa
oQ [14:0] out izlazni podatak

Vrednosti u ROM memoriji neka za početak budu proizvoljne (npr. sve 0x0000). Ovo demo modifikovati
kasnije.

2
Finalni laboratorijski projekat – Procesor 2014/15

1.3. Memorija za podatke

U datoteci data_ram.vhd realizovati sinhronu RAM memoriju kapaciteta 32 reči širine 16 bita. RAM memorija
de se koristiti za smeštanje podataka. RAM memorija ima omogudeno i čitanje i pisanje, zbog čega je realizovana
kao sekvencijalna mreža.

Tabela 1-3. Prolazi memorije

Prolaz Smer Funkcija


iCLK in signal takta
inRST in signal reseta aktivan na niskom logičkom nivou
iA [4:0] in adresa
iD [15:0] in ulazni podatak
iWE in dozvola upisa podatka
oQ [15:0] out izlazni podatak

Upis u memoriju kontroliše dozvola upisa, a izlaz uvek ima vrednost lokacije na adresi koja se u datom
trenutku nalazi na adresnom ulazu. Početne vrednosti RAM memorije treba da budu postavljene na 0x0000. Ovo
demo modifikovati kasnije.

2. Modifikovan vrh hijerarhije procesora


Vrh hijerarhije procesora treba modifikovati prema slici 2-1. Dodatne komponente, u odnosu na vrh
hijerarhije iz prethodne vežbe su:

 Instrukcioni registar IR koji se koristi za čuvanje trenutno izvršavane instrukcije


 Programski brojač PC koji se koristi za čuvanje adrese trenutno izvršavane instrukcije.

Prolazi vrha hijerarhije su sumirani u tabeli 2-1. Četiri prolaza su opciona, ukoliko ste se odlučili da radite i sa
memorijom za podatke.

Tabela 2-1. Prolazi vrha hijerarhije procesora

Prolaz(i) Smer Funkcija


iCLK in signal takta
inRST in signal reseta, aktivan na niskom logičkom nivou
iINSTR [14:0] in instrukcija iz memorije za instrukcije
iDATA [15:0] in podatak iz memorije za podatke (opciono)
vrednost programskog brojača, za adresiranje
oPC [15:0] out
memorije za instrukcije
oDATA [15:0] out vrednost za upis u memoriju za podatke (opciono)
oADDR [15:0] out adresa za memoriju za podatke (opciono)
oMEM_WE out dozvola upisa u memoriju za podatke (opciono)

3
Finalni laboratorijski projekat – Procesor 2014/15

Napomena: instrukcioni registar je širine 15 bita, što je različito od svih ostalih registara u procesoru, koji su
16 bita. Zbog ovoga, možete ga implementirati kao 16-bitni registar vodedi računa da njegov ulaz i izlaz budu 15-
bitni (zanemarujete najviši bit pri čitanju, a proširujete pri pisanju) ili da modifikujete opis registra u reg.vhd tako
da prihvata generičke parametre.

sR0 sR7 iDATA [15:0] sR0 sR7 iDATA [15:0]


... ...
iCLK iCLK sMUXA_SEL
inRST R0 ... inRST R7 [3:0] MUXA MUXB

sREG_WE[0] sREG_WE[7] sMUXB_SEL


[3:0]
sMUXA [15:0] sMUXB [15:0]
sR0 sR7 iCLK iCLK
... inRST
sA_WE
A inRST
sB_WE
B

sZERO
sREG_WE [7:0]
sSIGN
iINSTR[14:0] sCARRY sA_WE
sALU_SEL [3:0]
sB_WE ALU
iCLK
sC_WE
inRST IR
sIR_WE sIR_WE
sRESULT[15:0]
sPC_IN[15:0] sIR[14:0] CONTROL sPC_IN [15:0]
UNIT iCLK iCLK sZERO
iCLK inRST C inRST sSIGN
sPC_EN sC_WE
ZSC
PC sMUXA_SEL [3:0] sC_WE sCARRY
inRST sPC_LOAD
sMUXB_SEL [3:0]
oDATA [15:0]
sALU_SEL [3:0]
iCLK sPC [15:0] oPC [15:0]
inRST sMEM_WE
sMEM_WE oMEM_WE
sMUXB [15:0] oADDR [15:0]

Slika 2-1. Vrh hijerarhije procesora

3. Opšta upravljačka jedinica


U nastavku, implementirademo opštu upravljačku jedinicu koja prihvata instrukcije i izvršava ih, definišudi
vrednosti kontrolnih signala ostatku procesora.

Trenutna instrukcija iINSTR[14:0+ se smešta u registar instrukcije (IR), ako je aktivan signal dozvole sIR_WE.

Ulazni podaci se preko 16-bitnog ulaza iDATAi multipleksera upisuju u registre A i B. Izlaz multipleksera su 16-
bitne magistrala podataka sMUXA i sMUXB, kojesu ujedno i ulazi registara A i B. Aritmetičko logička jedinica
izvršava operacije tako što se prvi operand smesti u registar A i drugi operand smesti u registar B u jednom ciklusu
takta, a u narednom ciklusu serezultat operacijesmešta u registar C, registar za smeštanje rezultata, a nakon toga
rezultat se može proslediti u neki od registara opšte namene R0-R7.

Upravljačka jedinica treba da generiše selekcione i signale dozvole ostalih delova digitalnog sistema kao sto
su: sREG_WE[7:0] (dozvole upisa u registre opšte namene R0-R7), sA_WE, sB_WE i sC_WE (dozvole upisa u
registre A, B i C), sIR_WE (dozvola upisa u instrukcioni registar), sPC_IN, sPC_EN i sPC_LOAD (kontrolni signali i
ulaz programskog brojača), sMUXA_SEL*3:0] i sMUXB_SEL[3:0] (odabir prvog i drugog operanda), sALU_SEL (kod
operacije aritmetičko logičke jedinice) i sMEM_WE (dozvola upisa u memoriju).

Na izlaz procesora se prosleđuju:16-bitni izlazni podatak ka memoriji (oDATA), 16-bitna vrednost


programskog brojača (oPC) i dozvola upisa u memoriju (oMEM_WE). Prolazi su sumirani u tabeli 3-1.

4
Finalni laboratorijski projekat – Procesor 2014/15

Tabela 3-1. Prolazi upravljačke jedinice

Prolaz(i) Smer Funkcija


iCLK in signal takta
inRST in signal reseta, aktivan na niskom logičkom nivou
iZERO in statusni bit zero
iSIGN in statusni bit sign
iCARRY in statusni bit carry
iIR [14:0] in instrukcija iz instrukcione memorije
oPC_EN out signal dozvole programskog brojača
oPC_LOAD out signal dozvole upisa programskog brojača
oPC_IN [15:0] out adresa skoka
oREG_WE [7:0] out kontrola registara opšte namene
oA_WE out kontrola registra prvog operanda
oB_WE out kontrola registra drugog operanda
oC_WE out kontrola registra rezultata
oMUXA_SEL [3:0] out selekcija za multiplekser prvog operanda
oMUXB_SEL [3:0] out selekcija za multiplekser drugog operanda
oALU_SEL [3:0] out kontrola aritmetičko-logičke jedinice
oMEM_WE out dozvola upisa u memoriju za podatke (opciono)

3.1. Osnovni skup instrukcija

Procesor za početak treba da obavlja operacije koje prikazuje Tabela 3-2. U pitanju su operacije koje direktno
izračunava aritmetičko-logička jedinica. U levoj koloni tabele su navedena imena instrukcija i oznake operanada, a
u desnoj koloni funkcije pojedinih instrukcija. Sintaksa RZ←[RX+ označava da se sadržaj registra X upisuje u
registar Z.

Tabela 3-2. Aritmetičko-logičke instrukcije procesora

Operacija Funkcija Kod instrukcije


mov Rz,Rx RZ ← [RX] 000000
add Rz,Rx,Ry RZ ← [RX] + [RY] 000001
sub Rz,Rx,Ry RZ ← [RX] - [RY] 000010
and Rz,Rx,Ry RZ ← [RX] & [RY] 000011
or Rz,Rx,Ry RZ ← [RX] | [RY] 000100
not Rz,Rx RZ ← not [RX] 000101
inc Rz,Rx RZ ← [RX] + 1 000110
dec Rz,Rx RZ ← [RX] - 1 000111
shl Rz,Rx RZ ← shl [RX] 001000
shr Rz,Rx RZ ← shr [RX] 001001
ashl Rz,Rx RZ ← ashl [RX] 001010
ashr Rz,Rx RZ ← ashr [RX] 001011

5
Finalni laboratorijski projekat – Procesor 2014/15

Svaka instrukcija je kodovana sa 15 bita. Format instrukcije je slededi:

IIIIIIZZZXXXYYY

Prvih 6 bita predstavlja kod instrukcije (iz tabele 3-2), a slededih 9 bita predstavljaju registre koji učestvuju u
realizaciji instrukcije. Registar rezultata RZ se navodi prvi, a nakon njega se navode dva registra operanada (RX i
RY). Ukoliko instrukcija koristi samo jedan registar operanda, drugi se može definisati proizvoljno.

Iako su za navedene instrukcije dovoljna četiri bita, ovde se rezerviše šest iz razloga proširenja skupa
instrukcija koji de se raditi u nastavku.

3.2. Implementacija upravljačke jedinice

Izvršenje svih instrukcija je raspoređeno u četiri faze (četiri periode takta):

1. prihvat insntrukcije (Instruction Fetch)


2. dekodovanje instrukcije(Instruction Decode),
3. izvršenje instrukcije (Execute) i
4. pamdenje rezultata (Write Back).

Ovakvo raspoređivanje izvršenja instrukcija je potrebno zbog arhitekture procesora, koja sadrži četiri
registarska stepena:

 u prvoj fazi se vrednost smešta u registar IR,


 u drugoj fazi se, na osnovu trenutne instrukcije u IR, vrednost smešta u registre A i B,
 u tredoj fazi se, na osnovu vrednosti u IR, A i B, vrši računanje ivrednost smešta u registar C,
 u četvrtoj fazi se rezultat računanja iz registra C smešta u registre R0-R7.

Upravljačka jedinica predstavlja automat koji konstantno kruži između četiri stanja koji predstavljaju
prethodno navedene četiri faze izvršenja instrukcije. Funkcija prelaza tog automata je jednostavna, automat
bezuslovno prelazi iz stanja FETCH u stanje DECODE, iz stanja DECODE u stanje EXECUTE, iz stanja EXECUTE u
stanje WRITE_BACK i iz stanja WRITE_BACK u stanje FETCH.

Uporedite ovu implementaciju upravljačke jedinice sa upravljačkom jedinicom iz prethodne vežbe. Tada se
instrukcija izvršavala u tri ciklusa. Možete li otkriti razlog postojanja četvrtog ciklusa u ovoj implementaciji?

Funkcija izlaza, odn. vrednosti kontrolnih signala za ostatak procesora, definiše se na osnovu trenutnog stanja
automata i trenutno izvršavane instrukcije koja se nalazi u registru IR i predstavlja ulaz upravljačke jedinice
(iINSTR). U tabeli 3-3 sledi spisak upravljačkih signala čiju vrednost treba postaviti u datoj fazi izvršenja instrukcije.
U fazama u kojima signal nije naveden, on treba da bude neaktivan.

Tabela 3-3. Aktivni upravljački signali po fazama izvršenja instrukcije

Instruction Fetch Instruction Decode Execute Write-Back


sMUXA_SEL
sMUXB_SEL sALU_SEL sREG_WE
sIR_WE
sA_WE sC_WE sPC_EN
sB_WE

6
Finalni laboratorijski projekat – Procesor 2014/15

U prvoj fazi se, signalom sIR_WE omoguduje prihvatanje instrukcije u registar IR.

U drugoj fazi se vrši odabir prvog i drugog operanda signalima sMUXA_SEL i sMUXB_SEL, a odabrani
operandi upisuju u registre A i B postavljanjem signala dozvole sA_WE i sB_WE na 1.

U tredoj fazi se odabira operacija aritmetičko-logičke jedinice i vrednost upisuje u registar C, kao i statusne
flip-flopove.

U poslednjoj fazi se rezultat operacije upisuje u registar opšte namene (samo jedan bit u signalu sREG_WE
treba da bude aktivan) i programskom brojaču se, pomodu signala sPC_EN, dozvoljava uvedavanje adrese za 1,
kako bi se u narednom taktu preuzela naredna instrukcija.

Za sada ne koristimo sledede upravljačke signale: sPC_IN, sPC_LOAD, sMEM_WE.

3.3. Instrukcije skoka

Skokovi su fundamentalni deo svakog programskog jezika. U nastavku demo ih podržati i u našem procesoru.

Dopuniti skup instrukcija instrukcijom bezuslovnog skoka iz Tabele 2-1. Ova instrukcija ima slededi format:

IIIIIIAAAAAAAAA

Instrukcija se sastoji iz 2 dela:

 iINSTR (14 downto 9) – kod instrukcije,


 iINSTR (8 downto 0) – adresa na koju se skače.

Tabela 3-4. Instrukcija bezuslovnog skoka

Operacija Funkcija Kod instrukcije


jmp ADDR PC ← ADDR 010000

Adresa na koju se skače treba u fazi WRITE_BACK da se upiše u programski brojač. U tu svrhu se koriste
signali sPC_IN i sPC_LOAD.

Napomena: kako se ne bi promenio sadržaj registara opšte namene tokom izvršavanja instrukcije skoka, svi
biti kontrolnog signala oREG_WE moraju biti neaktivni u WRITE_BACK fazi!

Napomena: kako se ne bi promenio sadržaj statusnog registra ZSC tokom izvršavanja instrukcije skoka, svi biti
kontrolnog signala oC_WE moraju biti neaktivni u EXECUTE fazi!

Dopuniti skup instrukcija i instrukcijama uslovnog skoka iz Tabele 3-5. Ove instrukcije imaju isti format kao
instrukcija bezuslovnog skoka, sa drugačijim kodom instrukcije. Statusni biti ZERO, SIGN i CARRY so označeni sa Z,
S i C respektivno.

7
Finalni laboratorijski projekat – Procesor 2014/15

Tabela 3-5. Instrukcije uslovnog skoka

Operacija Funkcija Kod instrukcije


jmpz ADDR if Z=1 PC ← ADDR 010001
jmps ADDR if S=1 PC ← ADDR 010010
jmpc ADDR if C=1 PC ← ADDR 010011
jmpnz ADDR if Z=0 PC ← ADDR 010101
jmpns ADDR if S=0 PC ← ADDR 010110
jmpnc ADDR if C=0 PC ← ADDR 010111

Uslovni skokovi su korisni za grananje unutar programa – ukoliko je uslov ispunjen izvršava je jedan skup
instrukcija, u suprotnom drugi.

Napomena: vodite računa da ovde važe iste napomene kao i za bezuslovne skokove, a odgovarajudi kotnrolni
signali moraju biti neaktivni bez obzira na ispunjenost uslova, kada god se izvršava instrukcija skoka.

3.4. Pristup memoriji za podatke

Konačno, omogudidemo pristup memoriji za podatke preko instrukcija LOAD i STORE.

Tabela 3-6. Instrukcije pristupa memoriji za podatke

Operacija Funkcija Kod instrukcije


ld Rz,Ry RZ ← [[RY]] 100000
st Ry,Rx [RY] ← [RX] 110000

Instrukcija LOAD upisuje u registar RZ sadržaj koji se nalazi u memoriji podataka na adresi koja piše u registru
RY (zbog toga je u opisu funkcije stavljeno dvostruko dereferenciranje registra RY). Izvršavanje instrukcije se
odvija u sledede 4 faze:

1. Instrukcija se učitava u IR.


2. Multiplekser MUXB selektuje registar RY i njegova vrednost se prosleđuje na izlaz oADDR; u istom
taktu vrednost iz memorije se pojavljuje na ulazu iDATA, pošto se čitanje memorije vrši
kombinaciono; multiplekser MUXA selektuje vrednost iDATA.
3. ALU propušta vrednost iz registra A koja je jednaka vrednosti iDATA.
4. Vrednost iDATA se, iz registra C, upisuje u registar RZ.

Instrukcija STORE upisuje u memoriju, na adresu koja piše u registru RY, vrednost koja piše u registru RX.
Izvršavanje instrukcije se odvija u sledede 4 faze:

1. Instrukcija se učitava u IR.


2. Multiplekser MUXB selektuje registar RY i njegova vrednost se prosleđuje na izlaz oADDR.
Multiplekser MUXA selektuje registar RX.
3. ALU propušta vrednost iz registra A.
4. Vrednost iz registra C se upisuje u memoriju (postavlja se signal dozvole sMEM_WE).

8
Finalni laboratorijski projekat – Procesor 2014/15

Napomena: zbog potrebe instrukcije STORE, a da ne bi morali menjati arhitekturu procesora, promeniti signal
selekcije multipleksera MUXB tako da on zadržava vrednost definisanu trenutnom instrukcijom i u fazama
EXECUTE i WRITE_BACK.

Napomena: kako se ne bi promenio sadržaj registara opšte namene tokom izvršavanja instrukcije skoka, svi
biti kontrolnog signala oREG_WE moraju biti neaktivni u WRITE_BACK fazi!

4. Vrh hijerarhije računarskog sistema


Nakon realizacije procesora i jedne ili dve memorije, sve komponente demo spojiti u jedan računarski sistem.
Ukoliko se niste odlučili za rad sa memorijom za podatke, zanemarite DATA_RAM blok.

U datoteci top.vhd realizovati vrh hijerarhije sistema, u kome je procesor povezan sa memorijama, prikazan
na Slici 4-1. Jedini prolazi ovog sistema za sada neka budu ulazni takt (iCLK) i reset (inRST). Sistem bez izlaza i dalje
nije sintetizabilan, ali se može proveriti u simulaciji.

sMEM_WE

sADDR[15:0]

sDATA_ST[15:0] DATA_RAM
sDATA_LD[15:0]

CPU_TOP
sPC[15:0]

INSTR_ROM
sINSTR[14:0]

Slika 4-1. Vrh hijerarhije računarskog sistema CPU + ROM + RAM (opciono)

5. Implementacija računarskog sistema na E2LP platformi


Procesor demo konačno i sintetisati za E2LP platformu. Kako bi proverili rad procesora u realnom vremenu na
platformi, na LCD demo ispisivati vrednosti programskog brojača, instrukcionog registra, trenutnu fazu izvršenja
instrukcije (od 0 do 3) i vrednosti dva registra opšte namene.

Ovome možete pristupiti na dva načuna. Prvi je da preuzmete naše datoteke top_shell.vhd, cpu_clk_gen.vhd,
i lcd_driver.vhd i uvežite ih u projekat. Tome dodajte i vaš generator takta za LCD iz lab zadatka 4. Nakon toga
imadete novi vrh hijerarhije, top_shell koji treba sintetisati, a na LCD ekranu de biti prikazano stanje procesora
onako kako smo ga mi definisali u tim datotekama.

Drugi način, koji je preporučljiv, je da pretpostavite da naše komponente za rad sa LCD nisu tačne (kao da je
to teško pretpostaviti) i da implementirate vaš način prikazivanja vrednosti iz procesora na LCD ekranu! Ovo je
mnogo teži način, ali izvodljiv koristedi znanje koje ste stekli na našem predmetu. Na kraju, ukoliko uspete ovo
sami da uradite, možete biti veoma ponosni na sebe!

9
Finalni laboratorijski projekat – Procesor 2014/15

Koji god put odabrali, moradete vaš vrh hijerarhije računarskog sistema (top.vhd) da malo modifikujete kako
bi na njegovom izlazu dali potrebne vrednosti za ispis na ekranu. Ukoliko ste izabrali kradi put, onda morate dodati
izlaze iz tabele 5-1. Ukoliko ste izabrali teži ali korisniji put, ovo je samo predlog.

Tabela 5-1. Novi izlazi vrha hijerarhije računarskog sistema

Prolaz(i) Smer Funkcija


oPC [15:0] out vrednost programskog brojača
oIR [13:0] out trenutno izvršavana instrukcija
oPHASE [1:0] out faza izvršenja instrukcije
oR0 – oR7 [15:0] out vrednosti registara R0 – R7

Naravno, potrebno je uzeti vrednosti PC, IR i R0-R7 registara iz odgovarajudih modula i poslati ih do vrha
hijerarhije, definišudi potrebne izlaze na svakom nivou hijerarhije. Za redni broj faze ovo je potrebno uraditi iz
dubine - skroz iz nivoa upravljačke jedinice.

Konačni vrh hijerarhije sistema (top_shell) treba da ima prolaze kao u tabeli 5-2, bez obzira na izbor puta
kojim dete do njega dodi.

Tabela 5-2. Povezivanje prolaza na komponente E2LP platforme

Prolaz Smer E2LP


iCLK in CLK
inRST in RESET
iPB in JOY2
iSW [7:0] in SW7 – SW0
oLCD_D[3:0] out LCD_D [3:0]
oLCD_EN out LCD_EN
oLCD_RW out LCD_R/#W
oLCD_RS out LCD_RS

Ulaz iPB treba iskoristiti kao takt računarskog sistema, a redovan takt sa oscilatora (iCLK) isključivo za rad sa
LCD ekranom. Ovime je omogudeno izvršavanje programa korak po korak, pritiskom na srednje dugme JOY2,
brzinom koja korisniku odgovara da proveri rad programa.

Svakim pritiskom na takt izvršavanje instrukcije se propagira za jednu fazu. Nekada se jednim pritiskom može
poslati više od jednog takta procesoru, zbog neidealnosti mehanike prekidača, ali to ne predstavlja problem.
Ukoliko ste koristili naše datoteke, stanja u nekim od značajnih registara se mogu pročitati na LCD ekranu, i to:

 A – programski brojač,
 I – instrukcioni registar,
 P – faza izvršavanja instrukcije,
 R0 – registar opšte namene R0.

10
Finalni laboratorijski projekat – Procesor 2014/15

Pored registra R0, na ekranu se ispisuje i vrednost još jednog registra opšte namene, a koji je to registar,
zavisi od stanja prekidača. Ukoliko je uključen prekidač SWX (gde X može biti od 1 do 7), bide prikazana vrednost
registra RX. Ukoliko je uključeno više prekidača, najvedi prioritet ima registar sa najmanjim rednim brojem.

Dakle, implementirajte vaš sistem do kraja i uživajte u rezultatima svog rada, vidljivim na LCD ekranu!
Naravno, sistem je i dalje „mrtav“, ne menja svoje stanje, pošto ga nismo programirali, ali uskoro demo ga oživeti.

6. Programiranje procesora
Došao je red na oživljavanje našeg računarskog sistema. Procesor nije veoma koristan bez programa koji de
da izvršava, pa demo sada napisati dva programa u instrukcionoj memoriji procesora (odn. dve verzije
instrukcionog ROM-a).

6.1. Prvi program

Da bi oživeli naš procesor, a i igrali se malo sa matematikom, napišite program koji računa vrednost funkcije
f(N) ukoliko je ona definisana na slededi način:

( )

( ) ( ( ) ) ( )

Ulazni parametar N možemo lako menjati promenom konstante u samom programu, pa ga izaberite
proizvoljno, ali neka bude vedi od 3.

6.2. Slobodni program

Konačno, impresionirajte sebe i druge oko vas programom koji računa ... šta god želite! Napišite neki
interesantan program, težak za ručno izračunavanje, izračunajte nešto zanimljivo i pokažite pravu mod vašeg
procesora!

Naravno, ukoliko napišete nešto računski zahtevno, možete iskoristiti oscilator kao takt računarskog sistema
(iCLK) i samo posmatrati krajnji rezultat na LCD ekranu. Ovime dete uštedeti sebi vreme tokom izvršavanja
programa, a i sačuvati srednje dugme na našoj ploči!

Ukoliko bude potrebno, možete i proširiti ROM i RAM ako ste ga pravili, kako bi vaš program stao u
memoriju. Pazite samo da ne proširite više nego što može da stane u naš FPGA. Konsultujte dokumentaciju FPGA
Spartan-6 koji koristimo na platformi za ukupnu količinu logike i memorija koje on podržava.

ZAKLJUČAK
Šta redi na kraju, budite veoma ponosni na ono što ste uradili – napravili ste vaš prvi kompletan procesor!
Iako ovaj procesor nema neke napredne mogudnosti o kojima dete učiti u narednim predmetima (čudne reči kao
što su protočna struktura, predviđanje grananja, eliminacija hazarda), on sadrži osnovne elemente koje imaju svi
procesori i može da izračuna bilo šta što može da stane u njegov ROM. Ovim projektom zaokružili ste osnovno
znanje projektovanja digitalnih sistema, naročito onih koji imaju za cilj neko računanje, i napravili ste veoma važan
most između softvera i hardvera. Čestitamo na uspešno završenim vežbama!

11

You might also like