Professional Documents
Culture Documents
LPRS1 Projekat PDF
LPRS1 Projekat PDF
Potrebno predznanje
Urađen laboratorijski zadatak 5
Arhitekture procesora
Projektovanje upravljačke jedinice digitalnih sistema
Osnovno znanje asemblerskog programiranja
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!
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.
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.
Vrednosti u ROM memoriji neka za početak budu proizvoljne (npr. sve 0x0000). Ovo demo modifikovati
kasnije.
2
Finalni laboratorijski projekat – Procesor 2014/15
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.
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.
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.
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.
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]
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).
4
Finalni laboratorijski projekat – Procesor 2014/15
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.
5
Finalni laboratorijski projekat – Procesor 2014/15
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.
Ovakvo raspoređivanje izvršenja instrukcija je potrebno zbog arhitekture procesora, koja sadrži četiri
registarska stepena:
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.
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.
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
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
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.
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:
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:
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!
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)
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.
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.
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).
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.
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