You are on page 1of 295

PREDGOVOR

Ova knjiga je posveena tehnikama projektovanja digitalnog hardvera na


mikroarhitekturalnom, odnosno RTL (prema eng. Register Transfer Level) nivou
apstrakcije. Projektovanje na RTL nivou podrazumeva da se za konstrukciju digitalnih
sistema koriste moduli kao to su sabirai, komparatori, multiplekseri i registri. Savremeno
RTL projektovanje zasnovano je na upotrebi jezika za opis hardvera i softvera za
automatsku sintezu hardvera. U knjizi je obraen jezik VHDL, kao najrasprostranjeniji i
najsveobuhvatniji jezik za opis hardvera danas.
Moe se slobodno rei da je znaaj koji VHDL ima u digitalnom projektovanju jednak
onom koji programski jezik C/C++ ima u programiranju, a da poznavanje VHDL-a spada u
obavezna znanja svakog projektanta digitalnog hardvera. VHDL nalazi brojne primene u
digitalnom projektovanju. Prvo, u VHDL-u je mogue kreirati strukturne modele digitalnih
sistema, odnosno opise koji na formalan nain pokazuju kako je sistem podeljen na
podsistemi i kako su podsistemi meusobno povezani. Drugo, VHDL takoe omoguava
kreiranje funkcionalnih modela korienjem jezikih konstrukcija poput programskih
grananja i petlji iz konvencionalnih programskih jezika. Tree, VHDL opis nekog sistema
se moe simulirati, s ciljem da se pre fizike realizacije, testiraju i verifikuju njegova
funkcionalnost i performanse. Na taj nain, projektant dobija mogunost da brzo ispita
razliita reenja, bez potrebe izrade hardverskog prototipa. etvrto, uz pomo
specijalizovanog softvera, VHDL opis se moe sintetizovati, odnosno transformisati u
detaljan strukturni opis koji je pogodan za neposrednu fiziku realizaciju. Na taj nain se
projektant rastereuje od detaljnog projektovanja na niskom nivou (kao to je npr.
minimizacija logikih funkcija), pa vie vremena moe da posveti razradi arhitekture
sistema i istraivanju alternativnih reenja na sistemskom nivou.
Ova knjiga ima za cilj da uvode studente u oblast digitalnog projektovanja kroz izuavanje
VHDL-a, a pre svega onih aspekata ovog jezika koji su bitni za hardversku sintezu.
Uspeno ovladavanje izloenom materijom pretpostavlja poznavanje osnovnih koncepta
digitalnog projektovanja, poput onih koja se stiu u prvom kursu digitalne elektronike.
Takoe, poznavanje programiranja i bar jednog programskog jezika, zajedno sa osnovama
iz organizacije raunara moe biti od velike pomou studentima za razumevanje i brzo
usvajanje izloene materije. Knjiga je namenjena prevashodno studentima elektronike i
raunarstva, kao uvod u oblasti mikroprocesora i embeded sistema, s jedne i VLSI
projektovanja s druge strane. Nakon uspenog savladavanja materije obuhvaene ovom

knjigom, student bi trebalo da bude u mogunosti da samostalno projektuje RTL sisteme i


podsisteme malog i srednjeg nivoa sloenosti.
Knjiga nema ambiciju da obuhvati sve aspekte digitalnog projektovanja. Aspekti poput
fizikog projektovanja, simulacije i testiranja,bie razmatrani samo iz perspektive RTL
projektovanja i to u meri koja je neophodna za razumevanje principa i tehnika RTL
projektovanja i hardverske sinteze. Sveobuhvatno projektovanje digitalnih kola i sistema
zahteva kako dodatna teorijska znanja tako i poznavanje specijalizovanih softverskih alata
za projektovanje.
Knjiga je podeljena na devet glava. Kao uvod u materiju, u prvoj glavi predstavljeni su
osnovni principi, metodologija i tok projektovanja savremenih digitalnih sistema, zajedno s
ulogom koju u tom procesu igraju jezici za opis hardvera i softverski alati za projektovanje.
Glave 2 8 bave se razliitim aspektima jezika VHDL. U 2. glavi, dat je pregled osnovnih
karakteristika i koncepta ovog u sutini sloenog i sveobuhvatnog jezika. Glava 3
posveena je osnovnim jezikim konstrukcijama VHDL-a, kao to su tipovi podataka,
operatori i atributi. VHDL je konkurentan jezik s podrkom za sekvencijalno
programiranje, po emu se razlikuje od veine konvencionalnih programskih jezika, koji
pruaju podrku iskljuivo za sekvencijalno programiranje. U 4. glavi razmatraju se
razliiti oblici konkurentne naredbe dodele, kao osnovnog jezikog mehanizma za kreiranje
konkurentnog kda. Sekvencijalno programiranje u VHDL-u obraeno je u 5. glavi.
Sekvencijalni kd se koristi za modeliranje sekvencijalnih digitalnih kola, kao to su
registarske komponente i konani automati. Zbog znaaja koji imaju u digitalnom
projektovanju, konanim automatima je posveena posebna glava, glava 6. U glavama 7 i
8, obraeni su aspekti VHDL-a koji su bitni za projektovanje na sistemskom nivou i
organizaciju sloenih projekata. Glava 7 posveena je strukturnom i hijerarhijskom
projektovanju, dok se glava 8 bavi jezikim konstrukcijama i programskim tehnikama za
kreiranje parametrizovanih modela. Konano, 9. glava posveena je tehnikama
projektovanja digitalnih sistema na RTL, odnosno mikroarhitekturalnom nivou apstrakcije.
Knjiga sadri veliki broj dijagrama i VHDL opisa koji na konkretnim primerima ilustruju
primenu izloene materije i doprinesu brem i potpunijem usvajanju osnovnih koncepta
digitalnog projektovanja.
Goran Lj. orevi
U Niu, januara 2009.

SADRAJ
1. PROJEKTOVANJE DIGITALNIH SISTEMA........................................................... 7
1.1. IC TEHNOLOGIJE ......................................................................................................... 8
1.2. DOMENI PROJEKTOVANJA ......................................................................................... 10
1.3. NIVOI APSTRAKCIJE .................................................................................................. 11
1.4. PROCES PROJEKTOVANJA .......................................................................................... 12
1.5. JEZICI ZA OPIS HARDVERA ......................................................................................... 17
2. UVOD U VHDL ............................................................................................................ 21
2.1. ORGANIZACIJA VHDL KDA .................................................................................... 22
2.1.1. LIBRARY ........................................................................................................... 22
2.1.2. ENTITY.............................................................................................................. 23
2.1.3. ARHITECTURE ................................................................................................ 24
2.2. STILOVI PROJEKTOVANJA .......................................................................................... 25
2.2.1. Funkcionalni opis.............................................................................................. 25
2.2.2. Strukturni opis................................................................................................... 31
2.3. PROJEKTNE JEDINICE ................................................................................................. 33
2.4. PROCESIRANJE VHDL KDA .................................................................................... 33
2.4.1. Simulacija VHDL kda ..................................................................................... 34
2.4.2. Sinteza VHDL kda ........................................................................................... 36
2.5. CONFIGURATION ................................................................................................. 38
2.6. ULOGA VHDL-A U PROCESU PROJEKTOVANJA ......................................................... 39
3. OSNOVNE JEZIKE KONSTRUKCIJE.................................................................. 41
3.1. LEKSIKI ELEMENTI .................................................................................................. 41
3.2. OBJEKTI .................................................................................................................... 42
3.3. TIPOVI PODATAKA..................................................................................................... 44
3.3.1. Predefinisani tipovi podataka ........................................................................... 44
3.3.2. Operatori........................................................................................................... 45
3.3.3. Tipovi podataka iz paketa IEEE std_logic_1164 .............................................. 48
3.3.4. Operacije nad vektorskim tipovima................................................................... 52
3.3.5. Tipovi podataka iz paketa IEEE numeric_std ................................................... 54
3.3.6. Nestandardni aritmetiki paketi ........................................................................ 57
3.3.7. Korisniki tipovi podataka ................................................................................ 58
3.3.8. Podtipovi ........................................................................................................... 59
3.4. POLJA ........................................................................................................................ 60
3.5. ATRIBUTI .................................................................................................................. 62
4. KONKURENTNE NAREDBE DODELE................................................................... 65
4.1. JEDNOSTAVNA KONKURENTNA NAREDBA DODELE .................................................... 66
4.2. WHEN...................................................................................................................... 70
4.3. SELECT ................................................................................................................... 77
4.4. POREENJE NAREDBI WHEN I SELECT................................................................... 84
4.5. OPTIMIZACIJA KONKURENTNOG KDA ...................................................................... 85

4.5.1. Deoba operatora ............................................................................................... 85


4.5.2. Deoba funkcija .................................................................................................. 87
4.6. Z............................................................................................................................. 90
4.7. ROM......................................................................................................................... 92
5. SEKVENCIJALNE NAREDBE .................................................................................. 95
5.1. PROCESS ................................................................................................................ 95
5.1.1. Proces sa listom senzitivnosti............................................................................ 96
5.1.2. Proces sa wait naredbom .................................................................................. 98
5.1.3. Signali u procesu............................................................................................. 100
5.1.4. Varijable.......................................................................................................... 101
5.2. IF ............................................................................................................................ 102
5.3. CASE...................................................................................................................... 108
5.4. LOOP ..................................................................................................................... 111
5.5. SEKVENCIJALNI KD ZA KOMBINACIONA KOLA ...................................................... 116
5.6. LE KOLA I FLIP-FLOPOVI ........................................................................................ 119
5.7. REGISTARSKE KOMPONENTE ................................................................................... 127
5.8. RAM....................................................................................................................... 137
6. KONANI AUTOMATI ............................................................................................ 141
6.1. PREDSTAVLJANJE KONANIH AUTOMATA ............................................................... 142
6.1.1. Dijagram stanja .............................................................................................. 142
6.1.2. ASM dijagram ................................................................................................. 146
6.2. OPIS KONANOG AUTOMATA U VHDL-U ................................................................ 150
6.2.1. Viesegmentni kdni ablon ............................................................................ 150
6.2.2. Dvosegmentni kodni ablon ............................................................................ 153
6.2.3. Sinhrona inicijalizacija konanog automata................................................... 155
6.3. KODIRANJE STANJA KONANOG AUTOMATA ........................................................... 156
6.4. PRIMERI KONANIH AUTOMATA .............................................................................. 158
7. HIJERARHIJSKO PROJEKTOVANJE.................................................................. 173
7.1. PACKAGE............................................................................................................. 174
7.2. COMPONENT ....................................................................................................... 176
7.2.1. Deklaracija komponente ................................................................................. 177
7.2.2. Instanciranje komponente ............................................................................... 181
7.3. CONFIGURATION ............................................................................................... 185
7.4. LIBRARY .............................................................................................................. 188
7.5. POTPROGRAMI ........................................................................................................ 190
7.5.1. FUNCTION..................................................................................................... 190
7.5.2. PROCEDURE ................................................................................................. 195
7.5.3. Poreenje funkcija i procedura....................................................................... 198
8. PARAMETRIZOVANO PROJEKTOVANJE ........................................................ 199
8.1. VRSTE PARAMETARA .............................................................................................. 199
8.2. SPECIFIKACIJA PARAMETARA .................................................................................. 200
8.3. MANIPULACIJE S VEKTORIMA ................................................................................. 205
8.4. GENERATE........................................................................................................... 209
8.4.1. FOR GENERATE ............................................................................................ 210
8.4.2. IF GENERATE ................................................................................................ 218

8.5. FOR LOOP............................................................................................................. 224


8.5.1. EXIT i NEXT ................................................................................................... 230
9. RTL PROJEKTOVANJE .......................................................................................... 235
9.1. RTL METODOLOGIJA PROJEKTOVANJA .................................................................... 235
9.1.1. Naredba registarskog prenosa ........................................................................ 238
9.1.2. Staza podataka ................................................................................................ 239
9.1.3. Upravljaka jedinica....................................................................................... 241
9.1.4. Blok dijagram RTL sistema ............................................................................. 242
9.1.5. ASMD dijagram .............................................................................................. 243
9.2. POSTUPAK PROJEKTOVANJA .................................................................................... 244
9.2.1. Opis ponaanja................................................................................................ 245
9.2.2. Razrada ........................................................................................................... 262
9.2.3. Realizacija....................................................................................................... 268
9.3. PRIMERI RTL SISTEMA ............................................................................................ 276
10. LITERATURA .......................................................................................................... 295

1. PROJEKTOVANJE DIGITALNIH SISTEMA

Projektovanje savremenih digitalnih sistema predstavlja fuziju tri podjednako bitna faktora:
poluprovodnike tehnologije, metodologije projektovanja i softverskih alata za
projektovanje. Zahvaljujui neprestanom razvoju i usavravanju poluprovodnike
tehnologije, od vremena prvih digitalnih kola pa sve do danas, broj tranzistora koji se
ugrauju u integrisana kola (IC) poveavao se eksponencijalnom brzinom. S takvim
tempom razvoja, danas sreemo digitalna IC sa vie stotina, vie hiljada, pa sve do vie
stotina miliona tranzistora. U prolosti, digitalna kola su nalazila glavnu primenu u
raunarskim sistemima. Meutim, vremenom, kako su digitalna IC postajala sve manjih
dimenzija i bra, sa sve veim mogunostima i u isto vreme sve jeftinija, mnogi
elektronski, komunikacioni i upravljaki sistemi su interno digitalizovani korienjem
digitalnih kola za memorisanje, obradu i prenos informacija.
Kako su primene digitalnih sistema postajale ire, a IC sve sloenija, tako je i zadatak
projektovanja digitalnog hardvera postajao sve tei. Praktino je nemogue neposredno na
nivou tranzistora, pa ak ni na nivou logikih kola projektovati digitalni sistem ija je
sloenost vea od nekoliko hiljada tranzistora. Projektovanju u toj meri sloenih sistema
mora se pristupiti na organizovan i sistematian nain. Savremena metodologija
projektovanja digitalnih sistema podrazumeva da se u poetnoj fazi projektovanja sistem
podeli na manje podsisteme. Najpre se za svaki podsistem kreira apstraktni, funkcionalni
model, koji se potom postepeno razrauje sve do nivoa logikih kola, a onda i dalje do
nivoa tranzistora i fotolitografskih maski. Softverski alati za projektovanje igraju
nezamenjivu ulogu u ovom sloenom procesu. Zadatak projektanta je da osmisli sistem i
formalno ga opie, a zadatak softverskog alata da obavi simulaciju modela radi verifikacije
njegovih funkcionalnih karakteristika, a zatim i da transformie apstraktni opis u detaljan
strukturni opis niskog nivoa, koji je pogodan za neposrednu fiziku realizaciju. Potreba za
formalnim modeliranjem, koja se nalazi u osnovi savremene metodologije digitalnog
projektovanja, dovela je do razvoja i iroke primene jezika za opis hardvera. Danas su u
praksi najzastupljeniji dva takva jezika slinih mogunosti: VHDL ili Verilog. U ovoj
knjizi predstavljen je jezik VHDL, s naglaskom na one njegove aspekte koji su bitni za
sintezu hardvera.
U ovoj uvodnoj glavi dat je kratak pregled implementacionih tehnologija, toka i
metodologije projektovanja digitalnih sistema zajedno s ulogom koju u tom procesu igraju
jezici za opis hardvera.

Goran Lj. orevi, Arhitetktura mikrosistema, 2009.

Projektovanje digitalnih sistema

1.1. IC tehnologije
Tehnologija koja se koristi za realizaciju digitalnog hardvera dramatino je evoluirala u
toku protekle etiri decenije. Sve do sredine 60 godina prolog veka, logika kola su
realizovana uz pomo diskretnih komponenti (diskretnih tranzistora i otpornika). Razvojem
tehnologije integrisanih kola, postalo je mogue smestiti vei broj tranzistora, a onda i
kompletno digitalno kolo na jedan ip. U poetku, IC su sadrala tek do nekoliko desetina
tranzistora, ali s napretkom tehnologije ovaj broj se brzo poveavao. Poetkom 70 godina
prolog veka postalo je mogue na jednom ipu realizovati kompletan mikroprocesor. Iako
u mnogim aspektima inferiorni u odnosu na savremene mikroprocesore, prvobitni
mikroprocesori su otvorili put ka svojevrsnoj revoluciji u oblasti obrade informacija, koja
se ogledala kroz pojavu personalnih raunara, a onda i mikroraunarskih sistema specijalne
namene. Pre oko 40 godina, istraiva Gordon Mur publikovao je predvianje po kome e
se broj tranzistora koji se mogu integrisati na jednom ipu duplirati svake 1.5 do 2 godine.
Ovaj fenomen, neformalno poznat kao Murov zakon, vai i danas. Tako je ranih 1990 bilo
mogue proizvesti mikroprocesore s nekoliko miliona, a krajem 1990 s nekoliko desetina
miliona tranzistora. Danas, pred kraj prve decenije 21. veka, aktuelni su mikroprocesori s
vie stotina miliona tranzistora. Predvianja govore da e se ovakav eksponencijalni tempo
razvoja nastaviti i tokom narednih desetak godina.
Fabrikacija integrisanih kola. Integrisano kolo je sainjeno od slojeva dopiranog
silicijuma, polisilicijuma, metala i silicijum dioksida poreanih jedan iznad drugog na
silicijumskom podlozi. Na nekim od ovih slojeva formiraju se tranzistori, dok se na drugim
izvode provodnici za povezivanje tranzistora. Osnovni korak u fabrikaciji IC-a je
formiranje jednog sloja, procesom koji se zove litografija. Raspored materijala na jednom
sloju definisan je maskom. Slino fotografskom filmu, maska se koristi da bi se odreene
oblasti na povrini silicijuma izloile dejstvu hemikalija u cilju kreiranja razliitih slojevi
materijala na povrini jednog sloja. Izgled maske se zove lejaut (eng. layout). Savremene
IC tehnologije koriste od 10 do 15 slojeva, to znai da u toku fabrikacije jednog
integrisanog kola, litografski proces mora biti ponovljen 10 do 15 puta, uvek s razliitom
maskom.
Klasifikacija IC tehnologija. Digitalna kola se mogu realizovati u razliitim tehnologijama.
Da bi se smanjili trokovi proizvodnje, kod nekih IC tehnologija vei broj slojeva se uvek
izvodi na isti nain, pomou istih maski, nezavisno od funkcije koju IC treba da realizuje,
dok se preostale maske kreiraju u skladu sa zahtevima konkretne primene. Meutim, bilo
da se kompletno IC ciljano projektuje i proizvodi za konkretnu primenu, bilo da se IC
kreira doradom polu-fabrikovanih IC-ova, proces proizvodnje je sloen i skup, i moe se
obaviti samo u fabrici poluprovodnika. Naruilac IC-a dostavlja fabrici poluprovodnika
specifikaciju IC-a na osnovu koje se u fabrici kompletira set maski, a zatim fabrikuju IC i
isporuuju naruiocu. Kod drugih IC tehnologija, fabrika poluprovodnika isporuuje
naruiocima univerzalna IC, odnosno IC koja nemaju unapred definisanu funkciju, ali se
zato mogu programirati. Programiranje vri sam korisnik, na terenu, punjenjem
konfiguracionih podataka u internu memoriju IC-a ili sagorevanjem internih silicijumskih
osiguraa. IC iz prve grupe, tj. ona koja se dorauju u fabrici, poznata su pod skraenicom
ASIC, koja potie od pojma aplikaciono-specifina IC (prema eng. Application-Specific
Integrated Circuit). Druga grupa IC-ova, tj. ona koje programira krajnji korisnik, poznata
je pod nazivom programabilne logike komponente, ili PLD (prema eng. Probrammable
Logic Devices). Svaka od ove dve grupe sadri vie specifinih tehnologije. Tako se ASIC
tehnologije dele na:

IC tehnologije

IC potpuno po narudbi (prema eng. full-custom). Ne koriste se prefabrikovane


maske ili slojevi, ve se IC iz poetka, do nivoa pojedinanih tranzistora i veza,
projektuje i proizvodi za tanu odreenu primenu. Na taj nain, omoguena je
integraciju najveeg broja tranzistora i realizaciju IC-ova najvee brzine rada.
Meutim, budui da je projektovanje na nivou tranzistora sloeno i dugotrajno, fullcustom tehnologija se koristi samo za IC male sloenosti ili za IC koja e se proizvoditi
u masovnim serijama, kako bi se amortizovali visoki jednokratni trokovi
projektovanja i pripreme proizvodnje.
Standardne elije (prema eng. semi-custom). Deo trokova koji prate projektovanje IC
potpuno po narudbi moe se izbei ako se koristi tehnologija standardnih elija
(prema eng. standard cell). Standardne elije su moduli jednostavne funkcije (tipa
NOT, AND, OR, NAND, flip-flop i slina) unapred projektovani do nivoa lejauta koji
se u vidu gradivnih blokova koriste za konstrukciju sloenijih struktura na ipu.
Projektovanje je znaajno pojednostavljeno u poreenju sa full-suctom tehnologijom,
jer se sistem projektuje na nivou logikih kola umesto na nivou tranzistora. Meutim,
iako je lejaut standardnih elija unapred definisan, lejaut kompletnog IC zavisi od
rasporeda i povezanosti standardnih elija. Zbog toga je proces fabrikacija identian
kao kod full custom tehnologije - svi slojevi se iznova kreiraju za svako novo IC.
Gejtovska polja (prema eng. gate array). U gejtovskom polju, pojedini delovi ipa su
unapred fabrikovani, dok se preostali dorauju shodno zahtevima konkretne primene.
Kod ove tehnologije, proizvoai sprovode najvei broj koraka, tipino one koji se tiu
kreiranja tranzistora, unapred, nezavisno od ciljne primene. Rezultat je silicijumska
ploica nedovrenog ipa. Gejtovsko polje ini veliki broj identinih gejtova
rasporeenih na silicijumskoj ploici u vidu regularne dvodimenzionalne matrice.
Gejtovi su obino 3- ili 4-ulazna NI ili NILI kola, a na jednoj ploici ih moe biti i do
vie miliona. Naknadnom doradom, koja podrazumeva kreiranje metalnih veza, gejtovi
se povezuju na nain koji diktira konkretna primena. Uteda u ceni proizvodnje, u
odnosu na tehnologiju standardnih elija, postie se zato to proizvoa moe da
amortizuje cenu fabrikacije gotovih ipova masovnom proizvodnjom polufabrikovanih, identinih ploica gejtovskih polja.
Programabilne logike komponente se dele na:
SPLD (prema eng. Simple PLD - Jednostavne PLD komponente). U ovu grupu PLD
komponenti spadaju programabilne strukture tipa PLA, PAL i PROM. Koncept SPLD
kola zasnovan je na injenici da se bilo koja logika funkcija moe realizovati u vidu
zbira logikih proizvoda. Stoga, glavni deo SPLD kola ine dve prekidake mree:
AND mrea u kojoj se formiraju logiki proizvodi i OR mrea na ijim izlazima se
dobijaju logike sume proizvoda formiranih u AND mrei. Kod PLA obe mree su
programabilne, kod PAL-a AND mrea je programabilna, a OR fiksna, dok je kod
PROM-a AND mrea fiksna, a OR programabilna. Danas se SPLD komponente vie
ne proizvode u vidu integrisanih kola, ali se zato koriste kao unutranji blokovi ASIC
IC ili sloenijih tipova PLD kola.
CPLD (prema eng. Complex PLD - Sloene PLD komponente). Sadri vei broj
programabilnih logikih blokova spregnutih posredstvom centralne programabilne
prekidake matrice. Svaki programabilni logiki blok je slian po strukturi tipinom
PLA ili PAL kolu. Programiranjem CPLD komponente definie se kako funkcija
logikih blokova tako i nain na koji su logiki blokovi meusobno povezani.

10

Projektovanje digitalnih sistema

FPGA (prema eng. Field-Programmable Gate Array) Arhitektura FPGA kola nije
zasnovana na prekidakim mreama, kao to je to sluaj sa SPLD i CPLD
komponentama. Umesto toga, kod FPGA se za realizaciju logikih funkcija koriste
logike elije, koje nalikuju elijama gejtovskog polja i tipino sadre jedan D flip-flop
i tzv. look-up tabelu. Look-up tabela je RAM-a malog kapaciteta koji se koristi za
realizaciju jednostavnih logikih funkcija. Logike elije su rasporeene u
dvodimenzionalno polje. Horizontalni i vertikalni kanali, koji se nalaze izmeu
logikih elija, sadre veze i programabilne prekidae posredstvom kojih se ostvaruje
eljeno interno povezivanje logikih elija.
Savremena FPGA kola omoguavaju realizaciju digitalnih sistema sloenosti od
nekoliko desetina hiljada do nekoliko miliona ekvivalentnih gejtova. S toliko velikim
logikim kapacitetom na raspolaganju, primena FPGA kola nije ograniena samo na
realizaciju relativno jednostavnih digitalnih struktura, kao to je to sluaj kod SPLD i
CPLD kolima, ve pruaju mogunost realizacije kompletnih sistema na jednom ipu
zasnovanih na mikroprocesoru.

1.2. Domeni projektovanja


Projektovanje digitalnih sistema se ostvaruje u tri razliita domena, kojima odgovaraju tri
razliita naina predstavljanja (reprezentacije) sistema:

funkcionalni,

strukturni i

fiziki.

Funkcionalni (ili bihejvioralni) domen je onaj u kome se na sistem gleda kao na crnu
kutiju, a projektant je fokusiran na opis ponaanja sistema u funkciji ulaza i proteklog
vremena. Drugim reima, projektant opisuje kako sistem radi (tj. kako treba da radi), ali ne
i kako sistem treba realizovati. Cilj projektanta je da definie odziv sistema na bilo koju
kombinaciju vrednosti ulaznih promenljivih. Projektanti se bave razradom algoritma rada
sistema i definiu kako sistem interaguje sa svojim okruenjem. Rezultat projektovanja je
funkcionalna reprezentacija (odnosno funkcionalna specifikacija), koja moe biti data u
obliku dijagrama toka, programa u viem programskom jeziku, opisa u jeziku za opis
hardvera, matematike formule, grafikona i sl.
Strukturni domen je onaj u kome se sistem razlae na skup komponenti i njihovih veza.
Projektovanje treba da d odgovor na pitanje: kako pomou raspoloivih komponenti
realizovati sistem koji e ostvariti zadatu funkciju. Rezultat projektovanja je strukturna
reprezentacija sistema koja moe biti data u obliku blok dijagrama koji prikazuje
komponente sistema i njihove veze, ematskog prikaza mree logikih kola, ili mree
tranzistora.
Fiziki domen je onaj u kome se definiu fizike karakteristike sistema koje se odnose na
dimenzije i poziciju svake pojedinane komponente i veze u okviru prostora raspoloivog
na tampanoj ploi ili poluprovodnikom ipu. Projektovanje u ovom domenu polazi od
strukturne reprezentacije, a bavi se fizikim rasporeivanjem i povezivanjem komponenti.
Rezultat projektovanja je fizika reprezentacija sistema u obliku lejauta ipa, mehanikih
crtea ili crtea tampane ploe. Fizika reprezentacija predstavlja konaan produkt
projektovanja u obliku proizvodne dokumentacije na osnovu koje se moe direktno
realizovati sistem ili fabrikovati ip.

Nivoi apstrakcije

11

1.3. Nivoi apstrakcije


Projektovanje elektronskih sistema se moe obavljati na nekoliko razliitih nivoa
apstrakcije ili nivoa detaljnosti, gde je svaki nivo definisan tipom gradivnih elemenata
(komponenti) koji se koriste za konstrukciju sistema. U optem sluaju, kod elektronskih
sistema mogu se identifikovati sledea etiri nivoa apstrakcije, poev od najnieg:

nivo tranzistora,
nivo gejtova,
RTL nivo i
nivo procesora

Pregled nivoa apstrakcije dat je u tabeli T. 1-1, a grafika ilustracija na Sl. 1-1.
T. 1-1 Nivoi apstrakcje
Nivo
apstrakcije

Bihejvioralna
reprezentacija
Diferencijalne jednaine, U-I
dijagrami

Strukturne
komponente
Tranzistori, otpornici,
kondenzatori

Nivo gejtova

Logike funkcije, konani


automati

Logika kola, flipflopovi

RTL nivo

Algoritmi, dijagrami toka,


ASM dijagrami

Nivo procesora

Izvrna specifikacija,
programi

Nivo tranzistora

Sabirai, komparatori,
registri, brojai,
multiplekseri
Procesori, kontroleri,
memorije, ASIC kola

Fiziki
objekti
Analogne i digitalne
elije
Moduli,
funkcionalne
jedinice
IC
tampane ploe,
mikroip-moduli

Kao to se moe uoiti iz tabele T. 1-1, glavne komponente na tranzistorskom nivou su


tranzistori, otpornici i kondenzatori. Povezivanjem ovih komponenti formiraju se analogna
i elementarna digitalna kola. Na nivou tranzistora, funkcionalnost realizovanih kola obino
se opisuje diferencijalnim jednainama ili nekom vrstom prenosne karakteristike koja
pokazuje zavisnost izmeu napona i struja u kolu (U-I dijagrami). Fizika reprezentacija
analognih i digitalnih kola se zove elija i definie se u vidu tranzistorskog lejauta.
Glavne komponente nivoa gejtova su logika kola i flip-flopovi. Logika kola i flip-flopovi
su dostupni projektantu u vidu tzv. digitalnih elija. Ove elije se rasporeuju po
silicijumskoj povrini i meusobno povezuju tako da ine aritmetike i memorijske module
ili jedinice, koje se dalje koriste kao bazine komponente na RTL nivou apstrakcije.
Funkcionalni opis RTL modula, realizovanih pomou logikih kola i flip-flopova,
predstavlja se u obliku logikih funkcija ili u obliku dijagrama konanih automata.
Glavne komponente RTL nivoa su aritmetike i registarske jedinice, kao sabirai,
komparatori, mnoai, brojai, registri i registarski fajlovi. Registarske komponente se
mogu rasporediti i povezati tako da ine IC koja se koriste kao osnovne komponente na
sledeem viem nivou apstrakcije. U optem sluaju, IC se opisuju dijagramima toka, ASM
dijagramima, tabelama stanja, ili programom u jeziku za opis hardvera.
Nivo procesora je najvii nivo apstrakcije s obzirom na to to su osnovne komponente na
ovom nivou procesori, memorijska kola i aplikaciono-specifina integrisana kola (ASIC).
U optem sluaju, vie ovih komponenti se postavlja na tampanu plou i povezuju

12

Projektovanje digitalnih sistema

metalnim vezama koje su odtampane na ploi. Sistem koji je sainjen od procesorskih


komponenti obino se opisuje tekstualno, izvrnom specifikacijom napisanom u jeziku za
opis hardvera, algoritmom ili programom napisanim u viem programskom jeziku.

Nivo tranzistora

Nivo gejtova

RTL nivo

Nivo procesora
Sl. 1-1 Nivoi apstrakcije.

1.4. Proces projektovanja


Put od ideje i polazne funkcionalne specifikacije digitalnog sistema, pa do njegove konane
fizike realizacije je dug i ukljuuje vie koraka ili faza. Na tom putu, projektantu su na
raspolaganju razliite tehnike i alati koji mu pomau da opie svoju zamisao, proveri njenu
funkcionalnu ispravnost i transformie je u oblik pogodan za direktnu fiziku realizaciju.
Uopteno govorei, projektovanje digitalnog sistema je iterativan proces razrade i
validacije (provere). Sistem se postepeno transformie, poev od apstraktnog opisa visokog
nivoa, pa sve do nivoa lejauta, odnosno maski. Neposredno posle svake faze razrade,
projektant verifikuje funkcionalnost razraenog opisa, kako bi pronaao i korigovao
eventualne greke u projektovanju i tako osigurao da e konaan proizvod korektno
funkcionisati i ispoljiti zahtevane performanse.
Glavne aktivnosti u procesu projektovanja svakog digitalnog sistema su:

Sinteza

Fiziko projektovanje

Verifikacija i

Testiranje

Sinteza. Sinteza je proces razrade iji je cilj da se uz pomo komponenti raspoloivih na


niem nivou apstrakcije realizuje sistem opisan na viem nivou apstrakcije. Polazni opis
moe biti strukturni ili funkcionalni, dok je rezultujui opis uvek strukturni, ali na niem
apstraktnom nivou. Kako proces sinteze napreduje, tako opis sistema postaje sve detaljniji.

Proces projektovanja

13

Konani rezultat sinteze je strukturna reprezentacija gejtovskog nivoa koja sadri bazine
elije raspoloive u ciljnoj implementacionoj tehnologiji. Proces sinteze se obino deli na
nekoliko manjih koraka, od kojih svaki ima za cilj da obavi neku specifinu vrstu
transformacije. Glavni koraci u sintezi digitalnog sistema su:
Sinteza visokog nivoa - transformacija algoritma u funkcionalni RTL opis. Algoritam,
koji moe biti dat u vidu programa napisanog u viem programskom jeziku, kao to je
C, transformie se u funkcionalni opis prilagoen hardverskoj realizaciji, tipino u vidu
programa napisanog u jeziku za opis hardvera, kao to je VHDL.
RTL sinteza - transformacija funkcionalnog RTL opisa u strukturni opis korienjem
komponenti sa RTL nivoa, praena izvesnim optimizacijama sa ciljem da se smanji
broj upotrebljenih komponenti.
Logika sinteza - transformacija strukturnog RTL opis u mreu logikih kola (tj. u
kombinacionu ili sekvencijalnu mreu). Inicijalna transformacija je praena
optimizacijom mree kako bi se minimizovala njena veliina i/ili propagaciono
kanjenje. Za sintezu se koriste standardne logike komponente (I, ILI, NE, flipflopovi), a optimizacija se vri metodama kao to su Karnoove mape, Mek Klaskijeva
metoda i sl. Logika sinteza je nezavisna od ciljne implementacione tehnologije.
Tehnoloko mapiranje - transformacija logike mree u mreu koja sadri iskljuivo
elije raspoloive u ciljnoj tehnologiji, kao to su standardne elije, za tehnologiju
standardnih elija, NI ili NILI kola, za tehnologiju gejtovskih polja, odnosno logike
elije, za FPGA tehnologiju. Ovo je poslednji korak u sintezi i, oigledno, zavistan je
od ciljne tehnologije.
Fiziko projektovanje. Fiziko projektovanje ukljuuje dva aspekta. Prvi se odnosi na
transformaciju strukturne u fiziku reprezentaciju, npr. konverzija mree koja je dobijena
nakon tehnolokog mapiranja u lejaut. Drugi aspekt se tie analize i optimizacije elektrinih
karakteristika kola.
Glavni zadaci fizikog projektovanja su: prostorno planiranje, rasporeivanje i povezivanje.
U fazi prostornog planiranja, projektant deli sistem na manje funkcionalne blokove i
rasporeuje ih na odreene lokacije na ipu (npr. procesor u gornji levi ugao ipa,
memorija u donji levi ugao, ostali moduli u preostali deo ipa). Na ovaj nain, obezbeuje
se da sve komponente koje pripadaju istom bloku budu fiziki rasporeene u definisanu
oblast na ipu. U fazi rasporeivanja, odreuju se tane fizike pozicije svih komponenti,
dok se u fazi povezivanja kreiraju sve potrebne veze, pri emu se za svaku vezu pronalazi
optimalna (obino najkraa) putanja. Na taj nain se kreira lejaut IC-a.
Nakon obavljenog rasporeivanja i povezivanja, poznate su tane pozicije i duine svih
veza u kolu, to omoguava proraun prateih parazitnih kapacitivnosti i otpornosti. Ovaj
proces se naziva ekstrakcijom parametara. Podaci ekstrahovani iz lejauta, uz poznavanje
elektrinih karakteristika upotrebljenih komponenti, potom se koriste da bi se izvrio
proraun propagacionih kanjenja u kolu i procenila disipacija energije.
Verifikacija. Verifikacija se odnosi na proveru da li ostvareni dizajn (projekat) zadovoljava
postavljene funkcionalne zahteve i zadate performanse (npr., brzina rada). Sprovodi se
neposredno nakon svakog koraka razrade (sinteze), kao i nakon obavljenog fizikog
projektovanja. Postoje dva aspekta verifikacije: funkcionalni i performansni. Funkcionalna
verifikacija daje odgovor na pitanje: da li sistem generie oekivani odziv na zadatu
pobudu? Performanse se zadaju izvesnim vremenskim ogranienjima (npr., maksimalno

14

Projektovanje digitalnih sistema

kanjenje signala od ulaza od izlaza). Vremenska verifikacija, ili verifikacija tajminga,


znai proveru da li sistem generie odziv u granicama postavljenih vremenskih ogranienja.
U praksi, verifikacija se sprovodi primenom ili kombinacijom sledeih metoda:
Simulacija je najee korieni metod za verifikaciju i podrazumeva: konstrukciju
modela sistema, izvrenje ovog modela na raunaru i analizu odziva. Na primer, model
moe biti opis sistema u jeziku za opis hardvera. Jedan takav opis, zajedno sa opisom
ulazne pobude, uitava se u simulator i izvrava. Rezultat izvrenja je odziv modela na
zadatu pobudu, predstavljen npr. u vidu talasnih oblika izlaznih signala. Simulacija
nam omoguava da ispitamo rad sistema i uoimo eventualne greke pre nego to
pristupimo njegovoj fizikoj realizaciji. Meutim, ispravan rad modela u simulatoru ne
znai 100%-nu garanciju korektnost realnog sistema. Model moe da d ispravan odziv
na sve stimulanse kojima je pobuen, ali se moe desiti da ni jedan stimulans nije
doveo do pobude nekog specifinog dela modela koji eventualno sadri greku. S
druge strane, naroito u sluajevima kad model sadri veliki broj komponenti, broj
stimulansa (kae se i test-vektora) potrebnih da bi se postigla potpuna provera moe
biti toliko veliki da raunarsko vreme potrebno za simulaciju postane enormno veliko.
Vremenska analiza je metod verifikacije fokusiran na tajming. Vremenska analiza
podrazumeva: analizu strukture kola kako bi se odredile sve mogue putanje signala od
ulaza do izlaza, proraunala propagaciono kanjenja du ovih putanja i odredili
relevantni vremenski parametri kola, kao to su maksimalno propagaciono kanjenje i
maksimalna frekvencija taktnog signala.
Formalna verifikacija podrazumeva odreivanje osobina kola primenom matematikih
tehnika. Jedan takav metod je provera ekvivalentnosti, koji se koristi za uporeivanje
dve formalne reprezentacije sistema kako bi se ustanovilo da li imaju istu funkciju.
Ovaj metod se esto primenjuje nakon sinteze, da bi se proverilo da li je funkcija
sintetizovanog kola identina funkciji polaznog funkcionalnog opisa. Za razliku od
simulacije, formalna verifikacija moe garantovati korektnost sintetizovane strukture
budui da je zasnovana na rigoroznom matematikom aparatu. Meutim, njena
primena je ograniena samo na sisteme male sloenosti s obzirom na veliku sloenost
matematikih izraunavanja koje podrazumeva.
Hardverska emulacija podrazumeva fiziku realizaciju prototipa koji e oponaati rad
sistema koji se projektuje. Primer hardverske emulacije je implementacija dizajna u
FPGA kolu radi emulacije rad ASIC kola.
Testiranje. Rei verifikacija i testiranje, u jezikom smislu, znae priblino isto.
Meutim, u procesu razvoja digitalnih sistema, verifikacija i testiranje su dva razliita
zadatka. Kao to je ve reeno, verifikacija se odnosi na proveru funkcionalne korektnost i
ostvarenosti zadatih performansi dizajna. S druge strane, testiranje je proces otkrivanja
fizikih defekta (kvarova) u gotovom proizvodu koji mogu nastati tokom proizvodnje.
Testiranje se obavlja nakon fabrikacije proizvoda s ciljem da se dobre jedinice razdvoje od
loih.
Testiranje se sprovodi tako to se na jedinicu koja se testira deluje odgovarajuom testsekvencom (niz ulaznih kombinacija, ili test-vektora) i odziv jedinice na svaku ulaznu
kombinaciju poredi sa odzivom koji se oekuje od jedinice koja radi ispravno. Meutim,
zbog ogromnog broja ulaznih kombinacija, ovakav pristup je praktino neizvodljiv. Umesto
toga, projektanti koriste posebne algoritme kako bi za dato kolo kreirali to manji skup testvektora kojim e kolo biti to potpunije testirano. Ova aktivnost je poznata kao generisanje
test-sekvenci.

Proces projektovanja

15

CAD alati. Razvoj veih digitalnih kola i sistema zahteva upotrebu sloenih postupaka
projektovanja i manipulaciju velikom koliinom informacija. Zato se za automatizaciju
pojedinih zadataka u procesu projektovanja koristi raunarski softver, tj. alati za
projektovanje pomou raunara ili CAD (prema eng. Computer-Aided Design) alati.
Shodno ulozi koju imaju u procesu projektovanja, savremeni CAD alati se mogu podeliti u
sledeih pet kategorija: (1) alati za opis i modeliranje; (2) alati za sintezu; (3) alati za
verifikaciju i simulaciju; (4) alati za rasporeivanje i povezivanje i (5) alati za generisanje
test sekvenci.
U idealnom scenariju, zadatak projektanta bi bio da osmisli i kreira funkcionalni opis
visokog nivoa apstrakcije, a zadatak CAD alata da automatski i na optimalan nain obavi
sintezu i fiziko projektovanje kompletnog sistema. Naalost ovako neto nije izvodljivo,
ne zbog neadekvatne moi izraunavanja sadanjih i buduih raunara, ve zbog
kombinatorne prirode problema koji su karakteristini za sintezu hardvera i fiziko
projektovanje. Bez obzira na to, CAD alati su nezamenljiva podrka projektovanju i koriste
se u svim fazama projektovanja. Meutim, alat za sintezu ne moe da promeni prvobitno
osmiljenu arhitekturu sistema, niti moe loe osmiljeni dizajn da konvertuje u dobar.
Kvalitet krajnjeg reenja prevashodno zavisi od kvaliteta inicijalnog opisa (zamisli), to u
svakom sluaju predstavlja odgovornost projektanta.
Tok projektovanja. Kao to je ve reeno, projektovanje digitalnih kola i sistema
predstavlja iterativni proces razrade i verifikacije, tokom kojeg se polazni apstraktni opis
visokog nivoa postepeno transformie u detaljan strukturni opis niskog nivoa. Konkretne
faze i aktivnosti koje ine ovaj proces zavise kako od veliine sistema koji se projektuje
tako i od karakteristika ciljne implementacione tehnologije.
Algoritmi za optimizaciju koji se koriste u softverima za sintezu su veoma sloeni. Mo
izraunavanja i memorijski prostor koji su neophodni za njihovo izvrenje drastino rastu s
poveanjem veliine sistema. Savremeni CAD alati za sintezu su najefikasniji za digitalne
sisteme srednjeg nivoa sloenosti (2000 - 50000 gejtova). Za vee sisteme, neophodno je
podeliti sistema na manje blokove i nezavisno procesirati svaki blok.
Ciljna implementaciona tehnologija je drugi faktor koji utie na tok projektovanja. Na
primer, postupci implementacije dizajna u FPGA i ASIC tehnologijama se znaajno
razlikuju. FPGA je unapred projektovano i testirano IC. S druge strane, ASIC mora proi
kroz dugotrajan i sloen proces fabrikacije, to zahteva dodatne korake u projektovanju.
Ilustracije radi, u nastavku e biti predstavljen tok projektovanja digitalnog sistema srednje
sloenosti u FPGA tehnologiji. Projektovanje sistema srednje sloenosti (do 50000 gejtova)
ne zahteva prethodnu podelu sistema na manje blokove. Primeri ovakvih sistema su
jednostavni mikroprocesori ili moduli za neka sloenija aritmetika izraunavanja. Tok
projektovanja je ilustrovan dijagramom sa Sl. 1-2. Dijagram je podeljen na tri kolone, koje
odgovaraju pod-tokovima sinteze, fizikog projektovanja i verifikacije.
Projektovanje zapoinje kreiranjem tzv. dizajn datoteke, koja najee sadri funkcionalni
opisa RTL nivoa u jeziku za opis hardvera (taka 1 na Sl. 1-2). Posebna datoteka, poznata
pod nazivom testben, sadri opis virtuelnog eksperimentalnog okruenja za simulaciju i
verifikaciju dizajna. Testben objedinjuje kd (program) koji generie stimulanse, model
sistema koji se testira i kd koji nadgleda i analizira odzive generisane u toku simulacije.

16

Projektovanje digitalnih sistema


Legenda
:

Proces

Datoteka

Sinteza

Netlista

Fiziko projektovanje

RTL
opis

Sinteza

Verifikacija
Testben

Simulacija

Datoteka
kanjenja

Rasporeivanje
i povezivanje

Simulacija
4

Konfiguracioni
fajl

Programiranje
komponente

Datoteka
kanjenja

Simulacija/
Vremenska
analiza
6

FPGA
8
ip

Sl. 1-2 Tok projektovanja sistema srednje veliine za implementaciju na FPGA.

Tok projektovanja (u idealnom sluaju) podrazumeva sledee korake:


1.
2.
3.
4.

5.
6.

7.
8.

Razvoj dizajn-datoteke i testbena.


Funkcionalna simulacija, iji je cilj verifikacija polaznog RTL opisa.
Sinteza. Rezultat sinteze je strukturni opis na nivou gejtova. Rezultujua logika mrea
je opisana tekstualno u obliku tzv. netliste.
Datoteka koja sadri netlistu koristi se za simulaciju i vremensku analizu, kako bi se
verifikovala funkcionalna korektnost sintetizovane logike mree i obavila
preliminarna provera tajminga.
Rasporeivanje i povezivanje. Gejtovi i veze iz netliste se preslikavaju na fizike
elemente i fizike veze u FPGA kolu.
Ekstrakcija preciznih podataka o tajmingu. Netlista, proirena ovim podacima koristi
se za simulaciju i vremensku analizu u cilju verifikacije korektnost rasporeivanja i
povezivanja i provere da li kolo zadovoljava postavljena vremenska ogranienja.
Generisanje konfiguracione datoteke i programiranje FPGA kola
Verifikacija rada fizike komponente.

Opisani tok projektovanja odgovara idealnom scenariju, kad polazni RTL opis uspeno
prolazi funkcionalnu simulaciju i sintetizovana struktura zadovoljava unapred postavljena
vremenska ogranienja. U realnosti, tok projektovanja moe sadrati vie iteracija radi
korekcije greaka ili problema u tajmingu. To obino zahteva reviziju polaznog RTL opisa
i fino podeavanje parametara u softverima za sintezu, rasporeivanje i rutiranje.

Proces projektovanja

17

Vei i sloeniji digitalni sistemi mogu sadrati nekoliko stotina ili ak nekoliko miliona
gejtova. CAD alati za sintezu ne mogu efikasno da obavljaju transformacije i optimizacije
nad u toj meri sloenim sistemima. Zato je neophodno da se sistem podeli na manje
blokove adekvatne veliine i funkcionalnosti i svaki pojedinani blok nezavisno projektuje,
pre nego to se konstruie kompletan sistem. Vreme projektovanja se moe skratiti ako se
za realizaciju koriste ranije projektovani i verifikovani podsistemi ili komercijalno
dostupna IP jezgara (prema eng. Intelectualy Property Cores). Drugi moduli se moraju
projektovati iz poetka, na prethodno opisani nain.

1.5. Jezici za opis hardvera


Digitalni sistem se projektuje na razliitim nivoima apstrakcije i u razliitim domenima
(funkcionalni, strukturni, fiziki). U toku projektovanja, projektant je u neprekidnoj
interakciji s razliitim CAD alatima. Kako proces projektovanja napreduje, tako se nivoi i
domeni menjaju, bilo od strane projektanta, bilo od strane CAD alata. Poeljno je da postoji
jedan zajedniki okvir za razmenu informacija izmeu projektanta i CAD alata. Jezici za
opis hardvera, ili HDL (prema eng. Hardware Description Language), upravo slue ovoj
svrsi. HDL treba da omogui verno i precizno modeliranje kola i sistema, bilo da se radi o
postojeem kolu odnosno sistemu ili o kolu/sistemu koji se projektuje i to na eljenom
nivou apstrakciju, kako u funkcionalnom tako i u strukturnom domenu. HDL-ovi nalikuju
po sintaksi tradicionalnim programskim jezicima. Meutim, budui da se HDL-ovi koriste
za modeliranje hardvera, njihova semantika i nain korienja se znaajno razlikuju od
semantike i naina korienja programskih jezika. VHDL i Verilog su danas dva najire
koriena HDL-a. Iako su ova dva jezika veoma razliita po sintaksi i izgledu, njihove
mogunosti i oblasti primene su priblino iste. Oba jezika su industrijski standardi i
podrani su u veini alata za projektovanje. Prednost VHDL-a je neto bolja podrka za
parametrizovano projektovanje.
Ogranienja programskih jezika. Programski jezik se karakterie sintaksom i semantikom.
Sintaksa se odnosi na gramatika pravila za pisanje programa, dok semantika definie
znaenje jezikih konstrukcija. Danas postoji veliki broj raunarskih, programskih jezika,
od Fortrana do C-a i Java-e. Veina programskih jezika opte namene, kao to je C,
namenjeni su za pisanje sekvencijalnih programa. Naredbe sekvencijalnog programa se
obavljaju jedna po jedna, po strogo sekvencijalnom redosledu. Redosled operacija se ne
moe proizvoljno menjati, jer svaka operacija u nizu obino zavisi od rezultata prethodnih
operacija. Na apstraktnom nivou, model sekvencijalnih programa omoguava programeru
da opisuje algoritam korak po korak. Na implementacionom nivou, ovaj model je
usklaen sa nainom rada raunara i omoguava efikasno prevoenje programa u mainske
instrukcije.
Meutim, karakteristike digitalnog hardvera su znaajno drugaije od karakteristika modela
sekvencijalnih programa. Tipian digitalni sistem je sainjen od vie meusobno povezanih
delova. Kad god se neki signal u kolu promeni, svi delovi koji su u vezi s ovim signalom
reaguju tako to izvravaju odgovarajuu operaciju. Sve ove operacije se izvravaju
konkurentno (istovremeno, u paraleli), a trajanje svake pojedinane operacije zavisi od
iznosa propagacionog kanjenja kroz konkretan deo. Nakon okonanja operacije, svaki deo
postavlja rezultat na svoj izlaz. Ako su se izlazne vrednosti promenile, izlazni signal e
aktivirati sve povezane delove i inicirati novi ciklus izvrenja operacija. Na osnovu ovog
opisa, uoavaju se nekoliko jedinstvenih karakteristika digitalnih sistema, kao to su
povezanost delova, konkurentne operacije i koncepti propagacionog kanjenja i tajminga.

18

Projektovanje digitalnih sistema

Sekvencijalni model, koji se koristi kod tradicionalnih programskih jezika, previe je


restriktivan da bi mogao da obuhvati navedene karakteristike hardvera, to namee potrebu
za specijalizovanim jezicima koji su prevashodno namenjeni za modeliranje digitalnog
hardvera.
Upotreba HDL programa. Tradicionalni programski jezici se koriste za pisanje programa
koji treba da ree neki konkretan problem. Program prihvata ulazne vrednosti, sprovodi
izraunavanja i generie odgovarajue izlazne vrednosti. Program se najpre kompajlira u
mainske instrukcije, a zatim izvrava na raunaru. S druge strane, primena HDL programa
je znaajno drugaija. Naime, HDL programi imaju trostruku namenu:
Formalna dokumentacija. Rad na razvoju digitalnog sistema obino poinje
tekstualnim opisom njegove funkcije. Naalost, govorni jezik nije dovoljno precizan, a
tekstualni opis je esto nekompletan, dvosmislen i podloan razliitim tumaenjima. S
obzirom na to to HDL-ovi poseduju strogu sintaksu, opis sistema u obliku HDL
programa je taan i precizan. Dakle HDL program se moe koristiti za formalnu
specifikaciju sistema, koja se u obliku razumljive i nedvosmislene dokumentacije
moe razmenjivati meu projektantima i projektantskim grupama.
Simulacija. Kao to je napomenuto u prethodnom poglavlju, simulacija se koristi za
analizu i verifikaciju rada sistema pre nego to se on i fiziki realizuje. U sutini, HDL
simulator predstavlja okvir za izvrenje konkurentnih operacija na sekvencijalnom
raunaru. Simulator za konkretni HDL u stanju je da tumai semantiko znaenje
jezikih konstrukcija i interpretira program napisan u tom HDL-u. U toku izvrenja,
simulator interpretira HDL program i generie odgovarajue odzive.
Sinteza. Savremeni tok projektovanja zasnovan je procesu razrade kojim se
funkcionalni opis visokog nivoa postepeno transformie u strukturni opis niskog nivoa.
Pojedini koraci razrade se mogu obaviti uz pomo CAD alata za sintezu. Softver za
sintezu, kao ulaz prihvata HDL program i generie odgovarajue kolo sainjeno od
komponenti iz raspoloive biblioteke komponenti. Tipino, izlaz iz alata za sintezu je
novi HDL program, koji sada predstavlja strukturni opis sintetizovanog kola.
Karakteristike savremenih HDL-ova. Fundamentalne karakteristike digitalnih kola i
sistema se definiu konceptima: entitet, povezanost, konkurentnost i tajming. Entitet je
bazini gradivni blok, modeliran po ugledu na realno kolo. Entitet je samodovoljan i
nezavisan i ne poseduje bilo kakve informacije o drugim entitetima. Povezanost modelira
veze koje povezuju delove sistema i omoguava interakciju izmeu entiteta. Tipino, vie
entiteta su aktivni u isto vreme, a mnoge operacije se izvravaju u paraleli. Konkurentnost
opisuje ovakav nain ponaanja. Tajming je u vezi sa konkurentnou; definie poetak i
zavretak svake operacije, kao i redosled izvrenja operacija.
Kao to je opisano u prethodnom poglavlju, digitalni sistem se moe modelirati na etiri
razliita nivoa apstraktnosti i u tri razliita domena. Idealno bi bilo posedovati HDL koji bi
pokrio sve ove nivoe i domene. Meutim, to je teko ostvarljivo zbog velikih razlika koje
postoje izmeu razliitih nivoa apstrakcije, kao i izmeu razliitih domena. Savremeni
HDL-ovi omoguavaju kreiranje opisa u strukturnom i bihejvoralnom (funkcionalnom)
domenu, ali ne i u fizikom. Takoe, oni pruaju podrku za modeliranje na nivou gejtova i
RTL nivou i u izvesnoj meri na procesorskom i tranzistorskom nivou. Zajednike
karakteristike savremenih HDL-ova su:

Semantika jezika prua podrku za koncepte: entitet, povezanost, konkurentnost i


tajming.

Jezici za opis hardvera

19

U jeziku se mogu predstaviti propagaciona kanjenja i informacije o tajmingu

Jezik poseduje konstrukcije kojima se na direktan nain moe opisati strukturna


implementacija kola (npr. blok dijagram).

Jezik sadri konstrukcije kojim se na bihejvioralni nain moe opisati rad kola,
ukljuujui i konstrukcije koje nalikuju onim iz tradicionalnih programskih jezika, kao
to su if-then-else, for, while, itd.

Jezik moe efikasno da modeluje operacije i strukture na gejtovskom i RTL nivou.

Jezik poseduje konstrukcije za hijerarhijsko i parametrizovano projektovanje.

2. UVOD U VHDL

VHDL je skraenica od VHSIC Hardware Description Language (u prevodu, VHSIC


jezik za opis hardvera) gde je VHSIC takoe skraenica od Very High Speed Integrated
Circuits (u prevodu, integrisana kola veoma velike brzine rada). Prvobitan VHDL
standard usvojen je 1987. godine od strane meunarodne organizacije za standardizaciju
IEEE (Institute of Electrical and Electronics Engineers) pod oznakom IEEE 1076.
Revidiran i trenutno aktuelan VHDL standard, IEEE 1164, usvojen je 1993. godine.
Iako prevashodno namenjen za modeliranje hardvera, VHDL je po mnogim svojim
karakteristikama slian konvencionalnim, raunarskim programskim jezicima, kao to je to
npr. C. U VHDL-u, kao u C-u, postoje promenljive, programska grananja, petlje, funkcije
itd. Meutim, izmeu VHDL-a i programskih jezika postoje i znaajne razlike, uslovljene
njihovom specifinom namenom. Program napisan na programskom jeziku se kompilira
(uz pomo kompajlera) i tako prevodi u mainski kd, koji se moe direktno izvriti na
raunaru opte namene. S druge strane, VHDL kd je mogue sintetizovati, pomou
specijalizovanih softvera za hardversku sintezu, odnosno prevesti u oblik netliste na osnovu
koje je mogue automatski realizovati fiziki sistem. Takoe, VHDL opis nekog sistema se
moe funkcionalno i vremenski simulirati, uz pomo HDL simulatora, a u cilju verifikacije
projekta pre njegove fizike realizacije.
Prvobitno, VHDL je imao dvostruku primenu. Prvo, bio je korien kao dokumentacioni
jezik za precizno i unificirano opisivanje strukture sloenih digitalnih sistem s ciljem da se
olaka razmena projekata izmeu projektantskih organizacija. Drugo, budui da poseduje
jezike konstrukcije za modeliranje ponaanja digitalnih kola, VHDL je korien i kao ulaz
u softvere koji su se u to vreme koristili za simulaciju rada digitalnih kola. Poev od
sredine 90 godina prolog veka, pored korienja za dokumentovanje projekta i simulaciju,
VHDL je takoe postao popularno sredstvo za unos dizajna u CAD sisteme za sintezu
hardvera. Jednom napisan i verifikovan VHDL kd moe se iskoristiti za realizaciju
opisanog kola u razliitim implementacionim tehnologijama, kao to su programabilne
logike komponente ili aplikaciono-specifina integrisana kola.
VHDL je kao jezik izuzetno obiman i sloen. Uenje svih detalja ovog jezika zahteva dosta
napora i vremena, kao i dobro poznavanje naprednijih tehnika digitalnog projektovanja.
Meutim, za upotrebu u sintezi, bitan je samo jedan manji deo mogunosti VHDL jezika. U
ovoj knjizi bie razmatrani samo oni aspekti VHDL-a koji su od kljune vanosti za sintezu
hardvera.
Goran Lj. orevi, Arhitetkture mikrosistema, 2009.

22

Uvod u VHDL

Napomenimo da je za razliku od programskih jezika, koji su sekvencijalni, VHDL u osnovi


konkurentan (paralelan) jezik. Iz tog razloga, uobiajeno je da se u kontekstu VHDL-a
govori o kdu ili o opisu, a ne o programu, kao to je to sluaj kod programskih jezika.

2.1. Organizacija VHDL kda


Svaki celovit VHDL opis sastoji se iz sledee tri sekcije (Sl. 2-1):

Deklaracija LIBRARY: sadri spisak biblioteka i/ili delova biblioteka koji se koriste u
projektu, npr. ieee, std, work itd.

ENTITY: definie ulazne i izlazne signale (pinove ili portove) kola.

ARCHITECTURE: sadri pravi VHDL kd koji opisuje ponaanje (tj. funkciju) ili
unutranju organizaciju (tj. strukturu) kola.
LIBRARY
(deklaracija)
ENTITY

ARCHITECTURE

Sl. 2-1 Struktura VHDL kda.

2.1.1. LIBRARY
Library (u prevodu, biblioteka) je kolekcija esto korienih delova VHDL kda.
Biblioteka se sastoji iz jednog ili vie paketa (package) koji sadre funkcije (functions),
procedure (procedures), komponente (components), konstante (constants) i definicije
tipova podataka (types) (Sl. 2-2). Jednom kreirana, biblioteka se moe koristiti u drugim
projektima ili razmenjivati s drugim projektantima.
Biblioteke std i work su sastavni deo jezika VHDL. Biblioteka std sadri definicije
standardnih tipova podataka, dok je work tzv. podrazumevana radna biblioteka, tj.
biblioteka u koju e nakon kompajliranja biti smetene sve programske celine sadrane u
konkretnom VHDL projektu.
LIBRARY
PACKAGE
FUNCTIONS
PROCEDURES
COMPONENTS
CONSTANTS
TYPES

Sl. 2-2 Struktura biblioteke.

Da bi se u VHDL projektu omoguio pristup sadraju neke konkretne biblioteke, potrebne


su dve linije kda sledee sintakse:
LIBRARY ime_biblioteke;
USE ime_biblioteke.ime_paketa.delovi_paketa;

Organizacija VHDL kda

23

Prva linija definie ime biblioteke, dok druga sadri naredbu USE koja definie pakete i
delove pakete iz izabrane biblioteke koji se ele koristiti. U svakom VHDL projektu koji je
namenjen sintezi neophodna su barem tri paketa iz tri razliite biblioteke:

paket std_logic_1164 iz biblioteke ieee

paket standard iz biblioteke std i

paket work iz biblioteke work

Odgovarajue deklaracije su:


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
LIBRARY STD;
USE STD.STANDARD.ALL;
LIBRARY WORK;
USE WORK.ALL;

-- taka-zarez (;) oznaava


-- kraj naredbe ili deklaracije
-- dupla crta oznaava komentar

Re all na kraju naredbe use ukazuje na to da se koristi celokupan sadraj navedenog


paketa. Biblioteke std i work su po automatizmu ukljuene u svaki projekat, pa ih nije
neophodno eksplicitno deklarisati. Meutim, to nije sluaj s bibliotekom ieee, pa njena
deklaracija mora uvek biti navedena. Treba napomenuti da je biblioteka ieee neophodna
samo ako se u projektu koristi tip podataka std_logic. U suprotnom, i ona se moe
izostaviti. Ali, kako se signali i varijable tipa std_logic koriste za sintezu, VHDL kd
namenjen sintezi po pravilu poinje sledeim dvema linijama:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

Meunarodna organizacija za standardizaciju IEEE razvila je i standarizovala nekoliko


paketa s ciljem da olaka i unificira pisanje VHDL kda za sintezu. Svi ovi paketi su
sastavni deo biblioteke ieee. Pored paketa std_logic_vector_1164, najznaajniji paket iz
ove biblioteke je numeric_std, koji se koristi za modeliranje aritmetikih kola. Detaljniji
opis navedenih paketa bie dat u poglavlju 3.3.

2.1.2. ENTITY
Sekcija entity definie ime kola koje se projektuje i imena i osnovne karakteristike njegovih
ulaza i izlaza, tzv. pinova, odnosno portova (ports). Sintaksa deklaracije entiteta je sledeeg
oblika:
ENTITY ime_entiteta IS
PORT (
ime_porta : smer_signala tip_signala;
ime_porta : smer_signala tip_signala;
. . . );
END ime_entiteta;

Ime entiteta (tj. ime kola koje se opisuje) se navodi u prvoj i poslednoj liniji sekcije entity.
Deklaracija portova se nalazi u delu ove sekcije koji poinje slubenom reju port. Za svaki
port se navodi ime, smer i tip. Posredstvom portova kolo razmenjuje signale sa svojim
okruenjem. Okruenje kola ine druga kola i sistemi s kojima je dato kolo u vezi. Portovi
ne moraju biti samo binarni signali (tipa bit), ve to mogu biti signali bilo kog drugog tipa
koji je podran od strane VHDL-a (std_logic, integer itd.). U kdu za sintezu najee se
koristi tip std_logic koji omoguava da signali pored 0 i 1 mogu imati jo nekoliko

24

Uvod u VHDL

razliitih vrednosti (ili nivoa). Pregled osnovnih tipova podataka u VHDL-u dat je u glavi
3. Smer porta moe biti: in, out, inout ili buffer. Smer in oznaava ulazne, a out izlazne
portove kola, kao to je prikazano na Sl. 2-3(a). Smer inout se koristi za deklaraciju
dvosmernih (ili bidirekcionih) portova, tj. portova koji se po potrebi mogu koristiti bilo kao
ulazi, bilo kao izlazi. Smer buffer oznaava izlazne portove koji se kao interni signali mogu
koristiti unutar samog kola.

(a)

(b)
Sl. 2-3 (a) Smer porta; (b) NI kolo.

Pr. 2-1 Entitet dvoulaznog NI kola


NI kolu sa Sl. 2-3(b) odgovara entitet:
ENTITY ni_kolo IS
PORT (a, b : IN BIT;
c : OUT BIT);
END ni_kolo;

Znaenje gornje deklaracije entiteta je sledee. Opisuje se kolo koje ima dva ulazna, a i b, i
jedan izlazni port, c. Sva tri porta su tipa bit. Kolu je dato ime ni_kolo. Dakle, entity ne
govori nita o funkciji kola, ve samo opisuje spoljni pogled na kolo, tj. interfejs kola.
Treba obratiti panju na sledee pojedinosti: vie portova istog smera i tipa mogu biti
deklarisani u istoj liniji (kao to je to sluaj sa portovima a i b). Svaka linija iz konstrukcije
port zavrava se znakom ;, osim poslednje, posle koje sledi zagrada koja zatvara
deklaraciju portova.

2.1.3. ARHITECTURE
Da bi VHDL opis nekog kola bio potpun, osim entiteta, koji definie ulaze i izlaze kola,
neophodno je napisati jo jednu programsku celinu koja se zove arhitektura (arhitecture), a
koja e sadrati opis funkcionisanja (ponaanja) ili opis unutranje strukture kola. Njena
sintaksa je sledea:
ARCHITECTURE ime_arhitekture OF ime_entiteta IS
[deklaracije]
BEGIN
[kd]
END ime_arhitekture;

Kao i za entitet, ime arhitekture moe biti proizvoljno izabrano. Arhitektura je uvek
pridruena jednom konkretnom entitetu, ije se ime navodi posle slubene rei of. Sekcija
architecture se sastoji iz dva dela: deklarativnog (koji je opcion) gde se, izmeu ostalog,
deklariu interni signali i konstante i dela za kd (poev od slubene rei begin, pa do
kraja). Kd arhitekture sardi tzv. konkurentne naredbe.
Pr. 2-2 Arhitektura dvoulaznog NI kola
Razmotrimo ponovo NI kolo sa Sl. 2-3(b). Funkcionisanje ovog kola se moe opisati
sledeom arhitekturom:

Organizacija VHDL kda

25

ARCHITECTURE ni_funkcija OF ni_kolo IS


BEGIN
c <= a NAND b;
END ni_funkcija;

Gornji kd se tumai na sledei nain. Kolo obavlja NI operaciju (nand) nad dva ulazna
signala, a i b, i rezultat dodeljuje (<=) izlaznom signalu c. U ovom primeru ne postoji
deklarativni deo arhitekture, a kd sadri samo jednu naredbu dodele. Treba razumeti da se
ova naredba ne izvrava samo jedanput, ve uvek kad se na nekom od signala a ili b desi
dogaaj. Dogaaj na signalu znai da se desila promena vrednosti signala. Kae se da je
naredba dodele osetljiva (ili senzitivna) na promenu vrednosti bilo kog signala s desne
strane znaka <=. U konkretnom primeru, naredba je senzitivna na signale a i b.
Iako je svaka arhitektura pridruena tano jednom entitetu, entitetu se, s druge strane, moe
pridruiti jedna od eventualno nekoliko raspoloivih, razliitih arhitektura, od kojih svaka
na neki specifian nain opisuje isto kolo. Na primer, jedan, apstraktniji opis, moe se
koristiti za simulaciju, a drugi, detaljniji, za sintezu. Spoj entiteta i arhitekture se naziva
konfiguracijom (v. 2.5).

2.2. Stilovi projektovanja


Digitalni sistem se moe opisati u VHDL-u na dva naina: funkcionalno ili strukturno.
Tehnika (ili stil) programiranja u VHDL-u koja opisuje funkciju kola naziva se
bihejvioralno ili funkcionalno modeliranje. Osnovu funkcionalnog modeliranja ine
konkurentne i sekvencijalne naredbe. Meutim, nekada je lake, efikasnije ili ak
neophodno digitalni sistem opisati na strukturni nain. Za razliku od funkcionalnog
modeliranja, koje je usredsreeno na funkciju kola, strukturno modeliranje opisuje
sloenije kolo kao skup povezanih kola manje sloenosti. Takoe, podrana je, i esto se
koristi, kombinacija stilova. Nije neuobiajeno da su u istoj arhitekturu sadrane sekcije
konkurentnog, sekvencijalnog i strukturnog kda.
U ovom poglavlju bie predstavljeno nekoliko jednostavnih primera VHDL opisa. Iako jo
uvek nismo prouili sve jezike konstrukcije koje e se pojaviti u primerima koji slede, oni
e nam pomoi da bolje razumemo osnovne principe funkcionalnog i strukturnog
modeliranja u VHDL-u.

2.2.1. Funkcionalni opis


Konkurentne naredbe. Za razliku od standardnih programskih jezika koji su sekvencijalni
(naredbe se izvravaju jedna za drugom), VHDL je u osnovi konkurentan jezik. To znai da
prilikom izvrenja VHDL kda, simulator pravi iluziju istovremenog (konkurentnog)
izvravanja razliitih delova kda. Ovakav jedan model je pogodan za opis hardvera, gde
razliiti podsistemi jednog sloenog sistema rade u paraleli.
Pr. 2-3 Konkurentno izvrenje naredbi

Sl. 2-4 Jednostavna kombinaciona mrea.

26

Uvod u VHDL

Ispod je dat VHDL opis kombinacione mree sa Sl. 2-4. Interfejs ove kombinacione mree
ine tri ulazna, a, b i c, i jedan izlazni port, y. Osim signala koji odgovaraju portovima, u
kdu arhitekture se koristi jo jedan interni (unutranji) signal, x, koji odgovara istoimenoj
vezi u mrei sa Sl. 2-4 koja povezuje izlaz prvog sa ulazom drugog NI kola. Interni signali
se deklariu u deklarativnom delu arhitekture (linija 8). Primetimo da deklaracija signala x
ne sadri definiciju smera (smer se definie samo za portove). Primetimo i to da dati kd ne
sadri deklaraciju biblioteka. Razlog za to je to su u ovom primeru svi signali (portovi plus
interni signal) tipa bit. Ovaj tip podataka je definisan u biblioteci std, koja je po
automatizmu ukljuena u svaki VHDL projekat. U kdu arhitekture, prva naredba dodele
(linija 10) postavlja izlaz mree, y, u zavisnosti od vrednosti signala x i c, a druga (linija 11)
signal x u zavisnosti od a i b.
1
2
3
4
5
6
7
8
9
10
11
12
13

-----------------------------------------------------------------ENTITY nand_mreza IS
PORT(a, b, c: IN BIT;
y : OUT BIT);
END simple_circuit;
-----------------------------------------------------------------ARCHITECTURE dataflow OF nand_mreza IS
SIGNAL x : BIT;
BEGIN
y <= x NAND c;
x <= a NAND b;
END dataflow;
------------------------------------------------------------------

Izvrenje naredbe u konkurentnom kdu inicirano je pojavom dogaaja na nekom signalu s


desne strane znaka <=, a ne redosledom po kome su naredbe napisane, kao to je to sluaj
kod programskih jezika. Zbog toga, redosled naredbi u konkurentnom kdu nije od znaaja.
Identinu funkciju bi imao i kd u kome bi dve naredbe iz gornje arhitekture zamenile
mesta:
x <= a NAND b;
y <= x NAND c;

Pretpostavimo da su ulazi mree sa Sl. 2-4 postavljeni na a=b=c=1. S ovakvom ulaznom


pobudom, na izlazu mree je y = (1 nand 1) nand 1 = 1. Neka se u nekom momentu
vrednost ulaza a promeni na a=0. Ovaj dogaaj utie na naredbu iz linije 11 (x <= a nand
b), zato to je ona senzitivna na signal a, ali ne i na naredbu iz linije 10 (y <= x nand c), jer
kod nje signal a ne postoji kao operand. Kao rezultat izvrenja naredbe iz linije 11, signal x
dobija novu vrednost x= (0 nand 1)= 1. Ova promena vrednosti signala x ima za
posledicu aktiviranje naredbe iz linije 10, nakon ijeg izvrenja izlaz y dobija vrednost y =
1 nand 1 = 0. Ovakav nain izvrenja naredbi se naziva dataflow modelom, ili
modelom toka podataka, budui da je redosled izvrenja naredbi uslovljen propagacijom
(protokom) ulazne promene kroz naredbe kda.
Konkurentne naredbe nalikuju elementima nekog digitalnog kola koji rade u paraleli.
Signal s leve strane naredbe dodele predstavlja izlaz, signali s desne strane ulaze, a
operacija funkciju elementa.
Pr. 2-4 Modeliranje propagacionog kanjenja
Propagaciono kanjenje predstavlja jednu od kljunih osobina digitalnih kola, a odnosi se

Stilovi projektovanja

27

na vreme koje protekne od trenutka promene vrednosti ulaznog signala do trenutka


odgovarajue promene vrednosti izlaznog signala. Ispod je dat VHDL opis kombinacione
mree sa Sl. 2-4 koji osim funkcije modelira i propagaciono kanjenje kroz pojedine delove
kola. Dve konkurentne naredbe dodele su sada proirene klauzulom after posle koje je
naveden iznos kanjenja u nanosekundama. S ovim proirenjem, naredbe dodele se
izvrava, kao ranije, uvek kad se desi dogaaj na nekom signalu s desne stane znaka <=,
ali sada je rezultat dostupan, tj. signal sa desne strane znaka <= dobija novu vrednost, tek
nakon navedenog iznosa propagacionog kanjenja. Dakle ako pretpostavimo da su ulazni
signali mree sa Sl. 2-4 postavljeni na a=b=c=1 i da se u trenutku t = 0 ns signal a
promeni na 0, signal x e dobiti vrednost x = 1 u trenutku t = 20 ns. Ova promena
pokrenue naredbu y <= x nand c, iji se rezultat 1 = 0 nand 1 prenosi na signal y, ali
ne trenutno ve tek nakon 20 ns, tj. u trenutku t = 40 ns.
1
2
3
4
5
6
7
8
9
10
11
12
13

-----------------------------------------------------------------ENTITY nand_mreza IS
PORT(a, b, c: IN BIT;
y : OUT BIT);
END simple_circuit;
-----------------------------------------------------------------ARCHITECTURE dataflow OF nand_mreza IS
SIGNAL x : BIT;
BEGIN
y <= x NAND c after 20 ns;
x <= a NAND b after 20 ns;
END dataflow;
------------------------------------------------------------------

Modeliranje propagacionog kanjenja je bitno kad se VHDL opis kreira u cilju simulacije.
U kdu za sintezu, navoenje propagacionog kanjenja nije dozvoljeno. Meutim, ak iako
u naredbi dodele propagaciono kanjenje nije eksplicitno navedeno, ono se podrazumeva,
ali ima beskonano malu vrednost, tzv. delata-kanjenje. Delta-kanjenje je vee od nule,
ali manje od bilo kog konanog fizikog kanjenja. Drugim reima, naredba:
x <= a NAND b;

je identina naredbi:
x <= a NAND b AFTER 0 ns;

Pr. 2-5 Port smera OUT se ne moe koristiti kao ulazni signal!
Portovi su signali koji se mogu koristiti u arhitekturi ravnopravno s internim signalima, uz
potovanje smera porta. Pri tom, ulazni port (smer in) se moe nai u naredbi dodele samo s
desne, a izlazni port (smer out) samo s leve strane znaka <=. Nepotovanje ovih
ogranienja predstavlja sintaksnu greku. Razmotrimo kombinacionu mreu sa Sl. 2-5(a).
Tenja ka to kompaktnijim opisom nas moe lako dovesti do pogrenog kda sa Sl. 2-5(b).
Arhitekturu ine dve naredbe dodele koje striktno prate strukturu mree: x je a and b, a y
komplement x. Meutim, greka postoji u liniji 12 gde se x, deklarisan kao izlazni port (u
liniji 7), koristi kao ulazni signal (naveden je s desne strane znaka <=). Ova greka se
moe ispraviti ako se u entitetu port x deklarie sa smerom buffer. Meutim, korienje
smera buffer se ne preporuuje, jer moe dovesti do suptilnih greaka koje se teko
otkrivaju. Druga mogunost je da se port x deklarie sa smerom inout. Meutim, ni ovo nije
dobro reenje, jer x nije bidirekcioni ve izlazni signal. Reenje koje se preporuuje je ono

28

Uvod u VHDL

koje je dato na Sl. 2-5(c). U ovom reenju, uveden je pomoni, interni signal c koji se u
liniji 5 koristi za uvanje meurezultata a and b, a na osnovu kojeg se formiraju oba
izlaza: x je isto to i c (linija 6), dok je y komplement c (linija 7). Kd sa Sl. 2-5(c) je
ispravan jer se, za razliku od in i out portova, interni signali u naredbama dodele mogu
koristiti bilo kao ulazi, bilo kao izlazi. Takoe, uoimo da su svi signali u ovom primeru
tipa std_logic. Kao to je ve reeno, ovaj tip podataka se standardno koristi u kdu za
sintezu za predstavljanje binarnih signala.

(a)
-----------------------------2 LIBRARY IEEE;
3 IEEE.STD_LOGIC_1164.ALL;
4 -----------------------------5 ENTITY pr5 IS
6
PORT(a,b : IN STD_LOGIC;
1 ----------------------------7
x,y : OUT STD_LOGIC);
2 ARCHITECTURE ispravno OF pr5 IS
8 END r5;
3
SIGNAL c : STD_LOGIC;
9 ARCHITECTURE pogresno OF pr5 IS
4 BEGIN
10 BEGIN
5
c <= a AND b;
11
x <= a AND b;
6
x <= c;
12
y <= NOT x;
7
y <= NOT c;
13 END pogresno;
8 END pogresno;
14 -----------------------------9 ----------------------------1

(b)
(c)
Sl. 2-5 Portovi kao signali: (a) primer kombinacione mree sa dva izlaza; (b) pogrean VHDL
opis; (c) ispravan VHDL opis.

Pr. 2-6 Opis tabele istinitosti


Iako VHDL opisi iz prethodnih primera striktno prate strukturu polaznih logikih mrea, u
optem sluaju to ne mora biti tako. VHDL, pre svega, omoguava modeliranje
(opisivanje) funkcije ili ponaanja kola bez ulaenja u strukturne detalje. Na primer,
funkcija mree sa Sl. 2-4 se moe predstaviti u obliku tabele istinitosti sa Sl. 2-6(a).
Odgovarajui VHDL opis prikazan je na Sl. 2-6(b).

a
0
0
0
0
1
1
1
1

b
0
0
1
1
0
0
1
1

c
0
1
0
1
0
1
0
1
(a)

y
1
0
1
0
1
0
1
1

ARCHITECTURE funct OF nand_mreza IS


BEGIN
WITH (a & b & c) SELECT
y <= 1 WHEN 000,
0 WHEN 001,
1 WHEN 010,
0 WHEN 011,
1 WHEN 100,
0 WHEN 101,
1 WHEN 110,
1 WHEN 111;
END funct;
(b)

Sl. 2-6 Opis tabele istinitosti: (a) tabela istinitosti funkcije tri promenljive; (b) VHDL opis.

Stilovi projektovanja

29

Kao to se moe videti, sada kd nema direktne veze sa strukturom, ve iskljuivo opisuje
funkciju mree. Naredba select je senzitivna na sva tri ulaza, a, b i c, koji su operatorom &
povezana u trobitni vektor. Uvek kad se desi dogaaj ne nekom od ovih signala, naredba
select se jedanput izvri tako to izlazu y dodeli vrednost iz one when grane koja odgovara
trenutnoj vrednosti trobitnog ulaza. Pored naredbe dodele i naredbe select, u VHDL-u
postoji jo nekoliko konkurentnih naredbi. Konkurentne naredbe su obraene u glavi 4.
Sekvencijalne naredbe. Konkurentne naredbe su pogodne za opis hardvera gde razliiti
podsistemi jednog sloenog sistema rade u paraleli. Meutim, ponaanje pojedinih
podsistema, ili kola, esto je lake opisati sekvencijalnim kdom. Konstrukcija process,
predstavlja jedan od naina kako se u VHDL-u moe nametnuti sekvencijalno izvrenje
naredbi. Naime, naredbe obuhvaene procesom izvravaju se sekvencijalno (jedna za
drugom), kao kod bilo kog programskog jezika. Drugim reima, kao to arhitektura
predstavlja okvir za konkurentni, tako proces predstavlja okvir za sekvencijalni kd.
Pr. 2-7 Sekvencijalni proces - D flip-flop sa sinhronim resetom

Sl. 2-7 D flip-flop sa sinhronim resetom.

Na Sl. 2-7 je prikazan grafiki simbol D flip-flopa sa okidanjem na rastuu ivicu taktnog
signala (clk) i sinhronim resetom (rst). Filip-flop je bistabilno kolo, tj. kolo sa dva stabilna
stanja: stanje 0 ili resetovano stanje i stanje 1 ili setovano stanje. Trenutno stanje flip-flopa
dostupno je na izlazu q. D flip-flop ostaje u zateenom stanju sve do trenutka delovanja
aktivne ivice taktnog signala (u konkretnom primeru aktivna je rastua ivica takta), a onda
prelazi u novo stanje shodno trenutnim vrednostima ulaza d i rst. Ako je rst=1, novo
stanje flip-flopa bie 0 (kae se, flip-flop se resetuje). Ako je rst = 0, novo stanje flipflopa bie identino vrednosti ulaznog signala d (kae se, u flip-flop se upisuje vrednost sa
ulaza d). Zapazimo da promene signala d i rst, same po sebi, ne utiu na flip-flop, ve je
njihova vrednost od znaaja samo u trenutku delovanja rastue ivice takta.
U VHDL kdu koji sledi, D flip-flop je opisan u vidu procesa. Kao to su konkurentne
naredbe dodele osetljive na primenu signala s desne strane znaka dodele, tako je proces
osetljiv na promenu signala iz njegove liste senzitivnosti, koja, u konkretnom primeru
sadri samo jedan signal, clk (linija 11). Svaka promena ovog signala pokree proces.
Naredbe sadrane u procesu izvravaju se na sekvencijalan nain, jedna za drugom. Kad se
izvri i poslednja sekvencijalna naredba, proces se deaktivira i prelazi u stanje ekanja na
novu promenu signala clk. Kd procesa ine dve ugnjedene if naredbe. Spoljanja if
naredba detektuje rastuu ivicu signala clk, a unutranja ispituje vrednost signala rst. Uslov
za rastuu ivicu signala clk (linija 13) je kombinacija dva uslova: signal clk se promenio
(clkevent) i njegova nova vrednost je clk = 1 . Ako u momentu rastue ivice signala clk,
signal rst ima vrednost 1 novo stanje flip-flopa je 0 (linija 15), inae u flip-flop se
upisuje vrednost ulaza d (linija 17). Signal q zadrava (memorie) dodeljenu vrednost sve
do sledee rastue ivice signala clk, kad se na osnovu vrednosti ulaza rst i d ponovo
odreuje njegova nova vrednost. Napomenimo da se u VHDL-u procesi koriste za
modeliranje sekvencijalnih digitalnih kola, tj. kola sa memorijom, kao to su to flip-flopovi,
registri, brojai i konani automati. Procesi i sekvencijalno programiranje u VHDL-u
obraeni su u glavi 5.

30
1
2
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

Uvod u VHDL

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY dff IS
PORT (d, clk, rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END dff;
-----------------------------------------------------------------ARCHITECTURE behavior OF dff IS
BEGIN
PROCESS (clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN
IF(rst='1') THEN
q <= '0';
ELSE
q <= d;
END IF;
END IF;
END PROCESS;
END behavior;

Pr. 2-8 D flip-flop i NI kolo proces i konkurentna naredba dodele

Sl. 2-8 D flip-flop i NI kolo.

VHDL opisi NI kolo sa Sl. 2-3(b) i kombinacione mree sa Sl. 2-4, s jedne, i D flip-flopa sa
Sl. 2-7 s druge strane su primeri isto konkurentnog i isto sekvencijalnih opisa,
respektivno. VHDL opis kola sa Sl. 2-8 (dat u ovom primeru) predstavlja kombinaciju ova
dva osnovna stila funkcionalnog modeliranja. Kd arhitekture (linije 10 15) sadri jedan
procesa koji opisuje D flip-flop (linije 11 15) i jednu konkurentnu naredbu dodele koja
obavlja NI operaciju (linija 10). Iako se naredbe unutar procesa izvravaju sekvencijalno,
proces kao celina je konkurentan u odnosu na druge naredbe sadrane u istoj arhitekturi.
Tako, moemo smatrati da se naredba dodele (linija 10) i proces (linije 11 - 15) izvravaju
konkurentno, slino kao to bi u fizikom kolu, NI kolo i D flip-flop radili istovremeno i
nezavisno. Interni signal x se koristi za spregu ove dve sekcije kda. Uoimo da za razliku
od D flip-flopa iz Pr. 2-7, D flip-flop iz ovog primera ne poseduje funkciju resetovanja.
Proces se pokree pri svakoj promeni signala clk. Ako ova promena odgovara rastuoj ivici,
signalu q se dodeljuje vrednost signala x (linija 13), to odgovara upisu u flip-flop.
Primetimo da konkurentna naredba dodele iz linije 10 nije neophodna i da se moe
izostaviti ako se u procesu naredba q <= x (linija 13) zameni naredbom q <= d1 nand d2.
1
2
3
4
5
6

-----------------------------------------------------------------ENTITY pr8 IS
PORT(d1, d2, clk: IN BIT;
q : OUT BIT);
END pr8;
------------------------------------------------------------------

Stilovi projektovanja
7
8
9
10
11
12
13
14
15
16

31

ARCHITECTURE primer OF pr8IS


SIGNAL x : BIT;
BEGIN
x <= d1 NAND d2;
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN q <= x;
END IF;
END PROCESS;
END primer;

Svi primeri iz ovog poglavlja sadre funkcionalne VHDL modele. To se odnosi i na


primere kod kojih se lako moe uspostaviti veza izmeu naredbi i logikih kola. Meutim,
operatori and, not, nand itd. nisu logika kola, ve su to logike operacije koje, kao
sloenije konstrukcije poput naredbi select i if, slue za opisivanje funkcije. Pored operacija
i naredbi vienih u prethodnim primerima, VHDL poseduje i brojne druge operacije i
naredbe koje se mogu koristiti za funkcionalno opisivanje, a kojima e biti posveeno
nekoliko narednih glava ove knjige.

2.2.2. Strukturni opis


Strukturno modeliranje u VHDL-u zasnovano je na konceptu komponenti. Komponenta je
celoviti VHDL opisi (entitet plus arhitektura) koji se jednom pie, a onda koristi za
konstrukciju sloenijih modela. Tipino, vie komponenti se pakuje u jedan paket; paket se
smeta u biblioteku (Sl. 2-2), a biblioteka ukljuuje u one delove projekata gde elimo da
koristimo ranije projektovane komponente.
Pr. 2-9 D flip-flop i NI kolo strukturni opis
Ispod je dat strukturni opis kola sa Sl. 2-8. U kdu se koriste dva komponente, ni_kolo i dff.
Pretpostavka je da se funkcionalni opisi ovih komponenti nalaze u paketu nas_paket iz
biblioteke nasa_biblioteka. U samom kdu, najpre su ukljueni biblioteka i paket (linije 3 i
5), zatim su komponente koje elimo da koristimo deklarisane u deklarativnom delu
arhitekture (linije 13-22) i konano instancirane i na odgovarajui nain povezane u telu
arhitekture (linije 25 i 26). Deklaracija komponente, slino entitetu, definie ulazne i
izlazne portove komponente. Naredba iz linije 25 instancira (kreira) jedan primerak
komponente ni_kolo i povezuje ga sa portovima i internim signalima kola koje se
projektuje. Ime ove instance je K1. Konstrukcija port map povezuje spoljne portove d1 i d2
i interni signal x na portove a, b i c instance K1 komponente ni_kolo, respektivno. Slino,
naredba iz linije 26 kreira jedan primerak D flip-flopa dff i njegove portove d, clk i q
povezuje redom sa signalom x i spoljnim portovima clk i q.
1
2
3
4
5
6
7
8
9
10
11

-----------------------------------------------------------------LIBRARY IEEE;
LIBRARY nasa_biblioteka;
USE IEEE.STD_LOGIC_1164.ALL;
USE nasa_bibloteka.nas_paket.all;
-----------------------------------------------------------------ENTITY pr9 IS
PORT(d1, d2, clk: IN BIT;
q : OUT BIT);
END pr9;
------------------------------------------------------------------

32
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

Uvod u VHDL

ARCHITECTURE struct OF pr9 IS


-- komponenta dff ----------COMPONENT dff IS
PORT (d, clk: IN STD_LOGIC;
q: OUT STD_LOGIC);
END COMPONENT;
-- komponenta ni_kolo -------COMPONENT ni_kolo IS
PORT (a, b : IN STD_LOGIC;
c: OUT STD_LOGIC);
END COMPONENT;
SIGNAL x : STD_LOGIC;
BEGIN
K1: ni_kolo PORT MAP(d1, d2, x);
K2: dff PORT MAP(x, clk, q);
END struct;
------------------------------------------------------------------

Arhitektura koja se sastoji samo iz instanciranih komponenti, kao to je to sluaj u ovom


primeru, zapravo predstavlja netlistu, tj. tekstualni opis ematskog ili blok dijagrama. ta
vie, postoje softveri za projektovanje koji su u stanju da automatski konvertuju grafike
ematske dijagrame u strukturni VHDL kd i obrnuto.
Pr. 2-10 D flip-flop i NI kolo kombinovan opis
Naredba za instanciranje komponenti je takoe konkurentna naredba koja se u istoj
arhitekturi moe kombinovati s drugim tipovima konkurentnih naredbi i procesima. U
VHDL kdu koji sledi, a koji opisuje mreu sa Sl. 2-8, iskoriena je samo jedna
komponenta, dff, dok je ni funkcija realizovana u vidu konkurentne naredbe dodele.
1
2
3
4
5
6
7
8
9
10
11
12

-----------------------------------------------------------------ARCHITECTURE struct OF pr9 IS


-- komponenta dff ----------COMPONENT dff IS
PORT (d, clk: IN STD_LOGIC;
q: OUT STD_LOGIC);
END COMPONENT;
SIGNAL x : STD_LOGIC;
BEGIN
x <= d1 NAND d2;
K2: dff PORT MAP(x, clk, q);
END struct;

Iako predstavlja najnii nivo opisa, strukturno modeliranje ima viestruku ulogu u
projektovanju digitalnih sistema. Prvo, strukturno modeliranje predstavlja osnovu za
hijerarhijsko projektovanje. Po pravilu, sloen sistem se deli na nekoliko manjih
podsistema od kojih se svaki predstavlja jednom komponentom koja se projektuje
nezavisno od drugih komponenti. Ako je to potrebno, podsistem se moe dalje podeliti na
jo manje celine. Drugo, strukturno modeliranje predstavlja nain za ponovno korienje
ranije projektovanih kola. Takva kola, dostupna u obliku VHDL komponenti, jednostavno
se instanciraju u novom projektu i tretiraju kao crne kutije. Komponente predviene za
korienje u razliitim projektima poznate su pod nazivom IP jezgra (ili IP korovi od IP
cores, gde je IP skraenica od Intellectual Propriety intelektualna svojina). Tree,
strukturni VHDL opis se moe koristiti za reprezentaciju konanog rezultata sinteze.

Stilovi projektovanja

33

Tipino, ulaz u alati za sintezu je funkcionalni VHDL opis, a izlaz funkcionalno


ekvivalentni strukturni VHDL opis u kome se kako komponente koriste elementarna
logika kola. Takav strukturni opis se dalje koristi kao ulaz u alate za fiziko projektovanje.

2.3. Projektne jedinice


Projektne jedinice (prema eng. design units) su osnovni gradivni blokovi VHDL opisa.
Projektna jedinica je nedeljiva sekcija VHDL kda koja u potpunosti mora biti sadrana u
jednoj projektnoj datoteci. S druge strane, projektna datoteka moe sadrati proizvoljan
broj projektnih jedinica. Kad se projektna datoteka analizira od strane VHDL simulatora ili
softvera za sintezu, ona se zapravo razlae na projektne jedinice. U VHDL-u postoji pet
tipova projektnih jedinica:

Entitet
Arhitektura
Deklaracija paketa
Telo paketa
Konfiguracija

Projektne jedinca se dalje dele na primarne i sekundarne. Primarna projektna jedinica moe
samostalno da egzistira, dok je sekundarna uvek pridruena jednoj primarnoj jedinici. Tako
je entitet primarna, a arhitektura sekundarna jedinica. U VHDL projektu, za isti entitet
moe postojati vie razliitih arhitektura. S druge strane, svaka arhitektura je pridruena
samo jednom entitetu. Slian odnos takoe vai izmeu deklaracije paketa i tela paketa.
Deklaracija paketa je primarna jedinica koja sadri definicije tipova podataka,
potprograma, operacija, komponenata itd. koje se mogu koristiti u razliitim delovima
projekta. Telo paketa je odgovarajua sekundarna jedinica koja sadri implementaciju
potprograma i operacija deklarisanih u paketu. Konano, konfiguracija je projektna jedinica
koja definie spoj primarne i jedne od raspoloivih sekundarnih jedinica, tj. spoj entiteta i
arhitekture, odnosno spoj deklaracije paketa i tela paketa.

2.4. Procesiranje VHDL kda


VHDL projekat se procesira u tri koraka ili faze:

Analiza
Elaboracija
Izvrenje

Tokom faze analize, softver najpre provera sintaksu VHDL kda. Ukoliko ne postoje
sintaksne greke, softver razlae kd na projektne jedinice koje potom nezavisno prevodi
(tj. kompajlira) u tzv. meukd, tj. u oblik koji vie nije itljiv (tekstualan), ali je zato lako
razumljiv simulatorima i alatima za sintezu. Meukdovi projektnih jedinica se smetaju
u podrazumevanu projektnu biblioteku (work) ili u biblioteku koju je projektant naznaio
kao odredinu biblioteku projekta.
Sloeni projekti su obino hijerarhijski organizovani. Vrni nivo hijerarhije moe sadrati,
u vidu instanciranih komponenti, vie strukturno povezanih podsistema (kao u Pr. 2-9).
Tokom faze elaboracije, softver polazi od deklaracije entiteta vrnog nivoa i spaja ga sa
odgovarajuom arhitekturom (shodno specifikaciji konfiguracije). Ako u arhitekturi postoje

34

Uvod u VHDL

instancirane komponente, softver zamenjuje svaku instancu komponentu odgovarajuom


arhitekturom. Ovaj proces se rekurzivno ponavlja sve dok se sve instancirane komponente
ne zamene odgovarajuim arhitekturama. Tako, elaboracija, kroz proces izbora i
kombinovanja arhitektura, dovodi do kreiranja jednog ravnog (ne vie hijerarhijskog, ve
razvijenog) opisa celokupnog sistema.
Konano, u fazi izvrenja, analiziran i elaboriran opis se prosleuje softveru za simulaciju
ili softveru sintezu. Prvi simulira i izvrava VHDL opis na raunaru, dok drugi sintetie
(realizuje) fiziki opis kola.

2.4.1. Simulacija VHDL kda


Znaaj VHDL modeliranja lei u injenici da se jedan takav opis digitalnog kola moe
simulirati kako bi se na taj nain verifikovala njegova funkcija. Za simulaciju se koriste
namenski softveri, tzv. VHDL simulatori. VHDL kd se najpre procesira, na nain opisan u
prethodnom odeljku, a zatim uitava u simulator koji ima mogunost da izvrava VHDL.
Kao rezultat izvrenja, simulator generie vremenske dijagrame koji pokazuju kako se
signali iz VHDL kda menjaju u vremenu.
Pr. 2-11 Simulacija D flip-flopa
Na Sl. 2-9 prikazan je rezultat simulacije VHDL opisa D flip-flopa iz Pr. 2-7. Grafikon se
moe lako interpretirati. U prvoj koloni navedeni su smerovi signala, a u drugoj njihova
imena. Preostali deo dijagrama sadri talasne oblike posmatranih signala. Du dela za
talasne oblike naznaeni su vremenski trenuci (izraeni u nanosekundama, ns). U ovom
primeru, svi signali su binarni i stoga su njihove vrednosti 0 ili 1 (odnosno nizak ili
visok logiki nivo). Kad se koriste vektori, tj. viebitni signali, njihove trenutne vrednosti
bie prikazane u obliku binarnog, decimalnog ili heksadecimalnog broja. Oblik ulaznih
signala (rst, d i clk) moe se proizvoljno zadati u simulatoru. Na osnovu oblika ulaznih
signala i VHDL kda, simulator odreuje oblik izlaznih signala (u ovom sluaju postoji
samo jedan izlazni signal, q). Poreenjem rezultata sa Sl. 2-9 sa oekivanim ponaanjem D
flip-flopa sa sinhronim resetom, moemo zakljuiti da je simulirani VHDL opis korektan.

Sl. 2-9 Rezultati simulacije VHDL kda iz Pr. 2-7

Testben. Simulacija VHDL modela je slina sprovoenju eksperimenta nad realnim,


fizikim kolom. U jednom realnom eksperimentu, na ulaze fizikog kola se deluje
stimulansima (pobudinim signalima koje generie ureaj poput generatora signala) i pri
tom se nadgledaju izlazi kola (npr. ureajem kao to je osciloskop ili logiki analizator).
Simulacija VHDL kda je neka vrsta virtuelnog eksperimenta u kome je fiziko kolo
zamenjeno odgovarajuim VHDL opisom. ta vie, u mogunosti smo da razvijemo
specijalizovane VHDL rutine koje e imitirati rad generatora signala, s jedne i prikupljati i
analizirati odzive VHDL modela koji se simulira, s druge strane. Ovakav jedan koncept se
naziva testben.

Procesiranje VHDL kda

35

Pr. 2-12 Testben


U ovom primeru je predstavljen testben za VHDL kd iz Pr. 2-3 koji opisuje
kombinacionu mreu sa Sl. 2-4 (nand_mreza). Testben sadri: generator stimulansa, kolo
koje se testira i verifikator koji proverava ispravnost odziva kola (Sl. 2-10). Testben je
kompletan VHDL modul sa entitetom i arhitekturom. Meutim, poto testben ne poseduje
spoljne ulaze i izlaze, njegov entitet je prazan, tj. bez portova (linije 2 i 3). Arhitektura
testbena sadri tri konkurentne naredbe: jednu naredbu za instanciranje komponente i dva
procesa. Naredba za instanciranje komponente (linije 14 i 15) instancira jedan primerak
kola koje se testira i posredstvom internih signala, test_in i test_out, povezuje ga sa
generatorom stimulansa i verfikatorom. Prvi od dva procesa (linije 17-35) ima ulogu
generatora stimulansa. Ovaj proces generie sve mogue test-vektore, tj. binarne
kombinacije koje se dovode na ulaz kola koje se testira. poev od 000 pa sve redom do
111. Svaki test-vektor traje 200 ns. Drugi proces (linije 37-59) ima ulogu verifikatora. On
eka da se pojavi novi test-vektor (linija 40), zatim eka jo 100 ns (linija 41), a onda
proverava da je vrednost koja je u tom momentu prisutna na izlazu kola koje se testira
identina oekivanoj, poznatoj vrednosti. U sluaju odstupanja, verifikator prijavljuje
greku (linije 56-59). (VHDL kd iz ovog primera je dat radi ilustracije koncepta testbena
i za sada ne treba brinuti oko sintaksnih detalja.) Na Sl. 2-10 je prikazana grafika
interpretacije testbena.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

-----------------------------------------------------------------ENTITY nand_mreza_testbench IS
END nand_mreza_testbench;
-----------------------------------------------------------------ARCHITECTURE tb_arch OF nand_mreza_testbench IS
COMPONENT nand_mreza
PORT(a, b, c: IN BIT;
y : OUT BIT);
END COMPONENT;
SIGNAL test_in : BIT_VECTOR(2 DOWNTO 0);
SIGNAL test_out : BIT;
BEGIN
-- Instanciranje kola koje se testira ---------------------------uut: nand_mreza
PORT MAP(a=>test_in(2),b=>test_in(1),c=>test_in(0),y=>test_out);
-- Generator stimulansa (test vektora) --------------------------PROCESS
BEGIN
test_in <= "000";
WAIT FOR 200 ns;
test_in <= "001";
WAIT FOR 200 ns;
test_in <= "010";
WAIT FOR 200 ns;
test_in <= "011";
WAIT FOR 200 ns;
test_in <= "100";
WAIT FOR 200 ns;
test_in <= "101";
WAIT FOR 200 ns;
test_in <= "110";
WAIT FOR 200 ns;

36
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

Uvod u VHDL

test_in <= "111";


WAIT FOR 200 ns;
END PROCESS;
-- Verifikator --------------------------------------------------PROCESS
VARIABLE error_status : BOOLEAN;
BEGIN
WAIT ON test_in;
WAIT FOR 100 ns;
IF((test_in="000" AND test_out='1') OR
(test_in="001" AND test_out='0') OR
(test_in="010" AND test_out='1') OR
(test_in="011" AND test_out='0') OR
(test_in="100" AND test_out='1') OR
(test_in="101" AND test_out='0') OR
(test_in="110" AND test_out='1') OR
(test_in="111" AND test_out='1'))
THEN
error_status := FALSE;
ELSE
error_status := TRUE;
END IF;
-- prijavljivanje greske ----------------------------------------ASSERT NOT error_status
REPORT "greska!"
SEVERITY note;
END PROCESS;
END tb_arch;
----------------------------------------------------------------test_in
PROCESS
BEGIN
test_in <= "000";
WAIT FOR 200 ns;
test_in <= "001";
WAIT FOR 200 ns;
. . .
END PROCESS;

a,b,c

simple_circuit

test_out

PROCESS
VARIABLE ...
BEGIN
WAIT ON test_in;
WAIT FOR 100 ns;
IF((test_in="000" AND
test_out='1') OR
(test_in="000" AND
test_out='0') OR
. .
END PROCESS;

Sl. 2-10 Konceptualni prikaz testbena.

2.4.2. Sinteza VHDL kda


VHDL je osmiljen i projektovan prevashodno kao jezik za simulaciju. Potreba za sintezom
se javila naknadno. Softver za sintezu radi tako to pronalazi i preslikava jezike
konstrukcije iz VHDL kda na hardverske elemente identinog ponaanja (funkcije). Ovo
preslikavanje nije uvek jednostavan zadatak. Za pojedine konstrukcije iz VHDL jezika
postoje direktni hardverski ekvivalenti, pred neke druge se postavljaju posebni zahtevi i
ogranienja kako bi mogle da se sintetiu, dok za mnoge jezike konstrukcije hardverska
interpretacija jednostavno ne postoji. Iz tog razloga, VHDL koji se koristi za pisanje kda
za sintezu je tek podskup punog VHDL-a. Poznavanje ovih ogranienja je od velike
vanosti, jer ona diktiraju nain na koji treba pisati kd da bi on mogao da se sintetie.
Preporuka je da VHDL opise treba u startu pisati za sintezu, jer kd koji je uspeno proao
funkcionalnu simulaciju, ne znai da se moe i sintetizovati.

Procesiranje VHDL kda

37

Radi ilustracije procesa hardverske sinteze, razmotriemo sledei segment VHDL kda:
. . .
f1 <= x AND y;
f2 <= x AND NOT y;
f <= f1 OR (f2 AND z) OR (f2 AND w);
. . .

Sinteza VHDL kda se obavlja u nekoliko uzastopnih koraka. U prvom koraku, softver za
sintezu transformie polazni VHDL opis u funkcionalnu mreu, koja za razmatrani VHDL
kd izgleda kao na Sl. 2-11(a). Kao to vidimo, funkcionalna mrea sadri logike
operatore koji su povezani na nain kao u naredbama VHDL kda. U drugom koraku,
funkcionalna mrea se pojednostavljuje primenom razliitih metoda za automatsku
optimizaciju logikih funkcija (Sl. 2-11(b)). Konano, u treem koraku, operatori iz
optimizovane funkcionalne mree se preslikavaju na hardverske elemente (tj., u ovom
jednostavnom primeru, na logika kola).

(a)

(b)

(c)
Sl. 2-11 Sinteza VHDL kda: (a) inicijalna funkcionalna mrea; (b) funkcionalna mrea nakon
optimizacije. (c) konani rezultat sinteze u obliku logike mree.

VHDL opis moe biti znaajno sloeniji od onog sa Sl. 2-11 i moe da sadri ne samo
logike ve i aritmetike operacije, pa i sloenije programske konstrukcije (npr. if, select,
itd.). Meutim, da bi sinteza bila mogua, kd mora biti tako napisan da se moe
transformisati u funkcionalnu mreu. Otuda je dobra praksa da pisanju VHDL kda za
sintezu prethodi crtanje skice konceptualnog dijagrama koji e posluiti kao model za
pisanje kda (slino kao to dijagram toka slui kao model za pisanje programa). Ovaj
koncept je ilustrovan na Sl. 2-12.
Na Sl. 2-12(a) vidimo crte konceptualnog dijagrama digitalnog kola koje u zavisnosti od
vrednosti ulaza s na izlazu f daje a+b ili a-b. Na Sl. 2-12(b) je dat segment VHDL kda
koji je napisan po ugledu na dijagram sa Sl. 2-12(a). Cilj crtanja konceptualnog dijagrama
nije precizno definisanje strukture sintetizovanog hardvera, ve kreiranje vizuelne,
funkcionalne predstave kola. U prvom koraku sinteze, VHDL kd sa Sl. 2-12(b) bie
interno transformisan u funkcionalnu mreu koja e po obliku biti identina ili barem slina
skici konceptualnog dijagrama (Sl. 2-12(c)), ali e potom uslediti niz optimizacija tokom
kojih funkcionalna mrea moe biti transformisana u drugaiji oblik, koji e biti
funkcionalno identian polaznom, ali jednostavniji, kao npr. mrea sa Sl. 2-12(d).

38

Uvod u VHDL

Projektant:

Softver za sintezu:

(a)

(c)

. . .
f <= a + b WHEN ctrl=0 ELSE
a b:
. . .
(b)

(d)

Sl. 2-12 VHDL sinteza. Aktivnosti projektanta: (a) crtanje skice konceptualnog dijagrama; (b)
pisanje VHDL kd. Aktivnosti softvera za sintezu: (c) transformacija VHDL kda u
funkcionalnu mreu; (d) optimizacija funkcionalne mree.

2.5. CONFIGURATION
Entitet i arhitektura su kljuni koncepti VHDL-a. Razdvajanje specifikacije interfejsa
(entitet) od specifikacije funkcije/strukture kola (arhitektura), omoguava projektantu da
zadri isti entitet, a zameni arhitekturu novom, eventualno detaljnijom ili unapreenom
verzijom. Kao to je ve reeno, istom entitetu se moe pridruiti vie razliitih arhitektura
(Sl. 2-13(a)). Moe se uspostaviti analogija sa integrisanim kolom (IC) i kuitem za IC.
Entitet se moe zamisliti kao kuite na tampanoj ploi predvieno za IC neke konkretne
funkcije. Ovo kuite je prazno, ali sa definisanim rasporedom pinova. Arhitekture koje su
pisane za taj entitet mogu se zamisliti kao razliita IC sa istim rasporedom pinova kao
kuite (Sl. 2-13(b)). Iako, funkcionalno i spolja gledano identina, ova IC se mogu
razlikovati po nainu kako je njihova funkcija interno realizovana ili u performansama ili
po nekim drugim npr. elektrinim karakteristikama. Shodno konkretnim zahtevima, u
mogunosti smo da odaberemo jedno od raspoloivih IC-ova i ugradimo ga u kuite, a da
pri tom ne moramo bilo ta da menjamo na tampanoj ploi. VHDL poseduje mehanizam,
podran naredbom configuration, koji na slian nain omoguava povezivanje entiteta i
arhitekture.

(a)

(b)

Sl. 2-13 Konfiguracija: (a) entitet i arhitekture; (b) kuite za IC i IC-ovi.

Pr. 2-13 Konfiguracija


U prethodnim primerima predstavljene su dve arhitekture za kombinacionu mreu
nand_mreza sa Sl. 2-4. Prva, nazvana dataflow, koristi logike operacije (Pr. 2-3), a druga,

CONFIGURATION

39

nazvana funct, opisuje funkciju mree na neto viem nivou apstrakcije, korienjem
naredbe select (Pr. 2-6). U Pr. 2-12 je dat testben za ovo kolo. Meutim, ako paljivo
pogledamo VHDL kd ovog testbena, uoiemo da ni u deklaraciji komponente
nand_mreza (linije 6-9 kda iz Pr. 2-12) ni u naredbi za instanciranje ove komponente
(linije 14-15) nije navedeno koju od dve arhitekture treba koristiti, dataflow ili funct.
Testben je poput tampane ploe sa praznim kuitem za komponentu koja se testira, dok
su alternativne arhitekture ove komponente poput razliitih IC-ova koja se mogu umetnuti
u kuite. Ispod je dat kd konfiguracije u kome je za korienje u testbenu komponenta
nand_mreza eksplicitno povezana sa arhitekturom dataflow. Tumaenje kda je sledee:
Konfiguracija, nazvana demo_config, odnosi se na entitet nand_mreza_testbanch, tj. na
njegovu arhitekturu tb_arch u kojoj se za instancu uut entiteta nand_mreza koristi
arhitektura dataflow koja se moe nai u podrazumevanoj radnoj biblioteci (work). Treba
napomenuti da deklaracija konfiguracije nije neophodna ako u projektu postoji samo jedna
arhitektura za dati entitet. U tom sluaju, povezivanje entiteta i arhitekture se obavlja po
automatizmu.
1
2
3
4
5
6
7
8

-----------------------------------------------------------------CONFIGURATION demo_config OF nand_mreza_testbench IS


FOR tb_arch
FOR uut : nand_mreza
USE ENTITY work. nand_mreza(dataflow);
END FOR;
END FOR;
END demo_config;

2.6. Uloga VHDL-a u procesu projektovanja


Primeri iz prethodnih poglavlja ukazali su nam na osnovne jezike konstrukcije i
mogunosti VHDL-a. Izbor ovih konstrukcija nije sluajan, ve su one paljivo odabrane
kako bi se istakla glavna svrha VHDL-a podrka projektovanju digitalnih sistema. VHDL
prua unificirano okruenje za celokupan proces projektovanja digitalnih sistema. Ne samo
da sadri konstrukcije za modeliranje sistema na razliitim nivoima apstrakcije, od
apstraktno-funkcionalnog do strukturnog, ve takoe predstavlja i okvir za simulaciju i
verifikaciju. Radi sticanja potpunijeg uvida u ulogu koju VHDL igra u savremenom
projektovanju, na Sl. 2-14 je prikazan dijagram toka projektovanja digitalnih sistema za
implementaciju u FPGA tehnologiji.
Projektovanje sloenijeg digitalnog sistema tipino poinje kreiranjem njegovog
funkcionalnog modela vieg nivoa apstrakcije i odgovarajueg testbena koji sadri test
vektore za testiranje opisane funkcionalnosti. Ovaj opis i testben slue projektantu da
detaljno analizira model, otkrije njegove eventualne nedostatke, razjasni i finalizira polaznu
specifikaciju i konano, precizno definie ulazno-izlazno ponaanje budueg digitalnog
sistema. Arhitektura dataflow (iz Pr. 2-3) i odgovarajui testben (iz Pr. 2-12) nalikuju
ovakvoj vrsti kda. Apstraktni opisi sloenih sistema obino nisu pogodni za sintezu, bilo
zato to bi se njegovom sintezom kreirao nepotrebno sloen hardver, bilo zato to se uopte
i ne mogu sintetizovati.
Nakon to je u potpunosti razjasnio sve aspekte funkcionisanja sistema i kreirao testben,
projektant kreira VHDL kd za sintezu. Po pravilu, ovaj kd je opis RTL nova i zapravo
daje skicu hardverske organizacije sistema, na osnovu koje softverski alat moe da izvri
efikasnu sintezu hardvera. Arhitektura dataflow za kolo nand_mreza nalikuje ovakvom

40

Uvod u VHDL

kdu. Meutim, kd predvien za sintezu mora biti verifikovan pre nego to se sintetie u
hardver. Za verifikaciju se moe koristiti isti testben koji je razvijen tokom polaznog,
funkcionalnog modeliranja sistema dovoljno je, uz pomo VHDL konfiguracije,
postojeu apstraktnu arhitekturu zameniti novom, detaljnijom. Nova, RTL arhitektura
mora da d identian odziv kao apstraktna.
Nakon uspene funkcionalne verifikacije, RTL opis je spreman za sintezu. Rezultat sinteze
je netlista u obliku strukturnog VHDL opisa (poput VHDL kda iz Pr. 2-9). Ovaj opis je
obino nesrazmerno obimniji od polaznog RTL opisa, jer je sada sistem razgraen do nivoa
elementarnih logikih kola i flip-flopova. Zbog obilja detalja koje sadri, netlista nije
pogodna za interpretaciji i tumaenju od strane oveka, ali se zato lako moe, kao nova
konfiguraciona jedinica, umetnuti u postojei testben. Simulacijom testbena moe se
verifikovati korektnost sinteze i preliminarno analizirati tajming sistema. Nakon uspene
verifikacije, netlista je spremna za dalje procesiranje, koje se obavlja uz pomo softverskih
alata za rasporeivanje i rutiranje. Ovi alati generiu lejaut, koji vie nije u obliku VHDL-a.
S jedne strane, lejaut se prevodi u konfiguracionu datoteku, koja se koristi za programiranje
FPGA komponente. S druge strane, iz generisanog lejauta se ekstrahuje informacija o
tajmingu (propagaciona kanjenja kroz komponente) koja se u obliku datoteke kanjenja
moe pridodati postojeem strukturnom opisu (netlisti). Ovaj novi opis se ponovo ukljuuje
u testben i simulira radi zavrne verifikacije tajminga.
Legenda:

VHDL
fajl
RTL
opis

Testben

Sinteza

Netlista

Simulacija

Datoteka
kanjenja

Rasporeivanje
i povezivanje

Konfiguracioni
fajl

Simulacija

Datoteka
kanjenja

Programiranje
komponente
FPGA
ip

Sl. 2-14 Uloga VHDL-a u procesu projektovanja.

Simulacija/
Vremenska
analiza

3. OSNOVNE JEZIKE KONSTRUKCIJE

U ovoj glavi bie dat pregled osnovnih jezikih konstrukcija VHDL-a, to ukljuuje
leksike elemente, objekte, tipove podatka, operatore i atribute. VHDL je strogo-tipiziran
jezike, to znai da namee stroga pravila u nainu korienja tipova podataka i operatora.
Posebna panja bie posveena tipovima podataka i prateim operacijama koje je
dozvoljeno koristiti u kdu namenjenom za sintezu.

3.1. Leksiki elementi


Leksiki elementi su osnovne sintaksne jedinice VHDL-a. To su: komentari, identifikatori,
rezervisane rei, brojevi, karakteri i stringovi.
Komentari. Komentar poinje sa dve crtice -- posle kojih sledi tekst komentara.
Komentari se koriste radi dokumentacije i nemaju uticaja na procesiranje kd. (Prilikom
kompajliranja, celokupan tekst poev od -- pa do kraja tekue linije se ignorie.)
Identifikatori. Identifikatori su imena objekata u VHDL-u (signala, promenljivih, entiteta,
arhitektura itd.). Pravila za pisanje identifikatora su:

Identifikator moe sadrati samo slova, decimalne cifre i crtu za podvlaenje.

Prvi karakter mora biti slovo.

Poslednji karakter ne moe biti crta za podvlaenje.

Dve uzastopne crte za podvlaenje nisu dozvoljene.

Na primer, sledei identifikatori su ispravni:


A11, sledece_stanje, NextState, addr_en

Sledei identifikatori kre neko od navedenih pravila usled ega izazivaju sintaksnu greku
prilikom analize programa:
x#8, _x3, 5linija, a10_, ab__cd

VHDL ne pravi razliku izmeu malih i velikih slova, a to vai kako za identifikatore, tako i
za slubene rei. Tako a i A, ni_kolo i NI_Kolo, kao i Port, port i PORT znae isto.

Goran Lj. orevi, Arhitetkture mikrosistema, 2009.

42

Osnovne jezike konstrukcije

Rezervisane rei. U jeziku VHDL, neke rei imaju posebno znaenje i ne mogu se koristiti
kao identifikatori. Ove rei su poznate kao slubene ili rezervisane rei. Sledi njihov
spisak:
abs access after alias all and architecture array
assert attribute begin block body buffer bus case
component configuration constant disconnect downto
else elsif end entity exit file for function generate
generic guarded if impure in inertial inout is label
library linkage literal loop map mod nand new next
nor not null of on open or others out package port
postponed
procedure
process
pure
range
record
register reject rem report return rol ror select
severity shared signal sla sll sra srl subtype then
to transport type unaffected units until use variable
wait when while with xnor xor

Brojevi, karakteri i stringovi. U VHDL-u, brojevi mogu biti celi, kao npr. 0, 123456 i
98E7 (= 98107) ili realni, kao npr. 0.0, 1.2345 ili 6.82E6 (= 6.82106). Osim kao decimalni,
brojevi se mogu predstaviti i u drugim brojnim osnovama. Na primer, 45 se moe napisati
kao 2#101101# u osnovi 2, odnosno 16#2D# u osnovi 16 (vrednost na poetku zapisa
ukazuje na brojnu osnovu, dok se vrednost broja zapisuje izmeu znakova #). Radi
poboljanja itljivosti, dozvoljeno je korienje crte za podvlaenje. Na primer, 12_3456 je
isti to i 123456, a 2#0011_1010_1101# isto to i 2#001110101101#.
U VHDL-u, karakteri (znakovi) se piu pod jednostrukim navodnicima, npr. 'A', 'a' ili '7'.
Uoimo da 1 nije isto to i '1' (1 je broj, a '1' karakter).
String je niz karaktera pod dvostrukim navodnicima, kao npr. Alo i 1000111. Ponovo,
uoimo da 2#10110010# i 10110010 nisu isto, budui da je 2#10110010# broj, a
10110010 string. Za razliku od brojeva, unutar stringova nije dozvoljeno koristiti crtu za
podvlaenje. Na primer, 10100010 i 1011_0010 su dva razliita stringa.

3.2. Objekti
U VHDL-u, pod objektom se smatra imenovana stavka koja sadri (uva) vrednost podatka
odreenog tipa. Za reprezentaciju podatka u VHDL-u se koriste tri tipa objekata: signali,
varijable i konstante.
Signali. Signali su najee korieni objekti u VHDL-u. Signali se koriste za povezivanje
komponenti i razmenu podataka izmeu entiteta. Mogu se zamisliti, zavisno od konteksta,
bilo kao elektrine veze u fizikom kolu, bilo kao veze sa memorijom, tj. registri ili le
kola. Portovi entiteta su takoe signali.
Signal se deklarie u deklarativnoj sekciji arhitekture shodno sledeoj sintaksi:
SIGNAL ime_signala,..., ime_signala : TIP_PODATAKA;

Na primer, u sledeoj liniji deklarisana su tri signala tipa std_logic:


SIGNAL x, y, z : STD_LOGIC;

Prilikom deklaracije, signalu se moe dodeliti poetna, tj. inicijalna vrednost:


SIGNAL x, y, z : STD_LOGIC := 0;

Objekti

43

Meutim, inicijalne vrednosti signala podrane su samo u simulaciji VHDL kda, dok se u
kdu za sintezu ova mogunost ne koristi.
Za dodelu vrednosti signalu koristi se operator <=:
ime_signala <= izraz;

Treba naglasiti da je dodela vrednosti signalu uvek odloena u odnosu na trenutak


izraunavanja izraza. Takoe, izraz s desne strane znaka <=, u svom najoptijem obliku,
ne definie samo pojedinanu vrednost, ve kompletan talasni oblik signala, tj. niz
vrednosti koje e se u odgovarajuim vremenskim trenucima dodeljivati signalu. Detaljnije
razmatranje osobina signala, naredbe dodele i drugih jezikih konstrukcija koje se tiu
signala sledi u glavi 4.
Varijable. Varijable odgovaraju promenljivama iz programskih jezika. Koriste se za
uvanje lokalnih podataka u sekvencijalnim sekcijama VHDL kda (procesima i
potprogramima). Ne postoji neka precizna fizika interpretacija varijabli, a svoju osnovnu
primenu nalaze u apstraktnom modeliranju. Varijable se deklariu u deklarativnoj sekciji
procesa (ili potprograma) na sledei nain:
VARIABLE ime_varijable,..., ime_varijable : TIP_PODATAKA;

Prilikom deklaracije, varijabli se moe dodeliti inicijalna vrednost. Meutim, kao i za


signale, ova mogunost je podrana samo u simulaciji.
Za dodelu vrednosti varijabli koristi se operator :=:
ime_varijable := izraz;

Za razliku od signala, auriranje vrednosti varijable je trenutno, odnosno u momentu


izvrenja naredbe dodele. Korienje varijabli u VHDL-u bie detaljnije razmatrano u glavi
5, koja je posveena sekvencijalnom kdu.
Konstante. Konstanta je objekat koji sadri nepromenljivu vrednost. Konstanta se moe
deklarisati u entitetu, arhitekturi ili paketu, na sledei nain:
CONSTANT ime_konstante : TIP_PODATAKA := izraz;

lan izraz s kraja deklaracije definie vrednost konstante. Na primer, u sledeim linijama
kda deklarisane su dve celobrojne (integer) konstante, M i N:
CONSTANT M : INTEGER := 32;
CONSTANT N : INTEGER := M/4;

Pr. 3-1 Upotreba konstanti


ARCHITECTURE arch OF parity IS
SIGNAL x : STD_LOGIC;
BEGIN
. . .
p := 0;
FOR i IN 7 DOWNTO 0 LOOP
P := p AND a(i);
END LOOP;
. . .

ARCHITECTURE arch OF parity IS


SIGNAL x : STD_LOGIC;
CONSTANT N : INTEGER := 7;
BEGIN
. . .
p := 0;
FOR i IN N DOWNTO 0 LOOP
P := p AND a(i);
END LOOP;
. . .

Iznad su data dva funkcionalno identina VHDL opisa. Razlika izmeu ova dva opisa je

44

Osnovne jezike konstrukcije

samo u tome to je u drugom opisu konkretna vrednost za poetni indeks petlje, 7,


zamenjena konstantom N. S ovom jednostavnom modifikacijom, opis postaje razumljiviji,
jer nam brzo otkriva mesto u kdu gde je definisan jedan bitan parametar sistema. Takoe,
eventualna naknadna promena vrednosti ovog parametra zahtevala bi samo modifikaciju
vrednosti konstante, ali ne i bilo kakvu intervenciju u kdu tela arhitekture.

3.3. Tipovi podataka


Osnovna osobina svakog objekta u VHDL-u jeste pripadnost jednom konkretnom tipu
podataka. Tip podataka definie:

skup vrednosti koje mogu biti dodeljene objektu, i

skup operacija koje se mogu primenjivati nad objektima datog tipa.

VHDL je strogo-tipiziran jezik, to znai da su operacija koje se javljaju u naredbama


legalne samo ako su tipovi operanada usklaeni. Drugim reima, nije dozvoljeno u istom
izrazu koristiti operande razliitog tipa. Primer nelegalne operacije je sabiranje realnog i
celog broja ili dodela binarne vrednosti celobrojnoj promenljivoj. Ukoliko postoji potreba
za ovakvom operacijom, onda se najpre moraju uskladiti tipovi operanada, primenom
odgovarajue funkcije za konverziju tipa.
VHDL je bogat tipovima podataka. Osim tipova koji su ugraeni u sam jezik (tzv.
predefinisani tipovi podataka) i tipova koji su raspoloivi kroz standardne biblioteke i
pakete, VHDL omoguava projektantu da po potrebi uvodi i nove, tzv. korisnike tipove
podataka. Pojedini tipovi podataka se mogu koristiti samo u simulaciji, dok se drugi mogu
koristiti i u sintezi. Dobro poznavanje tipova podataka, naina njihovog korienja i
ogranienja, od velike je vanosti za dobro razumevanje VHDL-a i pisanje efikasnog
VHDL kda. U ovom poglavlju bie rei o svim vanim tipovima podataka u VHDL-u, s
posebnim naglaskom na one koje se mogu koriste u sintezi.

3.3.1. Predefinisani tipovi podataka


Sledi kratak pregled nekoliko esto korienih predefinisanih tipova podataka.
BIT i BIT_VECTOR: definie dvonivovsku logiku. Dozvoljene vrednosti tipa bit su 0 i
1. Tip bit_vector je vektorska varijanta tipa bit, tj. definie niz (vektor, ili 1D polje)
bitova.
SIGNAL x : BIT;
-- deklarie x kao jednobitni signal tipa bit
SIGNAL y : BIT_VECTOR(3 DOWNTO 0);
-- y je 4-bitni vektor. (3 DOWNTO 0) definie opseg indeksa bitova u
-- vektoru i njihov poredak (u ovom sluaju opadajui)
SIGNAL w : BIT_VECTOR(0 TO 7);
-- w je 8-bitni vektor. (0 DOWNTO 7) definie opseg indeksa bitova u
-- vektoru i njihov poredak (u ovom sluaju rastui)
SIGNAL z : BIT := 1;
-- z je jednobitni signal inicijalne vrednost 1.

Prvobitna namena tipa bit bila je modeliranje logikih vrednosti 0 i 1 iz Bulove algebre i
digitalne logike. Meutim, u realnim digitalnim sistemima, signali osim binarnih 0 i 1

Tipovi podataka

45

mogu imati i druge (nebinarne) vrednosti, kao to su visoka impedansa na izlazu


trostatikog bafera, ili nedefinisana vrednost na kratkom spoju izlaza dveju ili vie
digitalnih kola. Iz tog razloga, uveden je tip std_logic (i std_logic_vector), koji je, budui
bogatiji vrednostima, za primene u sintezi zamenio tip bit.
BOOLEAN: definie logike vrednosti true (tano) i false (netano). Uoimo da tip
boolean nije isto to i tip bit. Razlika je ilustrovana sledeim primerom:
IF (a) THEN ...
IF (a=1) THEN ...

-- a je tipa boolean
-- a je tipa bit

INTEGER: 32-bitni celi (integer) brojevi. Opseg dozvoljenih vrednosti je od (231-1) do


231-1 tj. od -2,147,483,647 do +2,147,483,647. U upotrebi su i dva izvedena tipa podatka
(tj. podtipa): natural i positive. Podtipa natural obuhvata nenegativne cele brojeve
(ukljuuje 0), a positive pozitivne cele brojeve (bez 0).

3.3.2. Operatori
U strogo-tipiziranom jeziku kakav je VHDL, operatori su pridrueni definiciji tipa
podataka i mogu se primenjivati samo na objekte tog tipa. Zato je vano znati na koje
tipove podataka se koji operator moe primeniti. U VHDL-u postoji oko 30 operatora. U
tabeli T. 3-1 navedeni su najvaniji operatori koji su bitni za sintezu. Veina operatora su
sami po sebi jasni. Neke napomene u vezi operatora poreenja i konkatenacije mogu se
nai su odeljku 3.3.4.
Pr. 3-2 Operatori pomeranja
Ako je x signal tipa bit_vector i njegova vrednost je x=01001, tada vai:
Y
y
y
y
y
y
y

<=
<=
<=
<=
<=
<=
<=

x
x
x
x
x
x
x

sll
sla
srl
sra
rol
ror
rol

2; -- y
2; -- y
3; -- y
3; -- y
2; -- y
2; -- y
-2; --

<= 00100, logiko pomeranje ulevo za 2 mesta


<= 00111 aritmetiko pomeranje ulevo za 2 mesta
<= 00001, logiko pomeranje udesno za 3 mesta
<= 00001aritmetiko pomeranje udesno za 3 mesta
<= 00101, rotacija ulevo za 2 mesta
<= 01010, rotacija udesno za 2 mesta
isto to i ror 2

Prva etiri operatora obavljaju pomeranje, a poslednja dva rotiranje bit-vektora. Pri
pomeranju gubi se onoliko bita za koliko pozicija se vektor pomera. Pri rotiranju bitovi se
ne gube, jer se oni koji bi inae ispali iz vektora vraaju na suprotan kraj vektora. Postoje
dve varijante pomeranja: logiko i aritmetiko. Razlika meu njima je u tome kako se
tretiraju pozicije koje bi nakon pomeranja ostale prazne. Pri logikom pomeranju, takve
pozicije se popunjavaju prvom vrednou odgovarajueg tipa (npr. za tip bit_vector to je
0). Aritmetiko pomeranja ulevo (sla) ispranjenje pozicije popunjava vrednou krajnjeg
desnog, a aritmetiko pomeranja udesno (sra) vrednou krajnjeg levog bita vektora koji se
pomera. Napomenimo da je u VHDL kdu namenjenom za sintezu operatore pomeranja
dozvoljeno koristiti samo nad operandima tipa bit_vector, ali ne i nad operandima tipa
std_logic_vector.
Pr. 3-3 Ogranienja predefinisanih aritmetikih operatora
U kdu za sintezu ne postoje striktna ogranienja koja se odnose na korienje operacija
sabiranja i oduzimanja. U optem sluaju to vai i za operaciju mnoenja. Kod deljenja,

46

Osnovne jezike konstrukcije

dozvoljeni su samo delioci koji imaju vrednost stepena dvojke (jer se u tom sluaju deljenje
svodi se na operaciju pomeranja). Stepenovanje je dozvoljeno samo prilikom definisanja
vrednosti konstanti (osnova i eksponent mogu biti samo konkretne vrednosti). Alati za
sintezu po pravilu ne podravaju poslednja tri operatora (mod, rem i abs). Rezultat
operacije x rem y je ostatak celobrojnog deljenja x/y (= x (x/y)*y). Znak rezultata isti je
kao znak levog operanda. Npr. 7 rem 4 = 3; (-7) rem 4 = -3; 7 rem (-4) = 3. Rezultat
operacije x mod y jednak je x y*N, gde je N najvei ceo broj za koji vai x y*N. Znak
rezultata isti je kao znak desnog operanda. Npr. 7 mod 4 = 3; 7 mod (-4) = -1.
T. 3-1 Operatori za predefinisane tipove podataka.
Operacija

Opis

NOT a

negacija

a AND b
a OR b
a XOR b
a NOR b
a NAND b
a XNOR b

I
ILI
iskljuivo ILI
NILI
NI
iskljuivo NILI

a+b
a-b
a*b
a/b
a ** b
a MOD b
a REM b
ABS a
-a

sabiranje
oduzimanje
mnoenje
deljenje
stepenovanje
moduo
ostatak
apsolutna vrednost
negacija

a=b
a /= b
a<b
a>b
a <= b
a >= b

jednako
razliito
manje
vee
manje ili jednako
vee ili jednako

Tip
operanda a
Logike operacije
boolean, bit,
bit_vector

boolean, bit,
bit_vector

Tip
operanda b

Tip
rezultata
boolean, bit,
bit_vector

isti kao a

isti kao a

integer

integer

Aritmetike operacije

integer

integer

integer

Operacije poreenja

a sll b
a srl b
a sla b
a sra b
a rol b
a ror b
a&b

bilo koji

isti kao a

boolean

skalar ili 1-D


polje

isti kako a

boolean

integer

bit_vector

1D polje,
element

1D polje

Operacije pomeranja
logiko pomeranje ulevo
logiko pomeranje udesno
aritmetiko pomeranje ulevo
bit_vector
aritmetiko pomeranje udesno
rotacija na levo
rotacija na desno
Konkatenacija
konkatenacija (nadovezivanje) 1D polje,
element

Tipovi podataka

47

Prioriteti operatora. Ukoliko se koristi vie operatora u jednom izrazu, a bez zagrada koje
bi odredile redosled izraunavanja, potrebno je voditi rauna o prioritetima operatora. U
tabeli T. 3-2 data je lista operatora prema prioritetima. Operatori su podeljeni u nekoliko
grupa, pri emu operatori iz iste grupe imaju isti prioritet.
T. 3-2 Prioriteti operatora
Prioritet
Najvii

Najnii

Operator
** ABS NOT
* / MOD REM
- (negacija)
&+sll srl sla sra rol ror
= /= < <= > >=
and or nand nor xor xnor

Izraunavanju operatora nieg prioriteta prethodi izraunavanje operatora vieg prioriteta.


Na primer, razmotrimo sledei izraz:
a + b > c OR a < d

Prvo e biti izraunat operator +, zatim operatori > i < i konano, operator or. U izrazu
koji sadri vie istih operatora izraunavanje se vri s leva na desno. Tako e u izrazu:
a + b + c + d

prvo biti izraunato a + b, zatim e na dobijenu sumu biti dodato c, a onda i d.


U izrazima se mogu koristiti i zagrade. Zagrade imaju najvii prioritet i koriste se da bi se
nametnuo eljeni redosled izraunavanja. Na primer, uz pomo zagrada mogue je
promeniti redosled izraunavanje u prethodnom izrazu na s desna na levo:
a + (b + (c + d))

Za razliku od Bulove algebre, u VHDL-u logiki operatori and i or imaju isti prioritet. Zato
su zagrade neophodne da bi se nametnuo eljeni redosled raunanja, kao u sledeem izrazu:
(a AND b) OR (b AND c)

Da bi se poboljala itljivost i razumljivost kda, dobra je praksa da se podizrazi nekog


sloenijeg izraza odvajaju zagradama i onda kada one nisu neophodne. Na primer, izraz:
a + b > c OR a < d

se moe napisati u obliku:


((a + b) > c)) OR (a < d)

Oito, izraz sa zagradama je jasniji, a anse za greku u pisanju ili pogreno tumaenje
izraza su svedene na minimum.
Treba biti obazriv prilikom pisanja logikih izraza sa vie od dva nand ili nor operatora.
Operatori nand i nor nisu asocijativni, kao to je to poznato iz Bulove algebre, npr:
(a NAND b) NAND c a NAND (b NAND c)

Zbog toga je sledea naredba sintaksno neispravna:


y <= a NAND b NAND c;

Neophodne su zagrade:
y <= (a NAND b) NAND c; (ili, y <= a NAND (b NAND c);)

48

Osnovne jezike konstrukcije

3.3.3. Tipovi podataka iz paketa IEEE std_logic_1164


Potreba za vernijim modeliranjem elektrinih osobina digitalnog hardvera dovela je do
razvoja nekoliko novih tipova podataka koji u sutini predstavljaju proirenja tipova bit i
bit_vector. Ovi novi tipovi podataka definisani su u paketu std_logic_1164, koji je deo
IEEE standarda broj 1164. U ovom odeljku bie predstavljeno nekoliko najvanijih tipova
podataka iz ovog paketa, zajedno sa pripadajuim operacijama i funkcijama za konverziju
izmeu novih i predefinisanih tipova podataka.
Std_logic i std_logic_vector - definiu 8-nivovski logiki sistem. Dozvoljene vrednosti su:
X
0
1
Z
W
L
H
-

Nepoznata vrednost
Nizak nivo
Visok nivo
Visoka impedansa
Slaba nepoznata vrednost
Slab nizak nivo
Slab visok nivo
Proizvoljna vrednost

(sintetie se kao logika 0)


(sintetie se kao logika 1)
(sintetie se kao trostatiki bafer)

L, 1
polldown

Sl. 3-1 interpretacija novoi signala tipa std_logic.

Tip podataka std_logic je prevashodno namenjen za modeliranje elektrinih veza u


digitalnim sistemima (Sl. 3-1). U digitalnim sistemima, svaka fizika veza se najee
pobuuje izlazom samo jednog digitalnog kola (tzv. drajver veze). Drajver moe da
pobuuje vezu logikom vrednou 1 ili 0. Takoe, izlaz drajvera moe biti u stanju
visoke impedanse Z (karakteristino za trostatike bafere). U upotrebi su i digitalna kola
sa izlazom tipa otvoreni kolektor, koja zahtevaju ugradnju spoljanjeg otpornika (tzv.
pull-up otpornik). Drajver tipa otvorenog kolektora postavlja jaku 0, ali slabo 1, tj.
slab visok nivo (H). Drajver koji zahteva ugradnju pull-down otpornika postavlja jako
1 i slabu 0, tj. slab nizak nivo (L).
T. 3-3 Tabela razreavanja konflikta za tip std_logic.
X
0
1
Z
W
L
H
-

X
X
X
X
X
X
X
X
X

0
X
0
X
0
0
0
0
X

1
X
X
1
1
1
1
1
X

Z
X
0
1
Z
W
L
H
X

W
X
0
1
W
W
W
W
X

L
X
0
1
L
W
L
W
X

H
X
0
1
H
W
W
H
X

X
X
X
X
X
X
X
X

U nekim sluajevima vie drajvera mogu da pobuuju istu vezu (tipian primer su
magistrale). S obzirom na to to u jednom momentu na vezi moe postojati samo jedan
logiki nivo, problem e se javiti onda kada drajveri veze generiu razliite logike
vrednosti - ova pojava se naziva konfliktom na magistrali. Konflikti se razreavaju tako to
signal dobija vrednost najjaeg od svih logikih nivoa kojima je veza pobuena. Na

Tipovi podataka

49

primer, ako neku vezu pobuuju dva drajver, tako to je izlaz jednog u stanju visoke
impedanse (Z), a drugi generie 1, rezultujua vrednost signala na liniji bie 1 (zato
to je signal vrednosti 1 jai od signala vrednosti Z). Ili, ako jedan drajver generie 1,
a drugi 0, rezultujua vrednost bie nepoznata (X). Pravila za razreavanje konflikta u
logikom sistemu tipa std_logic navedena su u tabeli T. 3-3. Treba napomentuti da se
veina vrednosti iz tipa std_logic koriste samo u simulaciji. U VHDL kdu koji je
namenjen za sintezu, signalima ovog tipa je od raspoloivih osam dozvoljeno dodeljivati
samo sledee tri vrednosti: 1, 0 i Z.
SIGNAL x : STD_LOGIC;
-- deklarie x kao jednobitni (skalarni) signal tipa std_logic
SIGNAL y : STD_LOGIC_VECTOR(3 DOWNTO 0) := 0001;
-- deklarie y kao 4-bitni vektor sa inicijalnom vrednou 0001
-- Inicijalna vrednost je opciona, a dodeljuje se operatorom := .
-- Krajnji levi bit je bit najvee teine (MSB).
SIGNAL w : STD_LOGIC_VECTOR(0 TO 7);
-- deklarie w kao 8-bitni vektor
-- Krajnji levi bit je bit najvee teine (MSB).

U gornjim primerima, signal x je skalar (moe da sadri samo jednu vrednost tipa
std_logic), dok su signali y i w vektori (sadre niz vrednosti tipa std_logic). Uoimo da su
deklaracije vektorskog tip praene konstrukcijom (n downto m), odnosno (n to m), koja
definie duinu vektora i opseg indeksa. Pri tome, n i m su vrednosti poetnog i krajnjeg
indeksa u nizu. Za downto vai nm, a za to nm. Vektor sadri m-n+1 elemenata, za
downto, odnosno n-m+1 elemenata, za to varijantu. U gornjim primerima, y je vektor
duine 3-0+1=4, a w vektor duine 7-0+1=8 bita. Svakom elementu vektora pridruen je
indeks, koji ukazuje na njegovu poziciju u vektoru. Slibene rei downto i to ukazuju na to
da li se kretanjem kroz niz, s leva na desno, indeksi elemenata smanjuju ili poveavaju. Za
downto redosled vai da krajnji levi element vektora ima najvei, a krajnji desni najmanji
indeks. Obrnuto vai za to redosled - krajnji levi element ima najmanji, a krajnji desni
najvei indeks. Kod tipova podataka koji se koriste za predstavljanje binarnih vrednosti
(kao to su bit_vector ili std_logic_vector) element (bit) na poziciji indeksa najvee
vrednosti naziva se bitom najvee teine (ili MSB, od eng. Most Significant Bit). Slino, bit
na poziciji najmanjeg indeksa je bit najmanje teine (ili LSB od eng. Last Significant Bit).
Sledee naredbe dodele su legalne:
x <= 1;
-- jednobitnom signalu x dodeljuje se vrednost 1. Za pisanje
-- jednobitnih vrednosti koriste se jednostruki znaci navoda ( ).
y <=0111;
-- 4-bitnom signalu se dodeljuje vrednost 0111 (MSB=0).
-- Vektorske vrednosti se piu pod dvostrukim navodnicima ( ).
w <=01110001;
-- 8-bitnom signalu w dodeljuje se vrednost 01110001 (MSB=1).

Skalarne vrednosti se piu pod jednostrukim, a vektorske pod dvostrukim navodnicima. Za


obraanje pojedinanim elementima vektora koristi se indeksiranje. Na primer, elementi
vektora y, za koji vai downto redosled, su y(3), y(2), y(1) i y(0), a njihove vrednosti su
redom 0, 1, 1 i 1. Elementi vektora w (to redosled), su w(0), w(1), ..., w(7), a njihove
vrednosti su 0, 1, ..., 1.

50

Osnovne jezike konstrukcije

Redosled downto se obino koristi onda kada se vektor tumai kao binarni broj. Navikli
smo da u zapisima binarnih brojeva krajni levi bit igra ulogu bit najvee teine. Tako, zapis
0111 iz naredbe y <=0111 predstavlja broj 7. Da je signal y bio deklarisan s indeksima u
to redosledu (signal y : bit_vector(0 to 3)), tada bi vrednost binarnog broja 0111 bila 14.
Pr. 3-4 Vrednosti razliitih tipova
x0 <= 1;
x1 <= 00011111;

---x2 <= 0001_1111; -x3 <= 101111;


-x3 <= B101111;
-x3 <= O57;
-x3 <= X2F;
-n <= 1200;
-IF ready THEN ...
-y <= 1.2E-5;
-q <= d after 10 ns; ---

tip signala x0 moe biti bit ili std_logic


signal x1 moe biti tipa bit_vector
ili std_logic_vector
dozvoljena crta za podvlaenje
binarna reprezentacija decimalnog broja 47
binarna reprezentacija decimalnog broja 47
oktalna reprezentacija decimalnog broja 47
heksadecimalna reprezentacija dec. broja 47
n je integer
ready je tipa boolean. THEN grana se izvrava
ako je ready = true
y je signal tipa real.
ns je fizika jedinica za vreme
(nanosekunde).

Pr. 3-5 Signali i tipovi podataka


SIGNAL a: BIT;
SIGNAL b: BIT_VECTOR(7 DOWNTO 0);
SIGNAL c: STD_LOGIC;
SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL e: INTEGER RANGE 0 TO 255;
...
a <= b(5); -- ispravno (a i b(5) su skalari tipa
b(0) <= a; -- ispravno (b(0) i a su skalari tipa
a <= d(5); -- ispravno (a i d(5) su skalari tipa
d(0) <= c; -- ispravno (d(0) i c su skalari tipa
a <= c;
-- neispravno (neslaganje tipova: a b <= d;
-- neispravno (neslaganje tipova: b
-- d std_logic_vector)
e <= b;
-- neispravno (neslaganje tipova: e
-- b bit_vector)
e <= d;
-- neispravno (neslaganje tipova: e
-- b std_logic_vector)

bit)
bit)
std_logic)
std_logic)
bit c std_logic)
bit_vector
integer,
integer,

Operacije nad tipom std_logic. Kao to je ve reeno, definicija tipa podataka ukljuuje
skup vrednosti i skup operacija nad objektima tog tipa. U nekim sluajevima, VHDL
dozvoljava da se funkcije i operatori istih imena koriste za operande razliitih tipova.
Drugim reima, dozvoljeno je da postoji vie funkcija (operatora) sa istim imenom, ali
svaka za razliit tip podataka. Ova mogunost se naziva preklapanje funkcija, odnosno
preklapanje operatora.

Tipovi podataka

51

T. 3-4 Operacije nad tipom std_logic.


Preklopljeni
operator
NOT a
a AND b
a OR b
a XOR b
a NOR b
a XNOR b

Tip
operanda a
std_logic
std_logic_vector
std_logic
std_logic_vector

Tip
operanda b

Tip
rezultata
isti kao a

isti kao a

isti kao a

U paketu std_logic_1164 svi logiki operatori (not, and, nand, or, nor, xor i xnor),
prvobitno definisani za tipove bit i bit_vector, preklopljeni su za tipove podataka std_logic i
std_logic_vector (tabela T. 3-4). Drugim reima, nad objektima tipa std_logic i
std_logic_vector dozvoljeno je primenjivati logike operatore. Meutim, treba naglasiti da
za tipove podataka std_logic i std_logic_vector aritmetiki operatori nisu preklopljeni.
Pr. 3-6 Logike operacije nad operandima tipa std_logic_vector
Logike operacije nad vektorima izvravaju se nezavisno nad svakim parom odgovarajuih
bitova dva vektora. Pri tom vektori moraju biti iste duine.
SIGNAL a, b, c: STD_LOGIC_VECTOR(7
. . .
a <= 00111010;
b <= 10000011;
c <= NOT a;
-- c dobija vrednost
c <= a OR b; -- c dobija vrednost
c <= a XOR b; -- c dobija vrednost

DOWNTO 0);

11000101
10111011
10111001

Konverzija tipa. Paket std_logic_1164 sadri i nekoliko funkcija za konverziju podataka iz


tipa bit (bit_vector) u tip std_logic (std_logic_vector) i obrnuto. Relevantne funkcije su
navedene u tabeli T. 3-5.
T. 3-5 Funkcije za konverziju iz paketa std_logic_1164.
Funkcija

Tip operanda a

Tip rezultata

to_bit(a)
to_stdlogic(a)
to_bitvector(a)
to_stdlogicvector(a)

std_logic
bit
std_logic_vector
bit_vector

bit
std_logic
bit_vector
std_logic_vector

Pr. 3-7 Konverzija tipa


Pretpostavimo da su s1, s2, s3, b1 i b2 signali definisani na sledei nain:
SIGNAL s1, s2, s3 : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL b1, b2 : BIT_VECTOR(7 DOWNTO 0);

Sledee naredbe dodele su neispravne zbog neusklaenosti tipova:


s1 <= b1;

--b2 <= s1 AND s2; ---

signalu tipa std_logic_vector se dodeljuje


vrednost signala tipa bit_vector
vrednost tipa std_logic_vector se dodeljuje
signalu tipa bit_vector

52

Osnovne jezike konstrukcije

s3 <= b1 OR s2;

-- operacija or nije definisana izmeu vrednosti


-- tipa bit_vector i std_logic_vector

Greke iz prethodnih naredbi se mogu ispraviti korienjem funkcija za konverziju tipa:


s1 <= to_stdlogicvector(b1);
b2 <= to_bitvector(s1 AND s2);
s3 <= to_stdlogicvector(b1) OR s2;

Poslednja naredba se moe napisati i u sledeem obliku:


s3 <= to_stdlogicvector(b1 OR to_bitvector(s2));

3.3.4. Operacije nad vektorskim tipovima


U VHDL-u postoji nekoliko operacija koje su definisane direktno nad jednodimezionim
(vektorskim) tipovima podataka. Primeri takvih operacija su konkatenacija, relacione
operacije i agregacije. Iako se mogu primeniti na bilo koji vektorski tip, ove operacije e
biti predstavljene na primeru tipa std_logic_vector.
Relacione operacije nad vektorima. U VHDL-u, relacione operacije (>, <, =, <=, >= i /=)
se mogu primenjivati nad objektima vektorskog tipa. Vektori nad kojima se primenjuje
relacija moraju sadrati elemente istog tipa, ali ne moraju obavezno biti iste duine. Vektori
se porede element po element, poev od elemenata sa krajnjih levih pozicija. Poreenje se
nastavlja sve do pozicije kada se konani rezultat poreenja moe sa sigurnou odrediti.
Ako se tokom poreenja dostigne kraj jednog vektora, taj vektor se smatra manjim. Na
primer, sve operacije koje slede su tane:
101 = 101, 011 > 010, 011 > 00011, 0110 > 011

Konkatenacija. Konkatenacija se koristi za nadovezivanje (spajanje) manjih vektora,


segmenata vektora ili skalara u jedan vei vektor. Operator konkatenacije je znak &. Na
primer:
y <= x & 10000000;
-- ako je x = 1, tada y <= 11000000
y <= 00 & a(7 DOWNTO 0);
-- ekvivalentno pomeranju vektora a za dve pozicije udesno
y <= a(1 DOWNTO 0) & a(7 DOWNTO 2);
-- ekvivalentno rotaciji vektora a za dve pozicije udesno

Pr. 3-8 Grupisanje signala u magistralu


Neka su deklarisani signali:
SIGNAL
SIGNAL
SIGNAL
SIGNAL

dbus: STD_LOGIC_VECTOR(0 TO 7);


ctrl: STD_LOGIC_VECTOR(1 DOWNTO 0);
en, rw: STD_LOGIC;
count: STD_LOGIC_VECTOR(0 TO 3);

Namera je da se signali ctrl, count, en i rw objedine u jedinstveni 8-bitni vektor dbus. To se


moe postii pomou etiri naredbe dodele:
dbus(0 TO 1) <= ctrl;
dbus(2) <= en;
dbus(3) <= rw;
dbus(4 TO 7) <= count;

Tipovi podataka

53

Korienjem konkatenacije isti rezultat se dobija pomou samo jedne naredbe dodele:
dbus <= ctrl & en & rw & count;

Pr. 3-9 Pomeranje pomou konkatenacije


Razmotrimo sledei segment VHDL kda:
SIGNAL a, b: STD_LOGIC_VECTOR(0 TO 7);
. . .
a <= b(5 DOWNTO 0) & 00;

Naizgled efekat je isto kao a <= b sll 2 (sll je operator pomeranja ulevo). To bi i bio sluaj
da se radi o operandima tipa bit_vector. Meutim, za operande tipa std_logic_vector efekat
operacije a <= b sll 2 je sledei:
a <= b(5 DOWNTO 0) & XX;

To je zato to je u definiciji tipa std_logic kao prva vrednost navedena vrednost X, a ne


vrednost 0 (v. 3.3.3 i Pr. 3-3). Vrednost X (nepoznata vrednosti) se ne moe
sintetizovati. To je i razlog zato se operator sll (kao i bilo koji drugi operator pomeranja,
vidi T. 3-1) ne moe koristiti u sintezi tipa std_logic_vector. Zbog toga se za pomeranje
vektora ovog tipa koristi konkatenacija, na nain kako je to pokazano u ovom primeru.
Agregacija. Agregacija je jezika konstrukcija iz VHDL-a koja se koristi za dodelu
vrednosti objektu vektorskog tipa. Razmotrimo sledei segment VHDL kda:
1
2
3
4
5
6
7

SIGNAL w: STD_LOGIC_VECTOR(7 DOWNTO 0);


. . .
w <= 00001001;
w <= (0,0, 0, 0, 1, 0, 0, 1);
w <= (7=>0,1=>0,5=>0,6=>0,0=>1,4=>0,3=>1,2=>0);
w <= (7|6|5|4|2|1 =>0, 3|2 =>1);
w <= (0=>'1', 3=>'1', OTHERS => '0')

Notacija 00001001 iz naredbe dodele w <= 00001001 (linija 3) predstavlja


kompaktnu reprezentaciju 8-bitnog binarnog vektora. Sledee etiri naredbe (linije 4 - 7)
predstavljaju razliite oblike agregacije i ima isti efekat kao naredba iz linije 3. U naredbi
dodele iz linije 4, vrednost vektora w je agregacija pojedinanih vrednosti poev od
krajnjeg levog do krajnjeg desnog elementa vektora. U naredbi dodele iz linije 5,
pojedinanim elementima vektora se direktno pridruuju vrednosti notacijom i => v, gde
je i indeks elementa u vektoru, a v vrednost koja se dodeljuje tom elementu. Na primer,
0=>'1' znai da se elementu vektora sa indeksom 0, dodeljuje vrednost '1' (isto kao
w(0)<=1). Uoimo da redosled navoenja parova i => v nije od znaaja. Indeksi
elemenata kojima se dodeljuje ista vrednost mogu biti grupisani, kao u naredbi iz linije 6.
Konano, kod ovakvog naina predstavljanja vektora, slubena re others ima posebno
znaenje, jer moe da zameni sve indekse kojima nije eksplicitno dodeljena vrednost, kao u
naredbi iz linije 7. Ova mogunost je posebno bitna u sluajevima kada duina vektora nije
unapred poznata. Na primer, naredba:
w <= (OTHERS => '0');

inicijalizuje vektor w na sve nule. Uoimo da e prethodna naredba ostati ista ak i ako se
naknadno promeni duina vektora w.

54

Osnovne jezike konstrukcije

3.3.5. Tipovi podataka iz paketa IEEE numeric_std


Paket std_logic_1164 ne prua podrku za aritmetike operacije. Na primer, sabiranje i
oduzimanje nisu dozvoljene operacije nad vektorima tipa std_logic_vector. Predefinisane
aritmetike operacije (v. T. 3-1) se mogu primenjivati samo nad operandima tipa integer,
npr.:
SIGNAL a, b, r : INTEGER;
. . .
r <= a + b;

Naredbu sabiranja iz prethodne naredbe teko je sintetizovati u hardver, zato to u kdu nije
eksplicitno naznaen opseg operanada a i b, pa nije poznato ni koliko bita je neophodno za
njihovo predstavljanje. Informacija o duini operanada, premda nebitna za simulaciju, od
sutinske je vanosti za sintezu. Razlika u hardverskoj sloenosti 8-bitnog i 32-bitnog
sabiraa je ogromna. Bolji i prirodniji pristup je da se za operande umesto tipa integer
koriste nizovi (vektori) binarnih vrednosti 0 i 1 koji e se interpretirati kao neoznaeni
ili oznaeni binarni brojevi. Paket numeric_std je razvijen upravo s namerom da se nad
binarnim vektorima omogui izvoenje aritmetikih operacija.
Oznaeni i neoznaeni tipovi podataka. Paket numeric_std uvodi dva nova tipa podataka,
signed i unsigned. Oba tipa su nizovi elemenata tipa std_logic. Niz tipa unsigned se
interpretira kao neoznaen binarni broj (tj. ceo broj koji nikada nije manji od nule), a niz
tipa signed kao oznaen binarni broj (tj. ceo broj koji moe biti i pozitivan i negativan) i to
u reprezentaciji potpunog komplementa s bitom znaka na krajnjoj levoj poziciji.
Uoimo da su tipovi unsigned i signed, ba kao i tip std_logic_vector, definisani kao nizovi
elemenata tipa std_logic. Vizuelno, vrednosti ova tri tipa izgledaju isto. Meutim, razlika
postoji u njihovoj interpretaciji. Na primer, niz bitova 1100 predstavlja broj 12 ako se
interpretira kao neoznaen (unsigned) broj, odnosno broj -4 ako se interpretira kao oznaen
(signed) broj, ili, prosto, predstavlja 4 nezavisna bita spojena u jedan niz, ako se interpretira
kao vrednost tipa std_logic_vector. Deklaracija signala tipa unsigned i signed je slina
deklaraciji signala tipa std_logic_vector, npr.:
SIGNAL a, b : SIGNED(7 DOWNTO 0);
SIGNAL x : UNSIGNED(7 DOWNTO 0);

Preklopljeni operatori. U paketu numeric_std svi relevantni aritmetiki operatori, +, -, *, /,


mod i rem, su preklopljeni i to tako da se mogu primenjivati nad parovima operanada tipa
unsigned i unsigned, unsigned i natural, signed i signed, kao i signed i integer. Lista
operatora iz paketa numeric_std data je tabeli T. 3-6. Na primer, sve sledee naredbe dodele
su ispravne:
SIGNAL au,
SIGNAL as,
. . .
au <= bu +
du <= cu +
eu <= (3 +
as <= bs +
ds <= bs

bu, cu, du, eu : UNSIGNED(7 DOWNTO 0);


bs, cs, ds : SIGNED(7 DOWNTO 0);
cu;
1;
au + bu) - cu;
cs;
1;

------

unsigned
unsigned
unsigned
signed i
signed i

i unsigned
i natural
i natural
signed
integer

Relacioni operatori, =, /=, <, >, <= i >=, su takoe preklopljeni u paketu numeric_std i to na
nain da se mogu primenjivati ne samo na operande istog tipa (unsigned-unsigned i signedsigned) ve i na parove operanada tipa unsigned-natural i signed-integer. Takoe, u

Tipovi podataka

55

proceduri poreenja koju sprovode preklopljeni operatori dva niza se tretiraju kao dva
binarna broja. Na primer, razmotrimo izraz: 011 > 1000. Pod pretpostavkom da su
operandi tipa std_logic_vector, rezultat poreenja e biti netaan (zato to je prvi levi
element niza 011 manji od prvog levog elementa niza 1000). Ako su operandi tipa
unsigned, primenie se preklopljeni operator > iz paketa numeric_std, koji tretira nizove
011 i 1000 kao brojeve 3 i 8, a rezultat poreenja e biti takoe netaan. Meutim, ako
su operandi tipa signed, preklopljeni operator > protumaie nizove 011 i 1000 kao
oznaene brojeve 3 i -4, a rezultat poreenja e biti taan.
Uoimo da paket numeric_std ne sadri definicije preklopljenih logikih operatora. To
znai da primena logikih operacija nad objektima tipa unsigned i signed nije dozvoljena.
T. 3-6 Preklopljeni operatori iz paketa numeric_std.
Operacija

Opis

a+b
a-b
a*b
a/b
a MOD b
a REM b
ABS a
-a

sabiranje
oduzimanje
mnoenje
deljenje
moduo
ostatak
apsolutna vrednost
negacija

a=b
a /= b
a<b
a>b
a <= b
a >= b

jednako
razliito
manje
vee
manje ili jednako
vee ili jednako

Tip
operanda a
Aritmetike operacije
unsigned
unsigned, natural
signed
signed, integer

Tip
operanda b

Tip
rezultata

unsigned, natural
unsigned
signed, integer
signed

unsigned
unsigned
signed
signed

signed

signed

Operacije poreenja
unsigned
unsigned, natural
signed
signed, integer

unsigned, natural
unsigned
signed, integer
signed

boolean
boolean
boolean
boolean

Pr. 3-10 Dozvoljene i nedozvoljene operacije


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
. . .
SIGNAL a, b, c: SIGNED(7 DOWNTO 0);
SIGNAL x, y, z: STD_LOGIC_VECTOR(7 DOWNTO 0);
. . .
c <= a + b;
-- ispravno, aritmetike operacije su dozvoljene nad tipom signed
c <= a AND b;
-- neispravno, logike operacije nisu dozvoljene nad tipom signed
z <= x + y;
-- neispravno, aritmetike operacije nisu dozvoljene nad
-- tipom std_logic_vector
z <= x AND y;
-- ispravno, logike operacije su dozvoljene u tipu std_logic_vector

56

Osnovne jezike konstrukcije

Konverzija tipa. Konverzija izmeu dva tipa podataka se moe izvriti na dva naina:
pomou funkcije za konverziju tipa ili primenom tzv. eksplicitne konverzije (prema eng.
type casting). Paket numeric_std sadri tri funkcije za konverziju tipa: to_unsigned,
to_signed i to_integer. Funkcija to_integer konvertuje (prevodi) objekat tipa unsigned ili
signed u ceo broj, tj. u objekat tipa integer. Funkcije to_unsigned i to_signed konvertuju
ceo broj (integer) u objekat tipa unsigned, odnosno signed sa zadatim brojem bita. Funkcije
to_unsigned i to_signed imaju dva ulazna parametra. Prvi je ceo broj koji se konvertuje,
dok drugi, takoe ceo broj, specificira broj bita u rezultujuem bit-vektoru unsigned ili
signed tipa.
Za konverziju podataka izmeu tipova std_logic_vector, unsigned i signed koristi se princip
eksplicitne konverzije. To znai da se objekat jednog tipa prevodi u drugi tip tako to se
omei zagradama sa imenom novog tipa podataka ispred zagrade, npr.:
SIGNAL u1, u2 : UNSIGNED(7 DOWNTO 0);
SIGNAL v1, v2 : STD_LOGIC_VECTOR(7 DOWNTO 0);
. . .
u1<= UNSIGNED(v1);
-- konvertuje std_logic_vector u unsigned
v2<= STD_LOGIC_VECTOR(u1); -- konvertuje unsigned u std_logic_vector

Spisak funkcija za konverziju iz paketa numeric_std dat je u tabeli T. 3-7. Treba zapaziti da
ne postoji funkcija za konverziju iz tipa std_logic_vector u tip integer i obrnuto. Razlog za
to je jednostavan - objekti tipa std_logic_vector se ne mogu interpertirati kao brojevi.
T. 3-7 Podrka za konverziju tipova podataka iz paketa numeric_std.
Iz tipa
unsigned, signed
signed, std_logic_vector
unsigned, std_logic_vector
unsigned, signed
natural
integer

U tip
std_logic_vector
unsigned
signed
integer
unsigned
signed

Funkcija za konverziju / eksplicitna konverzija


std_logic_vector(a)
unsigned(a)
signed(a)
to_integer(a)
to_unsigned(a, size)
to_signed(a, size)

Pr. 3-11 Konverzija tipova


Pretpostavimo da su signali deklarisani na sledei nain:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL
. . .
SIGNAL s1, s2, s3, s4, s5, s6: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL u1, u2, u3, u4, u5, u6, u7: UNSIGNED(7 DOWNTO 0);
SIGNEL sg: SIGNED(7 DOWNTO 0);
. . .

Sledee naredbe dodele su ispravno jer je operator + definisan za tipove unsigned i natural
(v. T. 3-6):
u3 <= u2 + u1;
u4 <= u2 + 1;

-- ispravno, operandi su tipa unsigned


-- ispravno, operandi su tipa unsigned i natural

Meutim, zbog neusklaenosti tipova, sledee dve naredbe dodele nisu ispravne:
u5 <= sg;

-- neispravno, neusklaeni tipovi

Tipovi podataka

u6 <= 5;

57

-- neispravno, neusklaeni tipovi

Neophodno je primeniti funkciju za konverziju tipa ili eksplicitnu konverziju:


u5 <= UNSIGNED(sg);
u6 <= TO_UNSIGNED(5,8);

-- ispravno, eksplicitna konverzija


-- ispravno, funkcija za konverziju

Aritmetiki operatori iz paketa numeri_std nisu definisani za sluajeve kad je jedan


operand tipa signed, a drugi unsigned:
u7 <= sg + u1;

-- neispravno,neusklaeni tipovi

Neophodno je obaviti konverziju operanda sg u tip unsigned:


u7 <= UNSIGNED(sg) + u1;

-- ispravno, ali rizino

Iako je prethodna naredba ispravna, treba voditi rauna o tome da je interpretacija podataka
tipova signed i unsigned razliita. Na primer, 11111111 je -1 za tipa signed, a 255 za tipa
unsigned.
Signalima tipa std_logic_vector se ne moe direktno dodeliti vrednost signala tipa signed ili
unsigned:
s3 <= u3;
s4 <= 5;

-- neispravno, neusklaenost tipova


-- neispravno, neusklaenost tipova

Neophodna je konverzija tipa:


s3 <= STD_LOGIC_VECTOR(u3); -- ispravno, eksplicitna konverzija
s4 <= STD_LOGIC_VECTOR(TO_UNSIGNED(5,8)); -- ispravno,
-- eksplicitna konverzija

Uoimo da su u drugoj od dve gornje naredbe upotrebljene dve konverzije. Razlog za to je


to za tip integer nije podrana eksplicitna konverzija u tip std_logiv_vector. Konstanta 5 se
prvo konvertuje u 8-bitnu vrednost tipa unsigned, a zatim se dobijena vrednost eksplicitno
konvertuje u tip std_logic_vector.
Aritmetike operacije se ne mogu primenjivati na tip std_logic_vector:
s5 <= s2 + s1; -- neispravno, + nije definisano za std_logic_vector
s6 <= s2 + 1; -- neispravno, + nije definisano
-- za datu kombinaciju tipova

Da bi se problem reio, potrebno je da se operandi prvo konvertuju u tip unsigned (ili


signed), zatim da se izvri sabiranje i konano da se rezultat vrati nazad u tip
std_logic_vector:
s5 <= std_logic_vector(unsigned(s2) + unsigned(s1)); -- ispravno
s6 <= std_logic_vector(unsigned(s2)) + 1);
-- ispravno

3.3.6. Nestandardni aritmetiki paketi


Za rad sa aritmetikim operacijama u VHDL-u, osim paketa numeric_std, raspoloivo je
jo nekoliko drugih paketa, a pre svega:

std_logic_arith

std_logic_unsigned, i

std_logic_signed

58

Osnovne jezike konstrukcije

Ovi paketi nisu deo standarda IEEE i danas se sve ree koriste u praksi. Meutim, oni su i
dalje podrani od strane veine alata za sintezu i mogu se esto videti u postojeem VHDL
kdu, to je i razlog zbog kojeg su u ovoj knjizi uvrteni u pregled tipova podataka. Budui
da je paket numeric_std deo standarda IEEE i da prua vie mogunosti u odnosu na
pomenuta tri paketa, za rad sa aritmetikim operacijama i kolima u ovoj knjizi bie
korien paket numeric_std.
Std_logic_arith. Paket std_logic_arith, slino paketu numeric_std, definie dva nova tipa
podataka, unsgned i signed, zajedno sa preklopljenim operatorima +, - i *. Ovaj paket
takoe sadri i funkcije za konverziju, premada se njihova imena razlikuju u odnosu na
odgovarajue funkcije iz paketa numeric_std. Kao i za paket numeric_std, logike operacije
nisu dozvoljene nad podacima tipa unsigned i signed (v. Pr. 3-10).
Std_logic_unsigned i std_logic_signed. Paketi std_logic_unsigned i std_logic_signed ne
uvode nove tipove podataka, ve samo definiu preklopljene aritmetike operatore za tip
std_logic_vector. Drugim reima, ovi paketi omoguavaju da se s objektima tipa
std_logic_vector manipulie na isti nain kao sa objektima tipa unsigned (iz paketa
std_logic_unsigned) odnosno signed (iz paketa std_logic_signed). Na taj nain, eliminisana
je potreba za konverzijom tipa (std_logic_vector u unsigned/signed i obrnuto). Jasno je da
ova dva paketa ne mogu da se koriste u isto vreme.
Pr. 3-12 Tip std_logic_unsigned
Ukljuivanjem u projekat paketa std_logic_unsigned (ili std_logic_signed) proiriju se
mogunosti tipa std_logic_vector, koji tako dobija podrku za aritmetike operacije:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
. . .
SIGNAL a, b, c: STD_LOGIC_VECTOR(7 DOWNTO 0);
. . .
c <= a + b;
-- ispravno, aritmetike operacije su dozvoljene
c <= a AND b; -- ispravno, logike operacije su dozvoljene

Iako, bar na poetku, rad sa paketima std_logic_unsigned i std_logic_signed izgleda laki


nego sa numeric_std, ova dva paketa nisu standardizovana i njihovo korienje moe da
dovede do problema kompatabilnosti.

3.3.7. Korisniki tipovi podataka


VHDL omoguava projektantu da definie svoje sopstvene tipove podataka (tzv. korisniki
tipovi). Postoje dve kategorije korisnikih tipova podataka: celobrojni (integer) i nabrojivi
(enumeration).
Korisniki celobrojni tipovi. Korisniki celobrojni tipovi podataka su podskupovi tipa
integer definisani opsegom (range) celih brojeva, npr.:
TYPE integer IS RANGE -2147483647 TO +2147483647;
-- ekvivalentno predefinisanom tipu integer
TYPE natural IS RANGE 0 TO +2147483647;
-- ekvivalentno predefinisanom tipu natural
TYPE mali_integer IS RANGE -32 TO 32;
-- podskup celih (integer) brojeva iz opsega -32 do 32

Tipovi podataka

59

TYPE ocena IS RANGE 5 TO 10;


-- podskup celih ili prirodnih (natural) brojeva iz opsega 5 do 10

Korisniki celobrojni tipovi se koriste da bi se ograniio opseg vrednosti koje se mogu


dodeliti celobrojnoj varijabli ili signalu:
VARIABLE markova_ocena, anina_ocena : ocena;
markova_ocena := 8; -- ispravno, dozvoljena ocena
anina_ocena := 11; -- greaka, ocena ne moe biti vea od 10.
-- (kompajler e prijaviti greku)

Korisniki nabrojivi tipovi. Slede etiri primera deklaracije korisnikih nabrojivih tipova
podataka:
TYPE bit IS (0, 1);
-- ekvivalentno predefinisanom tipu bit
TYPE nasa_logika IS (0, 1, Z);
-- podskup vrednosti tipa std_logic
TYPE bit_vector IS ARRAY (NATURAL RANGE <>) OF BIT;
-- ekvivalentno predefinisanom tipu BIT_VECTOR
-- RANGE <> oznaava opseg bez eksplicitno navedenih granica
-- NATURAL RANGE <> ograniava RANGE <> na opseg NATURAL tipa.
-- ARRAY - slubena re za deklaraciju niza.
TYPE stanje IS (iskljuceno, napred, nazad, stop);
-- definie nabrojiv tip podataka
- dozvoljene vrednosti su eksplicitno navedene
-- (tipina upotreba za simbolika imena stanja konanih automata)
TYPE boja IS (crvena, zelena, plava, bela);
-- jo jedan primer nabrojivog tipa

Deklaracija nabrojivog tipa definie novi tip podataka koji ini skup korisniki-definisanih
vrednosti. Na primer, deklaracija tipa boja osim imena tipa (boja) sadri i imena
dozvoljenih vrednosti koje su pridruene ovom tipu (crvena, zelena, plava i bela). Ove
vrednosti su apstraktne, jer ne predstavljaju ni brojnu vrednost ni fiziku veliinu, ve
imaju znaenje koje je poznato samo korisniku (projektantu). Korienje korisnikih tipova
poboljava itljivost (razumljivost) kda i smanjuje mogunost greke u pisanju kda.
Treba napomenuti da je svakoj vrednosti iz deklaracije nabrojivog tipa implicitno pridruen
redni broj koji odgovara njenoj poziciji u spisku navedenih vrednosti. Tako, vrednost
crvena iz poslednje navedene deklaracije ima redni broj 0, zelena 1 itd. Poredak vrednosti
je od znaaja ako se one koriste u relacionim izrazima (<, >, =, ...). Tako je izraz crvena <
plava taan, a izraz bela < zelena netaan. Napomenimo da su predefinisani tipovi bit i
std_logic takoe nabrojivi tipovi.

3.3.8. Podtipovi
Podtip (subtype) je tip sa uvedenim ogranienjem. Ogranienje definie podskup vrednosti
osnovnog tipa koje se pridruuju podtipu. Podtip nasleuje sve operacije osnovnog tipa.
Sledei podtipovi su izvedeni iz tipova koji su deklaraisani u prethodnom odeljku.
SUBTYPE natural IS INTEGER RANGE 0 TO INTEGERHIGH;
-- prirodni brojevi su podtip (podskup) celih brojeva
-- integer'high znai najvea vrednosti tipa integer

60

Osnovne jezike konstrukcije

SUBTYPE nasa_logika IS STD_LOGIC RANGE 0 TO Z;


-- std_logic = (X,0,1,Z,W,L,H,-)
-- nasa_logika = (0,1,Z)
SUBTYPE nasa_boja IS boja RANGE crvena TO plava;
-- boja = (crvena, zelena, plava, bela)
-- nasa_boja = (crvena, zelena, plava)
SUBTYPE mali_integer IS INTEGER RANGE -32 TO 32;
-- podtip tipa integer

Uporedimo definiciju podtipa mali_integer sa definicijom istoimenog tipa iz prethodnog


odeljka. Oba ova tipa su izvedena iz tipa integer, imaju identian skup vrednosti i identian
skup dozvoljenih operacija. ini se da se radi o ekvivalentnim deklaracijama. Meutim,
postoji jedna bitna razlika. Vrednosti tipa mali_integer se ne mogu kombinovati sa
vrednostima tipa integer u operacijama kao to su + i -. S druge strane, dozvoljeno je u
istom izrazu kombinovati vrednosti podtipa mali_integer i vrednosti tipa integer.
Pr. 3-13 Tipovi i podtipovi
TYPE nova_logika IS STD_LOGIC RANGE 0 TO
SUBTYPE nasa_logika IS STD_LOGIC RANGE 0
SIGNAL a: BIT;
SIGNAL b: STD_LOGIC;
SIGNAL c: nasa_logika;
SIGNAL d: nova_logika;
...
b <= a;
-- neispravno (b je std_logic,
b <= c;
-- ispravno (isti osnovni tip)
b <= d;
-- neispravno (b je std_logic,

1;
TO 1;

a je bit)
d je nova_logika)

3.4. Polja
Polja su kolekcije objekata istog tipa. Polja mogu biti jednodimenziona (1D ili vektori),
dvodimenziona (2D ili matrice) ili 1D x 1D. Polja viih dimenzija (npr. 3D ili 2D x 2D) se
ree koriste u praksi i obino nisu podrana u alatima za sintezu. Na Sl. 3-2 je ilustrovana
organizacija polja razliitih dimenzionalnosti. Pojedinana vrednost (ili skalar) prikazana je
na Sl. 3-2(a), vektor (1D polje) na Sl. 3-2(b), polje vektora (1D x 1D polje) na Sl. 3-2(c) i
polje skalara (2D polje) na Sl. 3-2(d).

(a)

(b)

(c)

(d)

Sl. 3-2 (a) skalar, (b) 1D, (c) 1D x 1D polje, (d) 2D polje.

Svi predefinisani tipovi podataka, kao i tipovi podataka iz paketa std_logic_1164 i


numeric_std su ili skalari ili vektori (tj. jednodimenziona polja skalara). Sledei
predefinisani tipovi se mogu sintetizovati (tj. mogu se koristiti u kdu koji je namenjen za
sintezu):

Polja

Skalari: bit, std_logic i boolean.

Vektori: bit_vector, std_logic_vector, integer, signed i unsigned.

61

Ne postoje predefinisana 2D ili 1D x 1D polja. Ako su neophodna, takva polja mogu biti
definisana od strane projektanta. Novo polje se definie shodno sledeoj sintaksi:
TYPE ime_tipa IS ARRAY (opseg_indeksa) OF tip;

Pr. 3-14 1D x 1D polje


Na zadatak je da definiemo polje od etiri vektora duine osam bita. Pojedinane vektore
nazvaemo vrsta, a celokupnu strukturu matrica. Takoe, usvojiemo da je bit najvee
teine (MSB) svakog vektora njegov krajnji levi bit i da je prva vrsta matrice vrsta 0.
Postavljenim zahtevima odgovaraju sledee deklaracije:
TYPE vrsta IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; -- 1D polje
TYPE matrica IS ARRAY (0 TO 3) OF vrsta;
-- 1D x 1D polje
SIGNAL x: matrica;
-- 1D x 1D signal

Identino 1D x 1D polje moe se deklarisati i u jednoj liniji, na sledei nain:


TYPE matrica IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0);

Pr. 3-15 2D polje


Polje definisano sledeom linijom kda je pravo dvodimenziono (2D) polje, u potpunosti
zasnovano na skalarima, a ne na vektorima, kao u prethodnom primeru:
TYPE matrica2D IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC;

Pr. 3-16 Inicijalizacija polja


Dodela inicijalnih vrednosti signalima i varijablama je opciona. Onda kada je potrebna,
moe se obaviti kao u sledeim primerima:
... := 0001;
-- 1D
... := (0, 0, 0, 1);
-- 1D
... := ((0, 1, '0', '1'), ('1', '1', '0', '1')); -- 1D x 1D

Pr. 3-17 Polja u naredbama dodele


TYPE vrsta IS ARRAY (7 DOWNTO 0) OF STD_LOGIC;
TYPE polje1 IS ARRAY (0 TO 3) OF vrsta;
TYPE polje2 IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0);
TYPE polje3 IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC;
SIGNAL x: vrsta;
SIGNAL y: polje1;
SIGNAL v: polje2;
SIGNAL w: polje3;
-- Ispravne skalarne naredbe dodele: -------------------------------- Sledee skalarne (jednobitne) naredbe dodele su ispravne,zato to
-- je osnovni (skalarni) tip svih signala (x,y,v,w) std_logic
x(0) <= y(1)(2);
-- uoimo dva para zagrada (y je lDxlD)
x(l) <= v(2)(3);
-- dva para zagrada (v je 1Dx1D)

62

Osnovne jezike konstrukcije

x(2) <= w(2,1);


-- jedan par zagrada (w je 2D)
y(l)(l)<= x(6);
y(2)(0)<= v(0)(0);
y(0)(0)<= w(3,3);
w(l,l) <= x(7);
w(3,0) <= v(0)(3);
-- Vektorske naredbe dodele: --------------------------------------x <= y(O);
--ispravno, isti tip podataka: vrsta
x <= v(l);
--neispravno, neusklaeni tipovi: vrsta x
--std-logic-vector)
x <= w(2);
--neispravno (pogreno indeksiranje, w je 2D)
x <= w(2, 2 DOWNTO 0);
--neispravno, neusklaeni tipovi
v(O) <= w(2, 2 DOWNTO 0); --neispravno, neusklaeni tipovi:
--std_logic_vector v i std_logic w
v(0) <= w(2);
--neispravno, w je 2D
y(l) <= v(3);
--neispravno, neusklaeni tipovi
y(1)(7 DOWNTO 3)<= x(4 DOWNTO 0); -- ispravno, isti tip i veliina
v(1)(7 DOWNTO 3)<= v(2)(4 DOWNTO 0); -- ok, isti tip i veliina
w(l,5 DOWNTO 1) <= v(2)(4 DOWNTO 0); -- neispravno, neuskl. tipovi

Obratimo panju kako se pristupa elementima polja razliitih dimenzionalnosti. Za pristup


1D polju (vektoru) koristi se jednodimenzioni indeks (npr. vrsta(2)). Za pristup 1Dx1D
polju koristi se par jednodimenzionih indeksa (npr. y(4)(2) - prvi indeks, (4), se odnosi na
vektor, drugi, (2), na element u vektoru). Elementima matrice se pristupa dvodimenzionim
indeksom (npr. w(2,3)). Takoe, VHDL omoguava pristup delovima polja. Na primer,
v(2)(4 downto 0) oznaava sve bitove od etvrtog do nultog, drugog vektora polja v.

3.5. Atributi
Atributi su dodatne informacije pridruene tipovima podataka, signalima i drugim
objektima deklarisanim u VHDL kdu. Postoje brojni predefinisani atributi, ali i
mogunost da projektant definie svoje, korisnike atribute. Za referenciranje atributa
koristi se apostrof, npr. xattr (odnosi na atribut attr tipa ili objekta x). Razmotriemo dve
grupe atributa:

atributi vektora: sadre informacije koje se odnose na vektor


atributi signala: slue za nadgledanje signala

Atributi vektora. U VHDL kdu za sintezu dozvoljeni su sledei predefinisani atributi


vektora:
dLOW
dHIGH
dLEFT
dRIGHT
dLENGTH
dRANGE
dREVERSE_RANGE

vraa najmanji indeks vektora d


vraa navei indeks vektora d
vraa krajnji levi indeks vektora d
vraa krajnji desni indeks vektora d
vraa veliinu (duinu) vektora d
vraa opseg vektora d
vraa inverzni opseg vektora d

Pr. 3-18 Atributi vektora


Neka je signal d deklarisan na sledei nain:

Atributi

63

SIGNAL d : STD_LOGIC_VECTOR(7 DOWNTO 0);

Tada vai:
dLOW = 0
dHIGH = 7
dLEFT = 7
dRIGHT = 0

dLENGTH = 9
dRANGE = (7 DOWNTO 0)
dREVERSE_RANGE = (0 TO 7)

Pr. 3-19 Primena atributa vektora


Neka je dat signal:
SIGNAL d : STD_LOGIC_VECTOR(0 TO 7);

Sledee etiri for loop naredbe (realizuju petlju u VHDL kdu) ekvivalentne su i mogu se
sintetizovati (broja i uzima redom sve vrednosti iz pridruenog opsega):
FOR
FOR
FOR
FOR

i
i
i
i

IN
IN
IN
IN

RANGE (0 TO 7) LOOP . . .
dRANGE LOOP . . .
RANGE (dLOW TO dHIGH) LOOP . . .
RANGE (0 TO dLENGTH-1) LOOP . . .

Sledei atributi su raspoloivi za signale nabrojivog tipa:


dVAL(pos)
dPOS(vrednost)
dLEFTOF(vrednost)
dVAL(vrsta, kolona)

vraa vrednost sa navedene pozicije


vraa poziciju navedene vrednosti
vraa vrednost sa pozicije levo od navedene vrednosti
vraa vrednost sa navedene pozicije

Pr. 3-20 Atributi nabrojivog tipa


TYPE boja IS (crvena, zelena, plava, bela);

Za korisniki definisan nabrojivi tip boja vai:


bojaVAL(1) = zelena
bojaPOS(zelena) = 1
bojaLEFTOF(plava) = zelena

Atributi signala. Neka je s signal. Tada vai:


sEVENT
sSTABLE
sACTIVE
sQUIET<vreme>
sLAST_EVENT
sLAST_ACTIVE
sLAST_VALUE

vraa TRUE ako se na signalu s desio dogaaj


vraa TRUE ako se na signalu s nije desio dogaaj
vraa TRUE ako je s = 1
vraa TRUE ako se u navedenom vremenu na signalu s nije desio
dogaaj
vraa vreme proteklo od poslednjeg dogaaja na signalu s
vraa proteklo vreme od kad je signal s poslednji put imao
vrednost 1
vraa vrednost signala s neposredno pre poslednjeg dogaaja

64

Osnovne jezike konstrukcije

Pojam dogaaj na signalu odnosi se na promenu vrednosti signala. Veina navedenih


atributa koristi se samo u simulaciji. Za sintezu, dozvoljena su samo prva dva, event i
stable. Pri tom se atribut event koristi mnogo ee.
Pr. 3-21 Detekcija ivice signala
Sledee tri naredbe su ekvivalentne i mogu se koristiti u kdu za sintezu. Svaka od naredbi
vraa true ako se na signalu clk desio dogaaj, tj. ako je dolo do promene vrednosti signal
clk i njegova nova vrednost je clk=1. Drugim reima, svaka od sledee tri naredbe se
moe koristiti za detekciju rastue ivica signala clk.
IF (clkEVENT AND clk=1) ...
IF (NOT clkSTABLE AND clk=1) ...
WAIT UNTIL (clkEVENT AND clk=1);

-- atribut event u if naredbi


-- atribut stable u if naredbi
-- atribut event u wait naredbi

4. KONKURENTNE NAREDBE DODELE

Veina programskih jezika su zasnovani na sekvencijalnom izvrenju naredbi, to znai da


se programske naredbe izvravaju jedna za drugom, po redosledu kako je to programom
definisano. Sekvencijalni programski jezici su pogodni za opis algoritama koji definiu
neko izraunavanje, funkciju ili proceduru. Meutim, sekvencijalni model izraunavanja
nije pogodan za verno modeliranje digitalnih sistema. Tipian digitalni sistem se sastoji od
vie podsistema koji rade nezavisno jedan od drugog, tj. istovremeno ili paralelno. Iako se
funkcija svakog podsistema moe opisati sekvencijalnim programom, za modeliranje
paralelizma na sistemskom nivou neophodna je posebna podrka u jeziku za opis hardvera.
U VHDL-u takva podrka postoji u vidu konkurentnih naredbi, koje se slino podsistemima
ili kolima, izvravaju (tj. rade) istovremeno.
U VHDL-u postoji vie tipova naredbi i jezikih konstrukcija namenjenih za pisanje
konkurentnog kda. Ova glava je posveena konkurentnim naredbama dodele. Pomou
ovih naredbi signalima se pridruuju izrazi (u obliku konstanti, logikih ili aritmetikih
izraza) koji definiu kako dati signal zavisi od drugih signala u kolu. Postoje tri vrste
konkurentnih naredbi dodele:

jednostavna naredba dodele

naredba when i

naredba select.

Kao to emo videti u narednim poglavljima, konkurentne naredbe dodele su jednostavne,


ali u isto vreme i mone jezike konstrukcije. Uz to, VHDL kd pisan konkurentnim
naredbama dodele relativno se lako moe vizuelno predstaviti u obliku konceptualnog
hardverskog blok dijagrama. Postojanje jasne predstave o hardveru koji proistie iz kda od
sutinske je vanosti za razvoj efikasnog VHDL kda za sintezu.
Za kreiranje sloenijih modela u VHDL, pored konkurentnih naredbi dodele, koriste se jo
dve konkurentne naredbe: generate (slui za kreiranje petlji i grananja u knkurentnom
kdu) i naredba za instanciranje komponenti (koriste se za kreiranje hijerarhijski
organizovanog kda). Ove dve konkurentne naredbe bie razmatrane u glavama 7 i 8.
VHDL poseduje podrku kako za konkurentno, tako i za sekvencijalno programiranje.
Meutim, u osnovi, VHDL je konkurentan jezik, a da bi se nametnulo sekvencijalno
izvrenje naredbi koriste se posebne jezike konstrukcije, kao to je to process. Bez obzira
na to to se naredbe obuhvaene procesom izvravaju na sekvencijalan nain, svaki proces,
Goran Lj. orevi, Arhitetkture mikrosistema, 2009.

66

Konkurentne naredbe dodele

kao celina, izvrava se konkurentno u odnosu na druge procese i druge konkurentne


naredbe. Naredbi process i sekvencijalnim naredbama posveena je glava 5.
Napomenimo da treba praviti jasnu razliku izmeu konkurentnog/sekvencijalnog kda s
jedne i kombinacionih/sekvencijalnih kola s druge strane. Kao to je poznato, digitalna kola
se dele na kombinaciona i sekvencijalna. Kombinaciona kola ne sadre internu memoriju ili
stanja, a njihovi izlazi zavise iskljuivo od trenutnih vrednosti ulaza. S druge strane,
sekvencijalna kola poseduju internu memoriju, a njegovi izlazi su u funkciji kako ulaza
tako i tekueg stanja (tj. trenutnog sadraja memorije). Za opisivanje kombinacionih kola u
VHDL-u moe se koristiti bilo konkurentan bilo sekvencijalan kd. S druge strane, po
pravilu, sekvencijalna kola se opisuju sekvencijalnim kdom.

4.1. Jednostavna konkurentna naredba dodele


Sintaksa jednostavne konkurentne naredbe dodele je oblika:
sig <= izraz AFTER kasnjenje;

lan izraz definie novu vrednost signala sig, a kasnjenje trenutak kad e izraunata
vrednost izraza biti dodeljena signalu. Razmotrimo naredbu:
y <= a + b + 1 AFTER 10 ns;

Znaenje ove naredbe je sledee. Uvek kada se promeni bilo a bilo b, izraz a+b+1 se
iznova izraunava, a rezultat se dodeljuje signalu y nakon (after) 10 ns.
Vreme navedeno kao kasnjenje definie interno, tj. propagaciono kanjenju, odnosno vreme
koje bi bilo potrebno da se u realnom kolu, koje realizuje dati izraz, nakon promene ulaza,
generie nova izlazne vrednosti. Meutim, poto propagaciono kanjenje zavisi od
komponenti koje se koriste za realizaciju kola, implementacione tehnologije, prostornog
rasporeda komponenti, rutiranja, procesa fabrikacije i brojnih drugih faktora, nije mogue
automatski sintetizovati kolo sa tanim, unapred zadatim iznosom kanjenja. Iz tog razloga,
informacija o kanjenju (tj. tajmingu) se nikada eksplicitno ne navodi u VHDL kdu za
sintezu. Umesto toga, koristi se oblik konkurentne naredbe dodele bez navedenog
propagacionog kanjenja:
sig <= izraz;

Gornja naredba dodele zapravo je skraeni oblik sledee naredbe:


sig <= izraz AFTER 0 ns;

Ova naredba modelira idealizovano digitalno kola, koje je u stanju da nakon promene ulaza
trenutno postavi novu vrednost na izlazu. U realnosti, takva digitalna kola ne postoje, jer je
propagaciono kanjenje, makar i u minimalnom iznosu, uvek prisutno. Meutim, ova
nedoslednost u modeliranju ne predstavlja problem u VHDL kdu za sintezu, koji je
prevashodno fokusiran na opis funkcionalnosti kola. Ako je to potrebno, informacija o
tajmingu se moe dobiti nakon obavljene sinteze, vremenskom analizom sintetizovane
strukture.
Deo izraz naredbe konkurentne dodele sadri signale i konstante povezane operatorima,
kao to su: and, not, +, *, sll i slini. Izraz moe biti konstantna vrednost, logika operacija,
aritmetika operacija itd. Sledi nekoliko primera jednostavnih konkurentnih naredbi dodele:
enable <= 1;
sel <= (r1 AND r2) OR (r3 AND r4);
sum <= a + b + c 1;

Jednostavna konkurentna naredba dodele

67

Pr. 4-1 Generisanje talasnog oblika


U svom najoptijem obliku, jednostavna konkurentna naredba dodele moe da sadri
proizvoljan broj sekcija oblika izraz after kanjenje razdvojenih zarezima, npr.
sig <= 0, 1 after 10 ns, 0 after 10 ns, 1 after 20 ns;

Prilikom inicijalnog izvrenja gornje naredbe, signal sig dobija vrednost 0; 10 ns nakon
toga, vrednost signala sig postaje 1; posle narednih 10 ns, sig ponovo ima vrednost 0;
nakon narednih 20 ns, sig dobija svoju konanu vrednost, 1. Talasni oblik rezultujueg
signala je prikazan na Sl. 4-1.

Sl. 4-1 Talasni oblik signala generisan konkurentnom naredbom dodele iz Pr. 4-1.

Jednostavna konkurentna naredba dodele u ovakvom obliku se, naravno, ne moe


sintetizovati, ali se zato esto moe videti u testbenu, gde se koristi za generisanje
pobudnih signala sloenog talasnog oblika.
Pr. 4-2 -kanjenje
Propagaciono kanjenje od 0 ns se na poseban nain tretira u simulaciji, kao tzv. deltakanjenje (odnosno -kanjenje). -kanjenje je vee od nule, ali manje od bilo kog
konanog fizikog kanjenja, a uvedeno je radi pravilnog ureenja dogaaja koji se
deavaju u kolu tokom simulacije. VHDL simulacija je voena dogaajima koji se vezuju
za diskretne vremenske trenutke. Pod dogaajem se podrazumeva promena vrednosti bilo
kog signala u kolu. Dogaaj koji se desio u trenutku t0 inicira nove dogaaje, koji se vezuju
za odgovarajue budue vremenske trenutke (odreene propagacionim kanjenjima koja su
pridruena signalima). Kad obradi sve dogaaje vezane za jedan vremenski trenutak,
simulator prelazi na prvi sledei trenutak u koji su ranije rasporeeni dogaaji i tako redom,
sve dok postoje neobraeni dogaaji. Ovaj mehanizam dobro funkcionie sve dok je
propagaciono kanjenje vee od nule. Meutim, ako je propagaciono kanjenje jednako
nuli, novi dogaaj bi morao da se desi u istom trenutku kad i dogaaj koji ga je izazvao. U
nekim sluajevima to moe da dovede do nekonzistentnih rezultata simulacije, odnosno do
pojave da se rezultati iz ponovljenih simulacija istog kola razlikuju.
Razmotrimo tok simulacije kolo sa Sl. 4-2 pod pretpostavkom da sva logika kola imaju
propagaciono kanjenje od 0 ns i da se ne koristi mehanizam -kanjenja. Pretpostavimo da
se u trenutku t = 10 ns desila promena signal A sa 1 na 0. Ova promena se trenutno
prenosi kroz invertor, tako da u istom tom trenutku (t = 10 ns) i signal B dobija vrednost
1. To je novi dogaaj, ija pojava zahteva evaluaciju izlaza oba logika kola koje signal B
pobuuje. Mogua su dva scenarija. U prvom, simulator najpre odreuje odziv NI kola, a
zatim odziv I kola. Poto je nova vrednost signala C = 0, signal D zadrava vrednost 0 i
pored toga to je B=1. Meutim, ako simulator izabere da prvo obradi I kolo, signal D e
najpre dobiti vrednost 1 (zbog C koji je jo uvek 1), ali e se neposredno nakon toga, tj.
nakon to simulator evaluira izlaz NI kola, vratiti na D=0. Iako je u oba scenarija konana
vrednost signala D ista, u drugom sluaju na signalu D se javlja trenutna promena sa 0 na
1, a onda ponovo na 0. Promena sa 0 na 1 predstavlja rastuu ivicu, koja e inicirati
okidanje i upis vrednosti signala E u flip-flop. U prvom scenariju, upis u flip-flop se nee

68

Konkurentne naredbe dodele

desiti (zato to se signal D nije menjao). Redosled obrade dogaaja tokom simulacije zavisi
od toga kako su ureene strukture podataka u kompajliranom VHDL kdu. Na primer,
moe se desiti da nakon ponovljene kompilacije istog VHDL kda, simulator umesto I prvo
evaluira NI kolo, ili obrnuto.

Sl. 4-2. Kolo za ilustraciju -kanjenja.

Mehanizam -kanjenja je uveden iz razloga da bi se izbegle opisane nedoslednosti u


simulaciji. Konkretno, svaki diskretni vremenski trenutak se deli na fiktivne vremenske
intervale beskonano malog trajanja (tzv. -intervale), a svi dogaaji koji se iniciraju s
kanjenjem od 0 ns rasporeuju se u naredni -interval. Primenjeno na primer simulacije
kola sa Sl. 4-2, to znai sledee. Promena signala A na 0 deava se u prvom -intervalu
vremenskog trenutka t=10 ns. Obrada ovog dogaaja dovodi do promene signala B sa 0
na 1. Meutim, ova promena se ne prenosi odmah na signal B, ve se fiktivno kasni za
jedno , tj. rasporeuje u sledei -interval. Poto u prvom -intervalu nema drugih
dogaaja, simulator prelazi na 2. -interval. Promenjena vrednost signala B, koja je sada
vidljiva, dovodi do evaluacije oba logika kola, I i NI, ali se postavljanje signala C i D na
njihove nove vrednosti odlae za naredni, tj. 3. -interval. U 3. -intervalu, signal D dobija
vrednost 1, a signal C vrednost 0. Promenjena vrednost signala C inicira ponovnu
evaluaciju izlaza I kola, ija se nova i konana izlazna vrednost, D=0, za vremenski
trenutak t=10 ns postavlja u 4. -intervalu. Dakle, u trenutku t=10 ns na signalu D se javlja
impuls trajanja jednog -intervala, a ovakav ishod ne zavisi od redosleda evaluacije
logikih kola.
Pr. 4-3 Multiplekser 4-u-1 - realizacija pomou jednostavne konkurentne naredbe
dodele

(a)

(b)

Sl. 4-3 Multiplekser 4-u-1: (a) grafiki simbol; (b) kombinaciona mrea.

Na Sl. 4-3(a) je prikazan grafiki simbol multipleksera 4-u-1. Vrednost dvobitnog


selekcionog ulaza sel bira jedan od ulaza, a, b, c ili d, ija se vrednost prenosi na izlaz y. Na
Sl. 4-3(b) je prikazana realizacija multipleksera pomou logikih kola. Funkcija
multipleksera 4-u-1 se moe opisati u VHDL-u uz pomo samo jedne jednostavne
konkurentne naredbe dodele koja izlaznom signalu y dodeljuje vrednost logikog izraza
izvedenog na osnovu kombinacione mree sa Sl. 4-3(b):

Jednostavna konkurentna naredba dodele


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

69

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY mux IS
PORT ( a,b,c,d : IN STD_LOGIC;
sel : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
y : OUT STD_LOGIC);
END mux;
ARCHITECTURE arch OF mux IS
BEGIN
y <= (a AND NOT sel(1) AND NOT sel(0)) OR
(b AND NOT sel(1) AND sel(0)) OR
(c AND sel(1) AND NOT sel(0)) OR
(d AND sel(1) AND sel(0));
END arch;

Pr. 4-4 Jednostavna konkurentna naredba dodele sa zatvorenom petljom


VHDL ne zabranjuje da se isti signal nae s obe strane naredbe dodele. Meutim, kad se u
istoj naredbi izlazni signal koristi i kako ulaz, formira se zatvorena petlja. U mnogim
sluajevima to nije poeljno, jer se tako mogu kreirati interna stanja ili ak izazvati
oscilacije u sintetizovanom kolu. Primera radi, razmotrimo sledeu VHDL naredbu:
q <= (q AND NOT en) OR (d AND en);

Kao to vidimo, q je u isto vreme i ulazni i izlazni signal naredbe dodele. Ako vai en = 1,
izlazu q se dodeljuje vrednost signala d, zato to se izraz svodi na q <= d. U suprotnom
sluaju, ako vai en = 0, q zadrava svoju prethodnu vrednost, jer izraz postaje q <= q.
Uoimo da izlaz q ne zavisi samo od drugih signala, tj. d i en, ve i od svoje sopstvene
vrednosti. Drugim reima, da li e pri en=0 q imati vrednost 0 ili 1 zavisi od toga koju
je vrednost ovaj signal imao u momentu promene signala en sa 1 na 0. To znai da kolo
vie nije kombinaciono, ve sekvencijalno. Ako prethodni izraz modifikujemo tako to
emo s desne strane umesto q napisati not q:
q <= (NOT q AND NOT en) OR (d AND en);

izlaz q e oscilovati izmeu 0 i 1 za vreme dok je en=0, zato to se sada izraz svodi na
q <= not q. Frekvencija oscilovanja u kolu sintetizovanom na osnovu ovakvog izraza
zavisie od propagacionog kanjenja kroz invertor koji e biti iskorien za realizaciju
operacije not q.
Konkurentne naredbe dodele sa zatvorenom petljom su osetljive na interno propagaciono
kanjenje i podlone su oscilacijama. Ovakve konstrukcije mogu da zbune softver za
sintezu i treba ih izbegavati u VHDL kdu (tanije, ne treba ih nikada koristiti). Za
modeliranje sekvencijalno ponaanja treba koristiti sekvencijalne naredbe.
Konceptualna implementacija. Kreiranje konceptualnog blok dijagrama na osnovu
jednostavne konkurentne naredbe dodele obino je lak zadatak. Celokupna naredba se
posmatra kao jedno digitalno kolo. Izlaz kola je signal s leve strane, dok su ulazi kola svi
signali iz izraza s desne strane znaka dodele. Svaki operator sadran u izrazu se preslikava
na jedan manji blok i povezuje sa ulazima i izlazima na nain kako to diktira izraz. Na Sl.
4-4 su prikazani konceptualni dijagrami tri jednostavne konkurentne naredbe dodele. Treba

70

Konkurentne naredbe dodele

naglasiti da ovi dijagrami predstavljaju samo konceptualni prikaz digitalnog sistema i da ne


moraju verno da odraavaju strukturu sintetizovanog hardvera. Tokom sinteze, izraz moe
biti automatski transformisan (npr. radi pojednostavljenja); pojedini operatori, kao + i -,
mogu biti zamenjeni sloenijim hardverskim strukturama, dok se neki operatori uopte i ne
mogu automatski sintetizovati (npr. operator deljenja).
Naredba

Konceptualna implementacija

enable <= 1;
sel <= (r1 AND r2) OR (r3 AND r4);

sum <= a + b + c 1;

Sl. 4-4 Konceptualni dijagrmi tri jednostavne konkurentne naredbe dodele.

4.2. WHEN
Naredba when, ili konkurentna naredba uslovne dodele zapravo predstavlja uoptenje
jednostavne konkurentne naredbe dodele. Za razliku od jednostavne naredba dodele, kod
koje s desne strane znaka <= postoji samo jedan izraz, naredba uslovne dodele
omoguava da se s desne strane znaka <= nae vie od jednog izraza. Svakom izrazu
pridruen je uslov, a jedinstveni signal s leve strane znaka <= dobija vrednost onog izraza
iji je uslov trenutno ispunjen, tj. taan. Sintaksa naredbe when je sledeeg oblika:
sig <= izraz_1 WHEN uslov_1 ELSE
izraz_2 WHEN uslov_2 ELSE
...
izraz_n-1 WHEN uslov_n-1 ELSE
izraz_n;

lanovi uslov_1 do uslov_n-1 su logiki iskazi od kojih svaki moe biti taan (true) ili
netaan (false). Naredba when se izvrava tako to se uslovi ispituju redom, poev od
uslova uslov_1, pa sve dok se ne naie na granu s tanim uslovom, a onda se izraunava
vrednost odgovarajueg izraza i dodeljuje signalu s leve strane znaka <=. Ako ni jedan
uslov nije taan, za izvrenje se bira izraz iz poslednje grane (izraz_n).
Pr. 4-5 Kako radi naredba WHEN?
Razmotrimo sledeu when naredbu:
outp <= 000 WHEN (inp=0 OR reset=1) ELSE
001 WHEN ctl=1 ELSE
010;

Kod when naredbe najvii prioritet ima uslov iz prve grane, zatim uslov iz druge i tako
redom. U konkretnom primeru to znai da izlazni signal outp dobija vrednost 000 ako
vai inp=0 ili reset=1, bez obzira na vrednost signala ctl. Tek ako uslov iz prve grane
nije zadovoljen (tj. vai inp=1 i reset=0), ispituje se da li je ctl=1 i ako jeste, izlaznom
signalu se dodeljuje vrednost 001. Konano, ako ni jedan uslov nije zadovoljen, signal
outp dobija vrednost iz poslednje grane, tj. 010.

WHEN

71

Pr. 4-6 Multiplekser 4-u-1 - realizacija pomou naredbe when


Sledi VHDL opis multipleksera 4-u-1 zasnovan na naredbi when:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY mux4u1 IS
PORT ( a,b,c,d : IN STD_LOGIC;
sel: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
y : OUT STD_LOGIC);
END mux4u1;
-----------------------------------------------------------------ARCHITECTURE when_arch OF mux4u1 IS
BEGIN
y <= a WHEN sel = "00" ELSE
b WHEN sel = "01" ELSE
c WHEN sel = "10" ELSE
d;
END when_arch;
------------------------------------------------------------------

Arhitektura sadri samo jednu when naredbu. U ovoj naredbi, prvo se ispituje uslov s=00
i ako je taan, izlaznom signalu y se dodeljuje vrednost ulaznog signala a. Inae, ako
vrednost selekcionog signala s nije jednaka 00, ispituje se sledei uslov, s=01. Ako je
ovaj uslov taan, y dobija vrednost ulaza b. U suprotnom, prelazi se na ispitivanje uslova
s=10. Ako ni jedan od tri uslova nije taan, izlazu y se dodeljuje vrednost signala d.
U prethodnom VHDL opisu, selekcioni signal sel je tipa std_logic_vector. Podsetimo da tip
podataka std_logic definie 8-nivovski logiki sistem, koji osim logike0 i 1 sadri jo 6
razliitih nivoa signala (v. 3.3.3). To znai da postoji 8x8=64 razliite vrednosti dvobitnog
signala ovog tipa, to osim oekivanih binarnih 00, 01, 10 i 11 ukljuuje i nebinarne
vrednosti poput: 0-, LH, ZU itd. Shodno tome, poslednja grana when naredbe iz opisa
multipleksera ne pokriva samo kombinaciju 11, kao to bi se to na prvi pogled moglo
zakljuiti, ve i svih 60 nebinarnih vrednosti. Meutim, nebinarne vrednosti imaju smisla
samo u simulaciji. U hardveru nije mogue realizovati poreenja kao to su s=0Z ili
s=UX . Iz tog razloga, softveri za sintezu ignoriu nebinarne vrednosti signala tipa
std_logic (izuzev, donekle vrednosti Z), a rezultat sinteze VHDL kda, poput opisa
multipleksera iz ovog primera, odgovarae oekivanom.
Pr. 4-7 Binarni dekoder 2-u-4 - realizacija pomou naredbe when
Na Sl. 4-5 su prikazani grafiki simbol i tabela istinitosti binarnog dekodera 2-u-4. Kolo
ima 2 ulaza za binarno kodirani podatak, d0 i d1, i 4 izlaza, yi, i=0, , 3, pri emu svaka
kombinacija binarnih vrednosti na ulazu pobuuje tano jedan izlaz. Dodatni ulaz za
dozvolu rada, e, upravlja izlazom dekodera na sledei nain: ako vai e=0, tada ni jedan
izlaz dekodera nije aktivan; ako vai e=1, aktivan je (tj. ima vrednost 1) samo izlaz yi,
gde je i ceo broj jednak binarnoj vrednosti (d1, d0).

72

Konkurentne naredbe dodele

y0

d0
d1

Dekoder
2-u-4

y1
y2
y3

(a)
(b)
Sl. 4-5 Binarni dekoder 2-u-4: (a) grafiki simbol; (b) tabela istinitosti.

Sledi VHDL opis dekodera 2-u-4. U when naredbi, grane su poreane po prioritetima, s
granom najvieg prioriteta na poetku. To znai da se pri e=0 izlaz y postavlja na
vrednost 0000, bez obzira na vrednost ulaza d (linija 13). Tek ako vai e=1, dekoderu je
dozvoljen rad, a njegov izlaz e biti postavljen shodno vrednosti ulaza d (linije 14-17).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY dek2u4 IS
PORT (d : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
e : IN STD_LOGIC;
y : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END dek2u4;
-----------------------------------------------------------------ARCHITECTURE when_arch OF dek2u4 IS
BEGIN
y <= "0000" WHEN e = 0 ELSE
"0001" WHEN d = "00" ELSE
"0010" WHEN d = "01" ELSE
"0100" WHEN d = "10" ELSE
"1000";
END when_arch;

Pr. 4-8 Binarni koder 4-u-2 - realizacija pomou naredbe when


x3 x2 x1 x0 y1 y0
0
0
0
1
0
0
0
0
1
0
0
1
0
1
0
0
1
0
1
0
0
0
1
1
sve ostale komb.
(a)
(b)
Sl. 4-6 Binarni koder 4-u-2: (a) grafiki simbol; (b) tabela istinitosti.

Na Sl. 4-6(a) je prikazan grafiki simbol kodera 4-u-2, a na Sl. 4-6(b) tabela istinitosti ovog
kola. S ogranienjem da u svakom trenutku tano jedan od 4 ulaza mora imati vrednost 1,
na izlazu binarnog kodera se generie 2-bitni binarni broj koji ukazuje na indeks ulaza ija
je vrednost jednaka 1. Za neregularnu pobudu (ulazna kombinacija sve nule i sve
kombinacije sa vie od jedne jedinice) odziv kodera nije definisan (to je naznaeno sa - -
u poslednjoj vrsti tabele istinitosti). Nedefinisan odziv znai da pod datim uslovima izlazi
kodera mogu biti postavljeni na bilo koju vrednost, 0 ili 1. Ova proizvoljnost je
doputena zato to se takva neregularna pobuda ulaza nikad nee desiti u regularnim

WHEN

73

uslovima rada. Naravno, proizvoljna vrednost, -, fiziki ne postoji, ali se ova informacija
moe iskoristiti za optimizaciju hardvera u toku logike sinteze.
U nastavku je prezentovan VHDL opis binarnog kodera 4-u-2 koji koristi naredbu when.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY encoder IS
PORT (x : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
y : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END encoder;
-----------------------------------------------------------------ARCHITECTURE when_arch OF encoder IS
BEGIN
y <= "00" WHEN x="0001" ELSE
"01" WHEN x="0010" ELSE
"10" WHEN x="0100" ELSE
"11";
END when_arch;
-----------------------------------------------------------------

Uoimo da u datom VHDL opisu neregularne ulazne kombinacije nisu tretirane izdvojeno,
ve su sve one implicitno pripojene jednoj regularnoj ulaznoj kombinaciji (tj. kombinaciji
1000). To nije pogreno, ali se gubi mogunost za logiku minimizaciju, jer se od
hardvera zahteva da za svaku neregularnu ulaznu kombinaciju na izlaz uvek postavi istu
vrednost, 11. Meutim, u VHDL-u je mogue postaviti signala tipa std_logic na
proizvoljnu vrednost, tj. -, kao u varijanti when naredbe koja sledi. Sada je opis u
potpunosti usklaen sa specifikacijom kodera (v. Sl. 4-6(b)), a softveru za sintezu se prua
mogunost da proizvoljnost u opisu iskoristi za optimizaciju (minimizaciju) hardvera.
Naalost, korienje proizvoljnih vrednosti, iako podrano u jeziku VHDL, nije
univerzalno podrano do strane svih softvera za sintezu.
y <=

"00" WHEN
"01" WHEN
"10" WHEN
"11" WHEN
"--";

x="0001"
x="0010"
x="0100"
x="1000"

ELSE
ELSE
ELSE
ELSE

Treba napomenuti da s obzirom na to to svaka grana when naredbe definie izlaznu


vrednost za jednu konkretnu ulaznu binarnu kombinaciju, ovakav nain opisivanja kodera
je nepraktian ako je broj ulaza vei od 4. Kompaktniji opis kodera s veim brojem ulaza
moe se kreirati korienjem naredbe generate (v. 8.4) ili naredbe loop (v. 8.5).
Pr. 4-9 Prioritetni koder 4-u-2 - realizacija pomou naredbe when
Kod binarnog kodera opisanog u prethodnom primeru postoji ogranienje da u bilo kom
trenutku najvie jedan ulaz moe biti aktivan. Ako se ovo ogranienje ne potuje, tj. u
sluajevim kada je aktivno vie od jednog ulaza, izlaz kodera bie pogrean. Kod
prioritetnog kodera, ulazi su ureeni po prioritetima, a izlaz kodera, interpretiran kao
binarni broj, ukazuje na indeks aktivnog ulaza najvieg prioriteta. Drugim reima, za sve
vreme dok je aktivan ulaz visokog prioriteta, svi ulazi nieg prioriteta se ignoriu. Na Sl.
4-7(a) je prikazana tabela istinitosti, a na Sl. 4-7(b) grafiki simbol prioritetnog kodera 4-u-

74

Konkurentne naredbe dodele

2. Pretpostavka je da ulaz x3 ima najvii, a x0 najnii prioritet. Dvobitni izlaz y predstavlja


binarni broj koji ukazuje na ulaz najvieg prioriteta koji ima vrednost 1. Poto je mogue
da ni jedan ulaz nije aktivan, predvien je jo jedan dodatni izlaz, z koji ukazuje na ovu
situaciju. Naime, ako je barem jedan ulaz jednak 1, tada je z=1; inae, ako su svi ulazi
jednaki 0, tada vai z=0.
x3
0
0
0
0
1

x2
0
0
0
1
-

x1
0
0
1
-

x0
0
1
-

y1
0
0
0
1
1

y0
0
0
1
0
1

z
0
1
1
1
1

(a)
(b)
Sl. 4-7 Prioritetni koder 4-u-2: (a) tabela istinitosti; (b) blok dijagram.

Sledi VHDL opis prioritetnog kodera 4-u-2 u kome je iskoriena naredba when.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY pencoder IS
PORT (x : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
y : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
z : OUT STD_LOGIC);
END pencoder;
-----------------------------------------------------------------ARCHITECTURE when_arch OF pencoder IS
BEGIN
y <= "11" WHEN x(3) = '1' ELSE
"10" WHEN x(2) = '1' ELSE
"01" WHEN x(1) = '1' ELSE
"00";
z <= '0' WHEN x = "0000" ELSE '1';
END when_arch;
------------------------------------------------------------------

Kd sadri dve when naredbe, gde prva (linije 13-16) postavlja izlaz y, a druga (linija 17)
izlaz z. Prva naredba when nalae da se signalu y dodeli vrednost 11 ako je ulaz x(3)= 1
(linija 13). Ako je ovaj uslov taan, tada preostale when grane ne utiu na vrednost izlaznog
signala y. Druga when grana (linija 14) nalae da se signalu y dodeli vrednost 10 ako vai
x(2)=1. Ovo moe da se desi samo ako je x(3)= 0. Svaka sledea when grana moe da
utie na y samo ako ni jedan od uslova iz prethodnih when grana nije zadovoljen. Drugim
reima, najvii prioritet ima ulaz x(3), zatim x(2), x(1) i konano x(0) koji je najnieg
prioriteta.
Konceptualna implementacija. Klju za realizaciju naredbe when u hardveru lei u
obezbeivanju eljenog redosleda ispitivanja uslova. Za razliku od tradicionalnih
programskih jezika, kod kojih bi redosled ispitivanja uslova bio obezbeen sekvencijalnim
nainom izvrenja programa, u sintezi je, za postizanje istog efekta, neophodan dodatni
hardver. Na Sl. 4-8(a) je prikazana konceptualna realizacija naredba when sa jednim
uslovom:
sig <= izraz_1 WHEN uslov_1 ELSE
izraz_2;

WHEN

75

Multiplekser 2-u-1, u zavisnosti od ishoda ispitivanja uslova uslov_1, postavlja signal sig
na vrednost izraza izraz_1 ili izraza izraz_2. Multiplekser sa Sl. 4-8(a) je neka vrsta
apstraktnog multipleksera sa selekcionim signalom tipa boolean. Kada je selekcioni signal
taan (True) na izlaz se prenosi vrednost sa ulaznog porta T, a kada je netaan (False)
vrednost sa ulaznog porta F.

(a)
(b)
Sl. 4-8 Konceptualna realizacija when naredbe sa: (a) jednim uslovom; (b) tri uslova.

Na Sl. 4-8(b) je prikazana konceptualna realizacija naredbe when sa tri uslova:


sig <= izraz_1 WHEN uslov_1 ELSE
izraz_2 WHEN uslov_2 ELSE
izraz_3 WHEN uslov_3 ELSE
izraz_4;

Lako je uiti da svaka sledea grana naredbe when zahteva uvoenje jo jednog apstraktnog
multipleksera iji se izlaz povezuje na F port multipleksera za prethodnu granu. Na ovaj
nain, formira se prioritetna mrea multipleksera koja najvii prioritet daje uslovu iz prve
grane (uslov_1). Ako je uslov uslov_1 taan, tada signal sig dobija vrednost izraza izraz_1.
U suprotnom, ako je uslov_1 netaan, uslov_2 dobija ansu da na izlaz postavi svoj izraz
(izraz_2) ili da odluivanje prepusti sledeem uslovu.
Pr. 4-10 Konceptualna implementacija naredbe when - prvi primer
Razmotrimo sledei segment VHDL kda:
SIGNAL a,b,y : STD_LOGIC;
. . .
y <= 0 WHEN a=b ELSE
1;

Naredba when sadri samo jedan uslov, koji je taan ako su vrednosti jednobitnih signala a
i b jednake, a u suprotnom netaan. Na Sl. 4-9(a) je prikazan odgovarajui konceptualni
dijagram. Iako signali tipa std_logic mogu imati 8 razliitih vrednosti, prilikom sinteze u
obzir se uzimaju samo dve, 0 i 1, poto za preostalih 6 (izuzimajui Z) ne postoji
adekvatna fizika interpretacija. Takoe, vrednosti tipa boolean (true i false), iako nemaju
fiziki smisao, mogu se interpretirati kao logiko 1 (true) i logika 0 (false). Imajui to u
vidu, funkcija a=b se moe predstaviti u obliku tabele istinitosti sa Sl. 4-9(b). Ova funkcija
se moe izraziti u vidu logike jednaine ab + ab = a b , to odgovara funkciji logikog
kola koincidencije (xnor iskljuivo NILI). Na Sl. 4-9(c) je prikazana kombinaciona mrea

76

Konkurentne naredbe dodele

koja predstavlja konani rezultat sinteze naredbe when iz ovog primera. Apstraktni blok
jednakosti iz konceptualnog dijagrama zamenjen je logikim kolom koincidencije, a
apstraktni multiplekser dvonivovskom logikom mreom koja realizuje funkciju
multipleksera 2-u-1.
a
0
0
1
1

(a)

b
0
1
0
1

a=b
1
0
0
1

(b)

(c)

Sl. 4-9 Sinteza VHDL kda iz Pr. 4-10: (a) konceptualni dijagram; (b) tabela istinitosti funkcije
jednakosti; (c) sintetizovana kombinaciona mrea.

Pr. 4-11 Konceptualna implementacija naredbe when - drugi primer


Razmotrimo hardversku realizaciju when naredbe iz sledeeg segmenta VHDL kda:
SIGNAL a,b,f : UNSIGNED(7 DOWNTO 0);
SIGNAL x,y : UNSIGNED(3 DOWNTO 0);
. . .
f <= a+b WHEN x+y>1 ELSE
a-b-1 WHEN x>y AND y!=0 ELSE
a+1;

Na Sl. 4-10(a) je prikazan inicijalni konceptualni dijagram. U sledeem koraku, oblaci iz


polaznog dijagrama se zamenjuju apstraktnim blokovima koji realizuju uslove i izraze iz
posmatrane when naredbe (Sl. 4-10(b)). Razrada (sinteza) kola se moe nastaviti i dalje,
zamenom apstraktnih blokova odgovarajuim kombinacionim mreama: blok oznaen sa
+ zamenjuje se binarnim sabiraem, blok > komparatorom itd. Tako se konano stie do
mree koja sadri samo logika kola.

(a)

(b)

Sl. 4-10 Sinteza VHDL kda iz Pr. 4-11: (a) inicijalni konceptualni dijagram; (b) detaljniji
konceptualni dijagram.

Primeri Pr. 4-10 i Pr. 4-11 ukazuju na tok sinteze VHDL kda. Meutim, treba naglasiti da
se sinteza ne svodi samo na konstrukciju konceptualnog dijagrama i zamenu apstraktnih
blokova odgovarajuim hardverskim realizacijama, ve ukljuuje i razliite oblike
optimizacija koje se sprovode s krajnjim ciljem da se, u meri u kojoj je to mogue, smanji
sloenost rezultujueg hardvera.

SELECT

77

4.3. SELECT
Naredba select, ili naredba dodele sa izborom vrednosti, ima sledeu sintaksu:
WITH selekcioni_izraz SELECT
sig <= izraz_1 WHEN vrednost_1,
izraz_2 WHEN vrednost_2,
...
izraz_n WHEN vrednost_n;

Kao i naredba when i naredba select sadri vie alternativnih izraza ije se vrednosti, pod
odreenim uslovima, dodeljuju signalu s leve strane znaka dodele. Razlika u odnosu na
naredbu when je u nainu kako se vri izbor izraza ija e vrednost biti dodeljena izlaznom
signalu. Kod naredbe select najpre se odreuje vrednost selekcionog izraza iz zaglavlja
naredbe, zatim se dobijeni rezultat poredi (istovremeno) sa vrednostima iz svih when grana
(vrednost_1, ..., vrednost_n) i, konano, izlaznom signalu se dodeljuje rezultat
izraunavanja izraz iz grane u kojoj se javilo slaganje. Drugim reima, izraunata vrednost
selekcionog izraza se koristi kao klju za izbor jednog od vie alternativnih izraza. Pri tom
se zahteva da: a) svaka vrednost bude navedena tano jedanput i b) svaki mogui rezultat
selekcionog izraza bude pokriven tano jednom vrednou! Takoe, u poslednoj grani
naredbe when dozvoljeno je koristiti slubenu rei others da bi se oznaio izraz (izraz_n)
koji e biti izabran ako se rezultat selekcionog izraza ne poklapa ni sa jednom eksplicitno
navedenom vrednou:
WITH selekcioni_izraz SELECT
sig <= izraz_1 WHEN vrednost_1,
izraz_2 WHEN vrednost_2,
...
izraz_n WHEN OTHERS;

When vrednost iz naredbe select moe biti navedena na tri razliita naina i to kao: (a)
pojedinana vrednosti, (b) opseg vrednosti i (c) skup vrednosti:
WHEN v1
-- pojedinana vrednost
WHEN v1 TO v2
-- od v1 do v2
WHEN v1 | v2 | v3 ... -- v1 ili v2 ili v3 ili ...

Razmotrimo sledeu select naredbu:


WITH control SELECT
outp <= 000 WHEN 00
111 WHEN 01 | 10
010 WHEN OTHERS;

U ovom primeru, ulogu selekcionog izraza igra 2-bitni signal control. Izlazni signal outp
dobija vrednost 000 za control=00. Ako je vrednost signala control jednaka 01 ili
10, outp dobija vrednost 111. Signalu outp se dodeljuje vrednost 010 ako vrednost
signala control nije jednaka ni jednoj od vrednosti navedenih u prve dve grane. Redosled
grana u select naredbi nije od znaaja. To je zato to se uslovi ne ispituju redom (kao kod
naredbe when) ve svi u isto vreme (paralelno).
Pr. 4-12 Opis tabele istinitosti
Kao to je poznato, bilo koja logika funkcija se moe predstaviti u vidu tabele istinitosti.
Prosto, za svaku kombinaciju vrednosti ulaznih promenljivih, u tabeli istinitosti je

78

Konkurentne naredbe dodele

navedena odgovarajua vrednost funkcije. Na Sl. 4-11 je prikazana tabela istinitosti logike
funkcije y dve promenljive, a i b.
a b y
0 0 0
0 1 1
1 0 0
1 1 1
Sl. 4-11 Jednostavna tabela istinitosti.

Odgovarajui VHDL opis, u kome je iskoriena select naredba, dat je ispod. Signali a i b
su spojeni (operatorom konkatenacije) u novi 2-bitni signal s koji se potom koristi kao
selekcioni signal u naredbi select. Svakoj vrsti tabele istinitosti odgovara jedna grana select
naredbe.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY tabela_istinitosti IS
PORT (a,b : IN STD_LOGIC;
y : OUT STD_LOGIC);
END tabela_istinitosti;
-----------------------------------------------------------------ARCHITECTURE select_arch OF tabela_istinitosti IS
SIGNAL s : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
s <= a & b;
WITH control SELECT
y <= '0' WHEN "00",
'1' WHEN "01",
'0' WHEN "10",
'1' WHEN OTHERS;
END select_arch;
------------------------------------------------------------------

S obzirom na to to je signal s tipa std_logic_vector, grana others (linija 18) ne pokriva


samo nenavedenu binarnu vrednost, 11, ve i svih 60 preostalih dvobitnih vrednosti tipa
std_logic (kao to su ZX, U0, -1 itd.). Kao to je ve reeno u Pr. 4-6, od 8 razliitih
vrednosti tipa std_logic, prilikom sinteze u obzir se uzimaju samo dve, 1 i 0. To znai
da se, za potrebe sinteze, opcija others iz prethodne arhitektura praktino svodi na 11.
Meutim, uprkos tome, naredba select koja sledi, a kod koje je opcija others zamenjena
konkretnom vrednou, nije sintaksno ispravna:
WITH s SELECT
y <= '0' WHEN
'1' WHEN
'0' WHEN
'1' WHEN

"00",
"01",
"10",
"11";

Razlog za sintaksnu greku je zahtev da u when granama naredbe select moraju biti
obuhvaene sve mogue vrednosti selekcionog izraza, to za sluaj selekcionog signala tipa
std_logic to oito nije sluaj. Napomenimo da bi u sluaju da je signal s tipa bit (koji
poseduje samo dve binarne vrednosti 0 i 1) gornji oblik naredbe select bio bi korektan.

SELECT

79

Ispod su data dva kompaktnija zapisa select naredbe koja opisuje tabelu istinitosti sa Sl.
4-11. Kao to vidimo, u oba sluaja naredba ima samo dve when grane, gde jedna definie
ulazne kombinacije za koje funkcija y ima vrednost 1 (0), a druga (others) sve preostale
kombinacije, tj. one za koje funkcija ima vrednost 0 (1).
y <=

'1' WHEN "01" | "11",


'0' WHEN OTHERS;

y <=

'0' WHEN "00" | "10",


'1' WHEN OTHERS;

Pr. 4-13 Multiplekser, binarni dekoder, binarni koder, prioritetni kode - realizacija
pomou naredbe select
U ovom primeru predstavljeni su VHDL opisi etiri standardna digitalna kola:
multipleksera, binarnog dekodera, binarnog kodera i prioritetnog kodera. Za razliku od
opisa istih kola iz poglavlja 4.2, u ovom primeru se umesto naredbe when koristi naredba
select.
Multiplekser. Sledi VHDL kd arhitekture multipleksera 4-u-1 koja je funkcionalno
identina arhitekturi iz Pr. 4-6.
1
2
3
4
5
6
7
8
9
10

----------------------------------------------------------------ARCHITECTURE select_arch OF mux4u1 IS


BEGIN
WITH sel SELECT
y <= a WHEN "00",
-- "," umesto ";"
b WHEN "01",
c WHEN "10",
d WHEN OTHERS; -- ne moze d WHEN "11"
END select_arch;
-----------------------------------------------------------------

Binarni dekoder. Blok dijagram i tabela istinitosti binarnog dekodera 2-u-4 se mogu videti
na Sl. 4-5 iz Pr. 4-7. U tabeli istinitosti sa Sl. 4-5(b) ulazi dekodera su navedeni u
redosledu: e, d1, d0. U VHDL opisu koji sledi ova tri signala su najpre objedinjena u trobitni
signal ed koji je potom iskorien kao kriterijum izbora u naredbi select. Spajanje ulaznih
signala obavljeno je pomou operatora konkatenacije, & (naredba ed<=e&d iz linija 5),
tako da vai: ed(2)=e, ed(1)= d1 i ed(0)=d0. Za vrednosti iz prve etiri when grane naredbe
select vai da je e=1, tako da izlazi dekodera imaju iste vrednosti kao i prve etiri vrste u
tabeli istinitosti sa Sl. 4-5(b). Poslednja when grana, koja postavlja izlaz dekodera na sve
nule, sadri slubenu re others, to obuhvata sve sluajeve kad vai e=0.
1
2
3
4
5
6
7
8
9
10
11
12
13

----------------------------------------------------------------ARCHITECTURE select_arch OF dek2u4 IS


SIGNAL ed : STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
ed <= e & d;
WITH ed SELECT
y <= "1000" WHEN "100",
"0100" WHEN "101",
"0010" WHEN "110",
"0001" WHEN "111",
"0000" WHEN OTHERS;
END select_arch;
-----------------------------------------------------------------

80

Konkurentne naredbe dodele

Binarni koder. Sledi VHDL kd arhitekture binarnog kodera 4-u-2, koja je funkcionalno
identian arhitekturi iz Pr. 4-8.
1
2
3
4
5
6
7
8
9
10

----------------------------------------------------------------ARCHITECTURE select_arch OF encoder IS


BEGIN
WITH x SELECT
y <= "00" WHEN "0001",
"01" WHEN "0010",
"10" WHEN "0100",
"11" WHEN OTHERS;
END select_arch;
-----------------------------------------------------------------

Naredba select kojom se izlaz kodera, y, postavlja na proizvoljnu vrednost, u svim


sluajevima kad je na njegovom ulazu prisutna neka neregularna binarna kombinacija,
sledeeg je oblika:
WITH x SELECT
y <= "00" WHEN
"01" WHEN
"10" WHEN
"11" WHEN
"--" WHEN

"0001",
"0010",
"0100",
"1000",
OTHERS;

Prioritetni koder. Naredba when, zahvaljujui redoslednom ispitivanju uslova, predstavlja


idealan izbor za opis prioritetnog kodera (Pr. 4-9). Meutim, prioritetni koder je mogue
opisati i pomou naredbe select, ali e u tom sluaju VHDL kd biti opirniji i manje
razumljiv. U kdu koji sledi pokazano je kako se naredbom select moe opisati prioritetni
kder 4-u-2. Prva when grana (linija 5) postavlja y na 00 pod uslovom da je x(0) jedini
ulaz koji je jednak 1. Sledee when grana postavlja y na 01 ako vai x(3)=x(2)= 0 i
x(1) =1. Trea when grana postavlja y na 10 za sve kombinacije ulaznih vrednosti za
koje vei: x(3) = 0 i x(2) = 1. Konano, poslednja when grana kae da u svim preostalim
sluajevima, to ukljuuje i sluaj kad je x(3) =1, y dobija vrednost 11. Uoimo da grana
when others obuhvata i ulaznu kombinaciju 0000, to znai da e u tom sluaju izlaz y
biti postavljen na 11. Meutim, kako sve nule na ulazu postavljaju z=0 (linije 9-11), to u
ovom sluaju vrednost izlaza y nije od znaaja. Primetimo da je broj binarnih kombinacija
sadranih u svakoj sledeoj when grani dva puta vei u odnosu na prethodnu. Iz tog
razloga, opis prioritetnog kodera pomou naredbe select nije primeren onda kad je broj
ulaza vei od 4.
1
2
3
4
5
6
7
8
9
10
11
12

----------------------------------------------------------------ARCHITECTURE select_arch OF pencoder IS


BEGIN
WITH x SELECT
y <="00" WHEN "0001",
"01" WHEN "0010" | "0011";
"10" WHEN "0100" | "0101" | "0110" | "0111",
"11" WHEN OTHERS;
WITH x SELECT
z <= '0' WHEN "0000",
'1' WHEN OTHERS;
END select_arch;

81

SELECT

Pr. 4-14 ALU


sel
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

(a)

Operacija
y <= a
y <= a + 1
y <= a - 1
y <= b
y <= b + 1
y <= b - 1
y <= a + b
y <= a+b+cin
y <= NOT a
y <= NOT b
y <= a AND b
y <= a OR b
y <= a NAND b
y <= a NOR b
y <= a XOR b
y <= a NXOR b

Funkcija
Transfer a
Inkrement a
Dekrement a
Transfer b
Inkrement b
Dekrement b
Sabiranje a i b
Sab. sa ul. pren.
Komplement a
Komplement b
I
ILI
NI
NILI
Iskljucivo ILI
Iskljucivo NILI

Jedinica

Aritmetika

Logika

(b)

Sl. 4-12 ALU: (a) Blok dijagram; (b) funkcionalna tabela.

Aritmetiko-logika jedinica (ili ALU prema eng. Arithmetic and Logic Unit) je
viefunkcionalno kombinaciono kolo koje moe da obavlja vie razliitih aritmetikih i
logikih operacija nad parom viebitnih operanada. Na Sl. 4-12(a) je prikazan blok
dijagram, a na Sl. 4-12(b) funkcionalna tabela jedne jednostavne 8-bitne ALU koja
podrava osam aritmetikih i osam logikih operacija. Izbor izmeu aritmetikih i logikih
operacija vri se bitom najvee teine 4-bitnog selekcionog signala sel. Preostala tri bita
signala sel biraju jednu od osam operacija iz svake grupe.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
-----------------------------------------------------------------ENTITY ALU IS
PORT (a,b : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
sel : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
cin : IN STD_LOGIC;
y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ALU;
-----------------------------------------------------------------ARCHITECTURE select_arch OF ALU IS
SIGNAL arith, logic : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL inc_a, dec_a, inc_b
dec_b, sum, sum_c : SIGNED(7 DOWNTO 0);
BEGIN
-- Aritmeticka jedinica -----------------------------------------inc_a <= STD_LOGIC_VECTOR(SIGNED(a)+1);
dec_a <= STD_LOGIC_VECTOR(SIGNED(a)-1);
inc_b <= STD_LOGIC_VECTOR(SIGNED(b)+1);
dec_b <= STD_LOGIC_VECTOR(SIGNED(b)-1);
sum
<= STD_LOGIC_VECTOR(SIGNED(a)+SIGNED(b));

82
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

Konkurentne naredbe dodele

sum_c <= STD_LOGIC_VECTOR(SIGNED(a)+SIGNED(b)+cin);


WITH sel(2 DOWNTO 0) SELECT
arith <= a
WHEN "000",
inc_a WHEN "001",
dec_a WHEN "010",
b
WHEN "011",
inc_b WHEN "100",
dec_b WHEN "101",
sum
WHEN "110",
sum_c WHEN OTHERS;
-- Logicka jedinica ---------------------------------------------WITH sel(2 DOWNTO 0) SELECT
logic <= NOT a
WHEN "000",
NOT b
WHEN "001",
a AND b WHEN "010",
a OR b
WHEN "011",
a NAND b WHEN "100",
a NOR b WHEN "101",
a XOR b WHEN "110",
NOT (a XOR b) WHEN OTHERS;
-- Mux ---------------------------------------------------------WITH sel(3) SELECT
y <= arith WHEN '0',
logic WHEN OTHERS;
END select_arch;
------------------------------------------------------------------

Organizacija VHDL kda usklaena je sa strukturom ALU (Sl. 4-12(a)). Svakom bloku sa
Sl. 4-12(a) odgovara jedna select naredba. Kao to tri bloka u fizikoj ALU (Logicka
jedinica, Aritmeticka jedinica i Mux) rade paralelno, tako se i tri select naredbe u
odgovarajuem VHDL kdu izvravaju konkurentno. Za spregu konkurentnih sekcija kda
koriste se dva interna signala, arith i logic, koji odgovaraju vezama izmeu blokova
Logicka jedinica i Mux, odnosno Aritmeticka jedinica i Mux u strukturi sa Sl. 4-12(a).
Takoe, treba zapaziti da se u prezentovanom kdu aritmetike operacije obavljaju nad
oznaenim celim brojevima uz podrku paketa numeric_std (linije 19-24).
Konceptualna implementacija naredbe select. Kao to znamo, naredba select ima sledeu
sintaksu:
WITH sel SELECT
sig <= izraz_1 WHEN v1,
izraz_2 WHEN v2,
...
izraz_n WHEN vn;

U sutini, naredba select se moe interpretirati kao apstraktni multiplekser kod koga se
selekcioni izraz sel koristi za izbor jednog od n izraza iji e rezultat biti dodeljen izlaznom
signalu sig. Kod jednog ovakvog multipleksera (Sl. 4-13(a)), svakoj moguoj vrednosti
rezultata selekcionog izraza (v1, ..., vn) odgovara jedan ulazni port na koji se dovodi
rezultat odgovarajueg izraz (izraz_1, ..., izraz_n). Za razliku od apstraktnog multipleksera
za naredbu when, selekcioni signal multipleksera za naredbu select ne mora biti tipa
boolean, ve moe biti proizvoljnog tipa.
Razmotrimo sledeu select naredbu sa when others granom:

SELECT

83

WITH sel SELECT


sig <= izraz_1 WHEN v1,
izraz_2 WHEN v2,
Izraz_3 WHEN OTHERS;

Pod pretpostavkom da su v1, v2, v3, v4 i v5 sve mogue vrednosti selekcionog signala sel,
grana when others implicitno pokriva vrednosti v3, v4 i v5. Na Sl. 4-13(b) je prikazana
konceptualna realizacija ove naredbe.

(a)
(b)
Sl. 4-13 Konceptualna implementacija select naredbe: (a) bez others; (b) sa others granom.

Sve select naredbe se prevode u slian konceptualni dijagram. Razlika je samo u broju
moguih vrednosti selekcionog izraza, to direktno odreuje veliinu multipleksera.
Napomenimo da uprkos jednostavnoj konceptualnoj realizaciji, sinteza naredbe select moe
biti oteana injenicom da kod izvesnih implementacionih tehnologija postoje potekoe
prilikom realizacije ekstremno irokih multipleksera.
Pr. 4-15 Konceptualna implementacija naredbe select - prvi primer
Na Sl. 4-14(a) je prikazan konceptualni dijagram koji odgovara sledeem segment VHDL
kda:
SIGNAL s: STD_LOGIC_VECTOR(1 DOWNTO 0);
. . .
WITH s SELECT
x <= (a AND b) WHEN "11",
(a OR b) WHEN "01" | "10",
0
WHEN OTHERS;

a
b

and
or

11
10

01
0

00

(a)
(b)
Sl. 4-14 Konceptualna implementacija i sinteza select naredbe iz Pr. 4-15: (a) konceptualni
dijagram; (b) kombinaciona mrea.

84

Konkurentne naredbe dodele

Uoimo da je selekcioni izraz s tipa std_logic_vector(1 downto 0). Od mogue 81 dvobitne


vrednosti signala s, za sintezu su smislene samo etiri: 00, 01, 10 i 11, to znai da je
za realizaciju ove select naredbe dovoljan multiplekser 4-u-1. Daljom razradom
konceptualnog dijagrama sa Sl. 4-14(a), tj. realizacijom apstraktnih blokova and i or i
apstraktnog multipleksera pomou logikih kola dolazimo do kombinacione mree sa Sl.
4-14(b), koja predstavlja i konani rezultat sinteze razmatrane select naredbe.
Pr. 4-16 Konceptualna implementacija naredbe select - drugi primer
Razmotrimo select naredbu iz sledeeg segmenta VHDL kda:
SIGNAL a,b,r: UNSIGNED(7 DOWNTO 0);
SIGNAL s: STD_LOGIC_VECTOR(1 DOWNTO 0);
. . .
WITH s SELECT
r <= a+1 WHEN "11",
a-b-1 WHEN "10",
a+b WHEN OTHERS;

Odgovarajui konceptualni dijagram je prikazan na Sl. 4-15.

Sl. 4-15 Konceptualna implementacija VHDL kda iz Pr. 4-16.

4.4. Poreenje naredbi WHEN i SELECT


Primeri iz prethodnih poglavlja pokazuju da se isto kombinaciono kolo moe opisati
korienjem bilo when bilo select naredbe. Meutim, posmatrano sa stanovita hardverske
sinteze, ove dve naredbe se sintetiu na drugaiji nain. Sinteza when naredbe se zasniva na
prioritetnoj strukturi formiranoj od kaskadno povezanih multipleksera. Nasuprot tome, za
sintezu select naredbe se koristi samo jedan iroki multiplekser sa ulazima jednakog
prioriteta. Naredba select je pogodna za opisivanje kombinacionih kola poput dekodera,
multipleksera i ALU, ija se funkcija moe definisati tabelom istinitosti ili nekom vrstom
funkcionalne tabele svaka grana select naredbe odgovara jednoj vrsti tabele istinitosti. S
druge strane, when naredba omoguava kreiranje konciznih opisa kola koja nekim ulazima
ili operacijama daju vii prioritet, kao to je to sluaj s prioritetnim koderom. Takoe,
naredba when omoguava koncizno opisivanje sloenih uslova i izraza, npr:
r <= a+b WHEN (x+y>1 AND x>3) ELSE
a-b-1 WHEN (z>v AND f = 1) ELSE
. . .

Meutim, when naredba je manje efikasna onda kada treba opisati tabelu istinitosti, jer u
opis implicitno unosi ogranienja (prioritete) koja faktiki ne postoje. Na primer, sledee tri
when naredbe su funkcionalno identine:

Poreenje naredbi WHEN i SELECT


x<=a WHEN (s=00) ELSE
b WHEN (s=01) ELSE
c WHEN (s=10) ELSE
d;

x<=b WHEN (s=01) ELSE


a WHEN (s=00) ELSE
c WHEN (s=10) ELSE
d;

85

x<=c WHEN (s=10) ELSE


b WHEN (s=01) ELSE
a WHEN (s=00) ELSE
d;

Svaka od tri when naredbe opisuje multiplekser 4-u-1, ali pri tom dajui razliite prioritete
ulazima. Meutim, s obzirom na to to se u svim granama kao uslov koristi isti signal, s,
koji u jednom trenutku moe imati samo jednu vrednost, prioriteti se gube, jer e za isto s
svaka od tri naredbe izabrati isti ulaz bez obzira na redosled ispitivanja. Iako ovakva vrsta
opisa nije pogrena, dodatna ogranienja uvedena when naredbom mogu da zahtevaju
dodatni hardver i uiniti sintezu i optimizaciju teim.
Idealno, softver za sintezu bi trebalo da je u mogunosti da automatski odredi optimalnu
hardversku strukturu i generie identinu gejtovsku realizaciju bez obzira na jezike
konstrukcije koje su koriene u VHDL opisu. Meutim, to je sluaj samo za veoma
jednostavna, trivijalna kola. U optem sluaju, projektant treba da bude svestan efekta
naredbi na sintezu, kako bi u svakom konkretnom sluaju bio u stanju da izabere jeziku
konstrukciju koja semantiki najbolje odgovara funkciji kola koje opisuje.

4.5. Optimizacija konkurentnog kda


Karakteristino je za probleme iz oblasti projektovanja digitalnih sistema da gotovo nikada
ne postoji samo jedno reenje. Jedan isti sistem se moe realizovati na mnogo razliitih
naina, a alterantivne realizacije se mogu znaajno razlikovati po sloenosti i
performansama. Korienje VHDL-a i softvera za sintezu, samo po sebi, ne znai da e
realizovano reenje biti dobrih ili loih karakteristika. VHDL i softver za sintezu pre svega
nas rastereuju implementacionih detalja niskog nivoa i znaajno pojednostavljuju i
ubrzavaju proces realizacije hardvera. Softver je u stanju da prilikom sinteze automatski
obavi izvesna pojednostavljenja i lokalne optimizacije, ali svakako nije u stanju da
razume svrhu kda kako bi istraio alternativna reenja ili promenio arhitekturu sistema.
Odgovornost za kvalitet reenja je na projektantu. Pri tome, ne postoji neki mehaniki
projektantski postupak koji bi garantovao pronalaenje optimalnog reenje, ve se
projektovanje u velikoj meri oslanja na iskustvo projektanta i njegovo dobro razumevanje
problema koji treba da rei.
U ovom poglavlju bie predstavljene dve optimizacione tehnike: deoba operatora i deoba
funkcija, koje se mogu koristiti radi kreiranja efikasnijeg (u pogledu sloenosti
sintetizovanog hardvera) VHDL kda.

4.5.1. Deoba operatora


Sinteza VHDL kda podrazumeva prevoenje naredbi i jezikih konstrukcija sadranih u
kdu u odgovarajuu hardversku strukturu. Jedan od glavnih kriterijuma za ocenu kvalitet
hardverskog reenja jeste veliina (obimnost) sintetizovanog hardvera izraena na primer
brojem logikih kola ili povrinom zauzetom na silicijumskom ipu. Veliina
sintetizovanog hardvera zavisi od mnogih faktora, a jedan od najznaajnijih je vrsta i broj
operatora (aritmetikih, kao to su + i -, i u neto manjoj meri logikih, kao to su and,
or, xor) sadranih u kdu. Pojam deoba operatora se odnosi na optimizacionu tehniku koja
se u cilju smanjenja broj operatora sprovodi na nivou VHDL kda. Optimizacija se postie
preureenjem kda na nain da se isti operator moe iskoristiti za obavljanje vie razliitih

86

Konkurentne naredbe dodele

operacija. Budui da deoba operatora, po pravilu, zahteva uvoenje dodatnog hardver


(najee u vidu multipleksera), njena primena je opravdana samo za relativno sloene
operatore. Osnovnu ideju deobe operatora ilustrovaemo na primeru sledee when naredbe:
r <= a + b WHEN uslov ELSE
a + c;

Konceptualna implementacija prethodne naredbe sadri dva sabiraa i jedan multiplekser


(Sl. 4-16(a)). Meutim, primetimo da su izrazi a+b i a+c uzajamno iskljuivi u smislu da se
u zavisnosti od vrednosti uslova za izvrenje uvek bira samo jedan. Drugim reima, od dva
sabiraa iz dijagrama sa Sl. 4-16(a) uvek e biti korien samo jedan.
a
b
c
ostali
ulazi

+
+

T
F

uslov

(a)
(b)
Sl. 4-16 Deobe operatora na primeru when naredbe: (a) konceptualna implementacija
neoptimizovanog kda; (b) konceptualna implementacija nakon obavljene deobe operatora.

Efikasnije reenje, u pogledu hardverske sloenosti, bilo bi ono koje sadri samo jedan
sabira, a koji u zavisnosti od vrednosti uslova sabira a i b ili a i c. To se moe postii
revizijom prethodnog kda na sledei nain:
x <= b WHEN uslov ELSE
c;
r <= a + x;

Odgovarajui blok dijagram prikazan je na Sl. 4-16(b). Dakle, umesto da se multipleksiraju


rezultati sabiranja, kao u polaznom kdu, sada se multipleksiraju sabirci. Na taj nain,
sabira postaje deljiv hardverski resurs, takav da se moe koristiti za izraunavanje bilo
operacije a+b, bilo operacije a+c.
Iako je drugo reenje hardverski jednostavnije, prvo reenje poseduje bolje performanse, tj.
manje propagaciono kanjenje. Neka su propagaciona kanjenja sabiraa, multipleksera i
logike koja odreuje vrednost uslova redom: Tsab, Tmux i Tuslov. Propagaciono kanjenje
prvog kola iznosi: max{Tsab, Tuslov } + Tmux, a drugog Tsab + Tuslov + Tmux. Manje
propagaciono kanjenje prvog reenja je posledica injenice da se sabiranje i ispitivanje
uslova obavljaju u paraleli, za razliku od drugog reenja u kojem se ove dve operacije
obavljaju jedna za drugom. Meutim, ukoliko je logika za odreivanje uslova jednostavna,
performanse dva reenja bie priblino iste.
Pr. 4-17 Deoba operatora na primeru naredbe select
Razmotrimo sledeu select naredbu:
WITH uslov
r <= a+b
a+c
d+1

SELECT
WHEN 00,
WHEN 01,
WHEN OTHERS;

Odgovarajua konceptualna implementacija prikazana je na Sl. 4-17(a). Kao to se moe


videti, kolo sadri dva sabiraa, jedan inkrementer i jedan multiplekser 4-u-1.

Optimizacija konkurentnog kda

a
b
c
d
ostali
ulazi

87

+
+

00
01
10
11

+1
uslov

(a)
(b)
Sl. 4-17 Deobe operatora na primeru select naredbe: (a) konceptualna implementacija
neoptimizovanog kda; (b) konceptualna implementacija nakon obavljene deobe operatora.

Kd optimizovan deobom operatora sadri samo jedan operator sabiranja i oblika je:
WITH uslov SELECT
x0 <= a WHEN 00 | 01,
d WHEN OTHERS;
WITH uslov SELECT
x1 <= b WHEN 00,
c WHEN 01,
00000001 WHEN OTHERS;
r <= x0 + x1;

Blok dijagram konceptualne implementacije optimizovanog kda prikazan je na Sl. 4-17(b).


Kao to se moe uoiti, optimizovano reenje sadri jedan sabira i inkrementer manje, ali i
jedan multiplekser 4-u-1 vie u odnosu na prvobitno reenje. Uteda u hardveru je ipak
znaajna, budui da su sabira i inkrementer viestruko sloenija kola od multipleksera
U zakljuku, deoba operatora se ostvaruje zamenom vie operatora jednim, uz ugradnju u
kolo dodatnih multipleksera za izbor operanada. Nivo ostvarene utede zavisi od relativnog
odnosa sloenosti operatora i dodatnih multipleksera. to je operator sloeniji, to je uteda
vea. Meutim, deoba operatora po pravilu unosi dodatno propagaciono kanjenje, jer
forsira kaskadno izvrenje uslova za izbor operanada i deljive operacije. Konano, treba
napomenuti da mnogi alati za hardversku sintezu poseduju podrku za automatsku
optimizaciju kda kroz deobu operatora.

4.5.2. Deoba funkcija


Sloeni digitalni sistemi, po pravilu, realizuju mnotvo funkcija. Mogue je da razliite
funkcije poseduju neke zajednike karakteristike, ili da se na neki nain mogu dovesti u
vezu. To otvara mogunost da se vie funkcija realizuju tako da dele neke zajednike
delove ili da se jedna funkcija iskoristiti za realizaciju neke druge funkcije. Ova vrsta
optimizacije se naziva deobom funkcija. Za razliku od deobe operatora, deoba funkcija se
ne moe automatizovati, ve se primenjuje na ad-hoc nain, od sluaja do sluaja, a njena
uspena primena zavisi od toga do koje mere projektanta razume osobine funkcija koje
treba da realizuje.
Pr. 4-18 Sabira/oduzima
U ovom primeru je predstavljeno viefunkcionalno kola koje je u stanju da obavlja
operacije sabiranja i oduzimanja. Funkcionalna tabela ovog kola (sabiraa/oduzimaa)
prikazana je na Sl. 4-18(a). Operacija se bira posredstvom selekcionog signala ctrl. Kolo

88

Konkurentne naredbe dodele

obavlja sabiranje za ctrl=0, a oduzimanje za ctrl=1. U nastavku su predstavljena dva


VHDL opisa sabiraa/oduzimaa. Prvi opis (arhitektura arch_v1) striktno sledi
funkcionalnu tabelu sa Sl. 4-18(a). Uoimo da su ulazni signali interno konvertovani u tip
signed (linije 15 i 16) kako bi se u when naredbi (linije 17-18) omoguila primena
aritmetikih operacija. Na Sl. 4-18(b) je prikazan odgovarajui konceptualni dijagram, koji
sadri sabira (za operaciju + iz linije 17), oduzima (za operaciju - iz linije 18) i izlazni
multiplekser (za when naredbu iz linije 17 i 18).
ctrl
0
1

operacija
a+b
a-b
(a)

(b)

(c)

Sl. 4-18 Deoba funkcija na primeru kola za sabiranje/oduzimanje: (a) funkcionalna tabela; (b)
polazno reenje; (c) optimizovano reenje.

Budui da su sabiranje i oduzimanje dve razliite operacije, direktna primena deobe


operatora nije mogue. Meutim, u reprezentaciji potpunog komplementa vai da se
oduzimanje, a - b, moe izraziti preko sabiranja kao a + b + 1 , gde je b jedinini
komplement umanjioca b. Poto sada u obe funkcije figurie samo operator +, omogueno
je da se funkcija sabiranja iskoristi za realizacije kako a+b tako i a-b, i to na nain kao u
arhitekturi arch_v2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
-----------------------------------------------------------------ENTITY ADDSUB IS
PORT (a,b : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
ctrl : IN STD_LOGIC;
r : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ADDSUB;
-----------------------------------------------------------------ARCHITECTURE arch_v1 OF ADDSUB IS
SIGNAL x0, x1, sum : SIGNED(7 DOWNTO 0);
BEGIN
x0 <= SIGNED(a);
x1 <= SIGNED(b);
sum <= x0 + x1 WHEN ctrl = 0 ELSE
x0 - x1;
r <= STD_LOGIC_VECTOR(sum);
END arch_v1;
-----------------------------------------------------------------ARCHITECTURE arch_v2 OF ADDSUB IS
SIGNAL x0, x1, sum : SIGNED(7 DOWNTO 0);
SIGNAL cin : SIGNED(0 DOWNTO 0);
-- bit ulaznog prenosa
BEGIN
x0 <= SIGNED(a);
x1 <= SIGNED(b) WHEN ctrl=0 ELSE
SIGNED(NOT b);
cin <= 0 WHEN ctrl=0 ELSE
1;
sum <= x0 + x1 + cin;

Optimizacija konkurentnog kda


32
33
34

89

r <= STD_LOGIC_VECTOR(sum);
END arch_v2;
------------------------------------------------------------------

Uoimo da naredba sum <= x0 + x1 + cin iz arhitekture arch_v2 sadri dve operacije
sabiranja, to sugerie da su za njenu realizaciju potrebna dva sabiraa. Meutim, poto je
cin jednobitni signal, koji moe imati vrednost 0 ili 1, mogue je koristiti samo jedan
sabira sa portom za ulazni prenos na koji e biti povezan signal cin. Veina alata za
sintezu mogu da prepoznaju ovakvu situaciju i konvertuju dati kd u reenje sa jednim
sabiraem. Takoe, uoimo da se naredba when koja odreuje vrednost signala cin (linije
29-30) svodi na naredbu dodele: cin <= ctrl. Imajui to u vidu, konceptualni dijagram
arhitekture arch_v2 je oblika kao na Sl. 4-18(c). Simbol za invertor koji se vidi na ovoj slici
ne predstavlja samo jedno kolo, ve niz od 8 invertora od kojih svaki invertuje jedan bit 8bitnog operanda b. Optimizovano reenje ipak ima manju sloenost od polaznog, budui da
je sloenost oduzimaa vea od sloenosti niza invertora. Meutim, sloenost je smanjena
po cenu poveanja propagacionog kanjenja za iznos kanjenja kroz invertor.
Pr. 4-19 Potpuni komparator
Potpuni komparator je digitalno kolo za poreenje binarnih brojeva (Sl. 4-19(a)).
Komparator poseduje dva ulaza, a i b, za brojeve koji se porede i tri izlaza ije vrednosti
ukazuju na ishod poreenja: gt - vee (a > b), lt - manje (a < b) i eq - jednako (a = b).
Direktno reenje podrazumeva korienje tri relaciona operatora, kao u arhitekturi arch_v1
iz VHDL kda koji sledi. Oigledno, za sintezu arhitekture arch_v1 neophodna su tri
nezavisna kola za poreenje (Sl. 4-19(b)). Meutim, lako se uoava da su tri uslova (<, > i
=) meusobno iskljuiva, u smislu da se na osnovu bilo koja dva moe izvesti trei. Na
primer, a je jednako b ako vai da nije a vee od b i nije a manje od b. Imajui to u
vidu, funkcionalnost kola koja ispituju uslove vee i manje se moe iskoristiti za
realizaciju uslova jednako: eq = gt lt = ( gt + lt ) . Ovo zapaanje je iskorieno u
arhitekturu arch_v2 da bi se kreiralo kompaktnije reenje (Sl. 4-19(c)). Budui da je od tri
relaciona operatora, operator jednakosti najjednostavniji za hardversku realizaciju, jo
efikasnije reenje se moe dobiti ako se, kao u arhitekturi arch_v3, operator < izrazi preko
operatora > i = (Sl. 4-19(d)).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY COMP3 IS
PORT (a,b : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
gt,lt,eq : OUT STD_LOGIC);
END COMP3;
-----------------------------------------------------------------ARCHITECTURE arch_v1 OF COMP3 IS
BEGIN
gt <= '1' WHEN a > b ELSE
'0';
lt <= '1' WHEN a < b ELSE
'0';
eq <= '1' WHEN a = b ELSE
'0';
END arch_v1;

90
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

Konkurentne naredbe dodele

-----------------------------------------------------------------ARCHITECTURE arch_v2 OF COMP3 IS


SIGNAL xgt,xlt : STD_LOGIC;
BEGIN
xgt <= '1' WHEN a > b ELSE
'0';
xlt <= '1' WHEN a < b ELSE
'0';
gt <= xgt;
lt <= xlt;
eq <= xgt NOR xlt;
END arch_v2;
-----------------------------------------------------------------ARCHITECTURE arch_v3 OF COMP3 IS
SIGNAL xgt,xeq : STD_LOGIC;
BEGIN
xgt <= '1' WHEN a > b ELSE
'0';
xeq <= '1' WHEN a = b ELSE
'0';
gt <= xgt;
eq <= xeq;
lt <= xgt NOR xeq;
END arch_v3;
------------------------------------------------------------------

(a)
(b)
(c)
(d)
Sl. 4-19 Deoba funkcija na primeru potpunog komparatora: (a) simbol potpunog komparatora;
(b) direktna realizacija; (c) prvo optimizovano reenje; (d) drugo optimizovano reenje.

4.6. Z
Tip podataka std_logic definie devet vrednosti signala. Vrednosti 0 i 1 se interpretiraju
kao logika 0 i logiko 1 i koriste se u regularnoj logikoj sintezi. Vrednosti L i H, tj.
slaba 0 i slaba 1-ca, odgovaraju nivoima signala koje generiu kola sa izlaznim stepenom
tipa otovreni kolektor, odnosno otvoreni emitor. Budui da se ovakva vrsta digitalnih
kola danas retko koristi u praksi, ni vrednosti H i L ne bi trebalo koristiti u VHDL-u.
Vrednosti U, X i W imaju smisla samo u simulaciji i modeliranju i ne mogu se
sintetizovati. Vrednost - predstavlja proizvoljnu vrednost (dont care) i moe se koristiti
u kdu za sintezu, na nain kako je to opisano u Pr. 4-8. Konano, Z oznaava visoku
impedansu ili otvoreno kolo.
Trostatiki bafer. Z nije logika vrednost (u smislu Bulove algebre), ve predstavlja
elektrinu osobinu koju poseduje sam jedna posebna vrsta digitalnih kola, poznata pod
nazivom trostiki bafer. Na Sl. 4-20 su prikazani grafiki simbol i funkcionalna tabela
trostatikog bafera. Za oe=1, bafer prenosi logiku vrednost s ulaza na izlaz, odnosno
deluje kao zatvoreno kolo. S druge strane, za oe=0, izlaz bafera je postavljen u stanje

91

visoke impedanse, odnosno deluje kao otvoreno kolo. Drugim reima, pri oe=0 izlaz
bafera ne generie ni logiku 0 ni logiko 1, ve je u tzv. treem stanju ili stanju visoke
impedanse, tj. bez obzira na trenutnu logiku vrednost na ulazu, vrednost na izlazu je Z.
oe
0
1
(a)

y
Z
a

(b)

Sl. 4-20 Trostatiki bafer: (a) grafiki simbol; (b) funkcionalna tabela.

U VHDL-u, trostatiki bafer se opisuje na sledei nain:


y <= a WHEN oe=0 ELSE
Z;

Z se ne moe koristiti kao ulazna vrednost, niti se s ovom vrednou moe manipulisati
na nain kao sa logikim vrednostima 0 i 1. Na primer, sledee dve naredbe se ne mogu
sintetizovati:
r <= Z AND a;
g <= d - c WHEN a = Z ELSE
d - b;

Bidirekcioni (ulazno/izlazni) port. Pojedini pinovi integrisanih kola se izvode kao


bidirekcioni, odnosno na nain da se mogu, po potrebi, koristiti bilo kao ulazi bilo kao
izlazi. Konceptualni prikaz bidirekcionog porta prikazan je na Sl. 4-21. Smer porta se
kontrolie pomou signala dir. Kada je dir=0, trostatiki bafer deluje kao otvoreno kolo,
koje raskida vezu izmeu unutranjeg signala sig_out i porta bi, to prua mogunost da se
bi koristiti kao ulazni port. Za dir=1, bafer deluje kao zatvoreno kolo i na sada izlazni
port bi prenosi vrednost unutranjeg signal sig_out.

Sl. 4-21 Realizacija bidirekcionog porta pomou trostatikog bafera.

Sledi VHDL opis bidirekcionog porta. U entitetu, bidirekcioni port se deklarie sa smerom
inout. U kdu arhitekture uoavamo naredbu when kojom se kreira trostatiki bafer sa
ulazom sig_out, izlazom bi i kontrolnim ulaznom dir.
ENTITY bi_port IS
PORT(...
bi : INOUT STD_LOGIC;
...);
BEGIN
...
bi <= sig_out WHEN dir = 1 ELSE
Z;
sig_in <= bi;
...

Trostatika magistrala. U digitalnim sistemima se esto javlja potreba za prenosom


podataka iz vie razliitih izvora do istog odredita. Ova funkcija se najee ostvaruje
pomou multipleksera. Meutim, upotreba multipleksera sa velikim brojem ulaza moe
predstavljati problem, budui da veliki broj veza mora biti doveden do jednog mesta u
sistemu, tamo gde je postavljen multiplekser. U takvim sluajevima, esto je racionalnije

92

Konkurentne naredbe dodele

umesto multipleksera koristiti magistralu. Konstrukcija magistrale je zasnovana na


trostatikim baferima koji obezbeuju kontrolisanu spregu izvora podatka sa zajednikom
prenosnom linijom, kao to je prikazano na Sl. 4-22. Poto u jednom vremenu najvie jedan
izvor moe da pobuuje magistralu, jer bi se u suprotnom desio konflikt na magistrali,
neophodno je obezbediti da u svakom trenutku najvie jedan trostatiki bafer bude aktivan
(tj. deluje kao zatvoreno kolo), to se postie uz pomo dekodera.

Sl. 4-22 Trostatika magistrala.

U zavisnosti od vrednosti selekcionog signala, s, dekoder zatvara tano jedan trostatiki


bafer, koji na zajedniku magistralu prenosi vrednost sa svog ulaza. Izlazi otvorenih
trostatikih bafera su u stanju visoke impedanse i zato ne utiu na logiki nivo signala na
zajednikoj liniji. U nastavku je dat VHDL opis magistrale sa etiri izvora podataka. Kd
sadri etiri when naredbe, od kojih svaka odgovara jednom trostatikom baferu.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY bus IS
PORT ( a,b,c,d : IN STD_LOGIC;
s: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
y : OUT STD_LOGIC);
END bus;
-----------------------------------------------------------------ARCHITECTURE arch OF bus IS
BEGIN
y <= a WHEN s = "00" ELSE 'Z';
y <= b WHEN s = "01" ELSE 'Z';
y <= c WHEN s = "10" ELSE 'Z';
y <= d WHEN s = "11" ELSE 'Z';
END arch;
------------------------------------------------------------------

4.7. ROM
ROM (prema eng. Read-Only Memory) je memorija sa fiksnim sadrajem, tj. memorijska
komponenta koja moe samo da se ita. Blok dijagram ROM-a prikazan je na Sl. 4-23.
ROM ini m memorijskih lokacija, ili rei, od po n bita. Na r-bitni ulazni port addr
postavlja se adresa (redni broj) lokacije koja se ita, dok se sa izlaznog porta data preuzima
sadraj adresirane rei. Broj rei u ROM-u i broj bita adrese su sledeoj vezi: r = log 2 m .
Sledi VHDL opis ROM-a 8x8, tj. ROM-a sa 8 memorijskih rei duine 8 bita.

ROM

addr r

ROM
re 0
re 1
re 2
...
re m-1

93

data

n bita

Sl. 4-23 ROM.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
-----------------------------------------------------------------ENTITY ROM IS
PORT (addr : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
data : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ROM;
-----------------------------------------------------------------ARCHITECTURE rom OF ROM IS
TYPE mem_array IS ARRAY (0 TO 7) OF STD_LOGIC_VECTOR(7 DOWNTO 0);
CONSTANT memory : mem_array := ("00000000",
"00000010",
"00000100",
"00001000",
"00010000",
"00100000",
"01000000",
"10000000");
BEGIN
data <= memory(TO_INTEGER(UNSIGNED(addr)));
END rom;
------------------------------------------------------------------

ROM se modelira nizom konstantnih vrednosti (linije 13-20). Najpre se definie novi tip
podataka mem_array (linija 12) - 2D polje koje odgovara dimenzijama ROM-a. Tip
mem_array se potom koristi u deklaraciji niza konstantnih vrednosti, memory (linija 13).
Dati VHDL kd opisuje ROM 8x8 (8 rei duine 8 bita) sa sledeim vrednostima
zapamenim na adresama 0 do 7: 0, 2, 4, 8, 16, 32, 64 i 128 (linije 13-20). Telo arhitekture
(linija 22) sadri samo jednu konkurentnu naredbu dodele koja na izlazni port data prenosi
vrednost koja je prisutnu u adresiranoj lokaciji konstantnog niza memory. Budui da je
ulazni port addr tipa std_logic_vector, a da indeks niza mora biti tipa integer, neophodna je
konverzija tipa: najpre se addr konvertuje u tip unsigned, a zatim u integer.
ROM zapravo nije prava memorija. Budui da se svaka binarna vrednost sa ulaznog porta
preslikava u tano definisanu binarnu vrednost na izlazu, ROM se moe razumeti i kao
kombinaciona komponenta sa viebitnim ulazom addr i viebitnim izlazom data. Zato se
ROM ne realizuje pomou flip-flopova, ve se za njegovu implementaciju koriste logika
kola, ili LUT blokovi (kod FPGA).

5. SEKVENCIJALNE NAREDBE

VHDL, iako u osnovi konkurentan jezik, prua podrku i za sekvencijalno programiranje.


Za razliku od konkurentnog kda, gde postoji iluzija istovremenog (paralelnog) izvravanja
naredbi, kod sekvencijalnog kda, ba kao i kod tradicionalnih programskih jezika, naredbe
se izvravaju po redosledu kako su napisane. Za kreiranje sekvencijalnog kda u VHDL-u,
koristi se poseban skup naredbi, tzv. sekvencijalne naredbe. Konkurentne i sekvencijalne
naredbe se ne mogu meati u kdu arhitekture, ve se sekvencijalne sekcije kda mogu
pisati samo u okviru posebnih jezikih konstrukcija: procesa, funkcija i procedura. Proces
je, sam za sebe, kao celina, konkurentna naredba i kao takva moe se kombinovati s drugim
konkurentnim naredbama. Funkcije i procedure su potprogrami i mogu se pozivati iz
drugih delova kda, bilo konkurentnog, bilo sekvencijalnog.
Glavna namena sekvencijalnih naredbi jeste kreiranje apstraktnih algoritamskih modela
digitalnih kola. Meutim, za razliku od konkurentnog kd, korespondencija izmeu
sekvencijalnih naredbi i hardverskih komponenti nije uvek oigledna. ta vie, pojedine
sekvencijalne naredbe nije mogue sintetizovati. Zbog toga, da bi se obezbedila verna
transformacija sekvencijalnog kda u eljenu hardversku konfiguraciju, korienje procesa,
funkcija i procedura zahteva potovanje odreenih pravila pisanja kda. Takoe, u
sekvencijalnom kdu, osim signala, dozvoljeno je korienje i varijabli. Za razliku od
signala, varijable ne mogu biti deklarisane kao globalne, ve samo kao lokalne promenljive
u procesu, funkciji ili proceduri.
U ovoj glavi, naa panja bie usmerena na konstrukciju process. Preostale dve jezike
konstrukcije za kreiranje sekvencijalnog kda (function i procedure) bitne su za
projektovanje na sistemskom nivou i bie detaljno razmatrane u glavi 7.

5.1. PROCESS
Jezika konstrukcija process definie oblast arhitekture u kojoj se naredbe izvravaju na
sekvencijalan nain. Moe se rei da kao to arhitektura predstavlja okvir za konkurentni,
tako proces predstavlja okvir za sekvencijalni kd. Proces je, kao celina, konkurentna
naredba i kao takav moe se u istoj arhitekturi kombinovati s drugim konkurentnim
naredbama i drugim procesima. Sekvencijalni kd se pie pomou sekvencijalnih naredbi,
koje se po sintaksi i semantici razlikuju od konkurentnih i mogu da egzistiraju samo unutar

Goran Lj. orevi, Arhitetkture mikrosistema, 2009.

96

Sekvencijalne naredbe

procesa. Budui da se naredbe unutar procesa izvravaju sekvencijalno, njihov redosled u


procesu jeste od znaaja.
Napomenimo da treba praviti jasnu razliku izmeu sekvencijalnih naredbi i sekvencijalnih
kola. Sekvencijalne naredbe su naredbe VHDL-a obuhvaene procesom, dok su
sekvencijalna kola digitalna kola sa internim stanjima (flip-flopovi, registri, konani
automati). Sekvencijalne naredbe se mogu koristiti za modeliranje kako sekvencijalnih tako
i kombinacionih kola.
VHDL projekat moe sadrati proizvoljan broj procesa, ali svi oni moraju biti smeteni u
kdu arhitekture, tj. ne mogu, kao zasebne projektne jedinice, biti deo paketa/biblioteke.
Proces je slian potprogramima iz programskih jezika po tome to sadri sekvencijalne
naredbe. Meutim, za razliku od potprograma, koji se pozivaju iz drugih delova programa,
proces se samostalno aktivira, onda kada se za to steknu odreeni uslovi, odnosno kada se
dese odreeni dogaaji. Dogaaji koji pokreu (aktiviraju) proces su promene vrednosti
signala na koje je proces senzitivan (osetljiv). U odnosu na to kako se definiu uslovi za
aktiviranje, razlikujemo dve vrste procesa: proces sa listom senzitivnosti i proces sa wait
naredbom.

5.1.1. Proces sa listom senzitivnosti


Proces sa listom senzitivnosti ima sledeu sintaksu (opcioni delovi sintakse obuhvaeni su
uglastim zagradama):
[labela:] PROCESS (lista senzitivnosti)
[VARIABLE ime tip [opseg] [:= inicijalna_vrednost]]
BEGIN
sekvencijalne naredbe;
END PROCESS [labela];

Proces poinje slubenom reju process posle koje sledi tzv. lista senzitivnosti. Lista
senzitivnosti sadri spisak signala na koje je proces senzitivan, tj. na iju promenu proces
reaguje. Promena vrednosti bilo kog signala iz liste senzitivnosti aktivira proces. Nakon
aktiviranja, naredbe iz dela sekvencijalne naredbe izvravaju se jedna za drugom, a nakon
to se izvri i poslednja naredba, proces se deaktivira (tj. suspenduje) i ostaje neaktivan sve
do ponovnog aktiviranja, odnosno do nove promene nekog signala iz liste senzitivnosti.
Varijable su opcione. Ako se koriste, moraju biti deklarisane u deklarativnom delu procesa
(pre slubene rei begin). Prilikom deklaracije, varijabli se moe dodeliti inicijalna
vrednost. Meutim, inicijalne vrednosti varijabli su podrane samo u simulaciji, ali ne i u
sintezi VHDL kda. Takoe opciono, proces moe biti oznaen labelom, kojom zapoinje i
kojom se zavrava konstrukcija process.
Kao to je ve reeno, procesi se koriste za modeliranje kako sekvencijalnih tako i
kombinacionih kola. Za kombinaciona kola, lista senzitivnosti procesa mora da sadri sve
ulazne signale kola. Za sinhrona sekvencijalna kola, lista senzitivnosti sadri signal takta i
asinhrone ulaze (kao to je to npr. signal za asinhrono resetovanje), ali ne i sinhrone ulaze
kola (kao to je to npr. ulaz d D flip-flopa). Proces sa listom senzitivnosti ne sme da sadri
sekvencijalnu naredbu wait.
Pr. 5-1 Jednostavan kombinacioni proces
Razmotrimo sledei proces:

PROCESS

97

SIGNAL a, b, c : STD_LOGIC;
. . .
PROCESS(a, b, c)
BEGIN
y <= a OR b OR c;
END PROCESS;

Proces se aktivira uvek kada se promeni bilo koji signala iz liste senzitivnosti: a, b ili c.
Nakon aktiviranja, izvrava se naredba sadrana u telu procesa, a onda se proces deaktivira.
Dati proces opisuje troulazno ILI kolo sa ulazima a, b i c, i izlazom y, a po funkciji i nainu
rada identian je konkurentnoj naredbi dodele:
y <= a OR b OR c;

Treba zapaziti da su mehanizmi pokretanja procesa i konkurentne naredbe dodele u osnovi


isti. Kao to se konkurentna naredba dodele izvri jedanput uvek kada se promeni vrednost
bilo kog signala iz izraza s desne strane operatora dodele, tako se i proces izvri jedanput
uvek kad se promeni vrednost bilo kog signala iz njegove liste senzitivnosti. Razlika je u
tome to je konkurentna naredba dodele osetljiva na promene svih svojih signalaoperanada, dok proces ne mora biti osetljiv na sve signale koji se koriste u kdu procesa.
Neosetljivost procesa na neki signal se postie izostavljanjem tog signala iz liste
senzitivnosti. Ova osobina procesa se koristi za modeliranje sekvencijalnih digitalnih kola,
kao to je to npr. D flip-flop iz sledeeg primera.
Pr. 5-2 D flip-flop sa asinhronim resetom

Sl. 5-1 D flip-flop sa asinhronim resetom.

D flip-flop je memorijsko kolo kapaciteta jednog bita i kao takvo predstavlja osnovni
gradivni element sloenijih sekvencijalnih kola. Varijanta D flip-flopa sa asinhronim
resetom prikazana je na Sl. 5-1. Vrednost koja je upisana (memorisana) u flip-flopu
dostupna je na izlazu q. Pod dejstvom rastue ivice taktnog signala, clk, u flip-flop se
upisuje trenutna vrednost ulaznog signala d. Ulaz za asinhrono resetovanje, rst, slui za
forsirano (nezavisno od clk) postavljanje flip-flopa u stanje q=0.
U datom VHDL kdu, funkcija D flip-flopa je opisana pomou procesa koji sadri samo
jednu sekvencijalnu naredbu, if. Ako je rst=1, izlaz flip-flopa se postavlja na q=0 (linije
14-15) bez obzira na taktni signal clk (osobina asinhronog resetovanja). U suprotnom, za
rst=0, a pod uslovom da se signal clk promenio sa 0 na 1, na izlaz flip-flopa se prenosi
vrednost ulaza d, tj. q=d (linije 16-17). Signal q e zadrati dodeljenu vrednost i nakon
deaktiviranja procesa (osobina memorisanja). U liniji 16, za detekciju promene signala clk
koristi se atribut event. Iskaz clkevent vraa true uvek kada se vrednost signala clk promeni
(bilo sa 0 na 1 ili sa 1 na 0). Da bi se izdvojila promena koja odgovara rastuoj ivici,
uslov clkevent je dopunjen uslovom clk=1. Proces e se izvri jedanput uvek kad se
promeni bilo koji signal iz liste senzitivnosti, clk ili rst. Uoimo da lista senzitivnosti ne
sadri signal d. To znai da eventualne promene signala d, same po sebi, ne utiu na rad
flip-flopa, ve je vrednost ovog signala od znaaja samo u trenucima promene takta sa 0
na 1 (to upravo odgovara nainu rada fizikog D flip-flopa).

98
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Sekvencijalne naredbe

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY dff IS
PORT (d,clk,rst : IN STD_LOGIC;
q : OUT STD_LOGIC);
END dff;
-----------------------------------------------------------------ARCHITECTURE arch_proc OF dff IS
BEGIN
PROCESS(clk,rst)
BEGIN
IF(rst='1') THEN
q <= '0';
ELSIF(clk'EVENT AND clk='1') THEN
q <= d;
END IF;
END PROCESS;
END arch_proc;

5.1.2. Proces sa wait naredbom


Kao to je ve reeno, proces koji ima listu senzitivnosti pokree se promenom bilo kog
signala iz liste senzitivnosti, a suspenduje nakon izvrenja svoje poslednje sekvencijalne
naredbe. Drugim reima, pri svakom pokretanju, izvri se celokupan sekvencijalni kd
procesa, od poetka do kraja. Naredba wait predstavlja alternativan nain za
suspenziju/aktiviranje procesa. Naredba wait (jedna ili vie njih) se umee u sam
sekvencijalni kd procesa. ta vie, ako se u procesu koristi wait naredba, lista senzitivnosti
mora biti izostavljena. Nakon inicijalizacije sistema, proces sa wait naredbom, budui da
nema listu senzitivnosti, automatski se startuje i izvrava sve do nailaska na prvu wait
naredbu koja ga suspenduje. Uslov pod kojim proces nastavlja dalje zavisi od oblika wait
naredbe. Postoje tri osnovna oblika wait naredbe:
WAIT UNTIL uslov;
WAIT ON signal1 [, signal2, ];
WAIT FOR vreme;

Kod varijante wait until, proces ostaje suspendovan sve dok uslov sadran u naredbi ne
postane taan. Kod varijante wait on, uslov za nastavak izvrenja procesa je promena
vrednosti bilo kog signala iz liste signala koja sledi posle slubene rei on. Naredba wait
for suspenduje proces na zadato vreme. Na primer, wait for 5 ns, suspenduje proces (tj.
privremeno zaustavlja izvrenje procesa) na 5 ns.
Naredba wait omoguava kreiranje procesa sloenog sekvencijalnog i vremenskog
ponaanja i uglavnom se koristi za pisanje testbena (npr. za generisanje pobudnih signala
sloenog talasnog oblika). U kdu za sintezu dozvoljeno je koristiti samo nekoliko oblika
wait on i wait until naredbi, s ogranienjem da u procesu moe postojati samo jedna wait
naredba i to na samom poetku ili na samom kraju procesa. Naredba wait for se ne moe
koristiti u kdu za sintezu. U nastavku su data tri primera procesa sa wait naredbom koji se
mogu sintetizovati.

PROCESS

99

Pr. 5-3 ILI kolo


Procesa koji sledi opisuje troulazno ILI kolo. U odnosu na proces iz Pr. 5-1, lista
senzitivnosti zamenjena je wait on naredbom.
SIGNAL a, b, c : STD_LOGIC;
. . .
PROCESS
BEGIN
WAIT ON a, b, c;
y <= a OR b OR c;
END PROCESS;

Pr. 5-4 8-bitni registar sa sinhronim resetom


1
2
3
4
5
6
7
8
9
10
11
12
13
14

-----------------------------------------------------------------SIGNAL clk, rst: STD_LOGIC;


SIGNAL out : STD_LOGIC_VECTOR(7 DOWNTO 0);
. . .
PROCESS
BEGIN
WAIT UNTIL(clkEVENT AND clk=1);
IF(rst = 1) THEN
out <= 00000000;
ELSIF (clkEVENT AND clk=1) THEN
out <= input;
END IF;
END PROCESS;
-----------------------------------------------------------------

Nailaskom na naredbu wait until, proces se suspenduje i eka na ispunjenje uslova koji u
ovom sluaju odgovara rastuoj ivici signala clk (linija 7).
Pr. 5-5 8-bitni registar sa asinhronim resetom
1
2
3
4
5
6
7
8
9
10
11
12
13
14

-----------------------------------------------------------------SIGNAL clk, rst: STD_LOGIC;


SIGNAL out : STD_LOGIC_VECTOR(7 DOWNTO 0);
. . .
PROCESS
BEGIN
WAIT ON clk, rst;
IF(rst = 1) THEN
out <= 00000000;
ELSIF (clkEVENT AND clk=1) THEN
out <= input;
END IF;
END PROCESS;
-----------------------------------------------------------------

Nakon to je suspendovan naredbom wait on, proces e nastaviti rad u momentu nastanaka
dogaaja na bilo kom signalu koji je naveden u ovoj naredbi. U datom primeru, svaka
promena signala clk ili rst aktivira proces, koji se nakon izvrenja if naredbe vraa na
poetak i ponovo suspenduje naredbom wait on.

100

Sekvencijalne naredbe

Jedina sutinska razlika izmeu dva prethodna primera je u tome to kod prvog promena
reset signala ne aktivira, a kod drugog aktivira proces. Kod registra sa sinhronim resetom
(Pr. 5-4), proces reaguje jedino na taktni signal, tanije na rastuu ivicu takta. To znai da
eventualno aktiviranje signala rst nema uticaja na rad registra sve do pojave rastue ivice
takta. Kod registra sa asinhronim resetom (Pr. 5-5), proces se aktivira ne samo taktnim ve
i reset signalom. Na taj nain, dejstvo signala rst je trenutno i nezavisno od takta.

5.1.3. Signali u procesu


Signali se deklariu u deklarativnom delu arhitekture, a vidljivi su, tj. mogu se koristiti,
kako u konkurentnim sekcijama arhitekture, tako i unutar procesa koji su obuhvaeni
arhitekturom. Naredba kojom se unutar procesa signalu dodeljuje vrednost identinog je
oblika kao jednostavna konkurentna naredba dodele:
sig <= izraz;

Meutim, iako identinog oblika, ponaanje naredbe dodele zavisi od toga da li se ona
nalazi u konkurentnom ili sekvencijalnom kdu. U konkurentnom kdu, izvrenje naredbe
dodele se inicira promenom bilo kog signala iz izraza sa desne strane znaka <=. U
procesu, naredba dodele se izvrava onda kada na nju doe red, ali se pri tom dodela
izraunate vrednosti signalu odlae do trenutka zavretka procesa. Kae se da za signale u
procesu vai odloena dodela. To znai da u toku jednog izvrenja procesa, signal zadrava
vrednost koju je imao u trenutku aktiviranja procesa (a koja potie iz prethodnog izvrenja
procesa), a novu vrednost dobija tek nakon deaktiviranja procesa. Ako se unutar procesa
istom signalu vie puta dodeli vrednost, samo e poslednja dodela imati vidljiv efekat. Ili,
drugim reima, budui da se signali ne auriraju sve do kraja procesa, oni u procesu nikada
ne dobijaju meuvrednosti. Na primer, sledea dva procesa su funkcionalno identini, a
njihovom sintezom bio bi kreiran hardver koji sadri samo jedno xor kolo:
SIGNAL a, b, c, d : STD_LOGIC;
. . .
PROCESS(a,b,c,d)
BEGIN
y <= a AND b;
y <= a OR c;
y <= c XOR d;
END PROCESS;

PROCESS(a,b,c,d)
BEGIN
y <= c XOR d
END PROCESS;

Tri narede dodele iz prethodnog primera sintetizovale bi se na drugaiji nain da su


smetene u konkurentnom kdu (Sl. 5-2(a)). Iako u konkurentnom kdu viestruke dodele
vrednosti istom signalu nisu zabranjene, sintetizovano kolo ipak ne bi bilo korektno, jer bi
u njemu postoji kratak spoj (Sl. 5-2(b)). Kratkospajanje izlaza digitalnih kola moe da
izazove njihovo fiziko oteenje u situacijama kad razliita kola postavljaju razliite
izlazne vrednosti. U simulaciji, ovakva situacija se manifestuje pojavom nepoznate
vrednosti X na signalu y.
SIGNAL a,b,c,d : STD_LOGIC;
. . .
-- sledece naredbe nisu u procesu
y <= a AND b;
y <= a OR c;
y <= c XOR d;
(a)
(b)
Sl. 5-2: Viestruka dodela u konkurentnom kdu: (a) primer kda; (b) sintetizovano kolo.

PROCESS

101

5.1.4. Varijable
Za razliku od signala, koji mogu biti deklarisani u paketu, entitetu ili arhitekturi i korieni
kako u konkurentnom tako i u sekvencijalnom kdu, varijable mogu biti deklarisane i
koriene iskljuivo u sekvencijalnim sekcijama VHDL kda. Varijabla je uvek lokalna
promenljiva i njena vrednost se ne moe direktno preneti iz procesa u kome je deklarisana u
neki drugi deo kda. Ako je to ipak neophodno, vrednost varijable mora biti dodeljena
signalu. S druge strane, nasuprot signalima za koje u procesu vai odloena dodela,
auriranje varijable je trenutno (ba kao kod programskih jezika). Nakon izvrene naredbe
dodele, varijabla trenutno dobija novu vrednost, koja se moe koristiti ve u sledeoj
naredbi sekvencijalnog kda. Sintaksa naredbe dodele za varijable je sledeeg oblika:
var := izraz;

Razmotrimo sledei proces s varijablom:


1
2
3
4
5
6
7
8
9
10

SIGNAL a, b, y : STD_LOGIC;
...
PROCESS(a,b)
VARIABLE v : STD_LOGIC;
BEGIN
v := 0;
v := v XOR a;
v := v XOR b;
y <= v;
PROCESS;

Uoimo sledee pojedinosti. Varijable se uvek deklariu u deklarativnom delu procesa


(linija 4). Za varijable se koristiti isti tipovi podataka kao i za signale (std_logic, integer,
bit, ...). U naredbi dodele se koristi operator :=, a ne <=, da bi se naznailo da se
izraunata vrednost izraza dodeljuje varijabli, a ne signalu. Varijabla se aurira neposredno
nakon izvrene naredbe dodele. U datom primeru, vrednost varijable v nakon prve naredbe
je 0 (linija 6), nakon druge a (linija 7) i nakon tree a xor b (linija 8). U poslednjoj
sekvencijalnoj naredbi (linija 9), konana vrednost varijable se dodeljuje signalu y i tako
iznosi iz procesa.
Sekvencijalni kd koji sadri varijable, iako laki za razumevanje i praenje, zahteviniji je
za sintezu u odnosu na sekvencijalni kd koji barata iskljuivo signalima. Na primer, u
prethodnom procesu, uloga varijabile v je da tri jednostavna izraza povee u jedan
sloeniji. U domenu hardvera, takvu ulogu igraju elektrine veze koje npr. povezuju
logika kola u sloeniju mreu. Meutim, fiziki ne postoji elektrina veza koja se moe
koristiti za vie od jednog povezivanja. Iz tog razloga, prilikom sinteze procesa koji sadri
varijable, neophodno je transformisati kda procesa na nain da se varijable koje se vie
puta koriste s leve strane znaka dodele (kao to je to sluaj sa varijablom v) zamene sa vie
novih varijabli:
1
2
3
4
5
6
7
8

PROCESS(a,b)
VARIABLE v0, v1, v2 : STD_LOGIC;
BEGIN
v0 := 0;
v1 := v0 XOR a;
v2 := v1 XOR b;
y <= v2;
END PROCESS;

102

Sekvencijalne naredbe

Uoimo da se nakon transformacije (koju inae automatski sprovodi softver za sintezu)


funkcija kda nije promenila. Meutim, s obzirom na to da to se sada svaka novouvedena
varijabla, v0, v1 i v2, koristi samo jedanput kao izlazna vrednost, svaka od njih se moe
interpretirati kao jedna elektrina veze u sintetizovanom hardveru (Sl. 5-3(a)).
Upravo zbog nepostojanja uvek jasne hardverske interpretacije, varijable treba koristiti u
kdu za sintezu samo u specifinim sluajevima kad eljenu funkciju nije mogue opisati
pomou signala. Poreenja radi, ispod je dat kd prethodnog procesa u kome je varijabla v
zamenjena signalom s.
1
2
3
4
5
6
7
8
9

SIGNAL a, b, s : STD_LOGIC;
...
PROCESS(a,b,s)
BEGIN
s <= 0;
s <= s XOR a;
s <= s XOR b;
y <= s;
END PROCESS;

Uoimo sledee razlike. Prvo, signal se ne moe deklarisati u procesu, ve samo u


arhitekturu. Drugo, kad se opisuju kombinaciona kola, signali koji se koriste u procesu kao
ulazi (tj. kao operandi u naredbama dodele) moraju biti navedeni u listi senzitivnosti
procesa (to se u razmatranom primeru odnosi i na signal s). Tree i najbitnije, dva procesa
(sa varijablom i sa signalom) nemaju istu funkciju. Naime, imajui u vidu osobinu
odloene dodele, koja vai za signale u procesu, prethodni kd se svodi na:
1
2
3
4
5

PROCESS(a,b,s)
BEGIN
s <= s XOR b;
y <= s;
END PROCESS;

Hardverska interpretacija ovog procesa je xor kolo s povratnom vezom (Sl. 5-3(b)).

(a)

(b)

Sl. 5-3 Ilustracija razlike izmeu varijabli i signala: (a) konceptualna implementacija procesa
sa varijablama; (b) konceptualna implementacija identinog procesa sa signalima.

5.2. IF
Osim naredbe dodele i naredbe wait, koja igra specifinu ulogu u kontroli izvrenja
procesa, skup sekvencijalnih naredbi ine jo tri naredbe, if, case i loop, koje se koriste za
kontrolu toka izvrenja sekvencijalnog kda. Sintaksa naredbe if je sledeeg oblika:
IF uslov THEN
sekvencijane_naredbe;
ELSIF uslov THEN
sekvencijane_naredbe;
. . .
ELSE
sekvencijane_naredbe;
END IF;

IF

103

Naredba if poinje slubenom reju if, zavrava se reima end if i sadri dve opcione
klauzule, elsif i else. Klauzula elsif se moe ponoviti proizvoljan broj puta, a else samo
jedanput. Grane if i elsif sadre uslove koji predstavljaju logike izraze (tj. izraze iji
rezultat moe biti samo tano ili netano). Naredba if se izvrava tako to se redom ispituju
uslovi sve dok se ne naie na granu sa tanim uslovom, a onda se redom izvravaju sve
sekvencijalne naredbe obuhvaene tom granom. Ako ni jedan uslov nije taan, izvrie se
else grana (ako postoji); ako ni jedan uslov nije taan i else grana ne postoji, if naredba
nee imati nikakvog efekta. U svakoj grani if naredbe moe se nai proizvoljan broj
sekvencijalnih naredbi, ukljuujui i druge if naredbe.
Pr. 5-6 IF-ELSIF-ELSE
If naredba iz ovog primera poredi signale/varijable x i y i zavisno od ishoda poreenja
varijablama v i w dodeljuje tri razliite vrednosti.
IF(x<y) THEN
v := 11111111;
w := 1;
ELSIF(x=y) THEN
v:=11110000;
w := 0;
ELSE
v:=(OTHERS => 0);
w := 1;
END IF;

Pr. 5-7 Multiplekser, binarni dekoder, binarni koder i prioritetni koder realizacija
pomou naredbe if.
U primerima iz poglavlja 4.2, za opis multipleksera, binarnog dekodera, binarnog kodera i
prioritetnog kodera, koriena je naredba when. U ovom primeru, za opis navedenih
digitalnih kola bie korien proces i sekvencijalna if naredba. Poto se radi o
kombinacionim kolima, svi ulazni signali kola moraju biti sadrani u listi senzitivnosti
procesa. Napomenimo da se u svim opisima koji slede koriste signali tipa
std_logic/std_logic_vector.
Multiplekser. Sledi arhitektura multipleksera 4-u-1. Promena bilo kog ulaznog signala,
ukljuujui i dvobitni selekcioni ulaz, s, aktivira proces (linija 4). U procesu, naredba if na
osnovu vrednosti selekcionog ulaza odreuje jedan ulazni signal, a, b, c ili d, ija e
vrednost biti prosleena na izlaz y.
1
2
3
4
5
6
7
8
9
10
11
12
13

----------------------------------------ARCHITECTURE if_arch OF mux IS


BEGIN
PROCESS(a,b,c,d,s)
BEGIN
IF(s=00) THEN
y <= a;
ELSIF(s=01) THEN
y <= b;
ELSIF(s=10) THEN
y <= c;
ELSE
y <= d;

104
14
15
16
17

Sekvencijalne naredbe

END IF;
END PROCESS;
END if_arch;
-----------------------------------------

Binarni dekoder. Sledi arhitektura binarnog dekodera 2-u-4 sa ulaznom za dozvolu rada (v.
Pr. 4-7). U if naredbi najpre se ispituje vrednost ulaza za dozvolu rada, e. Ako je dekoderu
zabranjen rad (e=0), na izlaz y se postavljaju sve nule (linije 6-7). U suprotnom, ako je
dekoderu omoguen rad (e=1), a u zavisnosti od vrednosti dvobitnog ulaza d, na
odgovarajui izlaz yi se postavlja 1 (linije 8-16).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

----------------------------------------ARCHITECTURE if_arch OF dek2u4 IS


BEGIN
PROCESS(d, e)
BEGIN
IF(e = 0) THEN
y <= "0000";
ELSIF(d = "00") THEN
y <= "0001";
ELSIF(d = "01") THEN
y <= "0010";
ELSIF(d = "10") THEN
y <= "0100";
ELSE
y <= "1000";
END IF;
END PROCESS:
END if_arch;
-----------------------------------------

y0

d0
d1

Dekoder
2-u-4

y1
y2
y3

Binarni koder. U if naredbi, iz arhitekture binarnog kodera 4-u-2 koja sledi, vrednost ulaza
x se redom poredi sa dozvoljenim binarnim kombinacijama. Ako je (if) x jednako 0001,
na izlaz y se postavlja 00, inae ako je (elsif) x jednako 0010, y dobija vrednost 01, za
x = 0100 (jo jedno elsif), y je 10, inae (else) y dobija vrednost 11. Uoimo da je else
grana obavezna zato to je njen zadatak da obuhvati ne samo poslednju dozvoljenu
kombinaciju, 1000, ve i sve preostale binarne i nebinarne etvorobitne vrednosti tipa
std_logic_vector.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

----------------------------------------ARCHITECTURE if_arch OF encoder IS


BEGIN
PROCESS(x)
BEGIN
IF(x = "0001") THEN
y <= "00";
ELSIF(x = "0010") THEN
y <= "01";
ELSIF(x = "0100") THEN
y <= "01";
ELSE
y <= "11";
END IF;
END PROCESS:
END if_arch;
-----------------------------------------

IF

105

Prioritetni koder. Proces iz arhitekture prioritetnog kodera 4-u-2 sadri dve if naredbe.
Prva (linije 6-14) na izlaz y postavlja binarni kd aktivnog ulaza najvieg prioriteta, dok
druga (linije 15-19) aktivira izlaz z, ako je aktivan barem jedan ulaz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

----------------------------------------ARCHITECTURE if_arch OF pencoder IS


BEGIN
PROCESS(x)
BEGIN
IF(x(3) = 1) THEN
y <= "11";
ELSIF(x(2) = 1) THEN
y <= "10";
ELSIF(x(1) = 1) THEN
y <= "01";
ELSE
y <= "00";
END IF;
IF x = "0000" THEN
z <= 0;
ELSE
z <= 1;
END IF;
END PROCESS:
END if_arch;
-----------------------------------------

Naredba if donekle je slina konkurentnoj naredbi when. Primera radi, sledee dva
segmenta kda su funkcionalno ekvivalentna:
PROCESS()
BEGIN
IF uslov_1 THEN
sig <= izraz_1;
ELSIF uslov_2 THEN
sig <= izraz_2;
ELSIF uslov_3 THEN
sig <= izraz_3;
. . .
ELSE
sig <= izraz_n;
END IF;
END PROCESS;

sig <= izraz_1 WHEN uslov_1 ELSE


izraz_2 WHEN uslov_2 ELSE
izraz_3 WHEN uslov_3 ELSE
. . .
izraz_n;

Meutim, ekvivalencija se moe uspostaviti samo onda kada svaka grana if naredbe sadri
tano jednu sekvencijalnu naredbu kojom se vri dodela uvek istom signalu. Naredba if je
optija od naredbe when, budui da grane if naredbe mogu sadrati ne samo jednu, ve
proizvoljan broj sekvencijalnih naredbi. Pravilnim i disciplinovanim korienjem naredbe
if kreira se deskriptivniji (itljiviji) i esto efikasniji (u smislu sinteze) kd. Na primer, za
razliku od naredbe when, ugnjedavanje if naredbi je dozvoljeno.
Pr. 5-8 If vs. when
Pretpostavimo da elimo da odredimo maksimalnu vrednost tri binarna broja, a, b i c. Jedan
od naina kako se to moe postii jeste korienjem ugnjedenih if naredbi:

106
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Sekvencijalne naredbe

SIGNAL a,b,c : UNSIGNED;


. . .
PROCESS(a,b,c)
BEGIN
IF (a>b) THEN
IF (a>c) THEN
max <= a; -- a>b i a>c
ELSE
max <= c; -- a>b i c>=a
END IF;
ELSE
IF (b>c) THEN
max <= b; -- b>=a i b>c
ELSE
max <= c; -- b>=a i c>=b
END IF;
END IF;
END PROCESS;

Identina funkcija se moe opisati pomou tri when naredbe:


SIGNAL
. . .
ac_max
bc_max
max <=

ac_max, bc_max : UNSIGNED;


<= a WHEN (a > c) ELSE c;
<= b WHEN (b > c) ELSE c;
ac_max WHEN (a > b) ELSE bc_max;

Takoe, istu funkciju moemo opisati i pomou jedne when naredbe, ali poto ova naredba
ne dozvoljava ugnjedavanje, uslovi u when granama postaju komplikovaniji, a naredba
tea za razumevanje:
max <= a WHEN ((a > b) AND (a > c)) ELSE
c WHEN ( > b) ELSE
b WHEN (b > c) ELSE
c;

Konceptualna implementacija if naredbe. Kao to je ve istaknuto, if naredba koja


postavlja samo jedan izlazni signal ekvivalentna je po funkciji konkurentnoj when naredbi.
To znai da konceptualni dijagram if naredbe, za ovaj jednostavan sluaj, moemo izvesti
na isti nain kao za when naredbu (v. 4.2). Na primer, konceptualni dijagram sledee if
naredbe identian je konceptualnom dijagramu when naredbe sa Sl. 4-8(b).
IF uslov_1 THEN
sig <= izraz_1;
ELSIF uslov_2 THEN
sig <= izraz_2;
ELSIF uslov_3 THEN
sig <= izraz_3;
ELSE
sig <= izraz_4;
END IF;

Meutim, naredba if je optija od konkurentne when naredbe, zato to dozvoljava da se u


svakoj grani nae ne samo jedna ve proizvoljan broj sekvencijalnih naredbi. Na primer,
razmotrimo sledeu if naredbu:

IF

IF uslov_1
sig_a <=
sig_b <=
ELSE
sig_a <=
sig_b <=
END IF;

107

THEN
izraz_a_1;
izraz_b_1;
izraz_a_2;
izraz_b_2;

Poto ova naredba postavlja dva izlazna signala, sig_a i sig_b, u odgovarajuem
konceptualnom dijagramu postojae dve zasebne prioritetne multiplekserske mree iste
strukture sa zajednikim uslovom za selekciju (Sl. 5-4(a)).

(a)

(b)

Sl. 5-4 Konceptualna implementacija if naredbe: (a) if naredba sa dva izlazna signala; (b)
ugnjedavanje if naredbi.

Takoe, sekvencijalna if naredba dozvoljava ugnjedavanje, tj. prua mogunost da se u


bilo kojoj grani if naredbe nae druga if naredba, kao u sledeem kdu:
IF uslov_1 THEN
IF uslov_2 THEN
sig <= izraz_a_1;
ELSE
sig <= izraz_a_2;
END IF;
ELSE
IF uslov_3 THEN
sig <= izraz_b_1;
ELSE
sig <= izraz_b_2;
END IF;
END IF;

Konceptualni dijagram prethodne if naredbe prikazan je na Sl. 5-4 (b). Izlazni multiplekser
odgovara spoljanjoj, a dva multipleksera iz sledeeg nivoa unutranjim if naredbama.

108

Sekvencijalne naredbe

5.3. CASE
CASE je jo jedna naredba namenjena iskljuivo za pisanje sekvencijalnog kda. Njena
sintaksa je sledeeg oblika:
CASE selekcioni_izraz IS
WHEN vrednost => sekvencijalne_naredbe;
WHEN vrednost => sekvencijalne_naredbe;
. . .
WHEN vrednost => sekvencijalne_naredbe;
WHEN OTHERS => sekvencijalne_naredbe;
END CASE;

Naredba case je slina konkurentnoj naredbi select. U zavisnosti od vrednosti selekcionog


izraza, za izvrenje se bira jedna od obuhvaenih when grana. Kao i za konkurentnu
naredbu select, sve mogue vrednosti selekcionog izraza moraju biti pokrivene when
granama. Takoe, dozvoljeno je korienje grane when others, koja pokriva sve vrednosti
selekcionog izraza koje nisu obuhvaene prethodnim granama. Za razliku od naredbe
select, naredba case dozvoljava da svaka grana, u delu sekvencijalne_naredbe, sadri ne
samo jednu, ve proizvoljan broj naredbi (slino naredbi if). U granama gde ne postoji
potreba za bilo kakvom akcijom, dozvoljeno je korienje slubene rei null:
WHEN vrednost => NULL;

Pr. 5-9 Primer case naredbe sa when others granom


CASE ctrl IS
WHEN "00" => x<=a; y<=b;
WHEN "01" => x<=b; y<=c;
WHEN OTHERS => x<="0000"; y<="ZZZZ";
END CASE;

Dati kd se lako moe protumaiti. Za ctrl=00, signal x dobija vrednost signala a, a signal
y vrednost signala b, dok za ctrl=01 vai obrnuto, x dobija vrednost b, a y vrednost a.
Ako vai ctrl=10 ili 11, x se postavlja na sve nule, a y u stanje visoke impedanse.
Vrednost, ili vrednosti koje pokriva jedna when grana mogu se zadati na sledea tri naina:
WHEN vrednost
WHEN vrednost_1 to vrednost_2
WHEN vrednost_1 | vrednost_2 |

Testiranje jedinstvene vrednosti


Testiranje opsega vrednosti (vai samo za
nabrojive tipove podataka)
Testiranje skupa vrednosti (vrednost_1 ili
vrednost_2 ili ... )

Pr. 5-10 Multiplekser, binarni dekoder, binarni koder i prioritetni koder realizacija
pomou case naredbe
Radi ilustracije primene naredbe case, u ovom primeru predstavljeni su VHDL opisi etiri
standardna kombinaciona kola: multiplekser, dekoder, koder i prioritetni koder. U svim
ovim opisima, naredba case sadri when others granu. Iz istih razloga kao za konkurentnu
naredbu select, when others grana je neophodna uvek kada se koriste signali tipa std_logic
da bi se obuhvatile i sve nebinarne vrednosti selekcionog izraza. Na primer, u opisu
multipleksera 4-u-1, grana when others ne obuhvata samo poslednju binarnu kombinaciju

CASE

109

selekcionog signala, 11, ve i sve mogue nebinarne kombinacije, kao to su to npr. LH,
-X itd.
Uoimo da se u case naredbi iz opisa binarnog kodera, za selekciju koristi signal ed koji
objedinjuje ulazne signale e i d, na slian nain kao u Pr. 4-13 gde je za opis istog kola
koriena naredba select. Proces iz arhitekture binarnog kodera iz ovog primera sadri dve
konkurentne naredbe, naredbu dodele (linija 5) i proces (linije 6-21). Takoe, treba
napomenuti da naredba case, slino naredbi select, nije pogodna za opisivanje prioritetnih
struktura, kao to je to sluaj sa prioritetnim koderom. Da je na primer umesto prioritetnog
kodera 4-u-2 dat opis prioritetnog kodera 16-u-4, naredba case bi sadrala 16 umesto 4
when grane, sa ukupno 214 = 16.384 16-bitnih vrednosti ulaznog signala u poslednjoj when
grani!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

-- Multiplekser 4-u-1 ------------------ARCHITECTURE case_arch OF mux IS


BEGIN
PROCESS(a,b,c,d,sel)
BEGIN
CASE sel IS
WHEN 00 =>
y <= a;
WHEN 01 =>
y <= b;
WHEN 10 =>
y <= c;
WHEN OTHERS
y <= d;
END CASE;
END PROCESS;
END case_arch;
------------------------------------------ Binarni dekoder 2-u-4 ---------------ARCHITECTURE case_arch OF dek2u4 IS
SIGNAL ed : STD_LOGIC;
BEGIN
ed <= e & d;
PROCESS(ed)
BEGIN
CASE ed IS
WHEN "100" =>
y <= "0001";
WHEN "101" =>
y <= "0010";
WHEN "110" =>
y <= "0100";
WHEN "110" =>
y <= "1000";
WHEN OTHERS
y <= "0000";
END CASE;
END PROCESS;
END case_arch;
-----------------------------------------

y0

d0
d1

Dekoder
2-u-4

y1
y2
y3

110

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Sekvencijalne naredbe

-- Binarni koder 4-u-2 -----------------ARCHITECTURE case_arch OF encoder IS


BEGIN
PROCESS(x)
BEGIN
CASE x IS
WHEN "0001" =>
y <= "00";
WHEN "0010" =>
y <= "01";
WHEN "0100" =>
y <= "10";
WHEN OTHERS
y <= "11";
END CASE;
END PROCESS;
END case_arch;
------------------------------------------ Priorietetni koder 4-u-2 ------------ARCHITECTURE case_arch OF pencoder IS
BEGIN
PROCESS(x)
BEGIN
CASE x IS
WHEN "0001" =>
y <= "00";
WHEN "0010"|"0011" =>
y <= "01";
WHEN "0100"|"0101"|"0110"|"0111" =>
y <= "10";
WHEN OTHERS =>
y <= "11";
END CASE;
END PROCESS:
END case_arch;
-----------------------------------------

Konceptualna implementacija naredbe case. U naredbi case, vrednost selekcionog uslova


se koristi kao klju za izbor jednog od vie blokova sekvencijalnih naredbi koji e biti
izvren. Naredba case kod koje se u svakoj grani postavlja samo jedan, i to uvek isti izlazni
signal moe se vizuelno predstaviti u obliku apstraktnog multipleksera, na identian nain
kao i konkurentna naredbe select. Razmotrimo sledeu case naredbu koja je ekvivalentna
select naredbi iz poglavlja 4.3:
CASE case_uslov IS
WHEN v1 => sig <= izraz_1;
WHEN v2 => sig <= izraz_2;
WHEN OTHERS sig <= izraz_3;
END CASE;

Pretpostaviemo da case_uslov moe imati sledeih pet vrednosti: v1, v2, v3, v4 i v5. To
znai da when others grana pokriva vrednosti v3, v4 i v5. Konceptualni dijagram ove case

CASE

111

naredbe je identian dijagramu sa Sl. 4-13(b), koji je razvijen za ekvivalentnu select


naredbu.
Prethodna ema se lako moe uoptiti na naredbu case koja postavlja vie od jednog
izlaznog signala. Dovoljno je da se u konceptualnom dijagramu za svaki takav signal
predvidi jedan poseban apstraktni multiplekser, a da se selekcioni izraz case naredbe
razvede do selekcionih ulaza svih multipleksera. Na primer, u sledeoj case naredbi
postavljaju se dva izlazna signala:
CASE case_uslov IS
WHEN v1 =>
sig_a <= izraz_a_1;
sig_b <= izraz_b_1;
WHEN v2 =>
sig_a <= izraz_a_2;
sig_b <= izraz_b_2;
WHEN OTHERS
sig_a <= izraz_a_3;
sig_b <= izraz_b_3;
END CASE;

Odgovarajui konceptualni dijagram prikazan je na Sl. 5-5. (I dalje vai pretpostavka da


case_uslov moe imati pet razliitih vrednosti, v1, ..., v5.) Kao i naredba if, i naredba case
je veoma opta. U svakoj when grani naredbe case moe se nai bilo koja validna sekcija
sekvencijalnog kda proizvoljne sloenosti. U takvim sluajevima, crtanje konceptualnog
dijagrama treba poeti od apstraktnog multipleksera za when grane, a zatim iterativno
razraivati sekvencijalni kd za svaku granu pojedinano.

Sl. 5-5 Konceptualni dijagram CASE naredbe sa dva izlazna signala.

5.4. LOOP
Naredba loop se koristi za kreiranje petlji u sekvencijalnom kdu. Loop naredba iz VHDLa je monija (izraajnija) od odgovarajuih jezikih konstrukcija iz mnogim programskih
jezika. U VHDL-u postoje tri oblika loop naredbe: for loop, while loop i beskonana petlja
(ili samo loop), kao i dva mehanizma za prekid izvrenja petlje: exit i next. Naredba loop se
uglavnom koristi za apstraktno modeliranje, dok je samo nekoliko njenih restriktivnih
formi mogue sintetizovati.
FOR LOOP - petlja se ponavlja zadati broj puta. Sintaksa ovog oblika loop naredbe je:
[labela:] FOR indeks IN opseg LOOP
sekvencijalne_naredbe;
END LOOP [labela];

112

Sekvencijalne naredbe

Opseg definie poetnu i krajnju vrednost indeksa. Indeks se koristi za odbrojavanje


iteracija petlje. Posle svake iteracije, indeks dobija sledeu vrednost iz datog opsega, sve
dok ne dostigne krajnju vrednost opsega, to predstavlja i uslov za izlazak iz petlje. Indeks
petlje se ne deklarie izvan petlje, ve, direktno, u zaglavlju petlje. Pri tom indeks
automatski preuzima tip opsega petlje. U telu petlje nije dozvoljeno dodeljivati vrednosti
indeksu. U kdu namenjenom za sintezu, obe granice opsega indeksa for loop petlje moraju
biti statike (konstantne). Na primer, deklaracija oblika for i in 0 to n, gde je n varijabla,
ne moe se sintetizovati.
Pr. 5-11 FOR/LOOP
faktorijel := 1;
FOR broj IN 2 TO 10 LOOP
faktorijel := faktorijel * broj;
END LOOP;

U ovom primeru, telo petlje se izvrava 9 puta (za broj = 2, 3, ..., 10). Krajnji rezultat je
faktorijel = 10!.
WHILE LOOP - petlja se ponavlja sve dok se ne ispuni zadati uslov. Sintaksa ovog oblika
loop naredbe je:
[labela:] WHILE uslov LOOP
sekvencijalne naredbe;
END LOOP [labela];

Uslov je logiki iskaz koji moe biti taan ili netaan. Petlja se ponavlja sve dok je uslov
taan. Kad uslov postane netaan, petlja se zavrava. Pretpostavka je da se uslov na neki
nain menja u telu petlje.
Pr. 5-12 WHILE LOOP
i:= 0; sum:= 10;
WHILE (i < 20) LOOP
sum:= sum * 2;
i:= i + 3;
END LOOP;

Telo petlje se ponavlja sve dok je vrednost varijable i manja od 20. Budui da pre ulaska u
petlju varijabla i ima vrednost 0, a u svakoj iteraciji se poveava za 3, potrebno je 7
iteracija da bi i postalo jednako ili vee od 20.
LOOP - beskonana petlja se realizuje kao naredba loop bez definisanog indeksa i uslova:
[labela:] LOOP
sekvencijalne naredbe;
END LOOP [labela];

Kad se jednom ue u beskonanu petlju, iz nje se vie ne moe izai, osim ukoliko u telu
petlje ne postoji naredba exit koja definie uslov izlaska, kao npr. u sledeem primeru:
sum:=1;
LOOP
sum:=sum*3;
EXIT WHEN sum>100;
END LOOP;

LOOP

113

ili
LOOP
WAIT on a,b;
EXIT WHEN a=b;
END LOOP;

Uoimo da prethodna loop naredba ima isti efekat kao naredba:


WAIT UNTIL a=b;

Vie detalja o naredbama exit i next bie dato u glavi 8. Napomenimo da od svih oblika
loop naredbe, najveu primenu u sintezi nalazi oblik for loop. Varijante while loop i loop se
mogu koristiti za apstraktno modeliranje ili za pisanje testbena, ali ne i u kdu za sintezu.
Pr. 5-13 Jednostavan barel pomera
Barel pomera (od eng. barrel shifter) je kombinaciono kolo koje realizuje funkciju
pomeranja ili rotiranja ulazne informacije za zadati broj bitskih pozicija. Na Sl. 5-6 je
prikazana struktura jednog uproenog 8-bitnog barel pomeraa. Za shift=0, ulazni 8-bitni
podatak se prenosi bez ikakve promene na izlaz pomeraa (outp(0)=inp(0), ,
outp(7)=inp(7)), dok se za shift=1, na izlazu javlja ulazni podatak pomeren za jednu bitsku
poziciju ulevo (oupt(0)=0, oupt(1)=inp(0) , oupt(7)=inp(6)). Primetimo da se prilikom
pomeranja ulazni bit inp(7) gubi, a da se na izlaznu poziciju outp(0), koja bi inae ostala
upranjena, postavlja 0.
inp(7)

shift

inp(6)

inp(5)

inp(4)

inp(3)

inp(2)

inp(1)

inp(0)

mux

mux

mux

mux

mux

mux

mux

mux

outp(7)

outp(6)

outp(5)

outp(4)

outp(3)

outp(2)

outp(1)

outp(0)

Sl. 5-6 8-bitni barel pomera.

VHDL opis jednostavnog barel pomeraa, koji je dat u nastavku, ilustruje upotrebu for loop
naredbe. Za sluaj kada vai shift=1, najpre se na izlaz outp(0) postavi 0 (linija 18) , a
zatim se u for loop petlji na svaki sledei izlaz prenosi vrednost sa prethodnog ulaza (linije
19-21).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY barrel IS
PORT (inp : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
shift : IN STD_LOGIC;
outp : OUT STD_LOGIC_VECTOR(n-1 DOWNTO 0));
END barrel;
-----------------------------------------------------------------ARCHITECTURE loop_arch OF barrel IS
BEGIN
PROCESS(inp,shift)
BEGIN
IF(shift='0') THEN
outp <= inp;
ELSE

114
18
19
20
21
22
23
24

Sekvencijalne naredbe

outp(0)<='0';
FOR i IN 1 TO 7 LOOP
outp(i) <= inp(i-1);
END LOOP;
END IF;
END PROCESS;
END loop_arch;

Pr. 5-14 Generator bita parnosti

Sl. 5-7 Generator bita parnosti.

Na Sl. 5-7 je prikazan blok dijagram generatora bita parnosti (GBP). Ovo kolo poseduje
viebitni ulaz a i jednobitni izlaz y. Na izlazu je y=0 za paran broj 1-ca na ulazu,. U
suprotnom, za neparan broj 1-ca na ulazu, na izlazu je y=1. Drugim reima, izlazni bit
svojom vrednou dopunjava broj 1-ca sa ulaza do parnog broja. VHDL kd koji sledi
predstavlja opis 8-bitnog generatora bita parnosti.
Napomenimo da se parnost viebitnog podatka moe odrediti samo jednom konkurentnom
naredbom dodele u kojoj se operacija iskljuivo ILI (xor) primenjuje nad svim bitovima
ulaznog podatka:
y <= a(0) XOR a(1) XOR XOR a(7);

Isti efekat ima i kd iz procesa (linije 15-19) u kome se koristi varijabla, p, za uvanje
meurezultata i naredba for loop za sukcesivnu primenu operacije xor. Neposredno pre
ulaska u petlju, p dobija vrednost bita a(0) (linija 15). U prvoj iteraciji petlje vrednost
varijable p postaje p=a(0) xor a(1), u drugoj p=a(0) xor a(1) xor a(2), i tako redom sve do
poslednje, sedme iteracija kad p dobija konanu vrednost p=a(0) xor a(1) xor ... xor a(7).
Neposredno po izlasku iz petlje, u liniji 19, izraunata vrednost varijable p se prenosi na
izlazni port y.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY pargen IS
PORT (a : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
y : OUT STD_LOGIC);
END pargen;
-----------------------------------------------------------------ARCHITECTURE loop_arch OF pargen IS
BEGIN
PROCESS(a)
VARIABLE p : STD_LOGIC;
BEGIN
p := a(0);
FOR i IN 1 TO 7 LOOP
p := p XOR a(i);

LOOP
18
19
20
21

115

END LOOP;
y <= p;
END PROCESS;
END loop_arch;

Pr. 5-15 Sabira sa rednim prenosom


Sl. 5-8 prikazuje blok dijagram i unutranju strukturu 8-bitnog sabiraa sa rednim
prenosom. Kolo poseduje dva 8-bitna ulaza, a i b, za sabirke, jednobitni ulaz za ulazni
prenos, cin, 8-bitni izlaz za sumu, s, i jednobitni izlaz za izlazni prenos, cout. Sabira ini
osam redno povezanih potpunih sabiraa (FA). Kao to je poznato iz digitalne elektronike,
funkcija potpunog sabiraa na i-toj poziciji moe se izraziti jednainama:

si = ai bi ci
ci +1 = ai bi + ai ci + bi ci
a 7 b7

a 1 b1

a0 b 0

a
s
cin

c8

cout

(cout)

FA

s7

c7

...

c2

FA

s1

c1

FA

c0
(cin)

s0

Sl. 5-8 Sabira sa rednim prenosom.

Sabira sa rednim prenosom predstavlja primer iterativne strukture, koja se formira


kaskadnim povezivanjem identinih hardverskih blokova. Opis iterativnih struktura
predstavlja jednu od najeih primena naredbe for loop. Kao to moemo videti u VHDL
opisu sabiraa sa rednim prenosom koji sledi, u svakoj iteraciji for loop petlje kreiraju se
jednaine za jedan potpuni sabira. Unutar procesa uvedena je vektorska varijabla c koja se
koristi za sprezanje potpunih sabiraa. Duina vektora c je za jedan vea od duine
sabiraka (zbog izlaznog prenosa iz sabiraa, cout). Pre ulaska u petlju, bitu najmanje teine
vektor c dodeljuje se vrednost ulaznog prenosa sabiraa, c(0):=cin (linija 17). U petlji
(linije 18-21), za svaku bitsku poziciju se izraunavaju: bit sume, koji se dodeljuje
izlaznom signalu s(i) i bit prenosa c(i+1), koji se kao ulazni prenos koristi u sledeoj
iteraciji. Nakon izlaska iz petlje, vrednost bita najvee teine vektora c, c(8), prenosi se na
izlazni port cout. Projektovanjem iterativnih struktura baviemo se u glavi 8.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY sabirac IS
PORT (a,b : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
cin : IN STD_LOGIC;
s
: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
cout: OUT STD_LOGIC);
END sabirac;
-----------------------------------------------------------------ARCHITECTURE loop_arch OF sabirac IS
BEGIN
PROCESS(a,b,cin)
VARIABLE c : STD_LOGIC_VECTOR(8 DOWNTO 0);

116
16
17
18
19
20
21
22
23
24
25

Sekvencijalne naredbe

BEGIN
c(0):=cin;
FOR i IN 0 TO 7 LOOP
s(i) <= a(i) XOR b(i) XOR c(i);
c(i+1):=(a(i) AND b(i))OR(a(i) AND c(i))OR(b(i) AND c(i));
END LOOP;
cout <= c(8);
END PROCESS;
END loop_arch;
------------------------------------------------------------------

Konceptualna implementacija naredbe loop. Osnovni nain za realizaciju for loop naredbe
u hardveru zasniva se na razmotavanju petlje, odnosno na transformaciji polaznog kda u
kd koji ne sadri petlje. To znai da se hardver opisan telom petlje ponavlja (replicira) za
svaku iteraciju. Da bi razmotavanje bilo mogue, neophodno je da opseg indeksa petlje
bude konstantan i poznat u vremenu kad se vri sinteza (tj. mora biti statiki). Na primer,
kd sabiraa iz Pr. 5-15 u razmotanom obliku postaje:
c(0):=cin;
-- i = 0 ----------------------------------------------------s(0) <= a(0) XOR b(0) XOR c(0);
c(1):=(a(0) AND b(0)) OR (a(0) AND c(0)) OR (b(0) AND c(0));
-- i = 1 ----------------------------------------------------s(1) <= a(1) XOR b(1) XOR c(1);
c(2):=(a(1) AND b(1)) OR (a(1) AND c(1)) OR (b(1) AND c(1));
-- i = 2 ----------------------------------------------------s(2) <= a(2) XOR b(2) XOR c(2);
c(3):=(a(2) AND b(2)) OR (a(2) AND c(2)) OR (b(2) AND c(2));
-- i = 3 ----------------------------------------------------s(3) <= a(3) XOR b(3) XOR c(3);
c(4):=(a(3) AND b(3)) OR (a(3) AND c(3)) OR (b(3) AND c(3));
-------------------------------------------------------------cout <= c(4);
--------------------------------------------------------------

5.5. Sekvencijalni kd za kombinaciona kola


Sekvencijalni kd se moe koristiti kako za opisivanje sekvencijalnih, tako i kombinacionih
kola. Razlika izmeu ova dva tipa digitalnih kola je u tome to prva sadre memorijske
elemente, a druga ne. Da bi softver za sintezu prepoznao sekvencijalni kd kao kd za
kombinaciono kolo, neophodno je da su ispunjena sledea dva uslova:

U listi senzitivnosti sadrani su svi signali koji se u procesu koriste kao ulazi.

U kdu procesa je definisan odziv za sve kombinacije vrednosti ulaznih signala, tako
da softver za sintezu, analizom kda, moe da rekonstruie potpunu tabelu istinitosti.

Prvi uslov nije obavezan za sintezu. Tipino, ako je lista senzitivnosti nepotpuna, a pri tom
je drugi uslov ispunjen, kompajler e izdati odgovarajue upozorenje, ali e sintetizovano
kolo ipak biti korektno. Meutim, problem e se javiti u simulaciji takvog kda, jer proces
nee reagovati na ulazne signale kojih nema u listi senzitivnosti. Na primer, pretpostavimo
da su signali b i c grekom izostavljeni iz liste senzitivnosti sledeeg procesa koji opisuje
troulazno ILI kolo:

Sekvencijalni kd za kombinaciona kola

117

PROCESS(a)
BEGIN
y <= a OR b OR c;
END PROCESS;

Kad se promeni signal a, proces se aktivira i reaguje na oekivan nain. Meutim, proces
ne reaguje na promene signala b i c, ve ostaje suspendovan. To znai da izlaz y, bez obzira
na novu vrednost signala b ili c, zadrava svoju staru vrednost. Drugim reima, u
simulaciji, proces se ponaa kao flip-flop sa okidanjem na obe ivice signala a i ulazom za
podatak koji se formira pomou troulaznog ILI kola - ak i da je to bila stvarna namera
projektanta, takvo kolo se ne moe sintetizovati. Meutim, budui da je u kdu procesa
definisan odziv na svaku moguu kombinaciju vrednosti ulaznih signala, a, b i c, veina
alata za sintezu tretirae dati proces kao opis kombinacionog ILI kola, uz izdavanje
upozorenja o tome da je lista senzitivnosti nepotpuna. Bez obzira na to, dobra je praksa da
se u listu senzitivnosti procesa uvrste svi ulazni signali kombinacionog kola koje se opisuje.
Drugi uslov ini sutinsku razliku izmeu kombinacionih i sekvencijalnih kola i mora biti
ispunjen da bi se sintetizovalo korektno kolo. Nedefinisan odziv procesa na neku ulaznu
kombinaciju znai da proces pri takvoj pobudi zadrava (memorie) zateeni (prethodni)
izlaz! Da bi se omoguilo memorisanje, u sintetizovano kolo bie uvrteni memorijski
elementi ili e osobina memorisanje biti ostvarena uz pomo povratnih veza. Greke ovog
tipa se tipino javljaju kod nepotpunih if i case naredbi.
Shodno sintaksi VHDL-a, u if naredbi else grana je opciona. Takoe, izlaznom signalu ne
mora biti dodeljena vrednost u svakoj grani if naredbe. Na primer, sledei kd predstavlja
neuspean pokuaj kreiranja kompaktnog opisa komparatora koji treba da uporedi ulaze a i
b i postavi izlaz eq na 1 ako su a i b jednaki:
PROCESS(a,b)
BEGIN
IF(a=b) THEN
eq <= '1';
END IF;
END IF;
END PROCESS;

Kd je sintaksno ispravan. Kad je a jednako b, eq dobija vrednost 1. Meutim, ako se a i


b razlikuju, a budui da else grana ne postoji, nikakva akcija nee biti preduzeta. Shodno
semantici VHDL-a, signal eq se nee promeniti, odnosno zadrae svoju trenutnu vrednost.
Drugim reima, prethodna nepotpuna if naredba je ekvivalentna sledeoj potpunoj if
naredbi:
IF(a=b) THEN
eq <= '1';
ELSE
eq <= eq;
END IF;

Sada je jasno da u kdu postoji zatvorena petlja, zbog koje se u kolu kreira memorija, to
svakako nije eljeno ponaanje komparatora. Ispravan kd je oblika:
IF(a=b) THEN
eq <= '1';
ELSE
eq <= '0';
END IF;

118

Sekvencijalne naredbe

Meutim, kompletnost if naredbe, sama po sebi, nije garancija da e biti sintetizovano


kombinaciono kolo. Razmotrimo sledei kd:
PROCESS(a, b)
BEGIN
IF(a > b) THEN
gt <= 1;
ELSIF (a = b) THEN
eq <= 1;
ELSE
lt <= 1;
END IF;
END PROCESS;

Namera je da se procesom opie komparator sa tri izlaza (v. Pr. 4-19). Kad je a vee od b,
aktivan je izlaz gt, za a jednako b, aktivan je eq, a kad je a manje od b, aktivan je izlaz lt.
Meutim, kd procesa definie samo kada su izlazni signali aktivni, ali ne i kada su
neaktivni. Na primer, ako vai a > b, izvrie se prva grana if naredbe u kojoj e se samo
izlaz gt postaviti na 1. Poto signalima eq i lt proces nije dodelio ni 1 ni 0, oni e
zadrati svoje ranije vrednosti. Slina situacija se javlja i u preostala dva sluaja (a < b i a
= b). Zbog potrebe pamenja prethodnih vrednosti izlaznih signala, u sintetizovano kolo e
biti ugraena tri memorijska elementa, po jedan za svaki izlaz. Isprano napisan kd treba da
ima oblik:
PROCESS(a, b)
BEGIN
IF(a > b) THEN
gt <= 1;
eq <= 0;
lt <= 0;
ELSIF (a = b) THEN
gt <= 0;
eq <= 1;
lt <= 0;
ELSE
gt <= 0;
eq <= 0;
lt <= 1;
END IF;
END PROCESS;

Sada nema potrebe za pamenjem vrednosti izlaznih signala, jer se u procesu, za bilo koji
ishod poreenja, svakom izlaznom signalu dodeljuje odgovarajua vrednost, 0 ili 1. Kd
ovog procesa se moe uiniti kompaktnijim ako se na samom poetku procesa izlazim
signalima dodele podrazumevane vrednosti:
PROCESS(a, b)
BEGIN
gt <= 0;
eq <= 0;
lt <= 0;
IF(a > b) THEN
gt <= 1;
ELSIF (a = b) THEN
eq <= 1;

Sekvencijalni kd za kombinaciona kola

119

ELSE
lt <= 1;
END IF;
END PROCESS;

Kao to je ve ranije napomenuto, u situacijama kad se unutar procesa istom signalu


vrednost dodeljuje vie puta, efekat e imati samo poslednja dodela. U konkretnom primeru
to znai da ako se nekom signalu ne dodeli vrednost u if naredbi, tada e taj signal zadrati
vrednost koja mu je dodeljena na poetka procesa. U suprotnom, ako se signalu dodeli
vrednosti u if naredbi, to e ujedno biti i konana vrednost tog signala. Dodela
podrazumevanih vrednosti izlaznim signalima na poetku procesa predstavlja dobru
projektantsku praksu, jer se time izbegava mogunost da se pod izvesnim uslovima signalu
uopte i ne dodeli vrednost i na taj nain kreira neeljena memorija.

5.6. Le kola i flip-flopovi


Le kola i flip-flopovi su dva osnovna tipa elementarnih memorijskih kola. Razmotriemo
D le i D flip-flop. Grafiki simboli D flip-flopa i D lea prikazani su na Sl. 5-9(a) i (b)
(uoimo razliito oznaavanje ulaza za takt.) Kljuna osobina flip-flopova je reakcija na
ivicu, a ne na nivo taktnog signala, to je naznaeno trouglom na ulazu za takt. Promena
stanja flip-flopa (tj. promena memorisane vrednosti) inicirana je ivicom taktnog signala.
Zbog toga, flip-flop nikad nije transparentan. Drugim reima, ulaz d nikad direktno ne utiu
na izlaz q, ve samo definiu stanje u koje e flip-flop biti postavljen pod dejstvom aktivne
ivice taktnog impulsa. S druge strane, D le reaguje na nivo taktnog signala. Za sve vreme
dok je taktni signal aktivan (clk=1), D le je transparentan jer se svaka promena vrednosti
ulaza d direktno prenosi na izlaz q (tj. q = d). U trenutku deaktiviranja takta (prelaz sa 1
na 0), le se zakljuava i pamti svoje tekue stanje. Eventualne promene ulaza d ne utiu
na stanje lea za vreme dok je clk=0. Opisana razlika u ponaanju D lea i D flip-flopa
ilustrovana je vremenskim dijagramom sa Sl. 5-9(c).

(a)
(b)
(c)
Sl. 5-9 Razlike izmeu flip-flopova i le kola: (a) D flip-flop; (b) D le; (c) vremenski dijagram.

Le kola i flip-flopovi nalaze primenu u konstrukciji sloenijih sekvencijalnih kola i


sistema, kao to su memorijske strukture, registarske komponente i konani automati. Pri
tom flip-flopovi, iako sloeniji, koriste se mnogo ee. Razlog za to su karakteristike flipflopova, koje znaajno pojednostavljuju projektovanje sloenijih sekvencijalnih sistema.
Kao prvo, varijacije i glievi (kratkotrajne promene) ulaznog signala (d) koje se deavaju
izmeu dve rastue ivice taktnog signala ne utiu na stanje flip-flopa. Drugo, problem trke,
koji se moe javiti u sistemima s povratnom petljom koji sadre le kola, ne postoji ako se
koriste flip-flopovi.
U nastavku su dati VHDL opisi D flip-flopa i D lea. Kd za D flip-flop slian je kdu iz
Pr. 5-2, s tom razlikom to je sada izostavljen signal za asinhrono resetovanje. Iako kd ne

120

Sekvencijalne naredbe

zahteva neko posebno objanjenje, obratimo panju da lista senzitivnosti procesa sadri
samo signal takta. U kdu za D le, za definisanje vrednosti izlaza q koristi se naredba if
(linije 14-16). Kada je clk=1, vrednost ulaza d se prenosi na izlaz q. Meutim, kd ne
navodi koju bi vrednost trebalo da dobije q onda kada clk nije 1. Zbog toga, q zadrava
svoju tekuu za sve vreme dok je za clk=0 - to upravo odgovara nainu rada D lea.
Uoimo da lista senzitivnosti procesa koji opisuje le sadri oba ulazna signala, d i clk,
poto kod lea oba ova signala neposredno utiu na vrednost izlaza q.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

---D flip-flop --------------------------------------------------LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY dff IS
PORT (d,clk : IN STD_LOGIC;
q : OUT STD_LOGIC);
END dff;
-----------------------------------------------------------------ARCHITECTURE flip_flop OF dff IS
BEGIN
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN
q <= d;
END IF;
END PROCESS;
END flip_flop;
---D lec --------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY dlec IS
PORT (d,clk : IN STD_LOGIC;
q : OUT STD_LOGIC);
END dlec;
-----------------------------------------------------------------ARCHITECTURE lec OF dlec IS
BEGIN
PROCESS(d,clk)
BEGIN
IF clk = '1' THEN
q <= d;
END IF;
END PROCESS;
END lec;
-----------------------------------------------------------------

Pr. 5-16 D flip-flop sa dozvolom


U ovom primeru predstavljen je VHDL opis D flip-flopa sa dodatnim signalom dozvole, en
(od eng. enable) (Sl. 5-10(a)). Funkcionalna tabela ovog flip-flopa je data na Sl. 5-10(b).
Uoimo da signal dozvole ima efekta samo u trenucima delovanja rastue ivice takta. To
znai da je osim signala d i ovaj signal sinhronizovan sa taktnim signalom i zato, kao i d,
nije naveden u listi senzitivnosti procesa. Dakle, u trenutku rastue ivice taktnog signala,

Le kola i flip-flopovi

121

flip-flop ispituje signal dozvole i ako vai en=1 (upis u flip-flop je dozvoljen) vrednost
izlaz q postaje jednaka trenutnoj vrednosti ulaza d. U suprotnom sluaju, za en=0, upis u
flip-flop nije dozvoljen i izlaz q ostaje nepromenjen. Za razliku od signala dozvole, signal
resetovanja, rst, je asinhronog tipa i zbog toga je naveden u listi senzitivnosti procesa.
rst

clk

en

q*

1
0
0
0
0

x
0
1

x
x
x
0
1

0
q
q
q
d

(a)
(b)
Sl. 5-10 D FF sa dozvolom: (a) grafiki simbol; (b) funkcionalna tabela.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

---D FF sa dozvolom ---------------------------------------------LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY dffe IS
PORT (d,clk,en,rst : IN STD_LOGIC;
q : OUT STD_LOGIC);
END dffe;
-----------------------------------------------------------------ARCHITECTURE dffe_v1 OF dffe IS
BEGIN
PROCESS(clk,rst)
BEGIN
IF(rst = 1) THEN
q <= 0;
ELSIF(clk'EVENT AND clk='1') THEN
IF(en = 1) THEN
q <= d;
END IF;
END IF;
END PROCESS;
END dffe_v1;
------------------------------------------------------------------

Ispod je dat alternativni VHDL opis arhitekture istog D flip-flopa. Kd sadri tri sekcije.
Prva sekcija (D FF) je proces koji opisuje regularni D flip-flop sa asinhronim resetom. Ulaz
u flip-flop je signal q_next, a izlaz signal q_reg. Druga sekcija (logika sledeeg stanja)
sadri konkurentnu naredbu when koja u zavisnosti od signala dozvole regulie vrednost
internog signala q_next (ulaz u flip-flop). Trea sekcija (izlazna logika) prosleuje vrednost
internog signala q_reg na izlazni port q. U ovoj realizaciji, efekat zabrane upisa u D flipflop se postie posredno, upisom u flip-flop vrednosti koja je ve sadrana u flip-flopu (jer
za en=0 vai q_next = q_reg) .
1
2
3
4
5
6
7
8

--D FF sa dozvolom ---------------------------------------------ARCHITECTURE dffe_v2 OF dffe IS


SIGNAL q_reg, q_next : STD_LOGIC;
BEGIN
-- D FF --------------------------------------------------------PROCESS(clk,rst)
BEGIN
IF(rst = 1) THEN

122
9
10
11
12
13
14
15
16
17
18
19
20

Sekvencijalne naredbe

q_reg <= 0;
ELSIF(clk'EVENT AND clk='1') THEN
q_reg <= q_next;
END IF;
END PROCESS;
-- Logika sledeceg stanja --------------------------------------q_next <= d WHEN en = 1 ELSE
q_reg;
-- Izlazna logika ----------------------------------------------q_next <= q_reg;
END dffe_v2;
-----------------------------------------------------------------

Konceptualni dijagram prethodnog VHDL opisa prikazan je na Sl. 5-11. Prilikom crtanja
konceptualnih dijagrama za sekvencijalna kola, prvo treba uoiti signale (ili varijable) koji
se sintetiu kao memorijski elementi. U datom primeru, to je sluaj sa signalom q_reg, koji
se sintetie u D flip-flop sa asinhronim resetom. Apstraktni multiplekser odgovara when
naredbi (linije 15-16).
Treba istai da bi se strukturno identini konceptualni dijagram dobio i analizom prvog od
dva VHDL opisa iz ovog primera - u kome je celokupna funkcionalnost D flip-flopa sa
dozvolom opisana jednim procesom. Signal iz ovog opisa koji se sintetie u D flip-flop sa
asinhronim resetom je signal q (spoljanja if naredba, linije 14-20). Ugnjedena if naredba
(linije 17-19) odgovara apstraktnom multiplekseru. Treba obratiti panju da je ova if
naredba nepotpuna jer ne sadri else granu. Meutim, else grana se podrazumeva, a
naredba je ekvivalentna sledeoj if naredbi sa else granom:
IF(en = 1) THEN
q <= d;
ELSE
q <= q;
END IF;

to objanjava vezu apstraktnog multipleksera i flip-flopa u konceptualnom dijagramu sa


Sl. 5-11.

Sl. 5-11 Konceptualni dijagram D FF sa dozvolom i asinhronim resetom.

Sinteza signala u flip-flop. U zavisnosti od konteksta, signali kojima se dodeljuje vrednost


u procesu mogu se sintetizovati bilo u elektrinu vezu, bilo u flip-flop (ili registar). Signal
se sintetie u flip-flop ako je dodela vrednosti tom signalu uslovljena tranzicijom
(promenom) nekog drugog signala. Takve naredbe dodele se nazivaju sinhronim
naredbama dodele i mogu se javiti samo u sekvencijalnom kdu, obino posle konstrukcija
tipa: if sigevent ili wait until . Na primer, VHDL kd sa Sl. 5-12(a) sadri dve
sinhrone naredbe dodele (u linijama 4 i 5), jer su dodele vrednosti signalima out1 i out2
sinhronizovane s rastuom ivicom signala clk. Zbog toga u sintetizovanom kolu (Sl.
5-12(b)) postoje dva flip-flopa: jedan za signal out1, a drugi za signal out2. S druge strane,
dodela vrednosti signalu out3 nije sinhronizovana sa signalom clk usled ega se ovaj signal
sintetie u elektrinu vezu koja povezuje ulaz a i izlaz out3.

123

Le kola i flip-flopovi

1
2
3
4
5
6
7
8

PROCESS(clk,a)
BEGIN
IF(clkEVENT AND clk=1)THEN
out1 <= b;
out2 <= a;
END IF;
out3 <= a;
END PROCESS;
(a)
(b)
Sl. 5-12 Primer sinteze flip-flopova: (a) VHDL kd; (b) sintetizovano kolo.

Pr. 5-17 D flip-flop sa komplementarnim izlazima


Razmotrimo D flip-flop sa Sl. 5-13(a) koji, za razliku od ranije razmatranih flip-flopova,
poseduje dodatni izlaz not_q na kojem se javlja komplement tekueg stanja flip-flopa. U
nastavku su data tri VHDL opisa ovog flip-flopa, od kojih je ispravan samo trei.
Tri reenja se razlikuju po mestu gde se u kdu nalazi naredba dodele kojom se postavlja
signal not_q. U prvom reenju, ova naredba je u procesu neposredno posle naredbe q_reg
<= d (linije 16 i 17). Meutim, s obzirom na odloenu dodelu koja vai za signale u
procesu, vrednost signala q_reg koja se u liniji 17 komplementira i dodeljuje signalu not_q,
nije ona koja je dodeljena signalu q_reg u liniji 16, ve stara, tj. ona koju je ovaj signal
zadrao iz prethodnog ciklusa rada procesa. Na taj nain, izlaz not_q dobija pogrenu
vrednost, koja u odnosu na ispravnu kasni za jedan taktni ciklus, kao to se to moe videti
na vremenskom dijagramu sa Sl. 5-14. Primetimo da talasni oblici izlaznih signala q i not_q
poinju isprekidanim linijama. (Isprekidana linija oznaavaju nepoznatu vrednost - X).
Razlog za to je to ova dva signala nisu inicijalizovani prilikom deklaracije, tako da
definisanu vrednost (0 ili 1) dobijaju tek s prvim upisom, koji je sinhronizovan s
rastuom ivicom signala clk. Struktura kola sintetizovanog na osnovu reenja 1 prikazana je
na Sl. 5-13(b). Dva flip-flopa su posledica postojanja dve sinhrone naredbe dodele (linije
16 i 17).
q
d

not_q
D FF

D FF

clk

(a)

(b)

(c)
(d)
Sl. 5-13 D flip-flop sa komplementarnim izlazima: (a) grafiki simbol; kolo sintetizovano na
osnovu: (b) reenja 1; (c) reenja 2, (d) reenja 3.

124
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

Sekvencijalne naredbe

--- Resenje 1: neispravno ---------------------------------------LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY dff IS
PORT (d, clk : IN STD_LOGIC;
q, not_q : OUT STD_LOGIC);
END dff;
-----------------------------------------------------------------ARCHITECTURE neispravna OF dff IS
SIGNAL q_reg : STD_LOGIC;
BEGIN
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN
q_reg <= d;
-- generise flip-flop
not_q <= NOT q_reg;
-- generise flip-flop
END IF;
END PROCESS;
q <= q_reg;
END neispravna;
--- Resenje 2: dva flip-flopa -----------------------------------ARCHITECTURE dva_flip_flopa OF dff IS
BEGIN
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN
q <= d;
-- generise flip-flop
not_q <= NOT d;
-- generise flip-flop
END IF;
END PROCESS;
END dva_flip_flopa;
--- Resenje 3: ispravno -----------------------------------------ARCHITECTURE ispravna OF dff IS
BEGIN
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN
q <= d;
-- generise flip-flop
END IF;
END PROCESS;
not_q <= NOT q;
-- generise invertor
END ispravna;
-----------------------------------------------------------------

Sl. 5-14 Rezultati simulacije reenja_1 iz Pr. 5-17.

Le kola i flip-flopovi

125

U reenju 2, signal not_q u procesu dobija invertovanu vrednost ulaza d (linija 29), a ne
invertovanu vrednost signala q_reg. Zbog toga je ovo reenje funkcionalno ispravno.
Meutim, poto proces i dalje sadri dve sinhrone naredbe dodele (linije 28 i 29)
sintetizovano kolo e sadrati dva flip-flopa (Sl. 5-13(c)).
Konano, reenje 3 je i funkcionalno ispravno i sadri samo jedan flip-flop. U ovom opisu,
naredba dodele not_q <= d je izmetena van procesa (linija 42). Poto vie nije
sinhronizovana sa taktnim signalom clk, ova naredba se ne sintetie u flip-flop ve u
invertor (Sl. 5-13(d)). Napomenimo da razlika izmeu reenja 2 i 3 ilustruje bitnu situaciju
kad zbog propusta u organizaciji VHDL kda moe doi do sinteze dodatnog hardvera.
Sinteza varijable u flip-flop. Uslovi pod kojima se varijable sintetiu u flip-flopove neto
su sloeniji u odnosu na one koji vae za signale. Prvo, kao i za signale, potrebno je da
dodela vrednosti varijabli bude uslovljena promenom nekog drugog signala. Dugo,
potrebno je da se vrednost varijable, putem dodele nekom signalu, prenese izvan procesa.
Na primer, varijabla v iz sledeeg VHDL kda se sintetie u flip-flop (x je signal):
PROCESS(clk)
VARIABLE v : BIT;
BEGIN
IF(clkEVENT AND clk=1)THEN
v := a;
END IF;
x <= v;
END PROCESS;

Oba neophodna uslova za sintezu varijable u flip-flop su ispunjena: dodela vrednosti


varijabli v je sinhronizovana s rastuom ivicom signala clk i njena vrednost se iznosi van
procesa (posredstvom signala x).
Drugi sluaj kad se varijabla sintetie u flip-flop je onda kada se varijabla koristi u kdu
procesa pre nego to joj je dodeljena vrednost (v. Pr. 5-18).
Pr. 5-18 Pomeraki registar realizacija pomoi varijabli.
a

din
D FF

b
D FF

c
D FF

dout
D FF

clk

Sl. 5-15 Pomeraki registar iz Pr. 5-18.

U ovom primeru razmotriemo tri VHDL arhitekture napisane s namerom da modeliraju


pomeraki registar sa Sl. 5-15. Arhitekture arch_v2 i arch_v3 se ispravno sintetiu u
strukturu sa Sl. 5-15, dok se arhitektura arch_v1 sintetie u kolo koje umesto etiri sadri
samo jedan flip-flop.
1
2
3
4
5
6
7
8

-----------------------------------------------------------------ENTITY pomreg IS
PORT (din,clk : IN BIT;
dout: OUT BIT);
END pomreg;
-----------------------------------------------------------------ARCHITECTURE arch_v1 OF pomreg IS
BEGIN

126
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

Sekvencijalne naredbe

PROCESS (clk)
VARIABLE a,b,c : BIT;
BEGIN
IF(clk'EVENT AND clk='1') THEN
a := din;
b := a;
c := b;
dout <= c;
END IF;
END PROCESS;
END arch_v1;
-----------------------------------------------------------------ARCHITECTURE arch_v2 OF pomreg IS
BEGIN
PROCESS (clk)
VARIABLE a,b,c : BIT;
BEGIN
IF(clk'EVENT AND clk='1') THEN
dout <= c;
c := b;
b := a;
a := din;
END IF;
END PROCESS;
END arch_v2;
-----------------------------------------------------------------ARCHITECTURE arch_v3 OF pomreg IS
SIGNAL a,b,c : BIT;
BEGIN
PROCESS (clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN
a <= din;
b <= a;
c <= b;
dout <= c;
END IF;
END PROCESS;
END arch_v3;
------------------------------------------------------------------

U procesu iz arhitekture arch_v1 deklarisane su tri varijable (a, b i c, linija 10) koje bi
trebalo da imaju ulogu memorisanja vrednosti tri krajnje leve bitske pozicije pomerakog
registra sa Sl. 5-15. (Krajnja desna pozicija registra pokrivena je signalom dout). U telu
procesa, sinhronizovano s ivicom taktnog signala, dolazi do prenosa vrednosti kroz
varijable, i to s leva udesno, poev od upisa nove vrednosti sa ulaza din u varijablu a, pa
sve do prenosa vrednosti varijable c na izlazni port dout. Meutim, budui da za varijable
vai trenutna, a ne odloena dodela, naredbe dodele iz linija 13-16 se saimaju u jednu
ekvivalentnu naredbu: dout<=din, a kd tela procesa se svodi na:
IF(clk'EVENT AND clk='1') THEN
dout <= din;
END IF;

Uslovi za sintezu signala dout u flip-flop su ispunjeni, ali to je samo jedan flip-flop, a ne
etiri koliko je potrebno da bi se dobilo ispravno reenje.

Le kola i flip-flopovi

127

U procesu iz arhitekture arch_v2, redosled naredbi dodele je promenjen, tako to se sada


prenos vrednosti kroz varijable obavlja s desna ulevo. U liniji 27 na izlaz dout se prosleuje
vrednost varijable c. Meutim, to nije vrednost koja e varijabli c biti dodeljena u sledeoj
liniji, ve je to vrednost koja je varijabli c bila dodeljena prilikom prethodnog ciklusa
izvrenja procesa. Slino vai i za varijable b i a, koje se kao i c koriste pre nego to im se
dodeli nova vrednost. Zbog toga se za svaku varijablu u sintetizovano kolo ugrauje po
jedan flip-flop koji treba da sauva vrednost varijable do sledeeg ciklusa izvrenja
procesa, tj. do naredne rastue ivice taktnog signala. Takoe, u flip-flop se sintetie i signal
dout (zbog naredbe iz linije 27), to kao konaan ishod ima ispravno reenje.
U arhitekturi arch_v3, varijable su zamenjene signalima (linija 36). Ova arhitektura takoe
pravilno opisuje rad pomerakog registra, bez obzira na to to se dodela vrednosti
signalima obavlja se u normalnom redosledu, kao u arhitekturi arch_v1 - do din do dout.
Budui da se u opisu koriste samo signali, i pri tom je dodela vrednosti signalima
sinhronizovana s rastuom ivicom signala clk, svaki od njih, raunajui tu i signal dout, se
sintetie u jedan flip-flop. Napomenimo da razlike u sintezi izmeu varijabli i signala
potiu od injenice da za signale u procesu vai odloena dodela. Zbog toga se u procesu
koriste stare vrednosti signala (one koje su im bile dodeljene prilikom prethodnog izvrenja
procesa). Jo jedna posledica odloene dodele jeste i ta da redosled naredbi dodele u
linijama 41-44 nije od znaaja i da bi i bilo koji drugi redosled, ukljuujui i onaj iz
arhitekture arch_v2, bio korektan.

5.7. Registarske komponente


Registarske komponente su sinhrona sekvencijalna digitalna kola standardne
(prepoznatljive) funkcije, poput prihvatnih (stacionarnih), pomerakih i brojakih registara.
Blok dijagram registarske komponente prikazan je Sl. 5-16. U osnovi svake registarske
komponente se nalazi kolekcija D flip-flopova sa zajednikim signalom takta tzv.
registar stanja. Registar stanja memorie tekue stanje kola. Kombinacioni blok logika
sledeeg stanja odreuje novo stanje kola na osnovu ulaznih signala i tekueg stanja.
Logika izlaza je jo jedan kombinacioni blok, koji na osnovu tekueg stanja i ulaznih
signala generie izlazne signale kola. U osnovi, blok dijagram registarske komponente se
ne razlikuje od uoptenog blok dijagrama sinhronih sekvencijalnih kola i konanih
automata (v. 6). Specifinost registarskih komponenti je u tome to se funkcije blokova
sledeeg stanja i izlaza mogu izraziti jednostavnim i regularnim logikim ili aritmetikim
funkcijama. Na primer, funkcija logike sledeeg stanja brojaa je oblika: r_next <= r_reg
+ 1, a pomerakog registra: r_next <= r_reg(N-2 DOWNTO 1) & 0.

Sl. 5-16 Uopteni konceptualni dijagram registarske komponente.

128

Sekvencijalne naredbe

U nastavku ovog poglavlja sledi nekoliko primera VHDL opisa tipinih registarskih
komponenti.
Pr. 5-19 Binarni broja

Sl. 5-17 4-bitni binarni broja.

Na Sl. 5-17 prikazan je grafiki simbol 4-bitnog binarnog brojaa. Stanja brojaa, koja se
javljaju na izlazu q, su redom: 0000, 0001, ..., 1111. Stanja brojaa se interpretiraju
kao neoznaeni celi brojevi: 0, 1, ..., 15. Sa svakom rastuom ivicom taktnog signala broja
prelazi u sledee stanje koje je za 1 vee od prethodnog. Nakon stanja 15 broja se vraa u
stanje 0. Signal rst slui za resetovanje brojaa, odnosno za postavljanje brojaa u poetno
stanje, 0000. Izlazni signal cout (izlazni prenos brojaa) ima vrednost 1 za vreme dok je
broja u zavrnom stanju, 1111, dok u svim ostalim stanjima vai cout=0. VHDL kd
koji sledi sadri tri arhitekture: arch_v1 i arch_v3 predstavljaju ispravne opise, dok je
arch_v2 neispravan opis 4-bitnog binarnog brojaa.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
-----------------------------------------------------------------ENTITY bin_counter IS
PORT (clk,rst : IN STD_LOGIC;
cout : OUT STD_LOGIC;
q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END bin_counter;
Ispravan trosegmentni opis ------------------------------------ARCHITECTURE arch_v1 OF bin_counter IS
SIGNAL r_reg, r_next : UNSIGNED(3 DOWNTO 0);
BEGIN
--- Registar stanja ------------------------------------------PROCESS(clk,rst)
BEGIN
IF(rst = '1') THEN
r_reg <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk = '1') THEN
r_reg <= r_next;
END IF;
END PROCESS;
-- Logika sledeceg stanja ------------------------------------r_next <= r_reg + 1;
-- Izlazna logika --------------------------------------------q <= STD_LOGIC_VECTOR(r_reg);
cout <= '1' WHEN r_reg = "1111" ELSE '0';
END arch_v1;
Neispravan dvosegmentni opis ----------------------------------ARCHITECTURE arch_v2 OF bin_counter IS
SIGNAL r_reg : UNSIGNED(3 DOWNTO 0);
BEGIN

Registarske komponente
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

129

PROCESS(clk,rst)
BEGIN
IF(rst = '1') THEN
r_reg <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk = '1') THEN
r_reg <= r_reg + 1;
IF(r_reg = "1111") THEN
cout <= '1';
ELSE
cout <= '0';
END IF;
END IF;
END PROCESS;
-- Izlazna logika --------------------------------------------q <= STD_LOGIC_VECTOR(r_reg);
END arch_v2;
Ispravan jednosegmentni opis ----------------------------------ARCHITECTURE arch_v3 OF bin_counter IS
BEGIN
PROCESS(clk,rst)
VARIABLE q_tmp : UNSIGNED(3 DOWNTO 0);
BEGIN
IF(rst = '1') THEN
q_tmp := (OTHERS => '0');
ELSIF(clk'EVENT AND clk = '1') THEN
q_tmp := q_tmp + 1;
END IF;
IF(q_tmp = "1111") THEN
cout <= '1';
ELSE
cout <= '0';
END IF;
q <= STD_LOGIC_VECTOR(q_tmp);
END PROCESS;
END arch_v3;
------------------------------------------------------------------

Kd arhitekture arch_v1 kreiran je u skladu sa blok dijagramom sa Sl. 5-16. Registar stanja
je opisan u vidu procesa, dok se za opis logike sledeeg stanja i izlazne logike koriste dve
zasebne sekcije konkurentnog kda. Logiku sledeeg stanja ini samo jedna konkurentna
naredba dodele kojom se tekua vrednost registra stanja (r_reg) poveava za 1 (linija 25).
Operacija sabiranja koja se koristi u ovoj naredbi je razlog zato su signali r_reg i r_next
deklarisani s tipom unsigned (linija 13). Budui da za ovaj tip vai: 1111 + 1 = 0000,
naredba inkrementiranja iz linije 25 je dovoljna da u potpunosti opie funkciju logike
sledeeg stanja binarnog brojaa. Sekcija kda Izlazna logika sadri dve konkurentne
naredbe dodele. U prvoj (linija 27), tekue stanje brojaa (r_reg) se prenosi na izlazni port
q, uz konverziju tipa unsigned u tip std_logic_vector. Druga naredba izlazne logike (linija
28) regulie vrednost izlaznog signala cout. Konceptualni dijagram arhitekture arch_v1
prikazan je na Sl. 5-18(a).
Arhitektura arch_v2 predstavlja neuspean pokuaj da se funkcije brojanja i izlaznog
prenosa opiu zajedno s registrom stanja u okviru istog procesa. Problem koji postoji u
ovom reenju odnosi se na signal izlaznog prenosa cout. Naredba if koja regulie vrednost
ovog signala (linije 40-44) ugnjedena je u elsif granu iji uslov odgovara rastuoj ivici

130

Sekvencijalne naredbe

taktnog signala clk. Zbog toga se signal cout sintetie u flip-flop, a izlaz cout kasni za jedan
taktni ciklus u odnosu na oekivano ponaanje, to se jasno moe videti na osnovu
konceptualnog dijagrama ove arhitekture sa Sl. 5-18(b).

(a)

(b)
Sl. 5-18 Konceptualni dijagrami VHDL opisa 4-bitnog binarnog brojaa iz Pr. 5-19: (a)
konceptualni dijagram za arch_v1 i arch_v3; (b) konceptualni dijagram arhitekture arch_v2.

U arhitekturi arch_v3, celokupan opis binarnog brojaa smeten je unutar jednog procesa, a
problem koji postoji u arhitekturi arch_v2 prevazien je uvoenjem varijable q_tmp. Poto
za varijable ne vai odloena dodela, vrednost koju q_tmp ima u uslovu q_tmp = 1111 iz
druge if naredbe u procesu (linije 61-65) upravo je ona koja je ovoj promenljivoj dodeljena
u prvoj if naredbi (linije 56-60). Takoe, varijabla q_tmp zadovoljava uslove za sintezu u
registar: u liniji 59 varijabli q_tmp se dodeljuje vrednost sinhronizovano s rastuom ivicom
signala clk, a u liniji 66 vrednost varijable q_tmp se prenosi signalu q i na taj nain iznosi iz
procesa. Konceptualni dijagram arhitekture arch_v3 identian je konceptualnom dijagramu
arhitekture arch_v1 sa Sl. 5-18(a).
Pr. 5-20 Pomeraki registar

Sl. 5-19 Pomeraki registar sa asinhronim resetom.

U ovom primeru predstavljena su dva standardna naina za opis pomerakog registra.


Razmotriemo registar sa Sl. 5-19, koji u odnosu na onaj iz Pr. 5-18 dodatno poseduje
mogunost asinhronog resetovanja (ulaz rst). U prvom reenju (arhitektura arch_v1) koristi
se signali, a drugom (arhitektura arch_v2) varijable. Sintetizovana kola su ista u oba sluaja
i odgovaraju strukturi sa Sl. 5-19. Signal reg iz arhitekture arch_v1 se sintetie u registar

Registarske komponente

131

zato to se dodela vrednosti ovom signalu obavlja sinhronizovano s promenom signala clk
(linije 17-18). U arhitekturi arch_v2, promena signala clk inicira upis u varijablu reg (linije
31-33) i budui da vrednost ove varijable naputa proces (tj. prenosi se na port q) (linija 34)
i ona se sintetie takoe u registar. Funkcije pomeranja, u oba reenja, realizuje se pomou
operator konkatenacije.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY pomreg IS
PORT ( d,clk,rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END pomreg;
-- Resenje 1 ----------------------------------------------------ARCHITECTURE arch_v1 OF pomreg IS
SIGNAL reg : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS (clk, rst)
BEGIN
IF(rst='1') THEN
reg <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk='1') THEN
reg <= d & reg(3 DOWNTO 1);
END IF;
END PROCESS;
q <= reg(0);
END arch_v1;
-- Resenje 2 ----------------------------------------------------ARCHITECTURE arch_v2 OF pomreg IS
BEGIN
PROCESS (clk, rst)
VARIABLE reg : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF(rst='1') THEN
reg := (OTHERS => '0');
ELSIF(clk'EVENT AND clk='1') THEN
reg := d & reg(3 DOWNTO 1);
END IF;
q <= reg(0);
END PROCESS;
END arch_v2;

Pr. 5-21 Univerzalni pomeraki registar


Univerzalni pomeraki registar je registarska komponenta koja poseduje mogunost
paralelnog upisa podatka i pomeranja upisanog podatka u oba smera. Na raspolaganju su
etiri operacije: paralelni upis, pomeranje ulevo, pomeranje udesno i pauza (tj.
nepromenjeno stanje). Na Sl. 5-20 su prikazani grafiki simbol i blok dijagram 4-bitnog
univerzalnog pomerakog registra. Ulaz d(0) i izlaz q(3) se koriste kao serijski ulaz i
serijski izlaz pri pomeranju ulevo, a ulaz d(3) i izlaz q(0) kao serijski ulaz i serijski izlaz pri
pomeranju udesno. eljena operacija se bira posredstvom dvobitnog upravljaki signal ctrl.
Izbor operacije zapravo se svodi na izbor podatka koji e rastuom ivicom takta biti upisan

132

Sekvencijalne naredbe

u registar stanja. Operacije pomeranja realizuju dva kombinaciona pomeraa, jedan za


pomeranje ulevo, a drugi za pomeranje udesno. Treba napomenuti da pomerai sa Sl.
5-20(b) ne sadre logika kola, ve samo veze kojima se na odgovarajui nain povezuju
ulazi i izlazi ovih blokova. Tako se na izlazu pomeraa ulevo javlja: r_reg(2), r_reg(1),
r_reg(0), d(0), a na izlazu pomeraa udesno: d(3), r_reg(3), r_reg(2), r_reg(1). Paralelni
upis podrazumeva upis podatka uzetog s ulaza d u registar stanja, a pauza upis u registar
stanja njegove sopstvene (tekue) vrednosti.

(a)
(b)
Sl. 5-20 Univerzalni pomeraki registar: (a) grafiki simbol; (b) blok dijagram.

U nastavku su data dva VHDL opis univerzalnog pomerakog registra. Prvi opis
(arhitektura arch_v1) je usklaen sa blok dijagramom sa Sl. 5-20(b). Registar stanja je
opisan pomou procesa, a kombinacioni deo kola (logika sledeeg stanja) pomou
konkurentne naredbe select. U drugom opisu (arhitektura arch_v2), celokupno kolo je
opisano jednim procesom u kome je funkcija logike sledeeg stanja realizovana pomou
sekvencijalne naredbe case. Konceptualni dijagrami obe arhitekture su identini i
podudaraju se sa blok dijagramom sa Sl. 5-20(b).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY shift_register IS
PORT (clk, rst : IN STD_LOGIC;
ctrl : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
d : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END shift_register;
Trosegmentni opis ---------------------------------------------ARCHITECTURE arch_v1 OF shift_register IS
SIGNAL r_reg : STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL r_next : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
-- Registar stanja --------------------------------------------PROCESS (clk,rst)
BEGIN
IF(rst='1')THEN
r_reg <= (OTHERS => '0');

Registarske komponente
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

133

ELSIF(clk'EVENT AND clk='1') THEN


r_reg <= r_next;
END IF;
END PROCESS;
-- Logika sledeceg stanja -------------------------------------WITH ctrl SELECT
r_next <= r_reg
WHEN "00", -- pauza
r_reg(2 DOWNTO 0) & d(0) WHEN "01", -- ulevo
d(3) & r_reg(3 DOWNTO 1) WHEN "10", -- udesno
d
WHEN OTHERS; -- "load"
-- Izlazna logika ---------------------------------------------q <= r_reg;
END arch_v1;
- Dvosegmentni opis --------------------------------------------ARCHITECTURE arch_v2 OF shift_register IS
SIGNAL r_reg : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
-- Registar stanja + logika sledeeg stanja -------------------PROCESS (clk,rst)
BEGIN
IF(rst='1')THEN
r_reg <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk='1') THEN
CASE ctrl IS
WHEN "00" => NULL;
WHEN "01" => r_reg <= r_reg(2 DOWNTO 0) & d(0);
WHEN "10" => r_reg <= d(3) & r_reg(3 DOWNTO 1);
WHEN OTHERS => r_reg <= d;
END CASE;
END IF;
END PROCESS;
-- Izlazna logika ---------------------------------------------q <= r_reg;
END arch_v2;

Pr. 5-22 Programabilni broja po modulu m - dvosegmentni kd


U ovom primeru predstavljen je VHDL opis 4-bitnog programabilnog brojaa po modulu
m, tj. mod-m broja. Parametar m definie osnovu brojanja i zadaje se posredstvom
posebnog 4-bitnog ulaza. Dozvoljeni opseg vrednosti ovog parametra je od 0010 do
1111, to znai da se broja programirati kao mod-2, mod-3, ... ili mod-15 broja.
Sekvenca brojanja mod-m brojaa je: 0, 1, ..., m-1. Sve dok je tekue stanje brojaa
razliito od m-1, njegovo sledee stanje je za 1 vee od prethodnog; ako je broja u
zavrnom stanju, m-1, njegovo sledee stanje je 0. Prvo od dva izloena reenja, arch_v1,
zasnovano je upravo na ovom zapaanju.
1
2
3
4
5
6
7
8

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
-----------------------------------------------------------------ENTITY prog_counter IS
PORT (clk,rst : IN STD_LOGIC;
m : IN STD_LOGIC_VECTOR(3 DOWNTO 0);

134
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

Sekvencijalne naredbe

q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));


END prog_counter;
-----------------------------------------------------------------ARCHITECTURE arch_v1 OF prog_counter IS
SIGNAL r_reg : UNSIGNED(3 DOWNTO 0);
SIGNAL r_next : UNSIGNED(3 DOWNTO 0);
BEGIN
--- Registar stanja -------------------------------------------PROCESS(clk,rst)
BEGIN
IF(rst = '1') THEN
r_reg <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk = '1') THEN
r_reg <= r_next;
END IF;
END PROCESS;
-- Logika sledeceg stanja -------------------------------------r_next <= (OTHERS => '0') WHEN r_reg = (UNSIGNED(m) - 1) ELSE
r_reg + 1;
-- Izlazna logika ---------------------------------------------q <= STD_LOGIC_VECTOR(r_reg);
END arch_v1;
Optimizovano reenje ------------------------------------------ARCHITECTURE arch_v2 OF prog_counter IS
SIGNAL r_reg : UNSIGNED(3 DOWNTO 0);
SIGNAL r_next, r_inc : UNSIGNED(3 DOWNTO 0);
BEGIN
--- Registar --------------------------------------------------PROCESS(clk,rst)
BEGIN
IF(rst = '1') THEN
r_reg <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk = '1') THEN
r_reg <= r_next;
END IF;
END PROCESS;
-- Logika sledeceg stanja -------------------------------------r_inc <= r_reg + 1;
r_next <= (OTHERS => '0') WHEN r_inc = UNSIGNED(m) ELSE
r_inc;
-- Izlazna logika ---------------------------------------------q <= STD_LOGIC_VECTOR(r_reg);
END arch_v2;
------------------------------------------------------------------

Interni signali r_reg i r_next su tipa unsigned zbog toga to se sa stanjem brojaa
manipulie na nain kao sa neoznaenim celim brojevima. Meutim, budui da su portovi
m i q tipa std_logic_vector, neophodna je konverzija tipa podataka: unsigned(m) iz linije 26
konvertuje m u neoznaen ceo broj, dok std_logic_vector(r_reg) iz linije 29 konvertuje
r_reg u tip std_logic_vector. Konceptualni dijagram arhitekture arch_v1 prikazan je na Sl.
5-21(a). Logiku sledeeg stanja ine: inkrementer (realizuje operaciju sabiranja iz else
grane naredbe when - linija 27), dekrementer (realizuje operaciju oduzimanja iz uslova
when naredbe iz linije 26) i komparator (realizuje operator poreenja jednakosti iz uslova
when naredbe linija 26).

Registarske komponente

135

Uoimo da je logiki uslov r_reg = unsigned(m) 1 identian uslovu r_reg + 1 =


unsigned(m). Imajui u vidu da je r_reg + 1 ve neophodno za operaciju inkrementiranja
(linija 27), u mogunosti smo da isto ovu operaciju iskoristimo i za poreenje iz uslova
when naredbe (linija 26) i tako eliminiemo dekrementer. Arhitektura arch_v2 sadri
revidiran VHDL kd. Sada je operacija r_reg + 1 izdvojena u posebu naredbu r_inc <=
r_reg + 1 (linija 46), a signal r_inc se koristi i za inkrementiranje brojaa (else grane
naredbe when linija 48) i za poreenje u uslovu when naredbe (linija 47). Konceptualni
dijagram revidiranog kda prikazan je na Sl. 5-21(b). U sutini, optimizacija koja je
sprovedena nad kdom arhitekture arch_v1 predstavlja jo jedan primer primene tehnike
deobe operatora (v. 4.5.1).

(a)

(b)
Sl. 5-21 Konceptualni dijagrami programabilnog mod-m brojaa: (a) polazno reenje; (b)
reenje nakon izvrene optimizacije.

Pr. 5-23 Programabilni broja po modulu m - jednosegmentni kd


U ovom primeru predstavljen je jednosegmentni kd mod-m brojaa iz Pr. 5-22, tj. VHDL
opis u kome je celokupna logika mod-m brojaa realizovana jednim procesom. Prvi
pokuaj pisanja jednosegmentnog kda je neuspean (arhitektura arch_v3, linije 1-17). Kao
to znamo, vrednost signal u procesu se aurira na kraju procesa. To znai da se r_reg
postavlja na novu vrednost r_reg + 1 (linija 10) tek na kraju procesa, a da se u naredbi u
kojoj se vri poreenje r_reg = unsigned(m) (linija 11) jo uvek koristi njegova stara
(prethodna) vrednost. Poto korektna vrednost signala r_reg kasni za jedan taktni ciklus,
broja e odbrojati jedno stanje vie, to znai da arhitektura arch_v3 zapravo predstavlja
opis mod-(m+1) brojaa.
Prvi nain kako se problem koji postoji u arhitekturi arch_v3 moe reiti jeste da se
operacija inkrementiranja izmesti iz procesa (arhitektura arch_v4). Poto se sada proces
(linije 23-34) i naredba dodele r_inc <= r_reg + 1 (linija 35) izvravaju konkurentno,
problem neaurnosti signala r_reg vie ne postoji. Meutim, ovo nije jednosegmentni kd.

136

Sekvencijalne naredbe

Drugi nain za reenje istog problema podrazumeva korienje varijable za privremeno


uvanje rezultata operacije inkrementiranja (arhitektura arch_v5). Za razliku od signala,
dodela vrednosti varijabli je trenutna, a novoupisana vrednost je dostupna za korienje ve
u sledeoj sekvencijalno naredbi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

---- Pogresno resenje -------------------------------------------ARCHITECTURE arch_v3 OF prog_counter IS


SIGNAL r_reg : UNSIGNED(3 DOWNTO 0);
BEGIN
PROCESS(clk,rst)
BEGIN
IF(rst = '1') THEN
r_reg <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk = '1') THEN
r_reg <= r_reg + 1;
IF(r_reg = UNSIGNED(m)) THEN
r_reg <= (OTHERS => '0');
END IF;
END IF;
END PROCESS;
q <= STD_LOGIC_VECTOR(r_reg);
END arch_v3;
----- Ispravno resenje ------------------------------------------ARCHITECTURE arch_v4 OF prog_counter IS
SIGNAL r_reg : UNSIGNED(3 DOWNTO 0);
SIGNAL r_inc : UNSIGNED(3 DOWNTO 0);
BEGIN
PROCESS(clk,rst)
BEGIN
IF(rst = '1') THEN
r_reg <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk = '1') THEN
IF(r_inc = UNSIGNED(m)) THEN
r_reg <= (OTHERS => '0');
ELSE
r_reg <= r_inc;
END IF;
END IF;
END PROCESS;
r_inc <= r_reg + 1;
q <= STD_LOGIC_VECTOR(r_reg);
END arch_v4;
----- Ispravno resenje koje koristi varijablu -------------------ARCHITECTURE arch_v5 OF prog_counter IS
SIGNAL r_reg : UNSIGNED(3 DOWNTO 0);
SIGNAL r_inc : UNSIGNED(3 DOWNTO 0);
BEGIN
PROCESS(clk,rst)
VARIABLE q_tmp : UNSIGNED(3 DOWNTO 0);
BEGIN
IF(rst = '1') THEN
r_reg <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk = '1') THEN
q_tmp := r_reg + 1;
IF(q_tmp = UNSIGNED(m)) THEN

Registarske komponente
51
52
53
54
55
56
57
58

137

r_reg <= (OTHERS => '0');


ELSE
r_reg <= q_tmp;
END IF;
END IF;
END PROCESS;
q <= STD_LOGIC_VECTOR(r_reg);
END arch_v5;

5.8. RAM
RAM (prema eng. Random Access Memory) je memorijska komponenta u koju se moe
upisivati i iz koje se moe itati upisana informacija. S logike take gledita, RAM je
organizovan kao kolekciju registara s ogranienjem da se uvek moe pristupati samo
jednom registru radi upisa ili itanja. Registar kome se pristupa bira se (tj. adresira)
binarnom kombinacijom koja se postavlja na adresne ulaze RAM-a. U nastavku e biti
predstavljeni VHDL opisi dva tipa RAM-a koji se razlikuju po nainu realizacije porta za
podatke. U prvom reenju, za razmenu podataka s RAM-om koriste se dva zasebna porta za
podatke, jedan za upis, a drugi za itanje, dok se u drugom za obe ove operacije koristi
jedan bidirekcioni port.
RAM sa razdvojenim portovima za upis i itanje. Na Sl. 5-22 je ilustrovana organizacija
RAM-a sa posebnim portovima za upis i itanje podataka. Vrednost prisutna na adresnom
portu, addr, bira (adresira) re kojoj se pristupa. Pri wr_ena=1, vrednost prisutan na
ulaznom portu za podatke, data_in, upisuje se u adresiranu re pod dejstvom rastue ivice
takta, clk. Sadraj adresirane rei je dostupan na izlaznom portu za podatke, data_out.
Napomenimo da izmeu broja rei u RAM-u, m, i broja bita adrese, r, postoji sledea vezi:
r = log 2 m .

Sl. 5-22 RAM sa razdvojenim ulazim i izlazim portovima za podatke.

Ispod je dat VHDL opis RAM-a sa Sl. 5-22. Modeliran je RAM kapaciteta 16x8, tj. RAM
koji sadri 16 rei duine 8 bita. Kao i za ROM (v. 4.7), opis RAM-a sadri definiciju tipa
podataka mem_array koji predstavlja dvodimenzionalno polje dimenzija 16x8 (linija 14),
ali za razliku od ROM-a, a zbog potrebe upisa, memorijski medijum memory nije
konstanta ve signal (linija 15). Arhitektura sadri jedan proces (linije 17-24), koji regulie
upis, i jednu konkurentnu naredbu dodele (linija 25), koja je zaduena za itanje iz
memorije. Proces sadri dve ugnjedene if naredbe: prva omoguava upis ako vai
wr_ena=1 (linija 19-23), a druga sinhronie upis sa rastuom ivicom taktnog signala clk
(linija 20-22). S obzirom na to to linija 21 sadri sinhronu narednu dodele, signal mamory
se sintetie u polje od 16x8=128 flip-flopova. Konkurentno s procesom, naredba dodele iz
linije 26 prenosi sadraj adresirane rei na izlazni port data_out.

138
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

Sekvencijalne naredbe

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
-----------------------------------------------------------------ENTITY RAM IS
PORT (wr_ena, clk : IN STD_LOGIC;
addr : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
data_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
data_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END RAM;
-----------------------------------------------------------------ARCHITECTURE ram OF RAM IS
TYPE mem_array IS ARRAY (0 TO 15) OF STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL memory : mem_array;
BEGIN
PROCESS(clk, wr_ena)
BEGIN
IF(wr_ena = '1') THEN
IF(clk'EVENT AND clk='1') THEN
memory(TO_INTEGER(UNSIGNED(addr))) <= data_in;
END IF;
END IF;
END PROCESS;
data <= memory(TO_INTEGER(UNSIGNED(addr)));
END ram;
------------------------------------------------------------------

RAM sa ulazno-izlaznim (bidirekcionim) portom za podatke. Organizacija RAM-a sa


bidirekcionim portom za podatke prikazana je na Sl. 5-23. Struktura je slina onoj sa Sl.
5-22, s tom razlikom to se sada upis i itanje podataka vre preko istog porta, bidir. Kad je
wr_ena=1, a pod dejstvom rastue ivice taktnog signala, podatak spolja postavljen na port
bidir, upisuje se u re adresiranu vrednou koja je prisutnom na adresnom portu, addr.
Kad je wr_ena=0, podatak iz adresirane rei se prenosi na port bidir. Na taj nain, signal
wr_ena regulie smer bidirekcionog porta bidir: za wr_ena=1, bidir se ponaa kao ulazni,
a za wr_ena=0 kao izlazni port.

Sl. 5-23 RAM sa bidirekcionim portom za podatke


1
2
3
4
5
6
7
8
9
10

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
-----------------------------------------------------------------ENTITY RAM IS
PORT (wr_ena, clk : IN STD_LOGIC;
addr : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
bidir : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END RAM;

RAM
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

139

-----------------------------------------------------------------ARCHITECTURE ram OF RAM IS


TYPE mem_array IS ARRAY (0 TO 15) OF STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL memory : mem_array;
BEGIN
PROCESS(clk, wr_ena)
BEGIN
IF(wr_ena = '0') THEN
bidir <= memory(TO_INTEGER(UNSIGNED(addr)));
ELSE
bidir <= (OTHERS => 'Z');
IF(clk'EVENT AND clk='1') THEN
memory(TO_INTEGER(UNSIGNED(addr))) <= bidir;
END IF;
END IF;
END PROCESS;
END ram;
------------------------------------------------------------------

U gornjem VHDL kdu, koji opisuje RAM sa Sl. 5-23, uoimo liniju 9 u kojoj se deklarie
port bidir. Smer porta je postavljen na inout, to ukazuje da se radi o bidirekcionom portu.
Za opis funkcionisanja RAM-a koristi se proces (linije 19-26). Operacija itanja
(wr_ena=1) realizuje se na identian nain kao kod RAM-a sa dva porta: podatak iz
adresirane rei se prenosi na port bidir (linija 19). Meutim, operacija upisa (wr_ena=1)
dodatno zahteva da se port bidir postavi u stanje visoke impedanse (linija 21). Pod ovim
uslovom, podatak koji se uzima s porta bidir i pamti u nizu memory (linija 23) odreen je
vrednou koja se spolja postavlja na ovaj port. Fiziki, bidirekcioni portovi se realizuju
pomou trostatikih bafera, na ta ukazuje linija 21 u kojoj se na port postavlja vrednost Z
(v. 4.6).

6. KONANI AUTOMATI

Konani automati (prema eng. Finite State Machine FSM) predstavljaju najznaajniju
tehniku za modeliranje ponaanja sekvencijalnih kola, koja je naroito pogodna za
projektovanje pojedinih tipova digitalnih sistema (kao to su to upravljake jedinice) ija se
funkcija moe opisati precizno definisanom sekvencom aktivnosti. Koncept konanog
automata zasnovan je na sledeih pet entiteta: (a) stanja; (b) ulazni signali; (c) izlazni
signali; (d) funkcija sledeeg stanja i (e) funkcija izlaza. U svakom trenutku, automat je u
jednom od konanog broja svojih stanja. Novo (sledee) stanje automata odreeno je
funkcijom sledeeg stanja i zavisi kako od tekueg stanja, tako i od trenutnih vrednosti
ulaznih signala. Kod sinhronih konanih automata, prelaz u sledee stanje se kontrolie
signalom takta i deava se pod dejstvom aktivne ivice takta. Izlazna funkcija definie
vrednosti izlaznih signala. Signal ija vrednost zavisi iskljuivo od tekueg stanja automata
naziva se Murovim (Moore) izlazom. S druge strane, Milijev (Mealy) izlaz je izlazni signal
ija vrednost ne zavisi samo od tekueg stanja automata, ve i od trenutnih vrednosti
ulaznih signala. Konani automat iji su svi izlazi Murovog (Milijevog) tipa, naziva se
Murovim (Milijevim) automatom. Sloeniju konani automati obino poseduju izlaze oba
tipa.

Sl. 6-1 Blok dijagram konanog automata.

Na Sl. 6-1 je prikazan uopteni blok dijagram konanog automata. Ovaj dijagram je slian
konceptualnim dijagramima regularnih registarskih komponenti, kao to su to brojai i
pomeraki registri (v. 5.7). Meutim, za razliku od registarskih komponenti, kod kojih se
funkcija sledeeg stanja moe izraziti regularnim operacijama (npr. +, >>, ...), kod
konanih automat funkcija sledeeg stanja (a to vai i za funkciju izlaza) u optem sluaju
moe biti proizvoljna. Registar stanja je memorijski element, sinhronizovan sa globalnim
taktom, koji uva informaciju o tekuem stanje automata. Kad se konani automat realizuje
Goran Lj. orevi, Arhitetkture mikrosistema, 2009.

142

Konani automati

u hardveru, stanja automata se kodiraju, tako to se svakom stanju pridruuje jedinstveni nbitni kd. Informacija sadrana u registru stanja je upravo kd tekueg stanja automata.
Logika sledeeg stanja je kombinaciona mrea koja realizuje funkciju sledeeg stanja.
Njeni ulazi su tekue stanje (tj. izlazi registra stanja) i ulazni signali. Dijagram sa Sl. 6-1
odgovara uoptenom modelu konanog automata, koji sadri i Murove i Milijeve izlaze.
Murove izlaze generie kombinaciona mrea Murova izlazna logika, a Milijeve
kombinaciona mrea Milijeva izlazna logika.
Konani automati nalaze glavnu primenu u modeliranju sloenih operacija koje se mogu
razloiti na niz uzastopnih koraka. Kod sloenih digitalnih sistema, konani automati esto
igraju ulogu upravljake jedinice, koja koordinie rad ostalih sistemskih jedinica. Na fokus
e upravo biti ovaj aspekt konanih automata (tj. konani automat kao upravljaka
jedinica). Konani automati mogu da obavljaju i mnoge jednostavnije zadatke, kao to je
detekcija ulazne binarne sekvence zadatog oblika ili generisanje neke specifine izlazne
binarne sekvence.

6.1. Predstavljanje konanih automata


Projektovanje konanog automata poinje kreiranjem apstraktnog grafikog modela u vidu
dijagrama stanja ili u vidu ASM dijagrama. Iako vizuelno uoljivo razliiti, oba ova
dijagrama sadre sve potrebne informacije o konanom automatu (stanja, ulaze, izlaze,
funkciju sledeeg stanja i funkciju izlaza). ta vie, dijagram stanja se lako moe prevesti u
ekvivalentan ASM dijagram i obrnuto.

6.1.1. Dijagram stanja


Dijagram stanja se sastoji od vorova, koji se crtaju u vidu krugova i usmerenih potega (ili
grana) (Sl. 6-2). Svaki vor predstavlja jedno stanje konanog automata. voru je
pridrueno jedinstveno simboliko ime koje se zapisuje unutar kruga. Poteg predstavlja
prelaz iz jednog u drugo stanje i oznaen je uslovom pod kojim dolazi do prelaza. Uslov je
logiki izraz formiran od ulaznih signala. Prelaz je omoguen onda kada odgovarajui
logiki izraz dobije vrednost logike 1-ce, odnosno postane taan. Dijagram stanja definie
takoe i vrednosti izlaznih signala automata. Murovi izlazi su iskljuivo u funkciji stanja i
uobiajeno se zapisuju unutar vora. S druge strane, Milijevi izlazi zavise i od stanja i od
ulaza i zbog toga se pridruuju potezima i vezuju za odgovarajue uslove.

(a)
(b)
Sl. 6-2 Notacija u dijagramu stanja: (a) eksplicitna dodela vrednosti izlaznim signalima; (b)
implicitna dodela vrednosti izlaznim signalima navodi se spisak aktivnih signala. Napomena:
ime stanje je ST0; mo je Murov, a me Milijev izlaz. U sluaju pod (a), vrednost koja se dodeljuje
signalima mo i me moe biti 0 ili 1; u sluaju pod (b), signalima mo i me se dodeljuje
vrednost (1).

Predstavljanje konanih automata

143

Da bi se pojednostavilo zapisivanje, uobiajeno je da se u vorovima i na granama navode


imena samo onih izlaznih signala koji su postavljeni (tj. aktivni) u datom stanju, odnosno
pri datom prelazu. Pri tom se usvaja da izlazni koji nisu navedeni unutar vora ili na potegu
imaju podrazumevanu vrednost. Takoe, uobiajeno je da se pod aktivnom vrednou
signala smatra logiko 1, a pod podrazumevanom logika 0, osim ukoliko nije drugaije
naglaeno.
Radi potpunijeg razjanjenja koncepta dijagrama stanja, razmotriemo rad konanog
automata jednog hipotetikog kontrolera memorije (Sl. 6-3(a)). Kontroler igra ulogu
posrednika izmeu procesora i memorije, tako to interpretira komande koje izdaje
procesor i transformie ih u odgovarajue sekvence upravljakih signala kojima deluje na
memoriju. Procesor izdaje komande posredstvom signala mem, rw i burst. Signal mem je
postavljen na 1 uvek kada procesor zahteva pristup memoriji, dok signali rw i burst
ukazuju na zahtevani nain pristupa. Signal rw svojom vrednou, 0 ili 1, ukazuje da li
procesor zahteva itanje iz memorije (rw=1) ili upis u memoriju (rw=0). Signal burst
inicira jednu posebnu vrstu operacije itanja. Aktiviranjem ovog signala (uz istovremeno
mem=1) procesor zahteva od kontrolera memorije da automatski izvriti etiri uzastopne
operacija itanja. S druge strane, memorijsko kolo poseduje dva ulazna upravljaka signala,
oe (dozvola izlaza) i we (dozvola upisa). Pri oe=1 od memorije se zahteva da isporui
sadraj adresirane memorijske rei (operacija itanja), a pri we=1 da u adresiranu re
smesti dostavljeni podatak (operacija upisa). Radi jednostavnijeg prikaza, na Sl. 6-3(a) su
izostavljeni signali koji povezuju procesor i memoriju, a slue za prenos adrese i podatka.
Kontroler poseduje jo jedan izlaz, we_me, koji je uvrten u ovaj primer samo iz razloga
ilustracije Milijevog izlaza.
oe

mem
Procesor

rw
burst

Kontroler
memorije

we

Memorija

we_oe

clk
rst

(a)

(b)
Sl. 6-3 Kontroler memorije: (a) blok dijagram; (b) dijagram stanja.

144

Konani automati

Dijagram stanja kontrolera memorije prikazan je na Sl. 6-3(b). Inicijalno, kontroler je


stanju Idle1, u kojem eka da procesor zatrai pristup memoriji, tj. da aktivira signal mem.
Sve dok je izraz mem taan (tj. mem=0)2 kontroler ostaje u stanju Idle. Kad signal mem
postane aktivan, kontroler prelazi ili u stanje Read1 ili u stanje Write, zavisno od vrednosti
signala rw. Ako je izraz memrw taan (tj. mem=rw=1), kontroler prelazi u stanje Read1.
U ovom stanju aktivan je signal oe. S druge strane, ako je taan izraz memrw (tj.
mem=1 i rw=0), kontroler iz stanja Idle prelazi u stanje Write. U stanju Write aktivan je
izlazni signal we. Na prvu sledeu rastuu ivicu taktnog signala nakon ulaska u stanje
Read1, kontroler ispituje signal burst. Ako vai burst=0, operacija itanja je zavrena i
kontroler se vraa u stanje Idle. U suprotnom sluaju, ako vai burst=1, kontroler e u tri
naredna taktna ciklusa proi redom kroz stanja Read2, Read3 i Read4 pre nego to se vratiti
u poetno stanje Idle. Notacija -, koja se moe videti na pojedinim potezima, npr. na
potegu izmeu stanja Read4 i Idle, ili na potegu izmeu stanja Write i Idle, ukazuje na uvek
taan uslov. Poteg sa uvek tanim uslovom je uvek omoguen, a odgovarajui prelaz je
bezuslovan. Stoga, kontroler boravi u stanjima Read2, Read3 i Read4, kao i u stanju Write,
samo jedan taktni ciklus i ve sa prvom narednom rastuom ivicom takta nastavlja dalje.
Takoe, uoimo da se u dijagramu stanja sa Sl. 6-3(b) koristi implicitna dodela vrednosti
signalima. Naime, navedena su imena samo onih signala koji u datom stanju ili pri datom
prelazu imaju vrednost 1.
Pr. 6-1 Detektor ivice
Detektor ivice je sinhrono (taktovano) kolo sa jednim ulazom, strobe, i jednim izlazom, p.
Ulazni signal strobe je sporo promenljiv u odnosu na takt kola. Na izlazu p generie se
kratkotrajan impuls (trajanja jednog taktnog perioda) uvek kada se strobe promeni s 0 na
1. Na cilj je da rad ovog kolo opiemo u vidu dijagrama stanja. Osnovna ideja se sastoji u
tome da se konstruie konani automat koji e imati barem dva stanja, stanje zero i stanje one,
koja e ukazivati na injenicu da je ulazni signal strobe ve neko due vreme na nivou logike
0, odnosno logike 1, a da se izlaz p aktivira onda kad automat prelazi iz stanja zero u
stanje one. Razmotriemo dva mogua reenja. Prvo je dato u obliku konanog automata
Murovog, a drugo u obliku konanog automata Milijevog tipa.
Murov konani automat detektora ivice prikazan je na Sl. 6-4(a). Kao to se moe videti, ovaj
automat, osim stanja zero i one, poseduje jo jedno meustanje, edge. U stanju zero, automat
eka da ulazni signal strobe dobije vrednost 1, a za sve to vreme na izlazu je p=0. Onda
kad se strobe promeni na 1, automat prelazi u stanje edge u kojem je vrednost izlaznog
signal p jednaka 1. Budui da se u normalnom reimu rada nivo signala strobe ne moe
promeniti tako brzo, automat ostaje u stanju edge samo za vreme jednog taktnog perioda i
ve sa sledeom rastuom ivicom takta prelazi u stanje one. U ovom stanju, u kome ponovo
vai p=0, automat ostaje sve dok se vrednost signala strobe ne vrati na 0, a onda prelazi u
stanje zero. Ako se ipak desi da strobe=1 traje krae od jedne periode takta, automat nee iz
stanje edge prei u stanje one, ve e se vratiti u stanje zero.
Vremenski dijagrami koji opisuju rad ovog automata prikazani su u gornjem delu Sl. 6-4(c).
Vidimo da promena ulaza strobe, sama po sebi, ne dovodi do prelaza iz stanja zero u stanje
edge, ve se ovaj prelaz inicira rastuom ivicom takta pod uslovom da u tom trenutku

1
2

Re Idle znai pasivno, neaktivno.


mem je isto to i mem (komplement od mem)

Predstavljanje konanih automata

145

(trenutak t1) vai strobe=1. Poto je p Murov izlaz, pridruen stanju edge, p=1 traje tano
jedan taktni period. Izlaz p=1 bi trajao jedan taktni period i da se strobe promeni na 0 i pre
isteka stanja edge (tj. pre t2), jer p ne zavisi od ulaza, ve samo od stanja.

(a)

(b)

(c)
Sl. 6-4 Dijagram stanja detektora ivice: (a) Murov konani automat; (b) Milijev konani automat;
(c) vremenski dijagrami.

Druga varijanta detektora ivice zasnovana je na konanom automatu Milijevog tipa (Sl.
6-4(b)). Dijagram stanja ovog automata sadri samo dva stanja zero i one. Kad se u stanju
zero ulaz strob promeni s 0 na 1, automat prelazi u stanje one. Kad u stanju one ulaz strobe
vrati na 0 i automat se vraa u stanje zero. Gledajui ovaj dijagram stanja, ini se kao da se
izlaz p, koji je sada Milijevog tipa, postavlja na 1 samo u trenutku promene stanja. Meutim,
to nije tako, ve se p postavlja na 1 u istom trenutka kada, za vreme stanja zero, ulaz strobe
postane 1 i ostaje aktivan sve do naredne rastue ivice takta kad automat prelazi u stanje
one. Vremenski dijagrami za ovaj konani automat prikazani su u donjem delu Sl. 6-4(c). Kao
to se moe videti, u stanju zero izlazni signal p prati promene ulaza strobe, dok je u stanju
one njegova vrednost 0.
Izmeu Murovih i Milijevih automata postoje tri glavne razlike. Prvo, kod Milijevih
automata, po pravilu, potreban je manji broj stanja za opis iste funkcionalnosti. Dugo,
odziv Milijevog automata je bri. Poto su Milijevi izlazi u funkciji ulaza, oni se menjaju
istog trenutka kad vrednosti ulaza zadovolje zadati uslov. S druge strane, odziv Murovog

146

Konani automati

automata se odlae do sledeeg stanja. Trea razlika se odnosi na kontrolu irine i


tajminga izlaznih signala. irina (trajanje) izlaznog signala Milijevog tipa odreena je
irinom ulaznog signala. Milijev izlaz se aktivira u momentu kad ulaz zadovolji postavljeni
uslov, a deaktivira onda kad automat pree u novo stanje. S druge strane, irina izlaznog
signala Murovog tipa je priblina periodi taktnog signala.

6.1.2. ASM dijagram


Dijagram stanja je pogodno sredstvo za predstavljanje konanih automata sa malim brojem
ulaza i izlaza. Meutim, za predstavljanje sloenijih automata, a pre svega onih koji se
koriste za modeliranje algoritama koji se realizuju u hardveru, projektanti obino koriste
tzv. algoritamske maine stanja, ili ASM dijagrame (prema eng. Algorithmic State
Machine).
ASM dijagram se sastoji od vie povezanih ASM blokova. Svaki ASM blok sadri jedan
blok stanja i, opciono, jedan ili vie povezanih blokova grananja i blokova uslovnog izlaza.
Tipian ASM blok je prikazan na Sl. 6-5. Blok stanja se crta u vidu pravougaonika i slui
za predstavljanje jednog stanja konanog automata. Ekvivalentan je voru iz dijagrama
stanja. Simboliko ime stanja pie se izvan bloka stanja, obino uz njegov gornji levi ugao.
Unutar bloka stanja navode se vrednosti koje izlazni signali Murovog tipa imaju za vreme
dok je automat u datom stanju. Uobiajeno je da se u bloku stanja ne navode svi signali i
njihove vrednosti, ve samo spisak imena signala koji su aktivni u konkretnom stanju. Za
signale koji su izostavljeni iz spiska, podrazumeva se da su neaktivni. Kao i za dijagram
stanja, pod aktivnom vrednou signala smatra se logiko 1, a pod podrazumevanom
logika 0, osim ukoliko nije drugaije reeno. Na primer, da bi se naglasilo da u datom
stanju izlaz z ima vrednost 1, dovoljno je u odgovarajuem bloku stanja napisati samo z
umesto z<=1. Ako automat poseduje jo jedan izlaz, y, koji nije naveden u posmatranom
bloku stanja, tada u tom stanju vai: y=0 .

Sl. 6-5 ASM blok.

Blok grananja se crta kao romb sa jednom ulaznom i dve izlazne grane. Unutar romba je
zapisan uslov koji odreuje koja e od njegove dve izlazne grane biti izabrana. Uslov
kombinuje jedan ili vie ulaza konanog automata u logiki izraz ija vrednost moe biti
tano (1 ili T) ili netano (0 ili F). Na primer, w napisano u bloku grananja znai da
je odluka zasnovana na vrednosti signala w (ako je w=1, nastavljamo putem tano (T), a
ako je w=0, putem netano (F)). Slino, uslov w1w2 bi znaio da e grana tano biti

Predstavljanje konanih automata

147

izabrana ako su oba signala jednaka 1, tj. w1=w2=1, a da e u svim ostalim sluajevima
automat slediti granu netano. Osim logikih, kao uslovi u bloku grananja mogu se koristiti
i relacioni izrazi, kao npr. A > B ili C D (C razliito od D).
Blok uslovnog izlaza se crta u vidu zaobljenog pravougaonika i sadri izlaze Milijevog
tipa, odnosno izlaze ije vrednosti zavise kako od tekueg stanja, tako i od trenutnih
vrednosti ulaza automata. Blok uslovnog izlaza uvek sledi posle jednog ili vie blokova
grananja, a nikad neposredno posle bloka stanja. Kao i u sluaju bloka stanja, u bloku
uslovnog izlaza navode se samo aktivni signali. Na primer, da je u bloku grananja iz ASM
bloka sa Sl. 6-5 upisano w, a u bloku uslovnog izlaza z, to bi znailo da e izlaz z imati
vrednost 1 onda kada je automat u posmatranom stanju i pri tom vai w=1.
Ponaanje sinhronog konanog automat se najbolje moe objasniti kroz opis aktivnosti
obuhvaenih jednim ASM blokom:
1. Sa svakom rastuom ivicom taktnog signala konani automat ulazi u novo stanje, tj. u
novi ASM blok.
2. U toku trajanja jedne periode takta, konani automat obavlja nekoliko operacija:
postavlja Murove izlaze iz bloka stanja, ispituje logike uslove iz blokova grananja i
shodno ishodu ovih ispitivanja postavlja Milijeve izlaze iz blokova uslovnog izlaza. Pri
tom Murovi izlazi zadravaju istu vrednost tokom celokupnog taktnog perioda, jer
zavise samo od stanja, dok se Milijevi mogu menjati pod uticajem eventualni promena
ulaza.
3. Sa sledeom rastuom ivicom takta (kojom se zavrava tekui taktni period), simultano
se ispituju logiki uslovi iz svih blokova grananja i odreuje izlazna grana du koje e
konani automat prei u novi ASM blok (ili ostati u istom).
Konverzija dijagrama stanja u ASM dijagram. Svaki dijagram stanja se moe konvertovati
u ekvivalentni ASM dijagram i obratno. Svakom ASM bloku (blok stanja sa pridruenim
blokovima grananja i blokovima uslovnog izlaza) iz ASM dijagrama, u dijagramu stanja
odgovara jedan vor zajedno s potezima koji izviru iz tog vora. Klju za konverziju je
transformacija logikih izraza sa potega iz dijagrama stanja u blokove grananja u ASM
dijagramu. Postupak konverzije bie ilustrovan kroz sledea etiri primera.
Prvi primer je prikazan na Sl. 6-6. Radi se o konanom automatu u kome ne postoje
grananja, a dijagram stanja i ASM dijagram su gotovo identini. Automat osciluje izmeu
stanja ST0 i ST1, tako to sa svakom rastuom ivicom takta bezuslovno prelazi iz jednog u
ono drugo stanje. Automat poseduje samo jedan i to Murov izlaz, y, koji u stanju ST0 ima
vrednost 1, a u stanju ST1, vrednost 0.
ST0

ST0
y

-/

y
-/

ST1
ST1

(a)

(b)

Sl. 6-6 Prvi primer konverzije dijagrama stanja u ASM dijagram: (a) dijagram stanja; (b) ASM
dijagram.

148

Konani automati

(a)

(b)

Sl. 6-7 Drugi primer konverzije dijagrama stanja u ASM dijagram: (a) dijagram stanja; (b)
ASM dijagram.
ST0
y1
0

a
1

y0
ST1

ST2
y1

(a)
(b)
Sl. 6-8 Trei primer konverzije dijagrama stanja u ASM dijagram: (a) dijagram stanja; (b)
ASM dijagram.

U konanom automatu iz drugog primera postoje dva izlazna potega iz stanja ST0, a
jednom od njih pridruen je Milijev izlaz (Sl. 6-7). Logiki izrazi a i a s ovih potega
transformiu se u jedan blok grananja koji ispituje vrednost signala a. Uoimo da se dva
stanja prevode u dva ASM bloka. Napomenimo da blok grananja i blok uslovnog izlaza iz
ASM bloka stanja ST0 nisu nova stanja, ve su to samo dodatne aktivnosti pridruene
ovom stanju.
U treem primeru, iz stanja ST0 izviru tri potega (Sl. 6-8). Logiki izrazi s ovih potega, u
ASM dijagramu su pokriveni sa dva bloka grananja koji su tako povezani da zajedno imaju
tri izlaza od kojih svaki odgovara jednom potegu koja naputa vor ST0. Automat ostaje u
stanju ST0 za a=0; u stanje ST1 prelazi za a=1 i b=1, a u stanje ST2 za a=1 i b=0.
Konani automat sa Sl. 6-8 je primer automata koji poseduje izlaze oba tipa. Signal y1 je
Murov izlaz koji je aktivan u stanjima ST0 i ST2, a neaktivan u stanju ST1. Signal y0 je
Milijev izlaz koji je aktivan u stanju ST0 pod uslovom da vai a=1 i b=0. U svim
ostalim stanjima i pri svim ostalim uslovima, izlaz y0 ima vrednost 0.

Predstavljanje konanih automata

149

U etvrtom primeru konverzije dijagrama stanja u ASM dijagram (Sl. 6-9), Milijevi izlazi,
y1 i y2, koji su pridrueni potegu iz stanja ST0 u ST1, zavise od razliitih uslova. Automat
prelazi iz stanja ST0 u stanje ST1 za a=1 i pri tom aktivira Miliev izlaz y1. Dodatno, ako
vai b=0, izlaz y2 e imati vrednost 1. U ovakvim i slinim situacijama, ASM dijagram
predstavlja bolji izbor, jer moe na jasniji nain da prikae sloenije uslove prezala i
postavljanja Milijevih izlaza.
ST0
y0
0

a
1
y1
0

b
1

y2

ST1

(a)

(b)

Sl. 6-9 etvrti primer konverzije dijagrama stanja u ASM dijagram: (a) dijagram stanja; (b)
ASM dijagram.

Pr. 6-2 ASM dijagram kontrolera memorije

Sl. 6-10 ASM dijagram kontrolera memorije.

150

Konani automati

Na Sl. 6-10 je prikazan ASM dijagram koji je funkcionalno ekvivalentan dijagramu stanja
kontrolera memorije sa Sl. 6-3(b). Iako to nije obavezno, ASM blokovi iz dijagrama sa Sl.
6-10 su uokvireni, ba kao i ASM blokovi iz prethodnih primera, a iz razloga da bi se na
oigledan nain obuhvatile sve aktivnosti koje se obavljaju u svakom pojedinanom stanju.
ASM blok stanja Idle je funkcionalno najsloeniji. U ovom ASM bloku ispituju se dva
ulazna signala, mem i rw, i postavlja jedan uslovni (Milijev) izlaz, we_me. U stanju Read1,
aktivan je izlazni signal oe i dodatno se ispituje ulazni signal burst da bi se odredio tip
operacije itanja. U stanjima Write, Read2, Read3 i Read4, osim postavljanja izlaznog
signala we, odnosno oe, ne obavljaju se nikakve druge aktivnost, a prelaz u sledee stanje je
bezuslovan.
Kao to je ve napomenuto, dijagram stanja i ASM dijagram sadre iste informacije o
konanom automatu. Zahvaljujui blokovima grananja i strukturi koja nalikuju softverskom
dijagramu toka, ASM dijagram prua pregledniji prikaz sloenih uslova koji reguliu
prelaze izmeu stanja i postavljanje Milijevih izlaza. S druge strane, konani automati sa
jednostavnim uslovima prelaza na pregledniji nain se predstavljaju pomou dijagrama
stanja.

6.2. Opis konanog automata u VHDL-u


Postupak kreiranja VHDL opisa konanih automata slian je postupku koji se koristi pri
pisanju VHDL opisa regularnih sekvencijalnih kola. Slino kao kod regularnih
sekvencijalnih kola, neophodni su kdni segmenti za opis memorijskih elementa (registar
stanja), logike sledeeg stanja i logike izlaza. Meutim, postoje sledee dve bitne razlike.
Prvo, kod konanih automata se koriste simbolika imena stanja, koja se u VHDL-u
predstavljaju nabrojivim tipom podataka. Drugo, logika sledeeg stanja konanog automata
se ne moe svesti na regularnu kombinacionu mreu (inkrementer, pomera, multiplekser,
...), ve se kd pie u skladu sa dijagramom stanja ili ASM dijagramom.
Za opis konanih automata u VHDL-u razvijeno je vie standardnih pristupa ili kdnih
ablona. U ovom odeljku bie predstavljena dva takva pristupa na primeru konanog
automata kontrolera memorije.

6.2.1. Viesegmentni kdni ablon


Prvi nain za kreiranje VHDL opisa konanog automata polazi od blok dijagrama sa Sl.
6-1. Svaki blok iz ovog dijagrama opisuje se u vidu zasebnog kdnog segmenta. Iz
perspektive VHDL-a, jasno je da e registar stanja zahtevati proces, dok preostala tri
kombinaciona bloka nee. Meutim, kako procesom moe biti opisana ne samo
sekvencijalna ve i kombinaciona logika, svi delovi automata se po pravilu opisuju pomou
zasebnih procesa. Sledi kompletan viesegmentni VHDL opis kontrolera memorije.
1
2
3
4
5
6
7
8

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY mem_ctrl IS
PORT (clk, rst : IN STD_LOGIC;
mem, rw, burst : IN STD_LOGIC;
oe, we, we_me : OUT STD_LOGIC);

Opis konanog automata u VHDL-u


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

151

END mem_ctrl;
-----------------------------------------------------------------ARCHITECTURE multi_seg_arch of mem_ctrl IS
TYPE state IS (IDLE, READ1, READ2, READ3, READ4, WRITE);
SIGNAL pr_state, nx_state : state;
BEGIN
-- registar stanja --------------------------------------------PROCESS(clk, rst)
BEGIN
IF(rst = '1') THEN
pr_state <= IDLE;
ELSIF( clk'EVENT AND clk = '1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
-- logika sledeceg stanja -------------------------------------PROCESS(pr_state, mem, rw, burst)
BEGIN
CASE pr_state IS
WHEN IDLE =>
IF(mem = '1') THEN
IF(rw = '1') THEN
nx_state <= READ1;
ELSE
nx_state <= WRITE;
END IF;
ELSE
nx_state <= IDLE;
END IF;
WHEN WRITE =>
nx_state <= IDLE;
WHEN READ1 =>
IF(burst = '1') THEN
nx_state <= READ2;
ELSE
nx_state <= IDLE;
END IF;
WHEN READ2 =>
nx_state <= READ3;
WHEN READ3 =>
nx_state <= READ4;
WHEN READ4 =>
nx_state <= IDLE;
END CASE;
END PROCESS;
-- logika za Murove izlaze ------------------------------------PROCESS(pr_state)
BEGIN
we <= '0';
-- podrazumevana vrednost
oe <= '0';
-- podrazumevana vrednost
CASE pr_state IS
WHEN IDLE =>
WHEN WRITE =>
we <= '1';
WHEN READ1 =>

152
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

Konani automati

oe <= '1';
WHEN READ2 =>
oe <= '1';
WHEN READ3 =>
oe <= '1';
WHEN READ4 =>
oe <= '1';
END CASE;
END PROCESS;
-- logika za Milijeve izlaze ----------------------------------PROCESS(pr_state, mem, rw)
BEGIN
we_me <= '0'; -- podrazumevana vrednost
CASE pr_state IS
WHEN IDLE =>
IF(mem = '1') AND (rw = '0') THEN
we_me <= '1';
END IF;
WHEN WRITE =>
WHEN READ1 =>
WHEN READ2 =>
WHEN READ3 =>
WHEN READ4 =>
END CASE;
END PROCESS;
END multi_seg_arch;
------------------------------------------------------------------

U okviru deklarativnog dela arhitekture definisan je korisniki tip podataka state koji sadri
simbolika imena svih stanja konanog automata (linija 12). Ovaj tip podataka se potom
koristi za deklaraciju dva signala: pr_state i nx_state (linija 13). Signal pr_state (od eng.
present state tekue stanje) igrae ulogu registra stanja, a signal nx_state (od eng. next
state sledee stanje) ulogu izlaza iz logike sledeeg stanja (v. Sl. 6-1). Telo arhitekture
sadri etiri procesa. Prvi proces opisuje registar stanja (linije 15-23). Kd nalikuje opisu
regularnog registra, s tom razlikom to se za signal pr_state koristi korisniki definisan tip
podataka, a ne tip std_logic_vector. To znai da su jedine vrednosti koje se mogu dodeliti
ovom signalu one koje su u vidu simbolikih imena stanja konanog automata nabrojane u
definiciji tipa state. Za inicijalizaciju registra stanja koristi se asinhrono resetovanje.
Aktiviranjem signala rst konani automata forsirano prelazi u inicijalno stanje, tj. u stanje
idle.
Sledei proces (linije 24-53) opisuje logiku sledeeg stanja. Zadatak ovog procesa je da na
osnovu tekueg stanja (pr_state) i trenutnih vrednosti ulaza (mem, rw i burst) odredi novo
stanje automata (nx_state). Kd je napisan u saglasnosti sa ASM dijagramom sa Sl. 6-10.
Proces sadri case naredbu u kojoj se tekue stanje automata koristi kao uslov za grananje.
Za svako stanje, u naredbi case postoji jedna grana u kojoj se nakon eventualnih dodatnih
ispitivanja ulaza odreuje novo stanje automata i njegovo simboliko ime dodeljuje signalu
nx_state. Napomenimo da e u trenutku naredne ivice taktnog signala, vrednost signala
nx_state biti upisana u registar stanja (pr_state) i tako postati novo stanje automata. Kd za
svaku granu naredbe case direktno sledi na osnovu ASM bloka odgovarajueg stanja. Kod
jednostavnih ASM blokova, kao to je npr. blok za stanje Read4, gde postoji samo jedan
izlazni poteg, kd za signal nx_state je trivijalan: nx_state <= IDLE (linija 51). Kod ASM
blokova sa vie izlaznih potega, za kdiranje blokova grananja koristi se naredba if.

Opis konanog automata u VHDL-u

153

Kaskadno povezani blokovi grananja, poput onih iz ASM bloka za stanje Idle, prevode se u
ugnjedene if naredbe:
IF(mem = '1') THEN
IF(rw = '1') THEN
nx_state <= READ1;
ELSE
nx_state <= WRITE;
END IF;
ELSE
nx_state <= IDLE;
END IF;

Uoimo da iz ASM blok za stanje Idle izlaze tri potega i da se zbog toga signalu nx_state, a
u zavisnosti od ulaza mem i rw, dodeljuje jedna od tri vrednosti: read1, write ili idle.
Trei proces (linije 54-72) opisuje logiku za Murove izlaze, we i oe. Poto izlazni signali
Murovog tipa zavise iskljuivo od tekueg stanja, pr_state je jedini signal u listi
senzitivnosti ovog proces. Kao i u prethodnom procesu, kriterijum za grananje u naredbi
case zasnovan je na vrednosti signal pr_state. Uoimo da se na poetku procesa signali we i
oe postavljaju na podrazumevane vrednosti (linija 57-58):
we <= '0';
oe <= '0';

Kada u nekom stanju treba aktivirati neki od ova dva izlazna signala, tada se u
odgovarajuoj grani case naredbe podrazumevana vrednost tog signala prepisuje aktivnom
(naredbom we <= '1' ili oe <= '1').
etvrti proces (linije 73-88) opisuje logiku za Milijeve izlaze (signal we_me). Uoimo da
se sada u listi senzitivnosti osim signala za tekue stanje, pr_state, nalaze i neki od ulaznih
signala. U procesu, naredba case slui za grananje na tekue stanje, a naredba if za
realizaciju blokova grananja koji vode do blokova uslovnog izlaza u kojima se aktiviraju
Milijevi izlazi. U datom primeru, signal we_me je aktivan samo u stanju Idle i to pod
uslovom da vai: mem=1 i rw=0. U svim ostalim sluajevima, we_me zadrava
podrazumevanu vrednost, 0, koja mu je dodeljena na poetku procesa.
Tri od etiri procesa iz viesegmentne arhitekture VHDL opisa kontrolera memorije,
zasnovana su na naredbi case. To je uinjeno namerno, da bi se na to jasniji nain
pokazala veza izmeu ASM dijagrama i VHDL kda. Meutim, pojedine delove ovog
opisa je mogue kdirati i na kompaktniji nain. Na primer, za postavljanje Milijevog
izlaza we_me dovoljna je samo jedna konkurentna when naredbe:
we_me <=1 WHEN ((pr_state = IDLE) AND (mem=1) AND (rw=0)) ELSE
0;

6.2.2. Dvosegmentni kodni ablon


Kod dvosegmentnog naina opisivanja, konani automat se deli na dva segmenta:
sekvencijalni i kombinacioni. Sekvencijalni segment realizuje registar stanja, dok
kombinacioni objedinjuje sve kombinacione delove konanog automata: logiku sledeeg
stanja, logiku Murovih i logiku Milijevih izlaza. Na Sl. 6-11 je prikazan blok dijagram
kontrolera memorije koji je usklaen sa dvosegmentnim kodnim ablonom.

154

Konani automati

Sl. 6-11 Blok dijagram dvosegmentnog kontrolera memorije.

Ispod je dat VHDL opis kontrolera memorije koji je napisan u skladu sa dvosegmentnim
kodnim ablonom. Dva kdna segmenta su realizovana kao dva procesa. Prvi proces (linije
7-14) realizuje registar stanja i identian je prvom procesu iz viesegmentnog ablona, dok
drugi (linije 16-52) objedinjuje funkcije preostala tri kombinaciona procesa iz
viesegmentnog opisa. Ovaj proces ima dvostruku namenu: (a) postavlja Murove i Milijeve
izlaze i (b) odreuje sledee stanje automata. Centralno mesto u kdu kombinacionog
procesa zauzima naredba case, ija svaka when grana odgovara jednom stanju automata. Za
svako stanje, ispituju se vrednosti ulaza i postavljaju odgovarajue vrednost izlaza i
sledeeg stanja, nx_state. Naredba case iz ovog procesa zapravo predstavlja formalni opis
dijagrama stanja: svakom stanju (tj. voru iz dijagrama stanja) odgovara jedna when grana,
a svakom potegu koji izvire iz datog stanja jedna if grana u odgovarajuoj when grani.
Budui da su u listi senzitivnosti navedeni svi ulazni signali i da su sve ulazno-izlazne
kombinacije pokrivene kdom, ovaj proces se sintetie u kombinacionu logiku.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

-----------------------------------------------------------------ARCHITECTURE two_seg_arch of mem_ctrl IS


TYPE state IS (IDLE, READ1, READ2, READ3, READ4, WRITE);
SIGNAL pr_state, nx_state : state;
BEGIN
-- registar stanja --------------------------------------------PROCESS(clk, rst)
BEGIN
IF(rst = '1') THEN
pr_state <= IDLE;
ELSIF( clk'EVENT AND clk = '1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
-- logika sledeceg stanja/izlaza ------------------------------PROCESS(pr_state, mem, rw, burst)
BEGIN
oe <= '0';we <= '0';
we_me <= '0';
CASE pr_state IS
WHEN IDLE =>
IF(mem = '1') THEN
IF(rw = '1') THEN
nx_state <= READ1;
ELSE
nx_state <= WRITE;
we_me <= '1';

Opis konanog automata u VHDL-u


28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

155

END IF;
ELSE
nx_state <= IDLE;
END IF;
WHEN WRITE =>
nx_state <= IDLE;
we <= '1';
WHEN READ1 =>
IF(burst = '1') THEN
nx_state <= READ2;
ELSE
nx_state <= IDLE;
END IF;
oe <= '1';
WHEN READ2 =>
nx_state <= READ3;
oe <= '1';
WHEN READ3 =>
nx_state <= READ4;
oe <= '1';
WHEN READ4 =>
nx_state <= IDLE;
oe <= '1';
END CASE;
END PROCESS;
END two_seg_arch;
------------------------------------------------------------------

6.2.3. Sinhrona inicijalizacija konanog automata


U oba prethodno predstavljena kodna ablona, inicijalizacija automata se obavlja pomou
signala za asinhrono resetovanje registra stanja. Pod dejstvom ovog signala, u registar
stanja se asinhrono, tj. nezavisno od taktnog signala, upisuje kd inicijalnog (poetnog)
stanja. Meutim, u nekim situacijama je bolje, ili se to eksplicitno zahteva, da se
inicijalizacija konanog automata obavi sinhrono. To se postie uvoenjem signala za
sinhronu inicijalizaciju, ili sinhrono resetovanje, syn_rst. Ovaj signal se tretira kao bilo koji
drugi ulazni signal automata, a postavljen na 1 inicira prelaz automata iz bilo kog stanja u
inicijalno stanje. U kontekstu dijagrama stanja, uvoenje sinhrone inicijalizacije
podrazumeva da se za svako stanje vee po jedna dodatna grana sa uslovom syn_rst=1
koja e biti usmerena ka inicijalnom stanju. Pri tom uslove svih regularnih grana treba
proiriti lanom syn_rst, kao to je ilustrovano na Sl. 6-12.

izraz1

izraz2

ka stanju Si

ka stanju Sj

(a)
(b)
Sl. 6-12 Uvoenje sinhrone inicijalizacije u dijagram stanja: (a) polazno stanje; (b)
modifikovano stanje, sa sinhronim resetom.

156

Konani automati

Iako uvoenje sinhrone inicijalizacije znaajno komplikuje dijagram stanja ili ASM
dijagram, odgovarajua intervencija na nivou VHDL opisa je gotovo trivijalna. Dovoljno je
modifikovati samo proces registra stanja, tako da se resetovanje registra obavlja sinhrono, a
ne asinhrono:
-- registar stanja ------------------------------------------------PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk = '1') THEN
IF(syn_rst = '1')
pr_state <= IDLE;
ELSE
pr_state <= nx_state;
END IF;
END IF;
END PROCESS

6.3. Kodiranje stanja konanog automata


Kodiranje stanja predstavlja obavezan korak u procesu sinteze konanih automata. Cilj
ovog koraka je zamena simbolikih imena stanja binarnim kombinacijama. Pri tom ne
postoji neko striktno ogranienje koje se tie dodele binarnih kodova stanjima osim zahteva
da svako stanje treba da bude kodirano jedinstvenom binarnom kombinacijom. Zbog toga,
broj razliitih kodiranja stanja jednog istog automata moe biti veoma veliki. Na primer,
stanja konanog automata sa etiri stanja S0, S1, S2 i S3 mogu se kodirati sa dva bita,
odnosno binarnim kombinacijama: 00, 01, 10 ili 11. U ovom sluaju, postoje 4!=24
razliita kodiranja stanja, kao to je prikazano u tabeli T. 6-1. Iako funkcionalno
ekvivalentna, razliita kodiranja nisu ravnopravna u pogledu sinteze, jer promenom
kodiranja dolazi i do promene funkcije kombinacione logike konanog automata, koja za
jedno kodiranje moe biti sloenija, a za neko drugo jednostavnija.
T. 6-1 Alternativna kondiranje stanja automata sa 4 stanja.
#
1
2
3
4
5
6
7
8

S0
00
00
00
00
00
00
01
01

S1
01
01
10
10
11
11
00
00

S2
10
11
01
11
00
10
10
11

S3
11
10
11
01
10
01
11
10

#
9
10
11
12
13
14
15
16

S0
01
01
01
01
10
10
10
10

S1
10
10
11
11
00
00
01
01

S2
00
11
00
10
01
11
00
11

S3
11
00
10
00
11
01
11
00

#
17
18
19
20
21
22
23
24

S0
10
10
11
11
11
11
11
11

S1
11
11
00
00
01
01
10
10

S2
00
01
01
10
00
10
00
01

S3
01
00
10
01
10
00
01
00

Pronalaenje optimalnog koda, tj. kodiranja pri kome e sloenost kombinacione logike
konanog automata biti najmanja, predstavlja veoma teak problem. Zbog toga se prilikom
sinteze konanog automata projektanti obino odluuju za jednu od nekoliko standardnih
ema (ili heuristika) za kodiranja stanja. U sutini, kodiranje stanja konanog automata
moe se razloiti na dva potproblema. Prvi se odnosi na izbor broja bita, n, koji e biti
korieni za kodiranje, a drugi na pridruivanje n-bitnih kodova stanjima. Neke od esto
korienih ema kodiranja su:

Binarno kodiranje koristi se minimalan broja bita za kodiranje, koji za konani


automat sa N stanja iznosi n = log 2 N . Na primer, za 4 stanja potrebna su dva, a za

Kodiranje stanja konanog automata

157

pet tri bita. Pri tom redosled po kome se stanjima pridruuju n-bitni kodovi moe biti
proizvoljan. Ovaj pristup garantuje da e broj flip-flopova u sintetizovanom hardveru
biti najmanji mogui, ali e zato kombinaciona logika, po pravilu, biti neto sloenija.

Onehot kodiranje - broj bita za kodiranje jednak je broju stanja (n=N). Svakom
stanju se dodeljuje jedan bit iz N bitne binarne kombinacije koji kada je jednak 1
ukazuje da je konani automat u tom stanju. Na primer, za kodiranje automat sa etiri
stanja, koriste se sledee etiri binarne kombinacije: 0001, 0010, 0100 i 1000. Onehot
kodiranje zahteva veliki broj flip-flopova i zbog toga nije praktino za konane
automate sa velikim brojem stanja, ali je zato, s druge strane, kombinaciona logika
rezultujue hardverske realizacije obino znaajno jednostavnija i bra nego kada se
koristi binarnog kodiranja. Onehot kodiranje se preporuuje u sluajevima kad je broj
stanja relativno mali, a za implementaciju se koristi tehnologija koja je bogata flipflopovima, kao to je FPGA.

Grejov (Gary) kd koristi se minimalan broj bita za kodiranje, kao kod binarnog
kodiranja, ali je zato pravilo za dodelu kodova stanjima sloenije, jer se tei da se
susednim stanjima (tj. povezanim stanjima) dodeljuju binarni kodovi koje se razlikuju
na to manjem broju bitskih pozicija. Na taj nain se, indirektno, smanjuje sloenost
logike sledeeg stanja.

U svim prethodnim primerima VHDL opisa konanih automata, stanja su kodirana na


simboliki nain, pomou nabrojivog tipa podataka koji definie imena stanja, ali ne i
njihove binarne kodove. Ovakav stil modeliranja konanih automata se oslanja na podrku
alata za sintezu koji e prilikom kompajliranja VHDL kda simbolika imena stanja
zameniti binarnim kodovima u skladu sa izabranom emom kodiranja. Na primer, u CAD
sistemu ISE, koji se koristi za projektovanje na Xilinx FPGA platformama, heuristika
kodiranja stanja se zadaje pomou atributa koji se pridruuje nabrojivom tipu podataka za
stanja. Ovaj atribut se definie u deklarativnom delu arhitekture posle deklaracije
nabrojivog tipa:
. . .
ARCHITECTURE <ime_arhitekture> OF <ime_entiteta> IS
TYPE state IS (state_0,state_1,state_2 ...);
attribute fsm_encoding : string;
attribute fsm_encoding of state is gray
SIGNAL pr_state,nx_state : state;
BEGIN . . .

Prva od dve linije kda posveenih specifikaciji heuristike kodiranja stanja deklarie atribut
imena fsm_enciding, a druga pridruuje ovaj atribut tipu podataka state i dodeljuje mu
vrednost gray, koja odgovara Grejovom kodu. Ako se u VHDL kdu heuristika
eksplicitno ne navede, alat e koristi podrazumevanu opciju (kod Xilinx ISE to je onehot).
Nain specifikacije heuristike kodiranja moe biti drugaiji za neki drugi CAD sistem. Ako
projektant eli da samostalno kodira stanja konanog automata, tada se binarne
kombinacije pridruuju stanjima takoe pomou atributa koji se vezuje za nabrojivi tip
podataka state, na sledei nain:
. . .
ARCHITECTURE FSM OF detektor_bit_oblika IS
TYPE state IS (S0, S1, S2, S3);
attribute enum_encoding of state: type is "00 10 11 01";
SIGNAL pr_state, nx_state : state;
BEGIN . . .

158

Konani automati

String dodeljen atributu enum_encoding sadri niz od etiri 2-bitne binarne kombinacije
koje se redom dodeljuju stanjima S0, S1, S2 i S3. Napomenimo da ovakav nain runog
kodiranja vai za Xilinx ISE sistem.

6.4. Primeri konanih automata


Pr. 6-3 Jednostavan konani automat
Na Sl. 6-13 su prikazani blok dijagram i dijagram stanja jednog jednostavnog konanog
automata Murovog tipa. Konani automat ima tri ulaza, a, b i d, jedan izlaz, x, i dva stanja,
stateA i stateB. Do promene stanja dolazi uvek kad je d=1. Konani automat ostaje u
zateenom stanju za sve vreme dok vai d=0. U stanju stateA na izlaz x se prenosi
vrednost ulaza a (x=a), a u stanju stateB vrednost ulaza b (x=b). Poetno stanje konanog
automata je stanje stateA. Sledi VHDL opis konanog automata Sl. 6-13 napisan u skladu
sa dvosegmentnim kdnim ablonom.
a
b

FSM

d
clk rst

(a)

(b)

Sl. 6-13 Konani automat iz Pr. 6-3: (a) blok dijagram; (b) dijagram stanja.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

-----------------------------------------------------------------ENTITY fsm_1 IS
PORT (a,b,c,d,clk,rst : IN BIT;
x: OUT BIT);
END fsm_1;
-----------------------------------------------------------------ARCHITECTURE fsm_1 OF fsm_1 IS
TYPE state IS (stateA, stateB);
SIGNAL pr_state, nx_state : state;
BEGIN
-- registar stanja --------------------------------------------PROCESS (clk,rst)
BEGIN
IF(rst='1')THEN
pr_state <=stateA;
ELSIF(clk'EVENT AND clk='1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
-- kombinacioni deo -------------------------------------------PROCESS(a,b,d,pr_state)
BEGIN
CASE pr_state IS
WHEN stateA =>
x<=a;
IF(d='1')THEN
nx_state <= stateB;
ELSE
nx_state <= stateA;

Primeri konanih automata


30
31
32
33
34
35
36
37
38
39
40

159

END IF;
WHEN stateB =>
x<=b;
IF(d = '1')THEN
nx_state <= stateA;
ELSE
nx_state <= stateB;
END IF;
END CASE;
END PROCESS;
END fsm_1;

Pr. 6-4 Detektor ivice


Sledi VHDL opis detektora ivice shodno dijagramu stanja sa Sl. 6-4(a). Kd je napisan
shodno viesegmentnom stilu.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY edge_detector IS
PORT (clk, rst: IN STD_LOGIC;
strobe: IN STD_LOGIC;
p: OUT STD_LOGIC);
END edge_detector;
-----------------------------------------------------------------ARCHITECTURE moore_arch of edge_detector IS
TYPE state IS (zero, edge, one);
SIGNAL pr_state, nx_state : state;
BEGIN
-- registar stanja -------------------------------------------PROCESS(clk, rst)
BEGIN
IF(rest = '1') THEN
pr_state <= zero;
ELSIF(clk'EVENT AND clk = '1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
-- logika sledeceg stanja ------------------------------------PROCESS(pr_state, strobe)
BEGIN
CASE pr_state IS
WHEN zero =>
IF strobe = '1' THEN
nx_state <= edge;
ELSE
nx_state <= zero;
END IF;
WHEN edge =>
IF strobe = '1' THEN
nx_state <= one;
ELSE
nx_state <= zero;

160
39
40
41
42
43
44
45
46
47
48
49
50
51

Konani automati

END IF;
WHEN one =>
IF strobe = '1' THEN
nx_state <= one;
ELSE
nx_state <= zero;
END IF;
END CASE;
END PROCESS;
-- Murova izlazna logika -------------------------------------p <= '1' WHEN pr_state = edge ELSE
'0';
END moore_arch;

Pr. 6-5 BCD broja


Ponaanje bilo kog sekvencijalnog kola moe se opisati u vidu konanog automata.
Meutim, konani automat ne mora biti uvek i najbolji (najjednostavniji) nain za
modeliranje sekvencijalnih kola. To je obino sluaj sa regularnim sekvencijalnim
komponentama, kao to su to npr. brojai i pomeraki registar. U ovom primeru bie
predstavljen VHDL opis BCD brojaa koji je kreiran na osnovu predstave broja u vidu
konanog automata Murovog tipa.
BCD broja je 4-bitni binarni broja sa osnovom brojanja 10. Svako stanje ovog brojaa se
interpretira kao jedna binarno-kodirana decimalna cifra (0, 1, .., 9), pa otuda i naziv BCD
(prema eng. Binary Coded Decimal) broja. Na Sl. 6-14 je prikazan dijagram stanja BCD
brojaa. Konani automat sadri 10 stanja koja su povezana u ciklinu sekvencu. Vrednosti
4-bitnog izlaza q koje su pridruene stanjima odgovaraju BCD ciframa. Poetno stanje
brojaa, oznaeno strelicom, je stanje nula. Posle stanja nula slede redom stanja od jedan
do devet, a onda ponovo nula.

Sl. 6-14 Dijagram stanja BCD brojaa

VHDL kd je napisan u skladu sa dvosegmentnim kdnim ablonom. Obimnost procesa za


kombinacioni deo automata potie od zahteva da se svako stanje mora eksplicitno obraditi
u case naredbi. Oigledno, ovakav opisa brojaa bie obimniji to je broj stanja vei.
Kompaktniji i prirodniji opis brojaa je svakako onaj koji je zasnovan na aritmetikoj
operaciji sabiranja, +, poput opisa binarnog brojaa iz .Pr. 5-19.
1
2
3
4
5
6

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY BCD IS
PORT (clk,rst : IN STD_LOGIC;

Primeri konanih automata


7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

161

q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));


END BCD;
-----------------------------------------------------------------ARCHITECTURE FSM OF BCD IS
TYPE state IS (nula, jedan, dva, tri, cetiri,
pet, sest, sedam, osam, devet);
SIGNAL pr_state, nx_state : state;
BEGIN
-- registar stanja --------------------------------------------PROCESS (clk,rst)
BEGIN
IF(rst='1')THEN
pr_state <=nula;
ELSIF(clk'EVENT AND clk='1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
-- kombinacioni deo -------------------------------------------PROCESS(pr_state)
BEGIN
CASE pr_state IS
WHEN nula =>
q <= "0000";
nx_state <= jedan;
WHEN jedan =>
q <= "0001";
nx_state <= dva;
WHEN dva =>
q <= "0010";
nx_state <= tri;
WHEN tri =>
q <= "0011";
nx_state <= cetiri;
WHEN cetiri =>
q <= "0100";
nx_state <= pet;
WHEN pet =>
q <= "0101";
nx_state <= sest;
WHEN sest =>
q <= "0110";
nx_state <= sedam;
WHEN sedam =>
q <= "0111";
nx_state <= osam;
WHEN osam =>
q <= "1000";
nx_state <= devet;
WHEN devet =>
q <= "1001";
nx_state <= nula;
END CASE;
END PROCESS;
END FSM;

162

Konani automati

Pr. 6-6 Detektor bit-oblika


Detektor bit-oblika je sekvencijalno kolo koje u ulaznoj binarnoj sekvenci prepoznaje neku
konkretnu podsekvencu (tj. bit-oblik). U ovom primeru je predstavljen detektor bit-oblika
111, tj. kolo koje na svom izlazu generie 1 uvek kada na ulazu dobije tri uzastopne
jedinice. Pri tom preklapanje bit-oblika se uzima u obzir; na primer, ako se na ulazu javi
sekvenca 0111110, na izlazu detektora bie postavljena vrednost 1 u tri uzastopna
taktna ciklusa.

(a)

(b)
Sl. 6-15 Detektor bit-oblika 111.

Na Sl. 6-15 su prikazani blok dijagram i dijagram stanja detektora bit-oblika. Na ulaz d se
dovodi novi bit ulazne sekvence u svakom taktnom ciklusu. Kolo poseduje etiri stanja
koja su nazvana tako da njihova imena ukazuju na trenutni broj detektovanih uzastopnih 1ca. Radi se o konanom automatu Murovog tipa iji izlaz q ima vrednost 1 u stanju tri
(primljene su tri uzastopne jedinice), a vrednost 0 u svim ostalim stanjima. Svako novo 1
na ulazu d vodi automat u sledee stanje, sve do stanja tri u kome kolo ostaje sve dok su na
ulazu prisutne 1-ce. Pojava nule na ulazu, u bilo kom stanju, vraa automat u poetno stanje
nula.
U nastavku su data dva VHDL opisa detektora bit-oblika. Oba reenja su napisana u skladu
sa dvosegmentnim kdnim ablonom, a razlikuju se po nainu pisanja kda za
kombinacioni proces. U prvom reenju (arhitektura arch_v1), za svako stanje se u
odgovarajuoj when grani naredbe case (linije 27-58) najpre izlazu q dodeljuje vrednost
koju on treba da ima u tom stanju, a zatim se, u zavisnosti od vrednosti ulaza d, odreuje
sledee stanje. Drugo reenje (arhitektura arch_v2) je kompaktnije, jer koristi
podrazumevane vrednosti za izlaz q i sledee stanje, nx_state. Na poetku kombinacionog
procesa, pre case naredbe, u linijama 67 i 68, signalima q i nx_state dodeljene su
podrazumevane vrednosti, 0 za q i nula za nx_state. U naredbi case (linije 69-84)
signalima q i nx_state se dodeljuje vrednost samo ako se njihova nova vrednost razlikuje od
podrazumevane. Kao podrazumevane vrednosti izabrane su one koje se najee dodeljuju
signalima q i nx_state.
1
2
3
4
5
6
7
8
9
10

-----------------------------------------------------------------LIBRARY IEEE;
USE ieee.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY detektor_bit_oblika IS
PORT (d,clk,rst : IN STD_LOGIC;
q: OUT STD_LOGIC);
END detektor_bit_oblika;
-- Resenje 1 ----------------------------------------------------ARCHITECTURE arch_v1 OF detektor_bit_oblika IS

Primeri konanih automata


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

163

TYPE state IS (nula, jedan, dva, tri);


SIGNAL pr_state, nx_state : state;
BEGIN
-- sekvencijalni deo ------------------------------------------PROCESS (clk,rst)
BEGIN
IF(rst='1')THEN
pr_state <=nula;
ELSIF(clk'EVENT AND clk='1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
-- kombinacioni deo -------------------------------------------PROCESS(d,pr_state)
BEGIN
CASE pr_state IS
WHEN nula =>
q<='0';
IF(d='1')THEN nx_state <= jedan;
ELSE nx_state <= nula;
END IF;
WHEN jedan =>
q<='0';
IF(d='1')THEN nx_state <= dva;
ELSE nx_state <= nula;
END IF;
WHEN dva =>
q<='0';
IF(d='1')THEN nx_state <= tri;
ELSE nx_state <= nula;
END IF;
WHEN tri =>
q<='1';
IF(d='0')THEN nx_state <= nula;
ELSE nx_state <= tri;
END IF;
END CASE;
END PROCESS;
END arch_v1;
-- Resenje 2 ----------------------------------------------------ARCHITECTURE arch_v2 OF detektor_bit_oblika IS
TYPE state IS (nula, jedan, dva, tri);
SIGNAL pr_state, nx_state : state;
BEGIN
-- sekvencijalni deo ------------------------------------------PROCESS (clk,rst)
BEGIN
IF(rst='1')THEN
pr_state <=nula;
ELSIF(clk'EVENT AND clk='1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
-- kombinacioni deo -------------------------------------------PROCESS(d,pr_state)

164
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

Konani automati

BEGIN
q<='0';
nx_state <= nula;
CASE pr_state IS
WHEN nula =>
IF(d='1')THEN
END IF;
WHEN jedan =>
IF(d='1')THEN
END IF;
WHEN dva =>
IF(d='1')THEN
END IF;
WHEN tri =>
q<='1';
IF(d='0')THEN
END IF;
END CASE;
END PROCESS;
END arch_v2;

-- podrazumevane
-- vrednosti
nx_state <= jedan;
nx_state <= dva;
nx_state <= tri;

nx_state <= nula;

Pr. 6-7 Koder za Manester kd


Manester kd se esto koristi za kodiranje binarnih sekvenci za prenos preko serijske
komunikacione linije. U Manester kdu, binarna 0 se predstavlja prelazom 01,
odnosno sa 0 u prvoj i 1 u drugoj polovini bitskog intervala. Slino, binarno 1 se
predstavlja prelazom 10, tj. sa 1 u prvoj i 0 u drugoj polovini bitskog intervala. Na
Sl. 6-16 je prikazano kako se binarna sekvenca 0010011 kodira u Manester kdu.

Sl. 6-16 Primer talasnog oblika manester-kodirane bitske sekvence.

Manester koder je kolo koje transformie niz (povorku) bitova u Manester-kdiranu


bitsku sekvencu (Sl. 6-17(a)). Koder poseduje dva ulazna, d i v, i jedan izlazni, y, signal.
Signal d predstavlja ulaznu bitsku sekvencu, tj. sekvencu koja se kodira, dok je v signal za
dozvolu rada kodera. Za v=1, koder radi i konvertuje signal d u Manester kd. U
suprotnom sluaju, za v=0, koder ne radi, a na izlazu y je permanentno prisutna 0.
Budui da se jedan ulazni bit konvertuje u dva bita na izlazu, 01 ili 10, postoji zahtev da
svaki bit na ulazu d treba da bude prisutan tano dva taktna intervala.
Na Sl. 6-17(b) je prikazan dijagram stanja Manester kodera. Sve dok vai v=0, automat
je zakoen u stanju idle, a na njegovom izlazu je y=0. Proces transformacije ulazne u
izlaznu bitsku sekvencu poinje onda kada v postane 1 i traje sve dok se v ponovo ne vrati
na 0. U toku kodiranja, a u zavisnosti od vrednosti bita koji se kodira, automat prolazi
kroz stanja s1a i s1b, za d=1, odnosno kroz stanja s0a i s0b, za d=0, generiui tako na
izlazu y sekvencu 10, odnosno 01. U stanjima s1b i s0b, ispituje se ulazni signal v i ako
je njegova vrednost jo uvek 1, koder, bez povratka u stanje idle, prelazi na kodiranje
sledeeg ulaznog bita.

Primeri konanih automata

(a)

165

(b)

Sl. 6-17 Manester koder: (a) blok dijagram; (b) dijagram stanja.

Sledi kompletan VHDL opis manester kodera.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY manchester_encoder IS
PORT (clk, rst: IN STD_LOGIC;
d, v: IN STD_LOGIC;
y: OUT STD_LOGIC);
END manchester_encoder;
-----------------------------------------------------------------ARCHITECTURE moore_arch of manchester_encoder IS
TYPE state IS (idle, s1a, s1b, s0a, s0b);
SIGNAL pr_state, nx_state : state;
BEGIN
-- registar stanja -------------------------------------------PROCESS(clk, rst)
BEGIN
IF(rst = '1') THEN
pr_state <= idle;
ELSIF(clk'EVENT AND clk = '1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
-- logika sledeceg stanja ------------------------------------PROCESS(pr_state, v, d)
BEGIN
CASE pr_state IS
WHEN idle =>
IF v = '0' THEN
nx_state <= idle;
ELSE
IF d = '0' THEN
nx_state <= s0a;
ELSE
nx_state <= s1a;
END IF;
END IF;
WHEN s0a =>
nx_state <= s0b;

166
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

Konani automati

WHEN s1a =>


nx_state <= s1b;
WHEN s0b =>
IF v = '0' THEN
nx_state <= idle;
ELSE
IF d = '0' THEN
nx_state <= s0a;
ELSE
nx_state <= s1a;
END IF;
END IF;
WHEN s1b =>
IF v = '0' THEN
nx_state <= idle;
ELSE
IF d = '0' THEN
nx_state <= s0a;
ELSE
nx_state <= s1a;
END IF;
END IF;
END CASE;
END PROCESS;
-- Murova izlazna logika -------------------------------------y <= '1' WHEN (pr_state = s1a OR pr_state = s0b) ELSE
'0';
END moore_arch;

Pr. 6-8 Automat za prodaju karata


U ovom primeru, projektujemo upravljaku jedinicu automata za prodaju karata u
gradskom autobusu. Cena karte je 15 din., a u automat se ubacuju kovanice od 5 i 10 din.
Kad iznos ubaenog novca postane jednak ili vei od cene karte, automat izdaje kartu i ako
je potrebno vraa kusur. Na Sl. 6-18(a) je prikazan blok dijagram upravljake jedinice
jednog ovakvog ureaju. Osim upravljake jedinice, ureaj poseduje i elektromehaniki
sklop koji prihvata ubaene kovanice, izdaje kartu i vraa kusur. Pretpostavka je da ovaj
sklop generie impulse trajanja jednog taktnog ciklusa za svaku ubaenu kovanicu od 5 din.
(signal D5) i 10 din. (signal D10). Takoe, elektromehaniki sklop reaguje na impulse K i
V, trajanja jednog taktnog ciklusa, tako to izdaje kartu (signal K), odnosno vraa kusur od
5 din. (signal V).

(a)

(b)

Sl. 6-18 Automat za prodaju karata: (a) blok dijagram; (b) dijagram stanja.

Primeri konanih automata

167

Na Sl. 6-18(b) je prikazan dijagram stanja konanog automata kojim je modelirano


ponaanje upravljake jedinice sa Sl. 6-18(a). Kao to se moe videti, radi se o automatu
Milijevog tipa, jer su izlazi K i V pridrueni prelazima, a ne stanjima. Svako stanje
odgovara ukupnom iznosu do tog momenta ubaenog novca: S0 je poetno stanje, koje vai
sve dok se ne ubaci prva kovanica (odnosno ubaeno je 0 din.). Slino, S5 znai da je
ubaeno 5 din., a stanje S10 da je ubaeno ukupno 10 din. Automat ostaje u zateenom
stanju sve dok su oba ulaza, D5 i D10, jednaki 0. Ovaj uslov je oznaen logikim izrazom
D5D10 na petljama koje postoje u svakom stanju. Iz stanja S0 automat prelazi u stanje
S5 (S10), ako je kao prva ubaena kovanica od 5 din. (10 din.). Iz stanja S5, automat
prelazi u stanje S10 ako je kao druga ubaena kovanica od 5 din (uslov D5=1). Meutim,
ako je u stanju S5 ubaena kovanica od 10 din. (D10=1), ukupan iznos ubaenog novca
postaje jednak ceni karte i automat se vraa u poetno stanje, uz aktiviranje signal K. Poto
nema potrebe za vraanjem kusura, signal V ostaje neaktivan. Nakon ubacivanja kovanice u
stanju S10 takoe su mogua dva ishoda, pri emu oba rezultuju u izdavanju karte (K=1).
Pri tome, ako je ubaena kovanica od 5 din., kusur se ne vraa (V=0), a ako je ubaeno 10
din. kusur se vraa (V=1), jer je vrednost ubaenog novca (20 din.) postala vea od cene
karte (15 din.).
VHDL opis je usklaen sa dvosegmentnim kdnim ablonom, a razlika u odnosu na opis
konanog automata Murovog tipa ogleda se u tome to naredbe za dodelu vrednosti
izlaznim signalima iz when grana naredbe case nisu bezuslovne, ve su deo if naredbi koje
ispituje ulaze. Na Sl. 6-19 su prikazani rezultati simulacije datog VHDL kda za sluaj
kada se u automat ubacuju redom: 5 din., 5 din. i 10 din. Poto je ubaeno ukupno 20 din.,
automat vraa kusur. Uoimo da impuls koji se javlja na ulaznom signalu D10 trenutno
postavlja izlaze V i K, dok se stanje automata menja tek sa sledeom aktivnom ivicom takta
(odlika konanih automata Milijevog tipa).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
----------------------------------------------------------------ENTITY controller IS
PORT (D5,D10,clk,rst : IN STD_LOGIC;
K,V: OUT STD_LOGIC);
END controller;
----------------------------------------------------------------ARCHITECTURE FSM OF controller IS
TYPE state IS (S0, S5, S10);
SIGNAL pr_state, nx_state : state;
BEGIN
-- registar stanja -------------------------------------------PROCESS (clk,rst)
BEGIN
IF(rst='1')THEN
pr_state <=S0;
ELSIF(clk'EVENT AND clk='1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
-- logika sledeceg stanja/izlaza ------------------------------PROCESS(D5,D10,pr_state)
BEGIN
nx_state <= pr_state;

168
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

Konani automati

K<='0';V<='0';
CASE pr_state IS
WHEN S0 =>
IF(D5='1')THEN
nx_state <= S5;
ELSIF(D10='1') THEN
nx_state <= S10;
END IF;
WHEN S5 =>
IF(D5='1')THEN
nx_state <= S10;
ELSIF(D10='1') THEN
K<='1';
nx_state <= S0;
END IF;
WHEN S10 =>
IF(D5='1')THEN
K<='1';
nx_state <= S0;
ELSIF(D10='1') THEN
K<='1';V<='1';
nx_state <= S0;
END IF;
END CASE;
END PROCESS;
END FSM;
-----------------------------------------------------------------

Sl. 6-19 Rezulati simulacije VHDL opisa automata za prodaju karata.

Pr. 6-9 Arbitar


U sloenim digitalnim sistemima est je sluaj da vie podsistema dele iste resurse. Na
primer, nekoliko procesora mogu deliti isti blok memorije, ili periferijskih jedinica mogu
deliti istu magistralu. Arbitar je kolo koje spreava konflikte i koordinira pristup deljivom
resursu. U ovom primeru, razmotriemo realizaciju arbitar za sistem sa dva podsistema i
jednim deljivim resursom. Podsistemi komuniciraju s arbitrom posredstvom dva signala,
request (zahtev) i grant (dozvola), koji su oznaeni sa r1 i g1 za podsistem 1, odnosno sa
r0 i g0 za podsistem 0, kao to je prikazano na Sl. 6-20. Podsistem kome je potreban resurs
aktivira signal request. Arbitar vodi rauna o dostupnosti resursa, nadgleda zahteve i
aktiviranjem odgovarajueg signala grant daje dozvolu onom podsistemu koji je uputio
zahtev. Podsistem kome je upuen signal grant dobija pravo da koristi resurs. Nakon to je

Primeri konanih automata

169

obavio svoj zadatak i resurs mu vie nije potreban, podsistem deaktivira signal request.
Ako neki podsistem uputi zahtev arbitru, a resurs je trenutno zauzet, signal dozvole ostae
neaktivan sve dok se resurs ne oslobodi.

Sl. 6-20 Blok dijagram arbitra.

Razmotriemo tri realizacije arbitra u vidu konanog automata. Prva realizacija je


prikazana na Sl. 6-21(a). Osnovna karakteristika ovog reenja je ta da se vii prioritet daje
podsistemu 1. Dijagram stanja sadri tri stanja: waitr, grant1 i grant0. U stanju waitr resurs
je dostupan za korienje (nezauzet), a arbitar eka na zahtev. Stanja grant1 i grant0
ukazuju da je resurs zauzet i trenutno dodeljen podsistemu 1, odnosno podsistemu 0,
respektivno. Na poetku rada, arbitar je u stanju waitr. Ako se aktivira signal r1, arbitar
prelazi u stanje grant1. U ovom stanju aktivan je signal g1 koji informie podsistem 1 da je
resurs slobodan. Nakon to zavri korienje resursa, podsistem 1 deaktivira signal r1, a
arbitar se vraa u stanje waitr da eka na novi zahtev. Ako se u stanju waitr, umesto r1
aktivira signal r0, arbitar e, prelaskom u stanje grant0, dati dozvolu podsistemu 0. Uoimo
da s obzirom na to kako su formirani uslovi na izlaznim granama iz stanja waitr, u sluaju
istovremenog aktiviranja oba zahteva, r1 i r0, prednost dobija podsistem 1.
Reenje sa Sl. 6-21(b) predstavlja Milijevu varijantu arbitra, jer se sada izlazni signali
aktiviraju ne samo u stanjima grant1 i grant2 ve i na prelazima iz stanja Idle u ova dva
stanja. Uinjena modifikacija omoguava da podsistemi dobiju dozvolu korienja resursa
jedan taktni ciklus ranije (signal dozvole se javlja u istom taktnom ciklusu u kome je
podsistem uputio zahtev, a ne u sledeem, kao u Murovoj varijanti arbitra). Meutim, i u
ovom, kao i u prvom reenju, u situacijama kada oba podsistema istovremeno upute zahtev,
vii prioritet se daje podsistemu 1.
r1'r0'

waitr

r1 / g1
r1

r1'

grant1
g1

r1'r0 / g0
r0

grant0
g0
r0'

(a)

(b)

(c)

Sl. 6-21 Tri realizacije arbitar: (a) Murovi izlazi fiksni prioriteti; (b) Milijevi izlazi fiksni
prioriteti; (c) Milijevi izlazi - fer politika.

Fiksni prioriteti mogu stvoriti probleme u sluaju kada podsistem 1 neprekidno zahteva

170

Konani automati

resurs. Pod takvim okolnostima, podsistem 2 nikad nee dobiti priliku da pristupi resursu.
Tree i konano reenje uvodi fer politiku arbitrae, tako to vodi rauna o tome koji
podsistem je poslednji koristio resurs i u sluajevima istovremenog upuivanja zahteva
prednost daje onom drugom podsistemu. Dijagram stanja ovog reenje prikazan je na Sl.
6-21(c). Umesto jednog sada uoavamo dva stanja ekanja, waitr1 i waitr0. U stanju waitr1
vii prioritet ima podsistem 1, a u stanju waitr0 podsistem 0. Ako je podsistem 0 poslednji
koristio resurs, arbitar eka na novi zahtev u stanju waitr1. Ako je podsistem 1 poslednji
koristio resurs, arbitar je u stanju waitr0. U nastavku je dat VDHL opis treeg reenja.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY arbiter IS
PORT (clk, rst : IN STD_LOGIC;
r : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
g : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END arbiter;
-----------------------------------------------------------------ARCHITECTURE two_seg_arch of arbiter IS
TYPE state IS (WAITR0, WAITR1, GRANT0, GRANT1);
SIGNAL pr_state, nx_state : state;
BEGIN
-- registar stanja -------------------------------------------PROCESS(clk, rst)
BEGIN
IF(rst = '1') THEN
pr_state <= WAITR0;
ELSIF( clk'EVENT AND clk = '1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
-- logika sledeceg stanja/izlaza -----------------------------PROCESS(pr_state, r)
BEGIN
g <= "00";
-- podrazumevane vrednosti izlaza
nx_state <= pr_state;
CASE(pr_state) IS
WHEN WAITR0 =>
IF r(0) = '1' THEN
g(0) <= '1';
nx_state <= GRANT0;
ELSIF r(1) = '1' THEN
g(1) <= '1';
nx_state <= GRANT1;
END IF;
WHEN WAITR1 =>
IF r(1) = '1' THEN
g(1) <= '1';
nx_state <= GRANT1;
ELSIF r(0) = '1' THEN
g(0) <= '1';
nx_state <= GRANT0;
END IF;
WHEN GRANT0 =>

Primeri konanih automata


47
48
49
50
51
52
53
54
55
56

IF r(0) = '0'
nx_state <=
END IF;
WHEN GRANT1 =>
IF r(1) = '0'
nx_state <=
END IF;
END CASE;
END PROCESS;
END two_seg_arch;

THEN
WAITR1;
THEN
WAITR0;

171

7. HIJERARHIJSKO PROJEKTOVANJE

Sloeni digitalni sistemi se projektuju na hijerarhijski nain. To znai da se sistem koji


treba projektovati postepeno i rekurzivno deli na module manje sloenosti. Moduli dobijeni
podelom se potom nezavisno realizuju i konano, meusobno povezuju. Pojam rekurzivno
znai da se proces podele moe sprovesti i nad modulima koji su nastali prethodnom
podelom, obino do nivoa modula koji su dovoljno jednostavni da se lako mogu direktno
realizovati, ili modula koji su raspoloivi u vidu gotovih, ranije projektovanih gradivnih
jedinica.
Beneficije koje proistiu iz primene hijerarhijskog projektovanja su brojne, a neke od
bitnijih su sledee:

Panja projektanta se skree sa celokupnog sistem na pojedinane module koje moe


nezavisno da projektuje, analizira i verifikuje.

Nakon izvrene podele, zadatak projektovanja se moe raspodeliti na vie projektanata,


koji e nezavisno i istovremeno raditi na razliitim delovima sistema. Na taj nain se
skrauje ukupno vreme projektovanja.

Sloeni sistemi ne predstavljaju problem samo projektantima, ve i softverima za


sintezu. Automatska sinteza obimnog i komplikovanog VHDL kda zahteva utroak
enormnog raunarskog vremena, uz poveane zahteve za radnom memorijom. Uz to,
konani rezultat sinteze esto nije zadovoljavajui, kako u pogledu performansi, tako i
u pogledu cene (broja gejtova) sintetizovanog hardvera. Razbijanjem sistema na manje
module i njihovom zasebnom sintezom, proces sinteze celokupnog sistema se moe
uiniti brim i efikasnijim.

Mnogi sistemi poseduju zajednike ili sline funkcionalnosti. Nakon to je modul


projektovan i verifikovan za potrebe jednog sistema, isti taj modul se moe iskoristiti i
u buduim projektima.

Obezbeivanje podrke za modularno i hijerarhijsko projektovanje jedan je od osnovnih


ciljeva VHDL-a. U VHDL-u postoje brojne jezike konstrukcije za tu namenu, od kojih su,
sa stanovita sinteze, najznaajnije:

COMPONENT
GENERIC
CONFIGURATION

Goran Lj. orevi, Arhitetkture mikrosistema, 2009.

174

Hijerarhijsko projektovanje

LIBRARY
PACKAGE
FUNCTION
PROCEDURE

Konstrukcije componet, generic i configuration su osnovni mehanizmi za kreiranje


hijerarhijski organizovanog VHDL kda. Konstrukcije package i library pomau u
organizaciji obimnog kda, dok funcion i procedure slue za kreiranje potprograma.
Konkretno, esto korieni delovi kda se piu u obliku komponenti (component), funkcija
i procedura (function, procedure) i smetaju u pakete (package). Jedan ili vie paketa se
mogu smestiti u biblioteku (library), koja se potom moe ukljuivati u druge, budue
projekte ili razmenjivati s drugim projektantima.

7.1. PACKAGE
Kako VHDL kd postaje obimniji i sloeniji, tako raste broj i raznovrsnost deklaracija (npr.
deklaracije konstanti, tipova podataka, komponenti, funkcija itd.) koje moraju biti sadrane
u deklarativnim sekcijama razliitih projektnih jedinica (entiteta, arhitektura i procesa).
Kad se sistem podeli na vie manjih podsistema, neke deklaracije moraju biti kopirane u
razliite projektne jedinice, a eventualna naknadna promena bilo koje deklaracije zahtevala
bi neposrednu intervenciju u kdu svake jedinici. Svrha paketa je upravo grupisanje
zajednikih i esto korienih deklaracija na jednom mestu u projektu. Osim deklaracija
komponenti, funkcija i procedura, paket moe sadrati i deklaracije drugih jezikih celina,
kao to su tipovi podataka, konstante i globalno vidljivi signali. U bilo kom delu projekta
gde je neophodna neka deklaracija iz paketa, dovoljno je naredbom use ukljuiti
odgovarajui paket, a svaka naknadna izmena bilo koje deklaracije iz paketa bie po
automatizmu vidljiva u svim delovima projekta.
Paket ima sledeu sintaksu:
PACKAGE ime_paketa IS
(deklaracije)
END ime_paketa
[PACKAGE BODY ime_paketa IS
(funkcije i procedure)
END ime_paketa;]

Paket ine dve celine: deklaracija paketa (package) i telo paketa (package body). Prva
celina je obavezna i sadri sve deklaracije. Telo paketa je opciono i neophodno samo ako u
deklaraciji paketa postoji jedna ili vie deklaracija potprograma (funkcija ili procedura) i
pri tom sadri kompletne opise (zaglavlja i tela) svih potprograma. Sekcije package i
package body moraju imati isto ime.
Pr. 7-1 Primer jednostavnog paketa
VHDL kd iz ovog primera definie paketa imena nas_paket. S obzirom na to to ovaj
paket sadri samo deklaracije type i constant (dva tipa podataka i jednu konstantu), telo
paketa nije neophodno.
1
2
3

-- Paket bez funkcije i procedure -------------------------------LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;

PACKAGE
4
5
6
7
8
9

175

-- Deklaracija paketa -------------------------------------------PACKAGE nas_paket IS


TYPE state IS (st1,st2,st3,st4);
TYPE boja IS (crvena, bela, plava);
CONSTANT niz: STD_LOGIC_VECTOR(7 DOWNTO 0) := "11111111";
END nas_paket;

Pr. 7-2 Paket s funkcijom


Paket iz ovog primera, pored deklaracije dva tipa podataka i jedne konstante, sadri i jednu
funkciju. Iz tog razloga, telo paketa je neophodno. Deklaracija funkcije je smetena u
deklaraciji paketa, a kompletan kd funkcije u telu paketa.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

-- Primer paketa s funkcijom ------------------------------------LIBRARY ieee;


USE ieee.std_logic_1164.all;
-- Deklaracija paketa -------------------------------------------PACKAGE nas_paket IS
TYPE state IS (st1,st2,st3,st4);
TYPE boja IS (crvena, bela, plava);
CONSTANT niz: STD_LOGIC_VECTOR(7 DOWNTO 0) := "11111111";
FUNCTION rastuca_ivica(SIGNAL s : STD_LOGIC) RETURN BOOLEAN;
END nas_paket;
-- Telo paketa --------------------------------------------------PACKAGE BODY nas_paket IS
FUNCTION rastuca_ivica(SIGNAL s : STD_LOGIC) RETURN BOOLEAN IS
BEGIN
RETURN (s'EVENT AND s='1');
END rastuca_ivica;
END nas_paket;

Deklaracija i telo paketa su projektne jedinice VHDL-a, koje se prilikom kompajliranja


nezavisno analiziraju i smetaju u biblioteku. Da bi neka konkretna deklaracija iz paketa
postala vidljiva u nekom delu VHDL projekta, neophodno je koristiti naredbu use, ija je
sintaksa sledeeg oblika:
USE ime_biblioteke.ime_paket.ime_deklaracije;

lan ime_deklaracije se najee zamenjuje kljunom reju all, ime se postie vidljivost
svih deklaracija sadranih u navedenom paketu. Na primer, ispod je pokazano kako se u
VHDL kd ukljuuje paket iz Pr. 7-2, pod pretpostavkom da je paket nas_paket deo istog
projekta i da je smeten u podrazumevanu, radnu biblioteku work:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE work.nas_paket.all;
ENTITY . . .
. . .
ARCHITECTURE . . .
. . .

176

Hijerarhijsko projektovanje

7.2. COMPONENT
Metodologija hijerarhijskog projektovanja se, u osnovi, zasniva na podeli sistema na manje
module. U gotovo svim ranijim primerima VHDL opisa korien je upravo ovakav pristup,
iako to nije eksplicitno naglaeno. Pisanju VHDL kda, ak i za jednostavna kola, po
pravilu je prethodilo crtanje skice konceptualnog dijagrama koji je prikazivao nekoliko
glavnih delova kola i njihove veze. Nakon toga, svaki blok iz konceptualnog dijagrama
opisivan je jednim segmentom VHDL kda (procesom, konkurentnim naredbama i dr.).
Komponente iz VHDL-a upravo predstavljaju formalan nain za modularno, a onda i
hijerarhijsko organizovanje VHDL opisa.
Komponenta, kao pojam, odnosi se celoviti VHDL kd (entitet plus arhitektura) koji
opisuje neko kolo. Ako se jedna takva celina deklarie kao component, ona moe postati
dostupna za korienje u drugim delovima VHDL kda za konstrukciju sloenijih kola ili u
novim projektima, bez potrebe ponovnog pisanje istog kda.
Pr. 7-3 Jednostavan strukturni opis

Sl. 7-1 Kolo iz Pr. 7-3.

Razmotrimo kolo sa Sl. 7-1 i njegov strukturni VHDL opis:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

-- Primer strukturnog opisa -------------------------------------LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;
----------------------------------------------------------------ENTITY gating IS
PORT (a,clk,mr,din : STD_LOGC;
rdy,ctrl : OUT STD_LOGC);
END ENTITY
----------------------------------------------------------------ARCHITECTURE struktura OF gating IS
COMPONENT AND2
PORT(x,y: IN STD_LOGC; z OUT STD_LOGC);
END COMPONENT;
COMPONENT DFF
PORT(d,clock: IN STD_LOGC; q, not_q OUT STD_LOGC);
END COMPONENT;
COMPONENT NOR2
PORT(x,y: IN STD_LOGC; z OUT STD_LOGC);
END COMPONENT;
SIGNAL s1, s2 : STD_LOGC;
BEGIN
D1: DFF PORT MAP(a,clk,s1,s2);
A1: AND2 PORT MAP(s2,din,ctrl);
N1: NOR2 PROT MAP(s1,mr,rdy);
END stuktura;
------------------------------------------------------------------

COMPONENT

177

U deklarativnom delu arhitekture deklarisane su tri komponente: and2 (dvoulazno I kolo,


linije 11-13), dff (D flip-flop, linije 14-16) i nor2 (dvoulazno NILI kolo, linije 17-19).
(Pretpostavka je da se VHDL opisi ovih komponenti nalaze u nekom drugoj datoteci istog
projekta, da su kompajlirani i na taj nain smeteni u biblioteku work.) Komponente dff,
and2 i nor2 potom su instancirane u telu arhitekture (linije 22-24) i povezane s
odgovarajuim portovima entiteta gating kao i meusobno pomou dva signala, s1 i s2.
Naredbe za instanciranje komponente spadaju u grupu konkurentnih naredbi i otuda
redosled njihovog navoenja u telu arhitekture nije od znaaja. Jedna ista komponenta se
moe instancirati proizvoljan broj puta, ali svaka instanca mora imati jedinstvenu labelu.
Konstrukcija component predstavlja osnovu strukturnog i hijerarhijskog projektovanja u
VHDL-u. Strukturno projektovanje znai da se sloenija kola konstruiu povezivanjem
jednostavnijih komponenti. Hijerarhijsko projektovanje se ostvaruje tako to se strukturno
opisana kola deklariu takoe kao komponente i zatim koriste za realizaciju jo sloenijih
kola. Na primer, esto koriena kola, poput flip-flopova i logikih kola, mogu se jednom
opisati VHDL kdom i deklarisati kao komponente, a zatim proizvoljan broj puta koristiti
(instancirati) za realizaciju sloenijih struktura, kao to su registri, sabirai itd.
Korienje komponenti u VHDL kdu zahteva dva koraka. Prvi korak se odnosi na
deklarisanje, a drugi na instanciranje komponente.

7.2.1. Deklaracija komponente


Deklaracija komponente sadri informacije o interfejsu komponente, to podrazumeva
ulazne i izlazne portove i druge relevantne parametre komponente. Informacije o
komponenti sadrane u deklaraciji komponente su identine onim iz deklaracije entiteta.
Sintaksa deklaracije komponente je sledeeg oblika:
COMPONENT ime_komponente IS
GENERIC(ime_parametra : tip_parametra;
ime_parametra : tip_parametra;
. . . );
PORT (ime_porta : mode_signala tip_signala;
ime_porta : mode_signala tip_signala;
. . . );
END COMPONENT;

Deo generic iz deklaracije komponente je opcion, a sadri spisak parametar koji treba
proslediti komponenti prilikom njenog instanciranja. Deo za portove, slino kao kod
entiteta, sadri spisak imena portova zajedno sa njihovim smerom (in, out, bufer ili inout) i
tipom (std_logic, bit, integer i sl.).
Pr. 7-4 Slinost izmeu entity i component
Pretpostavimo da raspolaemo kompletnim VHDL opisom D flip-flopa (entitet dff je
prikazan na Sl. 7-2(a)) i da ovaj opis, u vidu komponente, elimo da koristimo u drugim
delovima projekta. U tom cilju, potrebno je kreirati odgovarajuu deklaraciju komponente,
koja e potom biti kopirana u deklarativne sekcije onih arhitektura u kojima e dff biti
instanciran. Deklaracija komponente dff, prikazana je na Sl. 7-2(b). Kao to vidimo,
deklaracija komponente je gotovo identina deklaraciji entiteta. Slubena re entity je
zamenjena reju component, re is je izostavljena, a ponovljeno ime entiteta iz poslednje
linije zamenjeno je slubenom reju component.

178

Hijerarhijsko projektovanje

ENTITY DFF IS
PORT(d : IN STD_LOGC;
clock: IN STD_LOGC;
q : IN STD_LOGC
not_q: OUT STD_LOGC);
END DFF;
(a)

COMPONENT DFF
PORT(d : IN STD_LOGC;
clock: IN STD_LOGC;
q : IN STD_LOGC
not_q : OUT STD_LOGC);
END COMPONENT;
(b)

Sl. 7-2 Entity v.s. Component: (a) etitet i (b) odgovarajua deklaracija komponente.

Na Sl. 7-3 je ilustrovan princip rada s komponentama. Pre korienja, komponenta mora
biti projektovana, kompajlirana i smetena u biblioteku. Postoje dva naina za ukljuivanje
komponenti u VHDL kd (kazaemo, u glavni kd). Pristup koji je korien u Pr. 7-3
podrazumeva da se komponente deklariu u deklarativnom delu arhitekture (ovaj princip je
ilustrovan na Sl. 7-3(a)). Drugi nain je taj da se deklaracije svih komponenti prvo smeste u
paket, koji se potom ukljuuje u glavni kd (Sl. 7-3(b)). Na taj nain, eliminie se potreba
da se komponenta eksplicitno deklarie u svakoj arhitekturi gde se koristi.
LIBRARY lib

LIBRARY lib

COMPONENT
DFF
d

COMPONENT
DFF

D FF
not_q
clk
COMPONENT
AND2

COMPONENT
NAND2

Glavni kod

USE lib
entity
architecture
deklaracija komponenti
begin
instanciranje komponenti
end architecure

D FF
not_q
clk

Glavni kod
PACKAGE pck

COMPONENT
AND2

deklaracija
komponenti

COMPONENT
NAND2

(a)

USE lib.pck;
entity
architecture
begin
instanciranje komponenti
end architecure

(b)

Sl. 7-3 Naini za deklaraciju komponenti: (a) deklaracija u arhitekturi; (b) deklaracija u
paketu.

Pr. 7-5 Deklaracija komponenti u arhitekturi

Sl. 7-4 Kolo iz Pr. 7-5.

U ovom primeru je predstavljen strukturni VHDL opis kola sa Sl. 7-4, odnosno opis u
kome se koriste iskljuivo komponente (inv, nand2 i nand3) i to na nain ilustrovan na Sl.
7-3(a), gde se paket ne koristi. Iako to nije obavezan zahtev, preporuljivo je da se VHDL
kd nekog sloenijeg, hijerarhijski organizovanog projekta raspodeli na vie datoteka, tako
da svaka datoteka sadri opis samo jednog modula (entitet i arhitektura) ili paketa. U
konkretnom primeru, potrebne su etiri datoteke, po jedna datoteka za svaku komponentu
plus datoteka za glavni kd. Sadraji sve etiri datoteke dati ju ispod. Poto se paket ne
koristi, komponente moraju biti deklarisane u deklarativnoj sekciji arhitekture glavnog
kda (datoteka projekat.vhd).

COMPONENT

179

------ Fajl inv.vhd ---------------------------------------------LIBRARY IEEE;


3
USE IEEE.STD_LOGIC_1164.ALL;
4
ENTITY inv IS
5
PORT ( a: IN STD_LOGIC; b : OUT STD_LOGIC);
6 END inv;
7 ARCHITECTURE inv OF inv IS
8 BEGIN
9
b <= NOT a;
10 END inv;
1
2

------ Fajl nand2.vhd -------------------------------------------LIBRARY IEEE;


3 USE IEEE.STD_LOGIC_1164.ALL;
4 ENTITY nand2 IS
5
PORT ( a,b: IN STD_LOGIC; c : OUT STD_LOGIC);
6 END nand2;
7 ARCHITECTURE nand2 OF nand2 IS
8 BEGIN
9
c <= a NAND b;
10 END nand2;
1
2

------ Fajl nand3.vhd -------------------------------------------LIBRARY IEEE;


3 USE IEEE.STD_LOGIC_1164.ALL;
4 ENTITY nand3 IS
5
PORT ( a,b,c: IN STD_LOGIC; d : OUT STD_LOGIC);
6 END nand3;
7 ARCHITECTURE nand3 OF nand3 IS
8 BEGIN
9
d <= NOT(a AND b AND c);
10 END nand3;
1
2

------ Fajl projekat.vhd ----------------------------------------LIBRARY IEEE;


3
USE IEEE.STD_LOGIC_1164.ALL;
4
ENTITY projekat IS
5
PORT ( a,b,c,d: IN STD_LOGIC;
6
x,y : OUT STD_LOGIC);
7
END projekat;
8 ARCHITECTURE struktura OF projekat IS
9
COMPONENT inv IS
10
PORT(a: IN STD_LOGIC; b: OUT STD_LOGIC);
11
END COMPONENT;
12
COMPONENT nand2 IS
13
PORT(a,b: IN STD_LOGIC; c: OUT STD_LOGIC);
14
END COMPONENT;
15
COMPONENT nand3 IS
16
PORT(a,b,c: IN STD_LOGIC; d: OUT STD_LOGIC);
17
END COMPONENT;
18
SIGNAL w: STD_LOGIC;
19 BEGIN
20
K1: inv PORT MAP(b,w);
21
K2: nand2 PORT MAP(a,b,x);
22
K3: nand3 PORT MAP(w,c,d,y);
23 END struktura;
1
2

180

Hijerarhijsko projektovanje

Pr. 7-6 Deklaracije komponenti u paketu.


U ovom primeru, projekat iz prethodnog primera (Sl. 7-4) bie ponovo realizovan, ali sada
na nain kao na Sl. 7-3(b), koji podrazumeva kreiranje paketa s deklaracijama korienih
komponenti (inv, nand2 i nand3). Sada je potrebno pet datoteka: tri za VHDL kd
komponenata i po jedna za paket i glavni kd, odnosno vrni modul sistema. Iako u odnosu
na pristup iz Pr. 7-5 sada postoji jo jedna dodatna datoteka (za paket), paket se kreira samo
jedanput, a koristi proizvoljan broj puta u razliitim projektnim datotekama. Na taj nain,
izbegava se ponavljanje deklaracija komponenti u svakoj arhitekturi u kojoj se one koriste.
Sledi VHDL kd kompletnog projekta. Datoteka nase_komponente.vhd sadri istoimeni
paket s navedenim deklaracijama komponenti. Paket se ukljuuje u glavni kd (datoteka
projekat.vhd) u liniji 4.
1
2
3
4
5
6
7
8
9
10

------ Fajl inv.vhd --------------------------------------------LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;
ENTITY inv IS
PORT ( a: IN STD_LOGIC; b : OUT STD_LOGIC);
END inv;
ARCHITECTURE inv OF inv IS
BEGIN
b <= NOT a;
END inv;

----- Fajl nand2.vhd --------------------------------------------LIBRARY IEEE;


3 USE IEEE.STD_LOGIC_1164.ALL;
4
ENTITY nand2 IS
5
PORT ( a,b: IN STD_LOGIC; c : OUT STD_LOGIC);
6
END nand2;
7 ARCHITECTURE nand2 OF nand2 IS
8 BEGIN
9
c <= a NAND b;
10 END nand2;
1
2

1
2
3
4
5
6
7
8
9
10

------ Fajl nand3.vhd ------------------------------------------LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;
ENTITY nand3 IS
PORT ( a,b,c: IN STD_LOGIC; d : OUT STD_LOGIC);
END nand3;
ARCHITECTURE nand3 OF nand3 IS
BEGIN
d <= NOT(a AND b AND c);
END nand3;

------ Fajl nase_komponente.vhd ---------------------------------LIBRARY IEEE;


3 USE IEEE.STD_LOGIC_1164.ALL;
4
PACKAGE nase_komponente IS
5
COMPONENT inv IS
6
PORT(a: IN STD_LOGIC; b: OUT STD_LOGIC);
7
END COMPONENT;
8
COMPONENT nand2 IS
9
PORT(a,b: IN STD_LOGIC; c: OUT STD_LOGIC);
10
END COMPONENT;
1
2

COMPONENT

181

COMPONENT nand3 IS
PORT(a,b,c: IN STD_LOGIC; d: OUT STD_LOGIC);
13
END COMPONENT;
14 END nase_komponente;
1 ------ Fajl projekat.vhd ----------------------------------------2 LIBRARY IEEE;
3 USE IEEE.STD_LOGIC_1164.ALL;
4 USE work.nase_komponente.all;
5 ENTITY projekat IS
6
PORT ( a,b,c,d: IN STD_LOGIC;
7
x,y : OUT STD_LOGIC);
8 END projekat;
9 ARCHITECTURE struktura OF projekat IS
10
SIGNAL w: STD_LOGIC;
11 BEGIN
12
K1: inv PORT MAP(b,w);
13
K2: nand2 PORT MAP(a,b,x);
14
K3: nand3 PORT MAP(w,c,d,y);
15 END struktura;
11
12

7.2.2. Instanciranje komponente


Nakon to je deklarisana, komponenta se moe instancirati u telu arhitekture pomou
naredbe sledee sintakse:
labela_instance: ime_komponente
PORT MAP(lista_portova);
GENERIC MAP(lista_parametara);

Naredba za instanciranje poinje labelom, posle koje sledi najpre ime komponente koja se
instancira, a onda i dve deklaracije: port map i generic map. Labela identifikuje konkretnu
instance komponente i mora biti jedinstvena u okviru arhitekture. Lista portova sadrana u
deklaraciji port map ostvaruje veze (ili asocijacije) izmeu portova komponente (tzv.
formalnih signala) i spoljnih signala (tzv. stvarnih signala). Konstrukcija generic map
dodeljuje stvarne vrednosti generikim parametrima komponente. Ukoliko komponenta
nema generike parametre, sekcija generic map se ne navodi u naredbi za instanciranje.
Razmotrimo jo jedanput Pr. 7-3. Deklaracija komponente and2 (linije 11-13) tumai se
ovako: komponenta ima dva ulazna, x i y i jedan izlazni port, z, svi tipa std_logic. U telu
arhitekture, ova komponenta je jedanput instancirana (linija 23). Labela A1 definie ime
ove instance u arhitekturi struktura. Lista portova, port map(s2, din, ctrl), povezuje interni
signal s2 s portom x komponente and2, kao i portove din i ctrl entiteta gating s portovima y
i z komponente and2. Uoimo da se redosled signala u listi portova podudara sa
redosledom portova iz deklaracije komponente (linija 12). Napomenimo da se ovakav nain
uspostavljanja korespondencije izmeu formalnih i stvarnih signala zove poziciono
povezivanje.
Port map. Prilikom instanciranja komponente, postoje dva naina za povezivanje njenih
portova sa spoljanjim signalima: poziciono i nominalno. Razmotrimo sledei primer:
COMPONENT inv IS
PORT(a: IN STD_LOGIC; b: OUT STD_LOGIC);
END COMPONENT;
. . .
K1: inv PORT MAP(x,y);

182

Hijerarhijsko projektovanje

Primenjeno je poziciono povezivanje: signali x i y se vezuju na portove a i b komponente


inv, respektivno. Povezivanje je implicitno, odreeno redosledom po kojem su portovi
navedeni u deklaraciji komponente.
Identino povezivanje moe se postii i tzv. nominalnim povezivanjem, na sledei nain:
K1: inv PORT MAP(a=>x,b=>y);

Zapis (a=>x, b=>y) znai da se port a komponente inv povezuje sa signalom x, a port b sa
signalom y. Povezivanje je sada eksplicitno, jer se za svaki port komponente navodi ime
signala s kojim se taj port povezuje. Kod nominalnog povezivanja, redosled povezivanja
nije bitan. Sledea naredba za instanciranje komponenta ima isti efekat kao prethodna:
K1: inv PORT MAP(b=>y,a=>x);

Poziciono povezivanje je kompaktnije, ali je zato nominalno preglednije. Problem s


pozicionim povezivanjem nastaje ako se naknadno, iz bilo kog razloga, promeni redosled
portova u entitetu komponente. Takva jedna modifikacija, koja je inae minorna sa
stanovita komponente, zahtevala bi intervenciju u svim arhitekturama u kojima je
komponenta instancirana i to radi preureenja liste portova, to je svakako podlono lakom
pravljenju greaka.
Doputeno je da neki portovi komponente ostanu nepovezani prilikom instanciranja. Za
oznaavanje nepovezanih portova koristi se slubena re open, npr.:
K2: nase_kolo PORT MAP(x, y, open, z);

Ili, za nominalno povezivanje:


K2: nase_kolo PORT MAP(a=>x, b=>y, c=>open, d=>z);

Nepovezani portovi su po pravilu izlazni portovi komponente koji se ne koriste (nisu


potrebni) u arhitekturi koja se projektuje. Softveri za sintezu poseduju mogunost da
prilikom optimizacije hardvera iz komponente automatski odstrane one delove logike koji
su iskljuivo namenjeni za generisanje signala nepovezanih izlaznih portova. Ako se u
naredbi za instanciranje koristi nominalno povezivanje, otvoreni portovi mogu biti
izostavljeni iz liste portova, a efekat e biti isti kao da je koriena opcija open:
K2: nase_kolo PORT MAP(x=>a, y=>b, z=>d);

Meutim, radi bolje itljivosti kda, dobra je praksa da se u listi portova navedu svi
portovi, a oni koji treba da ostanu nepovezani eksplicitno oznae sa open.
VHDL dozvoljava da se prilikom instanciranja komponente i ulazni portovi oznae sa
open. U tom sluaju, na ulazni port se fiksno postavlja podrazumevanu vrednost (0 ili
1). Meutim, dobra je praksa ne ostavljati ulazni port nepovezanim, ve eksplicitno, u
naredbi za instanciranje, definisati vrednost koja e fiksno biti postavljena na tom portu,
kao u sledeem primeru:
brojac: BCD_brojac PORT MAP(din=>d, q=>q, en=>1);

U prethodnoj naredbi, instancirana je komponenta BCD_broja i pri tom je njen ulaz za


dozvolu rada, en, fiksno postavljen na vrednost 1. Na taj nain je ukinuta mogunost
kontrole rada instanciranog brojaa, a brojanje je uvek dozvoljeno. Meutim, treba naglasiti
da pojedini softveri za sintezu ne dozvoljavaju korienje konstantnih vrednosti u naredbi
za instanciranje komponente. U takvim sluajevima, reenje se sastoji u tome da se u

COMPONENT

183

arhitekturi deklarie interni signal koji e najpre biti postavljen na eljenu konstantnu
vrednost, a zatim, u naredbi za instanciranje, povezan sa odgovarajuim ulaznim portom:
ARCHITECTURE ...
SIGNAL ena : STD_LOGIC;
BEGIN
ena <= 1;
...
brojac: BCD_brojac PORT MAP(din=>d, q=>q, en=>ena);
...
END ...

Generic map. Generiki parametri se koriste za kreiranje tzv. generikih, odnosno


parametrizovanih VHDL opisa, tj. opisa koji modeluju ne samo jedno, konkretno kolo, ve
itavu klasu kola koja, tipino, poseduju istu funkcionalnosti, a razlikuju se po
dimenzijama portova. Na primer, na Sl. 7-5(a) je prikazan entitet generikog binarnog
brojaa. Kao to vidimo, opseg izlaznog porta q nije definisan konkretnom brojnom
vrednou, ve je izraen preko generikog parametra N. Odgovarajua deklaracija
generike komponente prikazana je na Sl. 7-5(b).
ENTITY binarni_brojac IS
GENERIC(N : NATURAL);
PORT(clk, rst : IN STD_LOGIC;
q : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);
END bin_brojac;
(a)
COMPONENT binarni_brojac
GENERIC(N : NATURAL);
PORT(clk, rst : IN STD_LOGIC;
q : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);
END COMPONENT;
(b)
Sl. 7-5 Generiki parametri: (a) deklaracija generikog entiteta; (b) deklaracija generike
komponente.

Naredba za instanciranje generike komponente pored port map sadri i konstrukciju


generic map, kojom se postavljaju stvarne vrednosti generikih parametra. Na primer,
sledea naredba kreira jednu instancu dvobitnog binarnog brojaa:
dvo_bit_brojac: binarni_brojac
GENERIC MAP(N => 2);
PORT MAP(clk => clock, rst => reset, q => q_out);

Generike komponente mogu imati proizvoljan broj generikih parametara, a u konstrukciji


generi map, kao i u port map, moe se koristiti bilo poziciono bilo nominalno povezivanje.
Pr. 7-7 Dvocifarski dekadni broja
U ovom primeru, projektovaemo dvocifarski dekadni broja na osnovu generikog mod_n
brojaa (tj . brojaa po modulu n). U Pr. 5-22 je predstavljen programabilni broja po
modulu n. Ono to broja iz Pr. 5-22 ini programabilnim jeste mogunost izbora osnove
brojanja posredstvom namenskog porta. Prvi od dva VHDL opisa iz ovog primera modelira
generiki mod_n broja, ija se osnova brojanja i duina (broj bita) definiu generikim
parametrima, n i w (Sl. 7-6(a)). Ovaj broja odbrojava od 0 do n-1, a zatim se vraa na

184

Hijerarhijsko projektovanje

poetak. Zapazimo da parametri n i w nisu nezavisni, jer su za brojanje do n-1 u binarnom


kodu potrebna w= log 2 n bita. Interfejs brojaa ine signali takta (clk), asinhronog reseta
(rst), dozvole rada (en), w-bitni izlaz za tekue stanje brojaa (q) i signal izlaznog prenosa
(cout), koji je postavljen na 1 za sve vreme dok je broja u stanju n-1. Generiki opis
mod_n brojaa se moe sintetizovati u broja proizvoljne osnove, ali za razliku od brojaa
iz Pr. 5-22, nakon to je sintetizovan, on nee imati mogunost programiranja osnove.

(a)
(b)
Sl. 7-6 (a) Generiki mod_n broja; (b) blok dijagram dvocifarskog dekadnog brojaa.
- Genericki mod_n brojac ---------------------------------------LIBRARY IEEE;
3 USE IEEE.STD_LOGIC_1164.ALL;
4 USE IEEE.NUMERIC_STD.ALL;
5 -----------------------------------------------------------------6 ENTITY mod_n_counter IS
7
GENERIC (N : NATURAL;
8
W : NATURAL);
9
PORT (clk,rst, en : IN STD_LOGIC;
10
cout : OUT STD_LOGIC;
11
q : OUT STD_LOGIC_VECTOR(W-1 DOWNTO 0));
12 END mod_n_counter;
13 ----------------------------------------------------------------14 ARCHITECTURE arch OF mod_n_counter IS
15
SIGNAL r_reg : UNSIGNED(W-1 DOWNTO 0);
16
SIGNAL r_next : UNSIGNED(W-1 DOWNTO 0);
17 BEGIN
18------ Registar -------------------------------------------------19
PROCESS(clk,rst)
20
BEGIN
21
IF(rst = '1') THEN
22
r_reg <= (OTHERS => '0');
23
ELSIF(clk'EVENT AND clk = '1') THEN
24
IF(en = 1) THEN
25
r_reg <= r_next;
26
END IF;
27
END IF;
28
END PROCESS;
29---- Logika sledeceg stanja i izlaza ----------------------------30
r_next <= (OTHERS => '0') WHEN r_reg = (N - 1) ELSE
31
r_reg + 1;
32
q <= STD_LOGIC_VECTOR(r_reg);
33
cout <= 1 WHEN r_reg = (N-1) ELSE
34
0;
35 END arch;
1
2

COMPONENT

185

Na Sl. 7-6(b) je prikazan blok dijagram dvocifarskog dekadnog brojaa koji je realizovan
povezivanjem dve instance brojaa po modulu n s generikim parametrima postavljenim na
vrednosti: n=10 i w=4. Sledi odgovarajui VHDL opis.
- Dvocifarski dekadni brojac -----------------------------------LIBRARY IEEE;
3 USE IEEE.STD_LOGIC_1164.ALL;
4 -----------------------------------------------------------------5 ENTITY two_digit_dec_counter IS
6
PORT (clk,rst : IN STD_LOGIC;
7
cout : OUT STD_LOGIC;
8
q_1, q_10 : OUT STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0));
9 END two_digit_dec_counter;
10 ----------------------------------------------------------------11 ARCHITECTURE generic_arch OF two_digit_dec_counter IS
12
COMPONENT mod_n_counter IS
13
GENERIC (N : NATURAL;
14
WIDTH : NATURAL);
15
PORT (clk,rst, en : IN STD_LOGIC;
16
cout : OUT STD_LOGIC;
17
q : OUT STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0));
18
END COMPONENT;
19
SIGNAL cout_1, cout_10 : STD_LOGIC;
20 BEGIN
21
one_digit: mod_n_counter
22
GENERIC MAP(N => 10, W => 4);
23
PORT MAP (clk => clk, rst => rst, en => en,
24
cout => cout_1, q => q_1);
25
ten_digit: mod_n_counter
26
GENERIC MAP(N => 10, W => 4);
27
PORT MAP (clk => clk, rst => rst, en => en,
28
cout => cout_10, q => q_10);
29
cout <= cout_1 AND cout_10;
30 END generic_arch;
31 ----------------------------------------------------------------1
2

Ovaj primer jasno ukazuje na potencijale kombinovanja generikih parametara i


komponenti. Umesto da kreiramo itav niz brojaa razliitih osnova brojanja, koristimo
samo jednu, ali parametrizovanu komponentu binarnog brojaa, ija se osnova brojanja
definie tek prilikom instanciranja, posredstvom generikog parametra. Uopteno govorei,
u odnosu na neparametrizovane (tj. fiksne) komponente, generike komponente su
fleksibilnije i univerzalnije, s veom ansom da budu ponovo koriene u buduim
projektima. Parametrizovano projektovanje je tema glave 8.

7.3. CONFIGURATION
Deklaracija komponente sadri samo osnovne informacije o komponenti, koje se tiu
njenog interfejsa i eventualno generikih parametara. Ove informacije su dovoljne za
korienje komponente u novom kdu. Meutim, deklaracija komponente ne sadri
nikakvu referencu na kd komponente (tj. na entitet i arhitekturu komponente). U kontekstu
VHDL-a, pod pojmom konfiguracija podrazumeva se povezivanje komponente sa
odgovarajuim entitetom i arhitekturom. Proces konfiguracije se sprovodi u toku faze
elaboracije dizajna (v. 2.4) i ukljuuje dva koraka: a) povezivanje komponente i entiteta i b)

186

Hijerarhijsko projektovanje

povezivanje entiteta i arhitekture. U ovom pogledu, VHDL je veoma fleksibilan, jer kao to
dozvoljava da za jedan isti entitet moe postojati vie razliitih arhitektura, tako isto
dozvoljava da se jedna ista komponenta, po potrebi, moe povezati s jednim od,
eventualno, vie dostupnih entiteta. Projektant ostvaruje eksplicitnu kontrolu nad
konfiguracijom (ta se sa im povezuje) korienjem jezike konstrukcije cofiguration, koja
se pie kao nezavisna projekta jedinica. Sintaksa ove konstrukcije je sloena. Meutim, u
kdu za sintezu se koristi samo mali deo mogunosti koje ona prua. ta vie, eksplicitna
konfiguracija nije uvek neophodna. Na primer, ni u jednom primeru VHDL opisa iz ove
glave konstrukcija za konfiguraciju nije koriena, iako su u svim primerima koriene
komponente. Uvek kada za neku komponentu nije definisana konfiguracija, primenjuje se
podrazumevano povezivanje, koje znai sledee:

Komponenta se povezuje sa istoimenim entitetom.

Portovi komponente se povezuju sa istoimenim portovima entiteta.

Najskorije analizirana arhitektura se povezuje sa entitetom.

Treba naglasiti da u VHDL projektima namenjenim za sintezu, za jedan entitet po pravilu


postoji samo jedna arhitektura. To znai da e podrazumevano povezivanje biti dovoljno u
najveem broju sluajeva ukoliko se potuju pravila iz prve dve take.
Meutim, i u sintezi se povremeno javljaju situacije kad je potrebno baratati s vie od jedne
arhitekture za isti entitet. Na primer, prilikom projektovanja digitalnog hardvera esto je
potrebno pronai optimalan kompromis izmeu performansi i sloenosti realizacije. Da bi
postigao zadovoljavajui rezultat, projektant je u poziciji da realizuje nekoliko alternativnih
reenja istog modula i da svako reenje ugrauje u sistem radi procene njegovih
performansi. Najefikasniji nain kako se to moe ostvariti jeste da se svako takvo reenje
realizuje u vidu zasebne arhitekture istog entiteta. Drugi primer viestrukih arhitektura se
javlja kod testbena (v. 2.4.1), gde se sistem koji se projektuje najpre opisuje na visokom
apstraktnom nivou, a zatim postepeno razrauje. Svaka nova, razraenija varijanta sistema
predstavlja novu arhitekturu koja se ugrauje u isti testben.
Premda postoje i drugi naini za definisanje konfiguracije u VHDL-u, razmotriemo samo
jedan, koji je karakteristian za kd namenjen za sintezu, a koji koristi tzv. deklaraciju
konfiguracije. Deklaracija konfiguracije se pie kao nezavisna projektna jedinica (poput
entiteta ili arhitekture), a njena pojednostavljena sintaksa je sledeeg oblika:
CONFIGURATION ime_konfiguracije OF ime_entiteta
FOR ime_arhitekture
FOR labela_instance : ime_komponente
USE ENTITY ime_biblioteke.ime_entiteta(ime_arhitekture);
END FOR;
FOR labela_instance : ime_komponente
USE ENTITY ime_biblioteke.ime_entiteta(ime_arhitekture);
END FOR;
. . .
END FOR;
END;

U gornjoj sintaksi, ime_konfiguracije je jedinstveno ime konfiguracione jedinice.


Ime_entiteta iz prve i ime_arhitekture iz druge linije ukazuju na entitet i arhitekturu na koje
se konfiguracija odnosi. Labela_instance ukazuje na jednu konkretnu instancu komponente
ime_komponente, dok je u naredbi use koja sledi naveden par entitet-arhitektura koji se

CONFIGURATION

187

povezuje s tom instancom. Ime_biblioteke je ime biblioteke u kojoj su smeteni entitet i


arhitektura. Umesto konkretnog imena instance (labela_instance) dozvoljeno je korienje
slubene rei all. U tom sluaju, povezivanje definisano naredbom use se odnosi na sve
instance date komponente.
Pr. 7-8 Konfigurabilni dvocifarski dekadni broja
Razmotrimo ponovo projekat dvocifarskog dekadnog brojaa iz Pr. 7-7. U arhitekturi
dvocifarskog brojaa, generic_arch, koriste se dve instance mod_n brojaa koje su,
pomou generiki parametara n i w, podeene za brojanje u osnovi 10. Pretpostavimo sada
da je projekat proiren jo jednom arhitekturom koja opisuje takoe broja po modulu n, ali
takav da za razliku od realizacije opisane postojeom arhitekturom, arch, ne broji navie (0,
..., n-1, 0, 1...), ve nanie (0, n-1, ...., 1, 0, n-1, ...). Kd ove nove arhitekture, nazvane
arch_down, dat je ispod. Zapazimo da je u odnosu na opis brojaa navie, jedina razlika u
logici sledeeg stanja (linije 22 i 23) koja regulie redosled stanja brojaa i u logici izlaza
(linije 25 i 26), jer se sada signal izlaznog prenosa javlja dok je broja u stanju 0, a ne u
stanju n-1 kao kod brojanja navie.
- Genericki mod_n brojac nanize --------------------------------LIBRARY IEEE;
3 USE IEEE.STD_LOGIC_1164.ALL;
4 USE IEEE.NUMERIC_STD.ALL;
5 ----------------------------------------------------------------6 ARCHITECTURE arch_down OF mod_n_counter IS
7
SIGNAL r_reg : UNSIGNED(W-1 DOWNTO 0);
8
SIGNAL r_next : UNSIGNED(W-1 DOWNTO 0);
9 BEGIN
10 ----- Registar -------------------------------------------------11
PROCESS(clk,rst)
12
BEGIN
13
IF(rst = '1') THEN
14
r_reg <= (OTHERS => '0');
15
ELSIF(clk'EVENT AND clk = '1') THEN
16
IF(en = 1) THEN
17
r_reg <= r_next;
18
END IF;
19
END IF;
20
END PROCESS;
21 --- Logika sledeceg stanja i izlaza ----------------------------22
r_next <= N-1 WHEN r_reg = 0 ELSE
23
r_reg - 1;
24
q <= STD_LOGIC_VECTOR(r_reg);
25
cout <= 1 WHEN r_reg = 0 ELSE
26
0;
27 END arch;
28 ----------------------------------------------------------------1
2

S obzirom na to to sada u okviru istog projekta raspolaemo dvema arhitekturama, arch i


arch_down, za isti entitet mod_n_counter, neophodno je napisati konfiguracionu jedinicu
kako bi se izabrala verzija brojaa koja e se koristiti u arhitekturi generic_arch entiteta
two_digit_dec_counter. Ako je cilj da se realizuje dvocifarski dekadni broja nanie,
odgovarajua konfiguraciona jedinica je oblika:

188

Hijerarhijsko projektovanje

CONFIGURATION down_config OF two_digit_dec_counter


FOR generic_arch
3
FOR one_digit: mod_n_counter
4
USE ENTITY work. mod_n_counter(down_arch);
5
END FOR;
6
FOR ten_digit: mod_n_counter
7
USE ENTITY work.mod_n_counter(down_arch);
8
END FOR;
9
END FOR;
10 END;
1
2

Budui da se obe instance mod_n brojaa povezuju s istom arhitekturom, kd


konfiguracione jedinice se moe uprostiti korienjem slubene rei all:
1
2
3
4
5
6
7

CONFIGURATION down_config OF two_digit_dec_counter


FOR generic_arch
FOR all : mod_n_counter
USE ENTITY work.mod_n_counter(down_arch);
END FOR;
END FOR;
END;

Naglasimo jo jedanput da je se izbor izmeu dve varijante dvocifarskog brojaa vri


iskljuivo posredstvom konfiguracione jedinice i da se pri tom ne zahteva bilo kakva
intervencija u kdu brojaa. Takoe, naglasimo da se sintezom ovog projekta ne kreira
dvocifarski broja s mogunou izbora smera brojanja, ve da se radi o projektu koji se u
zavisnosti od zahteva konkretne primene moe sintetizovati bilo u broja navie, bilo u
broja nanie.

7.4. LIBRARY
Kao to je ve reeno u poglavlju 2.4, procesiranje VHDL projekta podrazumeva:
razlaganje kda na projektne jedinice (deklaracije entiteta, arhitekture, deklaracije
konfiguracije itd.), prevoenje projektnih jedinica u meukd i smetanje meukda u
biblioteku. VHDL biblioteka se moe razumeti kao neka vrsta virtuelnog skladita
procesiranih projektnih jedinica. Podrazumevano, za smetanje projektnih jedinica koristi
se tzv. radna biblioteka, tj. biblioteka work. Ova biblioteka je vidljiva samo u tekuem
projektu i ne moe se prenositi u druge projekte. Na primer, biblioteka work je koriena u
deklaraciji konfiguracije iz Pr. 7-8:
USE ENTITY work.mod_n_counter(down_arch);

Osim kao skladite za projektne jedinice tekueg projekta, VHDL biblioteke se mogu
koristiti i za prenoenje u druge projekte i ponovno korienje jednom napisanih i
verifikovanih projektnih jedinica. Svakako je racionalnije i efikasnije esto koriene
projektne jedinice uvati u zajednikoj biblioteci nego uvek iznova kopirati izvorni kd
takvih jedinica u svaki novi projekat.
Biblioteka se ukljuuje u VHDL kd naredbom library, ije je sintaksa:
LIBRARY ime_biblioteke, ime_biblioteke, ..., ime_biblioteke;

LIBRARY

189

Na primer, pretpostavimo da VHDL projekat dvocifarskog dekadnog brojaa iz Pr. 7-7 ne


sadri kd za mod_n broja, ve da su entitet i dve arhitekture ovog brojaa smeteni u
eksternoj biblioteci imena c_lib. U tome sluaju, kd konfiguracione jedinice dvocifarskog
brojaa bi izgledao ovako:
LIBRARY c_lib;
CONFIGURATION down_config OF two_digit_dec_counter
3
FOR generic_arch
4
FOR one_digit: mod_n_counter
5
USE ENTITY c_lib.mod_n_counter(down_arch);
6
END FOR;
7
FOR ten_digit: mod_n_counter
8
USE ENTITY c_lib.mod_n_counter(down_arch);
9
END FOR;
10
END FOR;
1
2

Biblioteka c_lib je ukljuena naredbom library (linija 1). Time ova biblioteka postaje
vidljiva, a njen sadraj dostupan za korienje u kdu koji sledi. U linijama 5 i 8, umesto
work sada pie c_lib, to znai da se komponenta mod_n_counter vie ne povezuje sa
entitetom mod_n_counter i arhitekturom down_arch iz tekueg projekta, ve sa istoimenim
entitetom i arhitekturom iz biblioteke c_lib.
U vezi sa naredbom library je i naredba use, kojom se u projekat mogu selektivno
ukljuivati pojedine projekte jedinice iz biblioteke, tipino one koje e esto biti koriene.
Sintaksa naredbe use, onda kad se ona koristi za ukljuivanje projektnih jedinica, oblika je:
USE ime_biblioteke.ime_jedinice;

Efekat naredbe use je u tome da se projektna jedinica moe direktno pozivati u kdu, bez
navoenja imena biblioteke. Ako se u naredbi use umesto imena jedinice napie slubena
re all, direktan pristup bie omoguen svim projektnim jedinicama iz biblioteke. Na
primeru deklaracije konfiguracije dvocifarskog dekadnog brojaa, to izgleda ovako:
LIBRARY c_lib;
USE c_lib.mod_n_counter;
3 CONFIGURATION down_config OF two_digit_dec_counter
4
FOR generic_arch
5
FOR one_digit: mod_n_counter
6
USE ENTITY mod_n_counter(down_arch);
7
END FOR;
8
FOR ten_digit: mod_n_counter
9
USE ENTITY mod_n_counter(down_arch);
10
END FOR;
11 END FOR;
1
2

Kao to se moe videti, u linijama 6 i 9 vie nema imena biblioteke, ali se podrazumeva,
zahvaljujui naredbi use iz linije 2, da se entitet mod_n_counter i arhitektura down_arch
uzimaju iz biblioteke c_lib.
Za razliku od eksternih biblioteka, koje se u projekat ukljuuju naredbom library,
biblioteka work je implicitno ukljuena u svaki projekat. Zato u kdu konfiguracione
jedinice iz Pr. 7-7 ne postoji naredba library work.

190

Hijerarhijsko projektovanje

7.5. Potprogrami
U VHDL-u, kao u veini programskih jezika, postoje dve vrste potprograma: funkcije i
procedure. Osnovna razlika meu njima je u tome to procedura moe da vrati vie od
jedne izlazne vrednosti, dok funkcija vraa samo jednu. Takoe, svi parametri funkcije su
ulazni, dok procedura moe imati ulazne, izlazne i ulazno/izlazne parametre. Potprogrami u
VHDL-u mogu da sadre iskljuivo sekvencijalne naredbe i po nainu rada se mnogo ne
razlikuju od potprograma iz tradicionalnih programskih jezika. Meutim, za razliku od
entiteta i arhitektura, potprogrami se ne tretiraju kao projektne jedinice i zbog toga ne mogu
nezavisno da se procesiraju. Na primer, funkciju nije mogue sintetizovati izolovano od
ostatka VHDL kda. Napomenimo da iako osnovni mehanizmi za kreiranje hijerarhije u
softveru, funkcije i procedure nisu pogodno sredstvo za modeliranje hardverske hijerarhije.

7.5.1. FUNCTION
Funkcije se koriste, izmeu ostalog, da bi se realizovale neke tipine sloenije logike
operacije ili aritmetika izraunavanja, obavila konverzija iz jednog u neki drugi tip
podataka, ili kreirali novi operatori i atributi. Jednom napisana, funkcija se moe koristiti
(pozivati) u VHDL kdu proizvoljan broj puta. Na taj nain, kd postaje kompaktniji i
razumljiviji. Funkcija, kao i proces, moe sadrati samo sekvencijalne naredbe (if, case i
loop). Izuzetak je wait naredba koja nije dozvoljena u funkciji ako se ona koristi u kdu za
sintezu. Takoe, u funkciji nije dozvoljeno deklarisati signale i instancirati komponente.
Deklaracija funkcije. Sintaksa deklaracije funkcije je sledeeg oblika:
FUNCTION ime_funkcije[<lista_parametara>] RETURN tip_podataka IS
[deklaracije]
BEGIN
sekvencijalna naredba;
sekvencijalna naredba;
. . .
RETURN (izraz);
END ime_funkcije;

Deklaracija funkcije se sastoji iz zaglavlja i tela. Zaglavlje definie ime funkcije, spisak
ulaznih parametara i tip izlazne vrednosti funkcije, dok je u telu sadran kd funkcije. U
gornjoj sintaksi, lista_parametara definie ulazne parametre funkcije. Broj parametara
moe biti proizvoljan (ukljuujui i nulu). Parametri mogu biti konstante ili signali, dok
varijable nisu dozvoljene, tj.:
<parametar> = CONSTANT ime_konstante : tip_konsatne;
<parametar> = SIGNAL ime_signala : tip_signala;
<parametar> = ime_konst_ili_sign : tip_konst_ili_sign;

Re conastant napisana ispred imena parametra postavlja ogranienje da se pri pozivu


funkcije kao stvarni parametar moe koristiti samo konstanta. Slino, re signal ispred
imena parametra uvodi ogranienje da stvarni parametar moe biti samo signal. Ako ispred
imena parametra ne pie ni constant ni signal, ogranienja ovog tipa ne postoje, a stvarni
parametar moe biti bilo konstanta bilo signal. Tip parametra moe biti bilo koji tip
podatak koji se moe sintetizovati (boolean, std_logic, integer itd.). Pri tom, za vektorske
tipove ne treba navoditi opseg (npr. range za integer ili to/downto za std_logic_vector). S
druge strane, funkcija moe da vrati samo jednu vrednost, iji je tip naveden iza kljune
rei return. Na primer, razmotrimo zaglavlje sledee funkcije:

Potprogrami

191

FUNCTION f1 (a,b : INTEGER; SIGNAL c : STD_LOGIC_VECTOR) RETURN


BOOLEAN IS
[deklaracije]
BEGIN
(sekvencijalne naredbe)
END f1;

Ime funkcije je f1. Funkcija ima tri ulazna parametra (a, b i c).. Parametri a i b su tipa
integer, a c tipa std_logic_vector. Uoimo da uz std_logic_vector nije naveden opseg (to ili
downto). Pri pozivu ove funkcije, kao parametri a i b se mogu koristiti i konstantne
vrednosti i signali, dok se na mestu parametra c moe nai samo signal. Izlazna vrednosti
funkcije f1 je tipa boolean.
Poziv funkcije. Poziv funkcije je uvek deo nekog sloenijeg izraza, npr.:
x <= conv_integer(a);
-- konvertuje a u integer
y <= maximum(a,b);
-- vraca vece od a i b
IF(x > maximum(a,b)) THEN ... -- poredi x sa vecim od a i b

Pr. 7-9 Funkcija positive_egde()


Funkcija iz ovog primera detektuje rastuu (pozitivnu) ivicu takta. Slina je naredbi
if(clkevent and clk=1), koja se koristi za modeliranje sinhronih sekvencijalnih kola. Data
funkcija ima jedan parametar, signal tipa std_logic, i vraa vrednost tipa boolean.
-- Deklaracija funkcije -------------------------------------------FUNCTION positive_edge (SIGNAL s : STD_LOGIC) RETURN BOOLEAN IS
BEGIN
RETURN (sEVENT AND s=1);
END positive_edge;
-- Poziv funkcije -------------------------------------------------. . .
IF positive_edge(clk) THEN ...
. . .

Pr. 7-10 Funkcija conv_integer()


Funkcija iz ovog primera konvertuje vrednost signala tipa std_logic_vector u odgovarajuu
vrednost tipa integer. Na primer, za ulaz 0110 funkcija vraa 6. Kd funkcije je u
potpunosti generiki, tj. radi za bilo koji opseg (range) i poredak (to/downto) ulaznog
parametra vector koji je tipa std_logic_vector. Kao pomona promenljiva, u funkciji se
koristi varijabla b tipa integer. Njen opseg odgovara opsegu binarnih brojeva duine
vectorlength bita (linija 3). Na poetku, b dobija vrednost bita najvee teine ulaznog
vektora (linije 5-7). Zatim, u petlji, poev od pozicije prve manje teine od najvee, pa do
pozicije najmanje teine (linija 8), b se mnoi sa 2 (linija 9) i uveava za vrednost bita sa
tekue pozicije, i, u ulaznom vektoru (linije 10 i 11). Po izlasku iz petlje, b ima vrednost
jednaku celobrojnom ekvivalentu ulaznog binarnog broja. Ova vrednost se vraa iz funkcije
naredbom return (linija 13).
1 ---- deklaracija funkcije ---------------------------------------2 FUNCTION conv_integer(SIGNAL vector: STD_LOGIC_VECTOR)
RETURN INTEGER IS
3
VARIABLE b: INTEGER RANGE 0 TO 2**vector'LENGTH-1;
4 BEGIN

192

Hijerarhijsko projektovanje

5
IF(vector(vector'HIGH)='1') THEN b:=1;
6
ELSE b:=0;
7
END IF;
8
FOR i IN(vector'HIGH-1) DOWNTO (vector'LOW) LOOP
9
b:=b*2;
10
IF(vector(i)='1')THEN b:=b+1;
11
END IF;
12
END LOOP;
13
RETURN b;
14 END conv_integer;
---- poziv funkcije -----------------------------------------------. . .
y <= conv_integer(a);
. . .

Zapazimo da je ulazni parametar funkcije conv_integer(), vector, oznaen kao signal. To


znai da bi poziv funkcije u kome bi se kao stvarni parametar navela konstanta umesto
signala, npr. y<=conv_integer(00110011) bio sintaksno neispravan. Funkcija za
konverziju konstantnih vektora tipa std_logic_vector u integer imala bi zaglavlje:
FUNCTION conv_integer(CONSTANT
INTEGER IS

vector:

STD_LOGIC_VECTOR)

RETURN

ili
FUNCTION conv_integer(vector: STD_LOGIC_VECTOR) RETURN INTEGER IS

Druga forma deklaracije parametra je optija, jer dozvoljava da se pri pozivu funkcije kao
ulazni parametar navede bilo konstanta bilo signal. Napomenimo da ne postoji oblik
funkcije conv_integer() koji bi omoguio konverziju varijable tipa std_logic_vector u
integer (zato to varijabla ne moe biti ulazni parametar funkcije).
Pr. 7-11 Logaritam za osnovu 2
Funkcija iz ovog primera izraunava vrednost funkcije log 2 N , gde je N ceo broj, a
oznaava vee celo od. Za N=4, rezultat je 2, za N=8, rezultat je 3, za N=9 rezultat je 4
itd. Drugim reima, funkcija vraa broj bita potrebnih za predstavljanje celog broja N u
binarnom brojnom sistemu.
1
2
3
4
5
6
7
8
9
10
11
12

-- f-ja log2c(N) -----------------------------------------------FUNCTION log2c(N : INTEGER) RETURN INTEGER IS


VARIABLE m, p : INTEGER;
BEGIN
m := 0; p := 1;
WHILE(p < N) LOOP
m := m + 1;
p := p * 2;
END LOOP;
RETURN m;
END log2c;
-----------------------------------------------------------------

Funkcija log2c se esto koristi za odreivanje duine vektorskog signala. Na primer, u


opisu parametrizovanog mod_n brojaa iz Pr. 7-7 koriste se dva generika parametra, n koji
definie osnovu brojanja i w koji definie broj izlaznih bita brojaa. Oigledno, ova dva
parametra nisu nezavisni s obzirom da vai w = log 2 n . Ispod je ponovljena deklaracija

Potprogrami

193

entiteta mod_n brojaa iz Pr. 7-7, ali sada samo s jednim generikim parametrom, n, dok se
broj bita izlaznog porta q odreuje pomou funkcije log2c.
ENTITY mod_n_counter IS
GENERIC (N : NATURAL);
PORT (clk,rst, en : IN STD_LOGIC;
cout : OUT STD_LOGIC;
q : OUT STD_LOGIC_VECTOR(log2c(N)-1 DOWNTO 0));
END mod_n_counter;

Funkcije (i procedure) se najee piu u paketu. Napisana u paketu, funkcija je vidljiva (tj.
moe se pozivati) svuda u projektu gde je paket ukljuen. Takoe, ako je to potrebno,
funkcija se moe pisati i unutar arhitekture ili entiteta. Meutim, u tom sluaju ona e biti
vidljiva samo u arhitekturi/entitetu u kome je napisana. Kao to je ve reeno, ako paket
sadri potprograme, tada je neophodno da takav paket ima i telo, u kome e biti sadrana
tela svih funkcija i procedura navedenih u deklarativnom delu paketa. U nastavku su dati
primeri oba ova sluaja.
Pr. 7-12 Funkcija u arhitekturi
U VHDL kdu koji sledi, funkcija positiv_edge() iz Pr. 7-10 napisana je u deklarativnom
delu arhitekture (linije 11-14) i potom iskoriena za detekciju rastue ivice takta u telu
arhitekture koja realizuje D flip-flop (linija 19).
-----------------------------------------------------------------LIBRARY IEEE;
3 USE IEEE.STD_LOGIC_1164.ALL;
4 -----------------------------------------------------------------5 ENTITY dff IS
6
PORT (d,clk,rst : IN STD_LOGIC;
7
q : OUT STD_LOGIC);
8 END dff;
9 -----------------------------------------------------------------10 ARCHITECTURE d_flip_flop OF dff IS
11
FUNCTION positive_edge (SIGNAL s : STD_LOGIC) RETURN BOOLEAN
12
BEGIN
13
RETURN (s'EVENT AND s='1');
14
END positive_edge;
15 BEGIN
16
PROCESS(clk,rst)
17
BEGIN
18
IF(rst='1') THEN q <= '0';
19
ELSIF positive_edge(clk) THEN q <= d;
20
END IF;
21
END PROCESS;
22 END d_flip_flop;
1
2

Pr. 7-13 Funkcija u paketu


Ovaj primer je slian prethodno, s jedinom razlikom to je sada funkcija positive_edge()
locirana u paketu. U sekciji package funkcija se samo deklarie, dok se kompletan kd
funkcije (zaglavlje i telo funkcije) nalazi u sekciji package body. Da bi funkcija bila
dostupna u glavnom kdu, dovoljno je naredbom use ukljuiti odgovarajui paket.

194

Hijerarhijsko projektovanje

----- paket: ----------------------------------------------------LIBRARY IEEE;


3 USE IEEE.STD_LOGIC_1164.ALL;
4 -----------------------------------------------------------------5 PACKAGE nas_paket IS
6
FUNCTION positive_edge (SIGNAL s : STD_LOGIC) RETURN BOOLEAN;
7 END nas_paket;
8 -----------------------------------------------------------------9 PACKAGE BODY nas_paket IS
10
FUNCTION positive_edge (SIGNAL s : STD_LOGIC) RETURN BOOLEAN IS
11
BEGIN
12
RETURN (s'EVENT AND s='1');
13
END positive_edge;
14 END nas_paket;
1
2

---- glavni kod -------------------------------------------------LIBRARY IEEE;


3 USE IEEE.STD_LOGIC_1164.ALL;
4 USE work.nas_paket.all;
5 -----------------------------------------------------------------6 ENTITY dff IS
7
PORT (d,clk,rst : IN STD_LOGIC;
8
q : OUT STD_LOGIC);
9 END dff;
10-----------------------------------------------------------------11 ARCHITECTURE d_flip_flop OF dff IS
12 BEGIN
13
PROCESS(clk,rst)
14
BEGIN
15
IF(rst='1') THEN q <= '0';
16
ELSIF positive_edge(clk) THEN q <= d;
17
END IF;
18
END PROCESS;
19 END d_flip_flop;
1
2

Pr. 7-14 Preklapanje operatora +


Funkcija iz ovog primera, nazvana +, preklapa predefinisani operator sabiranja (+).
Predefinisano + se moe primenjivati samo nad sabircima tipa integer, signed ili unsigned
(v. 3.3). Nova funkcija omoguie dve sabiranje vrednosti tipa std_logic_vector. Funkcija
je smetena u paketu nas_paket. Primer korienja funkcije dat je u kdu koji sledi posle
paketa. Funkcija ima dva ulazna parametra koji su kao i izlazna vrednost tipa
std_logic_vector. Pretpostaviemo da su duine oba ulazna i izlaznog vektora jednake.
Funkcija obavlja sabiranje ulaznih binarnih vektora bit-po-bit, poev od bita najmanje
teine. Za svaku bitsku poziciju, odreuje se bit sume, sum(i), i prenos, carry, koji se
pridodaje sledeoj poziciji.
1
2
3
4
5
6
7

---- paket -----------------------------------------------------LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;
----------------------------------------------------------------PACKAGE nas_paket IS
FUNCTION "+" (a,b: STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR;
END nas_paket;

Potprogrami
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

195

----------------------------------------------------------------PACKAGE BODY nas_paket IS


FUNCTION "+" (a,b: STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR IS
VARIABLE sum: STD_LOGIC_VECTOR(a'RANGE);
VARIABLE carry: STD_LOGIC;
BEGIN
carry := '0';
FOR i IN a'REVERSE_RANGE LOOP
sum(i) := a(i) XOR b(i) XOR carry;
carry := (a(i) AND b(i)) OR (a(i) AND carry)
OR (b(i) AND carry);
END LOOP;
RETURN sum;
END "+";
END nas_paket;
------adder.vhd ------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE WORK.NAS_PAKET.ALL;
----------------------------------------------------------------ENTITY adder IS
PORT ( a : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
y : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END adder;
----------------------------------------------------------------ARCHITECTURE adder OF adder IS
CONSTANT b : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0110";
BEGIN
y <= a + b;
END adder;
------------------------------------------------------------------

Treba napomenuti da postojanje funkcije za preklapanje operatora + ne znai da je


predefinisani operator + zamenjen novim, ve da je njegova primena proirena na novi tip
podataka. To znai da i tamo gde je paket nas_paket ukljuen i dalje moemo koristiti +
za sabiranje brojeva tipa integer, signed ili unsigned. Koja od dve funkcije e biti izvrena,
predefinisana ili preklopljena, zavisi od tipa operanada na koje je + primenjen.

7.5.2. PROCEDURE
Procedura je slina funkciji i u osnovi ima istu namenu. Meutim, za razliku od funkcije,
procedura moe da vrati vie od jedne vrednosti. Kao i funkcija i procedura se prvo
deklarie, a zatim poziva u kdu.
Deklaracija procedure. Sledi sintaksa deklaracije procedure.
PROCEDURE ime_procedure [<lista_parametara>] IS
[deklaracije]
BEGIN
(sekvencijalne naredbe)
END ime_procedure;

U gornjoj sintaksi, lista_parametara sadri ulazne i izlazne parametre procedure:


<parametar> = [CONSTANT] ime_konstante : smer tip_konstante;

196

Hijerarhijsko projektovanje

<parametar> = SIGNAL ime_signala : smer tip_signala;


<parametar> = VARIABLE ime_signala : smer tip_varijable;

Procedura moe imati proizvoljan broj ulaznih (smer=in), izlaznih (smer=out) i


ulazno/izlaznih (smer =inout) parametara. Svi oni mogu biti signali, varijable ili konstante.
Kod funkcija koje se koriste u kdu za sintezu, deklaracije wait, signal i component nisu
dozvoljene. Isto vai i za procedure, s izuzetkom da signali mogu biti deklarisani u
proceduri, ali samo pod uslovom da je ona deklarisana u procesu. Uz to, kao ni wait, tako
ni bilo koji drugi nain za detekciju ivice signala ne moe biti sintetizovan ako je deo
procedure (npr. konstrukcija tipa if(clk'event and clk='1' ) nije dozvoljena u proceduri).
Na primer, procedura ije je zaglavlje prikazano ispod ima tri ulazna parametra, a, b i c
(smer =in). Parametar a je konstanta tipa bit, dok su b i c signali istog tog tipa. Uoimo da
za ulazne parametre kljuna re constant nije neophodna. Procedura vraa dve vrednosti
kroz signale x (smer=out i tip=bit_vector) i y (mode=inout, tip=integer).
PROCEDURE nasa_procedura(a: IN BIT; SIGNAL b,c: IN BIT;
SIGNAL x: OUT BIT_VECTOR(7 DOWNTO 0);
SIGNAL y: INOUT INTEGER RANGE 0 TO 99) IS
BEGIN
. . .
END nasa_procedura;

Poziv procedure. Za razliku od funkcija, iji je poziv je uvek deo nekog izraza, pozivi
procedura se mogu tretirati kao nezavisne naredbe, koje mogu egzistirati samostalno ili biti
pridruene nekoj drugoj naredbi, npr.:
min_max(in1, in2, in3, out1, out2);
deljenje(deljenik, delilac, kolicnik, ostatak);
IF(a>b) THEN min_max(in1,in2,in3,out1,out2);

Procedure se piu na istim mestima u VHDL kdu gde i funkcije. Kao i za funkcije, tipino
mesto za procedure je u paketu, ali po potrebi procedura moe biti locirana i u glavnom
kdu (u deklarativnim sekcijama entiteta, arhitekture i procesa). Paket koji sadri proceduru
mora imati telo (package body), u kome e biti napisana tela svih procedura deklarisanih u
deklarativnom delu paketa.
Pr. 7-15 Procedura u arhitekturi
VHDL kd iz ovog primera opisuje min_max kolo (Sl. 7-7) uz pomo procedure koja se
zove sort. Procedura sort (linije 11-21) ima dva ulazna, inp1 i inp2, i dva izlazna parametra,
min_out i max_out, svi tipa std_logic_vector. U telu procedure, dva ulazna bit-vektori se
najpre porede, konvertovani u neoznaene cele brojeve, a zatim se na izlaz min_out prenosi
manji, a na izlaz max_out vei bit-vektor. Zapazimo da je procedura locirana u
deklarativnom delu arhitekture.

Sl. 7-7 min_max kolo.


1
2
3
4

--- Min-max kolo: primer procedure u arhitekturi ----------------LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;

Potprogrami
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

197

-----------------------------------------------------------------ENTITY min_max IS
PORT (inp1,inp2 : IN STD_LOGIC_VECTOR(7 downto 0);
min_out, max_out: OUT STD_LOGIC_VECTOR(7 downto 0));
END min_max;
-----------------------------------------------------------------ARCHITECTURE nasa_arhitektura OF min_max IS
PROCEDURE sort(SIGNAL in1,in2 : IN STD_LOGIC_VECTOR(7 downto 0);
SIGNAL min, max: OUT STD_LOGIC_VECTOR(7 downto 0))
IS
BEGIN
IF(UNSIGNED(in1) > UNSIGNED(in2)) THEN
max <= in1; min <= in2;
ELSE
max <= in2; min <= in1;
END IF;
END sort;
BEGIN
sort(inp1,inp2,min_out,max_out);
END nasa_arhitektura;

Pr. 7-16 Procedura u paketu


Ovaj primer je slian prethodnom, s jedinom razlikom to je sada procedura sort smetena
u paketu, a ne u arhitekturi. Na taj nain, ova procedura se moe koristiti u razliitim
delovima projektima. VHDL kd je raspodeljen na dve datoteke, jedna sadri kd za paket,
a druga glavni kd.
----- Paket: ----------------------------------------------------LIBRARY IEEE;
3 USE IEEE.STD_LOGIC_1164.ALL;
4 USE IEEE.NUMERIC_STD.ALL;
5 -----------------------------------------------------------------6 PACKAGE nas_paket IS
7
PROCEDURE sort(SIGNAL in1,in2 : IN STD_LOGIC_VECTOR(7 downto 0);
8
SIGNAL min, max: OUT STD_LOGIC_VECTOR(7 downto 0));
9 END nas_paket;
10 ----------------------------------------------------------------11 PACKAGE BODY nas_paket IS
12
PROCEDURE sort(SIGNAL in1,in2 : IN STD_LOGIC_VECTOR(7 downto 0);
13
SIGNAL min, max: OUT STD_LOGIC_VECTOR(7 downto 0))
14
IS
15
BEGIN
16
IF(UNSIGNED(in1) > UNSIGNED(in2)) THEN
17
max <= in1; min <= in2;
18
ELSE
19
max <= in2; min <= in1;
20
END IF;
21
END sort;
22 END nas_paket;
1
2

1
2
3
4

-- Glavni kod ---------------------------------------------------LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;
USE WORK.NAS_PAKET.ALL;

198
5
6
7
8
9
10
11
12
13
14

Hijerarhijsko projektovanje

-----------------------------------------------------------------ENTITY min_max IS
PORT (inp1,inp2 : IN STD_LOGIC_VECTOR(7 downto 0);
min_out, max_out: OUT STD_LOGIC_VECTOR(7 downto 0));
END min_max;
-----------------------------------------------------------------ARCHITECTURE nasa_arhitektura OF min_max IS
BEGIN
sort(inp1,inp2,min_out,max_out);
END nasa_arhitektura;

7.5.3. Poreenje funkcija i procedura

Funkcija moe imati nijedan, jedan ili vie ulaznih parametara i samo jednu izlaznu
vrednost. Ulazni parametri funkcije mogu biti konstante i signali, ali ne i varijable.
Procedura moe imati proizvoljan broj in, out ili inout parametara, koji mogu biti
signali, konstante ili varijable.

Poziv funkcije je uvek deo nekog izraza, dok je poziv procedure naredba za sebe.

Za funkcije, kao i za procedure, vai da se naredbe wait i component ne mogu


sintetizovati. U funkciji je dozvoljeno korienje jezikih konstrukcija za detekciju
ivice, dok u proceduri nije.

Procedure i funkcije se mogu pisati na istim mestima u kdu. Uobiajeno su smetene


u paketu (iz razloga ponovnog korienja), ali mogu biti locirane i u glavnom kdu (u
deklarativnim sekcijama arhitekture, entiteta ili procesa). Paket koji sadri funkcije ili
procedure, mora imati i telo (package body) u kome e biti smetena tela svih
funkcija/procedura deklarisanih deklarativnom delu paketa.

Procedure u VHDL-u se mogu razumeti kao neka vrsta alternative komponentama.


Meutim, komponente su prirodniji i efikasniji nain za modeliranje hardverske hijerarhije,
pa se iz tog razloga procedure retko koriste u kdu za sintezu. Za razliku od procedura,
funkcije nalaze iru primenu, koja je uglavnom u vezi sa konverzijom tipova, preklapanjem
operatora i jednostavnim numerikim izraunavanjima.

8. PARAMETRIZOVANO PROJEKTOVANJE

Kako digitalni sistemi postaju sloeniji, tako je sve tee projektovati svaki novi digitalni
sistem iz poetka. Meutim, mnogi sistemi, iako svaki sa svojim specifinostima, sadre
delove identine ili sline funkcionalnosti. Imajui to u vidu, jedan od glavnih ciljeva
digitalnog projektovanja danas postoje projektovanje za ponovno korienje (prema eng.,
design reuse). Od projektanta se oekuje da za realizaciju sistema, svuda tamo gde je to
mogue, koristi ranije projektovane module, a da module koje samostalno projektuje
realizuje na takav nain da se lako mogu ponovno koristiti. Pretpostavka projektovanja za
ponovno korienje jeste u mogunosti parametrizacije projektnih modula. Umesto da se
projektuju komponente fiksnih karakteristika i funkcionalnosti, racionalnije je projektovati
univerzalne komponente, koje e pri ugradnji u novi sistem moi u izvesnoj meri i na lak
nain da se prilagode specifinim zahtevima nove primene. Na primer, broja je
komponenta koja se moe nai u gotovo svakom digitalnom sistemu. Iako postoje razliite
vrste brojaa, svi oni poseduju identinu bazinu konstrukciju, a tipino se razlikuju po
osnovi i smeru brojanja. anse za ponovno korienje 17-bitnog brojaa unazad su svakako
male. Meutim, broja koji je projektovan na nain da se moe konfigurisati za rad u
eljenoj osnovi i smeru brojanja, nai e daleko iru primenu. Ovo se postie tako to se
pojedini aspekti rada kola (poput osnova brojanja brojaa) opisuju u zavisnosti od eksternih
parametara.
Ova glava je posveena principima parametrizovanog projektovanja u VHDL-u. VHDL
poseduje brojne jezike konstrukcije i mehanizme za parametrizovano projektovanje. S
nekim od njih smo se upoznali u prethodnim glavama (generic, atributi i konstante), dok e
drugi, kao npr. naredba generate, biti uvedeni u ovoj glavi.

8.1. Vrste parametara


Iz perspektive parametrizovanog projektovanja, parametri se mogu grubo podeliti na
dimenzione i funkcionalne. Kod razliitih digitalnih sistema postoje razliiti zahtevi u
pogledu broja bita koji se koriste za predstavljanje podataka. Tako na primer moemo
govoriti o 8-, 16- ili 32-bitnoj ALU, odnosno o jedinici koja obavlja aritmetike i logike
operacija nad 8-, 16- i 32-bitnim podacima. Dimenzioni parametri upravo slue za
definisanje veliine, odnosno broja bita viebitnih portova i signala koji se koriste za
razmenu podataka sa sistemom, odnosno za prenos i uvanje podataka unutar sistema. Pri
tom sistem moe posedovati jedan ili vie dimenzionih parametara. Na primer, RAM se
Goran Lj. orevi, Arhitetkture mikrosistema, 2009.

200

Parametrizovano projektovanje

dimenzionie s dva parametra, od kojih jedan odreuje broj bita u memorijskoj rei, a drugi
ukupan broj memorijskih rei. Osim toga to slue za definisanje veliine ulaznih i izlaznih
portova, dimenzioni parametri direktno odreuju i veliinu unutranjih jedinica sistema,
poput registara, sabiraa i sl., a da pri tom ne utiu na strukturnu organizaciju sistema (tj. na
to kako su unutranje jedinice meusobno povezane).
S druge strane, funkcionalni parametri se koriste za specifikaciju strukture ili organizacije
sistema s ciljem da se omogui ukljuivanje/iskljuivanje pojedinih funkcija ili da se
izabere jedna od nekoliko raspoloivih varijanti implementacije sistema. Po pravili,
pomou funkcionalnih parametara postiu se male varijacije u funkcionalnosti/strukturi
sistema. Na primer, uz pomo funkcionalnog parametra mogue je regulisati da e se u
sistemu koristiti sinhroni ili asinhroni reset i sl. U principu, funkcionalne parametre je
mogue koristiti i za izbor izmeu nekoliko potpuno razliitih realizacija istog kola. Na
primer, da li koristiti sabira sa rednim prenosom ili sabira sa ubrzanim prenosom. Da bi
ste to postiglo, odgovarajui VHDL kd bi u okviru iste arhitekture morao da sadri dva
gotovo potpuno nezavisna opisa. U takvim situacijama, bolje je alternativne realizacije
opisati u vidu zasebnih arhitektura, a za izbor jedne od njih koristiti konfiguraciju (v. 7.3).

8.2. Specifikacija parametara


VHDL poseduje nekoliko jezikih konstrukcija za specifikaciju parametara, od kojih su sa
stanovita sinteze najbitniji: generiki parametri i atributi vektora.
Generiki parametri. Generiki parametri su razmatrani u poglavlju 7.2, u kontekstu
komponenti. Generiki parametri se deklariu u entitetu, a koriste u arhitekturi, u vidu
simbolikih konstanti. Ako se kasnije entitet koristi kao komponenta, stvarne vrednosti
generikih parametara e biti navedene prilikom instanciranja komponente.
Pr. 8-1 Parametrizovan opis generatora bita parnosti
VHDL opis 8-bitnog generatora parnosti predstavljen je u Pr. 5-14 iz poglavlja 5.4. Opis iz
Pr. 5-14 se moe lako parametrizovati, ako se numerike konstante iz deklaracije entiteta i
kda arhitekture zamene generikim parametrom, na nain kao u kdu koji sledi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY pargen IS
GENERIC(N: INTEGER := 8);
PORT (a : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
y : OUT STD_LOGIC);
END pargen;
-----------------------------------------------------------------ARCHITECTURE param_arch OF pargen IS
BEGIN
PROCESS(a)
VARIABLE p : STD_LOGIC;
BEGIN
p := a(0);
FOR i IN 1 TO (N-1) LOOP
p := p XOR a(i);

Specifikacija parametara
19
20
21
22
23

201

END LOOP;
y <= p;
END PROCESS;
END param_arch;
-----------------------------------------------------------------

Generiki parametar N, deklarisan u liniji 6, iskorien je dvaput: u liniji 7, za definisanje


irine ulaznog porta a i u liniji 17, kao gornje granica indeksa u for loop petlji. Na taj
nain, opis je postao univerzalan, u smislu da vie ne modelira neki konkretan generator
bita parnosti, ve generator parnosti za proizvoljan broj ulaznih bita. Konkretizacija se vii
prilikom instanciranja komponente izvedene na osnovu generikog opisa.
Zapazimo da deklaracija iz linije 7 sadri podrazumevanu vrednost generikog parametra N
(konkretno, N:=8). Podrazumevana vrednost, ako postoji, koristi se onda kada naredba za
instanciranje komponente ne sadri konstrukciju generic map, kojom se postavljaju stvarne
vrednosti generikih parametara. Takoe, pri direktnoj sintezi generikog VHDL opisa,
bie koriene podrazumevane vrednosti generikih parametara.
Atributi vektora. VHDL atributi su uvedeni u poglavlju 3.5. Za primenu u
parametrizovanom projektovanju od znaaja su atributi vektora, koji pruaju informaciju o
opsegu i graninim vrednostima indeksa vektora. Radi podseanja, u Pr. 8-2 za dva
vektorska signala odreene su vrednosti odgovarajuih atributa. U Pr. 8-3 je pokazano kako
se atributi vektora mogu koristiti kao parametri u VHDL kdu.
Pr. 8-2 Atributi vektora
Za signale:
SIGNAL s1 : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL s2 : STD_LOGIC_VECTOR(8 TO 31);

vai:
s1LEFT = 15; s1RIGHT = 0;
s1LOW = 0; s1HIGH = 15;
s1LENGTH = 32;
s1RANGE = 15 DOWNTO 0;
S1REVERSE_RANGDE = 0 TO 15;

S2LEFT = 8; s2RIGHT = 15;


s2low = 8; s2HIGH = 15;
s2LENGTH = 8;
s2RANGE = 8 TO 15;
s2REVERSE_RANGDE = 15 DOWNTO 8;

Pr. 8-3 Parametrizovan opis generatora parnosti korienjem atributa vektora


U arhitekturu iz opisa generatora parnosti koji sledi iskorien je atribut length, koji vraa
duinu vektora. Praktino, alength igra ulogu parametra N iz Pr. 8-1.
1
2
3
4
5
6
7
8
9
10

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY pargen IS
GENERIC(N: INTEGER := 8);
PORT (a : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
y : OUT STD_LOGIC);
END pargen;
-----------------------------------------------------------------

202
11
12
13
14
15
16
17
18
19
20
21
22
23

Parametrizovano projektovanje

ARCHITECTURE param_arch OF pargen IS


BEGIN
PROCESS(a)
VARIABLE p : STD_LOGIC;
BEGIN
p := a(0);
FOR i IN 1 TO (alength-1) LOOP
p := p XOR a(i);
END LOOP;
y <= p;
END PROCESS;
END param_arch;
-----------------------------------------------------------------

Opseg indeksa u naredbe for loop (linija 17) mogao je biti izraen i pomou drugih atributa
vektora a:
FOR i IN (alow + 1) TO ahigh LOOP ili
FOR i IN (aright + 1) TO aleft LOOP

Vektori s nedefinisanim opsegom. Upotreba atributa vektora u Pr. 8-3 je donekle


redundantna, jer ako je u entitetu generatora parnosti ve deklarisan generiki parametar N,
parametrizovane vrednosti iz arhitekture se jasnije mogu izraziti preko N (kao u Pr. 8-1).
Pravu primenu atributi vektora nalaze u kombinaciji sa vektorima sa nedefinisanim
opsegom.
Tri tipa podataka koji se najee koriste u sintezi su: std_logic_vector, unsigned i signed.
Interno, u paketima std_logic_1164 i numeric_std, ovi tipovi podataka su deklarisani kao
vektori (nizovi) sa nedefinisanim opsegom indeksa (prema eng. unconstrained array), npr.:
TYPE STD_LOGIC_VECTOR IS ARRAY(natural RANGE <>) OF std_logic;

Iz prethodne deklaracije se vidi da indeksi vektora tipa std_logic_vector moraju biti tipa
natural, ali tane granice nisu definisane. U takvim sluajevima, granice se navode
prilikom deklaracije objekta (signala, varijable ili konstante) ovog tipa, npr.:
SIGNAL s1 : STD_LOGIC_VECTOR(15 DOWNTO 0);

Deklaracija porta je jedini izuzetak od ovog pravila. Port, za razliku od signala, moe biti
deklarisan bez navoenja opsega, kao u sledeem primeru.
Pr. 8-4 Sabira bez granica
VHDL kd koji sledi predstavlja opis sabiraa neoznaenih binarnih brojeva. Kd je
ispravan iako u deklaraciji portova granice nisu navedene.
1
2
3
4
5
6
7
8
9
10

----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
----------------------------------------------------------------ENTITY unconstrain_adder IS
PORT(a : IN STD_LOGIC_VECTOR;
b : IN STD_LOGIC_VECTOR;
c : OUT STD_LOGIC_VECTOR);
END unconstrain_adder;

Specifikacija parametara
11
12
13
14
15

203

----------------------------------------------------------------ARCHITECTURE arch OF unconstrain_adder IS


BEGIN
c <= a + b;
END arch;

Sabira iz Pr. 8-4 se naravno ne moe sintetizovati, ali se moe koristiti kao komponenta,
jer e prilikom instanciranja, portovi sabiraa preuzeti opsege stvarnih signala. Na primer, u
sledeem segmentu VHDL kda instancira se jedan 8-bitni sabira.
. . .
SIGNAL a1, b1, c1: STD_LOGIC_VECTOR(7 DOWNTO 0);
. . .
add8 : unconstrain_adder
PORT MAP(a=>a1, b=>b1, c=>c1);

Opis sabiraa iz Pr. 8-4 je parametrizovan iako bez eksplicitno navedenih parametara.
Moemo razumeti da je dimenzioni parametar N sadran u stvarnom signalu koji se
prosleuje deklaraciji entiteta u momentu instanciranja odgovarajue komponente.
U sledeem primeru ilustrovana je upotreba atributa vektora za pisanje parametrizovanog
kda u sluaju kad portovi nemaju definisan opseg.
Pr. 8-5 Generator bita parnosti s portovima bez definisanog opsega
U kdu koji sledi, ulazni port a generatora bita parnosti je deklarisan bez navoenja opsega
indeksa (linija 6). Kao to moemo videti, deklaracija entiteta vie ne sadri deklaraciju
generikog parametra N. Umesto toga, informacija o duini je ekstrahovana iz signala a
atributom length i dodeljena konstanti N (linija 11), koja se potom u telu arhitekture koristi
na identian nain kao istoimeni generiki parametar u kdu iz Pr. 8-1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY unconstrain_pargen IS
PORT (a : IN STD_LOGIC_VECTOR;
y : OUT STD_LOGIC);
END unconstrain_pargen;
-----------------------------------------------------------------ARCHITECTURE arch OF unconstrain_pargen IS
CONSTANT N : NATURAL := aLENGTH;
VARIABLE p : STD_LOGIC;
BEGIN
PROCESS(a)
BEGIN
p := a(0);
FOR i IN 1 TO (N-1) LOOP
p(i) := p XOR a(i);
END LOOP;
y <= p;
END PROCESS;
END arch;

204

Parametrizovano projektovanje

Generiki parametri i vektori bez definisanog opsega indeksa su u osnovi mehanizmi za


specifikaciju dimenzionih parametara. Pri tome, vektori bez definisanog opsega su optiji i
fleksibilniji od generikih parametar, zato to se informacija o duini automatski ekstrahuje
iz signala, bez potrebe eksplicitnog uvoenja dimenzionog parametra. Meutim, korienje
vektora bez definisanog opsega moe da dovede do greaka koje su posledica
neusklaenosti opsega stvarnih signala i opsega koji je pretpostavljen prilikom pisanja
parametrizovanog kda.
Primera radi, u kdu koji sledi namera je da se instancira 8-bitni generator bita parnosti iz
Pr. 8-5 i koristiti za odreivanje parnosti vieg bajta dvobajtnog signala a1. Iako je kd
sintaksno ispravan, tokom sinteze javie se greka. Problem je u opsegu indeksa signala a1
koji se vezuje na port a generatora parnosti. Poto port a preuzima opseg stvarnog signala
a1, tj. (15 downto 8), greka e se javiti u naredbi dodele iz linije 16, kao i u for loop petlji
u kdu iz Pr. 8-5, zato to a ne sadri indekse od 0 do 7.
. . .
SIGNAL a1 : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL y1 : STD_LOGIC;
. . .
pargen8 : unconstrain_pargen
PORT MAP(a=>a1(15 DOWNTO 8), y=>y1);
. . .

Opisana greka se ne bi javila da je kd arhitekture iz Pr. 8-5 napisan na neto drugaiji


nain:
ARCHITECTURE arch OF unconstrain_pargen IS
VARIABLE p : STD_LOGIC;
BEGIN
PROCESS(a)
BEGIN
p := a(a'low);
FOR i IN (a'LOW+1) TO (a'HIGH-1) LOOP
p(i) := p XOR a(i);
END LOOP;
y <= p;
END PROCESS;
END arch;

Sada u kdu vie ne figurie atribut za duinu signala, ve se umesto njega koriste atributi
za granine vrednosti indeksa, low i high. Zbog toga, opseg indeksa stvarnog signala moe
biti proizvoljan.
U kdu koji sledi pokazan je jedan jednostavniji nain kako se parametrizovan opis
generatora parnosti iz Pr. 8-5 moe uiniti univerzalnijim. Kao to vidimo, uveden je
pomoni, interni signal aa koji ima duinu ulaznog porta a, ali sa opsegom indeksa (N-1
downto 0). U telu arhitekture, najpre se signalu aa dodeljuje vrednost ulaznog signala a, a
onda se u nastavku umesto sa a, manipulie sa aa.
ARCHITECTURE arch OF unconstrain_pargen IS
CONSTANT N : NATURAL := aLENGTH;
VARIABLE p : STD_LOGIC;
SIGNAL aa : STD_LOGIC_VECTOR(N-1 DOWNTO 0);
BEGIN
aa <= a;

Specifikacija parametara

205

PROCESS(aa)
BEGIN
p := aa(0);
FOR i IN 1 TO (N-1) LOOP
p := p XOR aa(i);
END LOOP;
y <= p;
END PROCESS;
END arch;

Logike i aritmetike operacija nad vektorskim tipovima std_logic_vector, unsigned i


signed definisane su u paketima std_logic_1164 i numeric_std kao preklopljeni operatori
nad vektorima bez definisanog opsega. Zbog toga, operandi ovih operatora mogu biti i
vektori proizvoljne duine, kao u sledeem kdu:
a <=

b + c WHEN b < c ELSE


b c;

Poto u prethodnoj naredbi ne figurie informacija o duini vektora, moe se smatrati da je


kd implicitno parametrizovan. Prethodna naredba, izolovano posmatrana, ne prua
informaciju o duini, ali je ta informacija, koja je inae neophodna za sintezu, poznata iz
konteksta u kojem se naredba nalazi.
U zakljuku, parametrizovan opis koji se oslanja na vektore bez definisanog opsega, iako
fleksibilan za korienje, mora biti paljivo pisan i analiziran kako bi se predupredile
eventualne greke koje mogu nastati zbog neusklaenosti formata signala. Iz tog razloga, za
pisanje parametrizovanog kda preporuuju se generiki parametri, osim ukoliko se ne radi
o krajnje generalnim strukturama, poput sabiraa iz Pr. 8-4.

8.3. Manipulacije s vektorima


Zamena fiksnih referenci na elemente ili delove vektora, atributima i generikim
parametrima, jedna od osnovnih tehnika za parametrizovano projektovanja. U ovom
poglavlju, na nekoliko primera bie ukazano na mogunosti VHDL-a koje se tiu pisanja
parametrizovanog kda za manipulaciju vektorima.
Pr. 8-6 Korienje agregacija
U sekvencijalnom kdu esto postoji potreba za dodelom konstante vrednosti signalu ili
varijabli. Na primer, resetovanje 8-bitnog brojaa zahteva sledeu naredbu:
q <= 00000000;

Jasno je da se prethodna naredba uvek mora modifikovati kad se, iz bilo kog razloga, javi
potreba za promenom duine brojaa. Korienje binarne konstante fiksne duine se lako
moe izbei upotrebnom agregacije, tj. konstrukcije others (v. 3.3.4):
q <= (OTHERS => 0);

Kao to znamo, konstrukcija (others => 0), dodeljuje vrednost 0 svim elementima
vektora ije je ime navedeno s leve strane znaka dodele. Poto prethodna naredba ne sadri
informaciju o duini vektora, ona e ostati nepromenjena i nakon eventualne promene
duine brojaa. Tipini primeri korienja konstrukcije others su jo i oni kad vektoru treba
dodeliti vrednost sve jedinice ili kad bit najmanje teine vektora treba postaviti na 1, a
sve ostale bitove na 0:

206

Parametrizovano projektovanje

q <= (OTHERS => 1);


q <= (0 => 1, OTHERS => 0);

S obzirom na to to agregacija, u obliku koji je predstavljen u prethodnim primerima, ne


sadri informaciju o duini, ona se moe koristi samo za dodelu vrednosti vektoru poznate
duine, ali se ne moe koristiti u aritmetikim, logikim ili relacionim izrazima. Na primer,
sledei kd, koji je napisan s namerom da se ispita da li je vektor a jednak nuli, nije
ispravan:
SIGNAL a : STD_LOGIC_VECTOR(N1 DOWNTO 0);
. . .
y <= 1 WHEN (a = (OTHERS => 0)) ELSE . . .

Problem se moe korigovati ako se u agregaciji umesto others koristi atribut range:
y <= 1 WHEN (a = (aRANGE => 0)) ELSE . . .

Agregacija (arange => 0) kreira bit-vektor ispunjen nulama koji je istog formata (opsega
indeksa) kao vektor a. Jo jedno reenje za ovu situaciju jeste da se deklarie konstanta sve
nule odgovarajue duine, koja bi se potom koristila u ispitivanjima:
CONSTANT zero : STD_LOGIC_VECTOR(N1 DOWNTO 0) := (OTHERS => 0);
SIGNAL a : STD_LOGIC_VECTOR(N1 DOWNTO 0);
. . .
y <= 1 WHEN (a = zero) ELSE . . .

Pr. 8-7 Korienje integer-a i funkcija za konverziju


Paket numeric_std, u kome su definisani tipovi podataka unsigned i signed, takoe sadri i
definicije funkcija za preklapanje aritmetikih i relacionih operatora, koje omoguavaju da
se u istom aritmetikom ili relacionom izraz kombinuju podaci tipa unsigned/signed i
integer, odnosno natural (v. 3.3.5). Na primer, pretpostavimo da je signal a iz sledee when
naredbe tipa unsigned:
y <= 1 WHEN (a = 00000101) ELSE . . .

Naredba ispituje da li je a jednako 5, pri emu je konstanta 5 predstavljana u obliku bitvektora. Meutim, umesto u obliku bit-vektora, konstanta se moe izraziti i u obliku celog
broja:
y <= 1 WHEN (a = 5) ELSE . . .

Efekat je isti jer e konstanta 5, zahvaljujui preklopljenom operatoru jednakosti iz paketa


numeric_std, biti automatski konvertovana u bit-vektor duine jednake duini vektora a.
Korienje celobrojne konstante umesto bit-vektora nije samo konciznije ve i optije
reenje jer ne zahteva modifikaciju kda nakon promene duine vektora a. Meutim, u
sluajevim kada konstantu tipa integer elimo da dodelimo objektu tipa unsigned/signed,
konverzija je neophodna:
y <= TO_UNSIGNED(5, N);

Prvi parametar funkcije to_unsigned je vrednost koja se konvertuje, a drugi broj bita koji e
biti korien za predstavljanje ove vrednosti u binarnom obliku. Ako pak elimo da vektoru
tipa std_logic_vector dodelimo integer konstantu, neophodna e biti dupla konverzija:
y <= STD_LOGIC_VECTOR(TO_UNSIGNED(5, N));

Manipulacije s vektorima

207

Pr. 8-8 Referenciranje delova i elemenata vektora korienjem alijasa i atributa


U VHDL kdu, esto se javlja potreba za referenciranjem pojedinanih elemenata vektora
ili delova vektora. Tipian primer je obraanje bitu najvee (MSB) ili bitu najmanje teine
(LSB) nekog vektora. Pretpostavimo da je a signal tipa signed(7 downto 0). Poto se radi o
tipu za oznaene binarne brojeve, MSB ovog vektora je ujedno i njegov bit znaka. Neka je
za bit znaka uveden tzv. alijas:
ALIAS sign : STD_LOGIC := a(7);

Konstrukcija alias definie alternativno (obino skraeno) ime za neki objekat ili deo
objekta. U konkretnom primeru, sign je drugo ime za bit znaka vektora a. Napomenimo da
alijas nije novi signal, ve samo novo ime za isti signal i uvodi se radi kreiranja itljivijeg
kda.
U prethodnoj deklaraciji, za referenciranje MSB- umesto konstantnog indeksa moemo
koristiti atribut:
ALIAS sign : STD_LOGIC := a(aLEFT);

U sluaju da je signal a ve parametrizovan kao signed(N-1 downto 0), isti efekat imae i
sledea deklaracija:
ALIAS sign : STD_LOGIC := a(N-1);

Slino, umesto da rotaciju za jednu poziciju udesno izrazimo na sledei nain:


q <= q(0) & q(7 DOWNTO 0);

to moemo uiniti i na optiji nain:


q <= q(qRIGHT) & q(qLEFT DOWNTO qRIGHT+1);

Prethodna naredba e biti korektna ukoliko je duina signala q vea od dva i njen opseg
indeksa je opadajui (downto). Ako je signal q ve parametrizovan, npr. kao
std_logic_vector(N-1 downto 0), operacija rotacije se moe izraziti na sledei, oigledniji
nain:
q <= q(0) & q(N-1 DOWNTO 0);

Pr. 8-9 Kruni broja


Kruni broja je registarska komponenta koja se konstruie povezivanje sirijskog izlaza na
serijski ulaz pomerakog registra. Ovaj princip je ilustrovan na Sl. 8-1. U normalnom
reimu rada, kruni broja sadri samo jedno 1 koje se pod dejstvom taktnog signala
pomera du registra sve do poslednjeg flip-flopa, a onda se vraa na poetak. Dakle,
regularna stanja 4-bitnog krunog brojaa su: 0001, 1000, 0100 i 0010.

Sl. 8-1 Kruni broja princip.

208

Parametrizovano projektovanje

Postoje dva metoda za realizaciju krunog brojaa. Prvi podrazumeva da se prilikom


inicijalizacije sistema u registar paralelno upie jedno od regularnih stanja. Za ovu namenu
se moe koristiti reset signal koji e postaviti registar ne u stanje 0000, kako je to
uobiajeno, ve npr. u stanje 0001. Nakon to se reset signal deaktivira, registar ulazi u
normalan, ciklini reim rada.
Ispod je dat parametrizovan VHDL opis krunog brojaa koji koristi reset signal za
inicijalizaciju. Uveden je generiki parametar N koji definie duinu registra (linija 6).
Parametar N se najpre koristi za dimenzionisanje izlaznog porta i internih signala (linije 7,
12 i 13), a zatim i u naredbi kojom se opisuje rotacija (linija 25). Treba obratiti panju i na
liniju 19, gde se vri inicijalizacija registra naredbom dodele u kojoj je poetno stanje
registra, 00...01, predstavljeno u vidu agregacije.
----------------------------------------------------------------LIBRARY IEEE;
3 USE IEEE.STD_LOGIC_1164.ALL;
4 -----------------------------------------------------------------5 ENTITY para_ring_counter IS
6
GENERIC(N : NATURAL);
7
PORT (q : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);
8
clk, rst : IN STD_LOGIC);
9 END para_ring_counter;
10 Varijata sa reset signalom za inicijalizaciju -----------------11 ARCHITECTURE rst_arch OF para_ring_counter IS
12
SIGNAL r_reg : STD_LOGIC_VECTOR(N-1 DOWNTO 0);
13
SIGNAL r_next : STD_LOGIC_VECTOR(N-1 DOWNTO 0);
14 BEGIN
15 -- registar -----------------------------------------------------16
PROCESS(clk, rst)
17
BEGIN
18
IF(rst = '1') THEN
19
r_reg <= (0=>'1', OTHERS => '0');
20
ELSIF(clk'EVENT AND clk='1') THEN
21
r_reg <= r_next;
22
END IF;
23
END PROCESS;
24 -- logika sledeceg stanje
--------------------------------------25
r_next <= r_reg(0) & r_reg(N-1 DOWNTO 1);
26 -- logika izlaza ------------------------------------------------27
q <= r_reg;
28 END rst_arch;
29 -----------------------------------------------------------------1
2

Alternativan nain za realizaciju krunog brojaa zasnovan je na ugradnji u registar tzv.


logike za samo-korekciju (Sl. 8-2). U ovoj realizaciji, polazi se od zapaanja da u registar
serijski treba upisati 1 samo ako su svi njegovi bitovi osim krajnjeg desnog jednaki nuli. Ili,
drugim reima, ako je na bilo kojoj poziciji registra izuzev krajnje desne prisutno 1, u
registar treba serijski upisati 0. Dakle, u konfiguraciji sa Sl. 8-2, logika za samo-korekciju
realizuje NILI funkciju. Treba, takoe, zapaziti da u ovoj realizaciji kruni registar ispravno
radi ak i ako svoj rad zapoinje iz nekog neregularnog stanja (sve nule ili vie od jedne
jedinice). Na primer, ako je poetno stanje brojaa 1011, logika za samo-korekciju e
serijskim upisivanjem nula postepeno istiskivati iz registar neregularnu sekvencu, sve dok
se na prvih N-1 pozicija ne nau sve nule. Nakon toga, registar ulazi u normalan reim

Manipulacije s vektorima

209

rada. Takoe, samokorigujui kruni broja je u stanju da se oporavi od greke koja moe
nastati neeljenom promenom stanja nekog flip-flopa pod dejstvom elektrinih smetnji.

Sl. 8-2 Samokorigujui kruni broja.

U VHDL opisu arhitekture samokorigujueg krunog brojaa koji sledi uveden je alijas
r_high koji predstavlja N-1 krajnjih levih bitova registra (linija 6-7). Funkcija logike za
samo-korekciju opisana je naredbom when u kojoj se za ispitivanje da li je r_high jednak
nuli koristi agregacija (r_highrange => 0) linija 19-20.
-- Varijanta sa samo-korekcijom ---------------------------------ARCHITECTURE self_corect_arch OF para_ring_counter IS
3
SIGNAL r_reg : STD_LOGIC_VECTOR(N-1 DOWNTO 0);
4
SIGNAL r_next : STD_LOGIC_VECTOR(N-1 DOWNTO 0);
5
SIGNAL s_in : STD_LOGIC;
6
ALIAS r_high : STD_LOGIC_VECTOR(N-2 DOWNTO 0) IS
7
r_reg(N-1 DOWNTO 1);
8 BEGIN
9 -- registar -----------------------------------------------------10
PROCESS(clk, rst)
11
BEGIN
12
IF(rst = '1') THEN
13
r_reg <= (OTHERS => '0');
14
ELSIF(clk'EVENT AND clk='1') THEN
15
r_reg <= r_next;
16
END IF;
17
END PROCESS;
18 -- logika sledeceg stanje
--------------------------------------19
s_in <= '1' WHEN r_high = (r_high'range => '0') ELSE
20
'0';
21 -- logika izlaza ------------------------------------------------22
q <= r_reg;
23 END self_corect_arch;
1
2

8.4. GENERATE
Naredba generate je konkurentna naredba koja se koristi za kontrolisano generisanje
konkurentnog kda. Moe se smatrati konkurentnim ekvivalentom sekvencijalnih naredbi
for loop i if. Postoje dva oblika ove naredbe: for generate i if generate. Naredba for
generate (odgovara sekvencijalnoj for loop) omoguava umnoavanje istog skupa
konkurentnih naredbi, dok naredba if generate (odgovara sekvencijalnoj if) omoguava
uslovno kreiranje obuhvaenog konkurentnog kda.

210

Parametrizovano projektovanje

8.4.1. FOR GENERATE


Mnoga digitalna kola se mogu realizovati u vidu regularne strukture identinih gradivnih
blokova. Gradivni blokovi mogu biti povezani u obliku jednodimenzionog lanca, u
strukturu oblika stabla ili u vidu dvodimenzionog polja. Tipini primeri ovih tzv. iterativnih
kola su: sabira sa rednim prenosom, pomeraki registar, paralelni mnoa itd. Iterativna
kola se lako mogu proiriti prostim poveanjem broja iteracija i stoga predstavljaju idealne
kandidate za parametrizovano projektovanje. Naredba for generate nalazi glavnu primenu
upravo za opisivanje ovakvih struktura.
Sintaksa naredbe for generate je sledeeg oblika:
labela: FOR indeks IN opseg GENERATE
(konkurentne naredbe;)
END GENERATE;

Naredba for generate ponavlja obuhvaene konkurentne naredbe zadati broj puta. lan
opseg definie opseg indeksa petlje, odnosno njegovu poetnu i krajnju vrednost. Opseg
mora biti statiki, to znai da konkretne vrednosti granica opsega moraju biti poznate u
momentu sinteze kda. Za specifikaciju opsega po pravilu se koristi neki dimenzioni
parametar sistema. Indeks igra ulogu brojaa petlja; kree od poetne vrednosti zadatog
opsega, a nakon svake iteracije uzima sledeu vrednosti iz opsega. Poslednja iteracija petlje
je ona u kojoj je vrednost indeksa jednaka krajnjoj vrednosti opsega. Indeks po
automatizmu preuzima tipa opsega i ne deklarie se van for generate naredbe. Labela je
obavezna i jedinstvena u okviru arhitekture.
Pr. 8-10 Ilustracija for generate naredbe
Razmotrimo sledei segment VHDL kda:
SIGNAL x: BIT_VECTOR(7 DOWNTO 0);
SIGNAL y: BIT_VECTOR(15 DOWNTO 0);
SIGNAL z: BIT_VECTOR(7 DOWNTO 0);
. . .
G1: FOR i IN xRANGE GENERATE
z(i) <= x(i) AND y(i+8);
END GENERATE;

Naredba for generate iz prethodnog kdu kreira po jednu instancu obuhvaene konkurentne
naredbe dodele za svaku vrednost brojaa i iz opsega 7 do 0. Moemo smatrati da ova
naredba for generate predstavlja koncizan zapis sledeeg kda:
z(7)
z(6)
z(5)
z(4)
z(3)
z(2)
z(1)
z(0)

<=
<=
<=
<=
<=
<=
<=
<=

x(7)
x(6)
x(5)
x(4)
x(3)
x(2)
x(1)
x(0)

AND
AND
AND
AND
AND
AND
AND
AND

y(7+8);
y(6+8);
y(5+8);
y(4+8);
y(3+8);
y(2+8);
y(1+8);
y(0+8);

Konkurentne naredbe koje su obuhvaene for generate naredbom, u sutini, opisuju jedan
stepen nekog iterativnog kola. Ovaj kd, pored toga to opisuje bazini gradivni blok,
opisuje i nain kako su susedni blokovi meusobno povezani u iterativnu strukturu, tj.,

GENERATE

211

drugim reima, opisuje ablon za povezivanje gradivnih blokova. Za povezivanje stepena


koriste interni signali, koji su najee deklarisani kao jednodimenzioni ili dvodimenzioni
vektori. ablon za povezivanje definie pravilo po kome se u svakoj iteraciji formiraju
indeksi za odabir internih signala koji e se koristiti za povezivanje.
Sutina projektovanja iterativnih kola je u identifikaciji bazinih gradivnih blokova i
ablona za povezivanje susednih stepena. Ovo ne mora uvek biti jednostavan zadatak, te je
stoga preporuljivo da se pre pisanja iterativnog kda skicira dijagram eljene strukture sa
oznaenim vezama izmeu stepena, kako bi se to lake uoile pravilnosti u povezivanju, a
onda i izvela opta zakonitost.
Pr. 8-11 Generator bita parnosti

Sl. 8-3 Realizacija generatora bita parnosti pomou XOR kola.

Na Sl. 8-3 je prikazana realizacija 8-bitnog generator bita parnosti u vidu kaskadne veze
iskljuivo ILI (XOR) kola. Kao to se moe zapaziti, mrea poseduje regularnu, iterativnu
strukturu, koja se nadovezivanjem XOR kola moe lako proiriti do proizvoljnog broja
ulaza. Gradivni blokovi (stepeni) ove strukture su XOR kola. Stepene moemo numerisati s
leva na desno, tako da krajnji levi stepen bude nulti, a krajnji desni sedmi, odnosno, u
optem sluaju, (N-1)-vi. Za povezivanje susednih stepena koristi se vektor p, tako to
signal p(i) povezuje izlaz stepena i-1 i ulaz stepena i. Na osnovu dijagrama sa Sl. 8-3 lako
se uoava zavisnost izmeu indeksa izlaznog i dva ulazna signala svakog XOR kola.
Konkretno, za i-ti stepen vai:
p(i) <= a(i) XOR p(i-1);

Ispod je dat parametrizovan opis arhitekture generatora parnosti u kome je iskoriena for
generate naredbe. Petlja for generate naredbe se ponavlja N-1 puta, kreirajui tako N-1
XOR kola.
-----------------------------------------------------------------ARCHITECTURE generate_arch OF pargen IS
3
SIGNAL p : STD_LOGIC_VECTOR(N-1 DOWNTO 0);
4 BEGIN
5
p(0) <= a(0);
6
FOR I IN 1 TO N-1 GENERATE
7
p(I) <= a(I) XOR p(I-1);
8
END GENERATE;
9
y <= p(N-1);
10 END generate_arch;
11-----------------------------------------------------------------1
2

Sprega graninih stepena iterativnih struktura sa spoljanjim ulaznim, odnosno izlaznim


signalima po pravilu se tretira kao specijalan sluaj u odnosu na opte pravilo za
povezivanje. U konkretnom primeru, ove specifine situacije su obraene dvema
naredbama (linije 5 i 9). Naredba dodele iz linije 5 preklapa nulti bit internog vektora p s
ulazom a(0), dok naredba iz linije 9, na izlaz y prenosi vrednost MSB-a vektora p, koji
ujedno predstavlja i izlaz iz poslednjeg XOR kola u nizu.

212

Parametrizovano projektovanje

Pr. 8-12 Parametrizovan opis pomerakog registra


U ovom primeru, naredba for generate je iskoriena za kreiranje parametrizovanog opisa
pomerakog registra. Registar se sastoji od n redno povezanih D flip-flopova sa
zajednikim signalom takta i signalom za resetovanje (Sl. 8-4). Serijski ulaz registra, si, je
ulaz u prvi, a serijski izlaz iz registra, sout, je izlaz iz poslednjeg flip-flopa u nizu. Svaki D
flip-flop je jedan stepen u ovoj iterativnoj strukturi. ema povezivanja je jednostavna, jer se
izlaz iz svakog flip-flopa, prosto, povezuje sa ulazom u sledei.

Sl. 8-4 Pomeraki registar

U VHDL opisu koji sledi, naredba for generate se koristi za kreiranje N procesa, od kojih
svaki opisuje jedan flip-flop sa asinhronim resetom. Povezivanje flip-flopova je ostvareno
naredbom dodele iz linije 23, u kojoj se tekuem bitu vektora q_reg dodeljuje vrednost
prethodnog bita. Uoimo da je signal q_reg proiren jednim dodatnim bitom, q_reg(n), koji
se koristi za preklapanje sa ulaznim signalom si. Meutim, budui da se indeks petlje kree
od n-1 do 0, signalu q_reg(n) se ne dodeljuje vrednost ni u jednom procesu, pa je zbog toga
broj sintetizovanih flip-flopova jednak n, a ne n+1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
----------------------------------------------------------------ENTITY pomreg IS
GENERIC(N : NATURAL);
PORT(si : IN STD_LOGIC;
sout : OUT STD_LOGIC;
clk, rst : IN STD_LOGIC);
END pomreg;
----------------------------------------------------------------ARCHITECTURE gen_proc_arch OF pomreg IS
SIGNAL q_reg : STD_LOGIC_VECTOR(N DOWNTO 0);
BEGIN
q_reg(N) <= si;
dff_gen: FOR I IN (N-1) DOWNTO 0 GENERATE
-- D FF
PROCESS(clk, rst)
BEGIN
IF(rst = '1') THEN
q_reg(I) <= '0';
ELSIF(clk'EVENT AND clk = '1') THEN
q_reg(I) <= q_reg(I-1);
END IF;
END PROCESS;
END GENERATE;

GENERATE
27
28
29
30

213

-- izlaz
sout <= q_reg(0);
END gen_proc_arch;
-----------------------------------------------------------------

U nastavku je predstavljen jo jedan parametrizovan opis arhitekture pomerakog registra u


kome se za kreiranje bazinih blokova umesto procesa koristi komponenta DFF. U osnovi,
ovo reenje prestavlja strukturni opis blok dijagrama sa Sl. 8-4.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

----------------------------------------------------------------ARCHITECTURE gen_comp_arch OF pomreg IS


COMPONENT DFF
PORT(d : IN STD_LOGIC;
q : OUT STD_LOGIC;
clk, rst : IN STD_LOGIC);
END COMPONENT;
SIGNAL q_reg : STD_LOGIC_VECTOR(N DOWNTO 0);
BEGIN
q_reg(N) <= si;
dff_gen: FOR I IN (N-1) DOWNTO 0 GENERATE
dff_I: DFF
PORT MAP(d=>q_reg(I+1), q=>q_reg(I), clk=>clk, rst=>rst);
END GENERATE;
-- izlaz
sout <= q_reg(0);
END gen_proc_arch;

Pr. 8-13 Asinhroni broja


Na Sl. 8-5 je prikazana struktura n-bitnog asinhronog binarnog brojaa. Broja se sastoji od
n redno povezanih T flip-flopova. Ulazni taktni signal, clk, pobuuje samo prvi flip-flop
(tff_0), dok se takt za svaki sledei flip-flop uzima sa izlaza prethodnog flip-flopa. Budui
da se T flip-flopovi okidaju opadajuom ivicom takta (naznaeno kruiem na ulazu za
takt), i-ti T flip-flop menja svoje stanje samo onda kada se stanja svih njemu prethodnih
flip-flopova promene sa 1 na 0, to odgovara binarnoj sekvenci brojanja, sa izlazom qn-1
najvee i izlazom q0 najmanje teine.

Sl. 8-5 n-bitni asinhroni broja.

VHDL kd koji sledi smeten je u dve datoteke: tff.vhd, s kdom za T flip-flopa (TFF) i
asyn_counter.vhd, s kdom parametrizovanog opisa n-bitnog asinhronog brojaa u kome se
TFF koristi kao komponenta. U arhitekturi T flip-flopa, za uvanje tekueg stanja koristi se
interni signal ff, koji se postavlja na 0 ako je reset signal aktivan (linija 16), odnosno
komplementira (linija 18), ako je detektovana opadajua ivica taktnog signala clk (linija
16). Stanje flip-flopa se prenosi na izlaz q u liniji 21.

214

Parametrizovano projektovanje

U strukturnom VHDL opisu asinhronog brojaa (kd iz datoteke asyn_counter.vhd)


naredba for generate se koristi za instanciranje i povezivanje n T flip-flopova. Za prenos
takta izmeu flip-flopova uveden je (N+1)-bitni vektor c koji se koristi na nain kao na Sl.
8-5. Signal c(0) preklapa ulazni taktni signal (linija 18). i-ti T flip-flop se taktuje signalom
c(i), a njegov izlaz q pobuuje signal c(i+1) (linija 20). Bitovi 1, ..., N vektora c su ujedno i
izlazi brojaa (linija 22). Vremenski dijagram dobijen simulacijom datog VHDL kda, za
N=4, prikazan je na Sl. 8-6.
------ tff.vhd --------------------------------------------------LIBRARY IEEE;
3 USE IEEE.STD_LOGIC_1164.ALL;
4 -----------------------------------------------------------------5 ENTITY tff IS
6
PORT (clk, rst: IN STD_LOGIC;
7
q: OUT STD_LOGIC);
8 END tff;
9 -----------------------------------------------------------------10 ARCHITECTURE behavior OF tff IS
11
SIGNAL ff : STD_LOGIC;
12 BEGIN
13
PROCESS (clk, rst)
14
BEGIN
15
IF(rst='1') THEN
16
ff <= '0';
17
ELSIF (clk'EVENT AND clk='0') THEN
18
ff <= not ff;
19
END IF;
20
END PROCESS;
21
q <= ff;
22 END behavior;
1
2

----- asyn_counter.vhd ------------------------------------------LIBRARY IEEE;


3 USE IEEE.STD_LOGIC_1164.ALL;
4 -----------------------------------------------------------------5 ENTITY asyn_count IS
6
GENERIC(N : INTEGER := 4);
7
PORT (clk, rst: IN STD_LOGIC;
8
q: OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0));
9 END asyn_count;
10 -----------------------------------------------------------------11 ARCHITECTURE structural OF asyn_count IS
12
COMPONENT tff IS
13
PORT (clk, rst: IN STD_LOGIC;
14
q: OUT STD_LOGIC);
15
END COMPONENT;
16
SIGNAL c : STD_LOGIC_VECTOR(N DOWNTO 0);
17 BEGIN
18
c(0) <= clk;
19
G1:FOR i IN 0 TO N-1 GENERATE
20
tffx : tff PORT MAP (clk=>c(i),rst=>rst,q=>c(i+1));
21
END GENERATE;
22
q <= c(N DOWNTO 1);
23 END structural;
1
2

GENERATE

215

Sl. 8-6 Rezultati simulacije VHDL opisa asinhronog brojaa.

Pr. 8-14 Generator bita parnosti hijerarhijska struktura


Generator bita parnosti je razmatran u vie navrata u prethodnim primerima. Meutim,
uvek do sada ovo kola je predstavljano u vidu redne veze XOR kola (kao na Sl. 8-3).
Problem s rednom ralizacijom je poveano propagaciono kanjenje, jer kritina putanja
prolazi kroz svih N-1 XOR kola. Efikasnije reenje, u pogledu propagacionog kanjenja, je
ono u kojem su XOR kola umesto redno, rasporeena hijerahijski i povezana u strukturu
oblika stabla (kao na Sl. 8-7). U poreenju sa rednom realizacijom, broj XOR kola je ostao
isti, tj. N-1, ali je zato kritina putanja skraena sa N-1 na log 2 N XOR kola.
Osnovna razlika izmeu redne i hijerarhijske realizacije generatora bita parnosti je u
redosledu izraunavanja. U VHDL-u, redosled izraunavanja se moe lako nametnuti
korienjem zagrada. Na primer, jednaina 4-bitnog generatora parnosti koja odgovara
rednom nainu izraunavanja sledeeg je oblika:
y <= a(3) XOR (a(2) XOR (a(1) XOR a(0))

dok za hijerarhijski sluaj postaje:


y <= (a(3) XOR a(2)) XOR (a(1) XOR a(0))

Meutim, ovaj pristup se ne moe primeniti za kreiranje parametrizovanog opisa, zato to


broj ulaza nije unapred poznat. U parametrizovanom opisu, neophodno je eksplicitno
definisati ablon povezivanja. U tom cilju, strukturu sa Sl. 8-7, koja je u osnovi
dvodimenziona, treba najpre podeliti na stepene, a zatim XOR kola numerisati
dvodimenzionim indeksima, tako da prvi indeks ukazuje na stepen (tj. kolonu), a drugi na
poziciju kola u stepenu (tj. vrstu). Tako se XOR kolo s indeksom (s, r) nalazi u r-toj vrsti stog stepenu. Uoimo da je na Sl. 8-7 izlazni signal XOR kola (s, r) oznaen sa ps,r. Radi
uniformnosti imenovanja signala, ulazni signali, a(0), , a(7), i izlazni signal (y)
generatora parnosti oznaeni su po istoj konvenciji.

Sl. 8-7 Hijerarhijski generator parnosti.

216

Parametrizovano projektovanje

Klju za kreiranje parametrizovanog opisa iterativne strukture je u pronalaenju zavisnosti


koja postoji izmeu indeksa signala susednih stepena. Razmotrimo XOR kolo (s, r). Dva
ulaza ovog kola su u vezi sa 2r-tim i (2r+1)-tim kolom iz stepena s+1. Faktor 2 u indeksu
vrste posledica je injenice da je broj XOR kola u svakom sledeem stepenu dvaput manji
nego u prethodnom. Dakle, ulazno-izlazna zavisnost XOR kola (s, r) moe se izraziti
jednainom:

ps ,r = ps +1, 2 r p s +1, 2 r +1
Izvedena jednakosti predstavljae osnovu za kreiranje parametrizovanog VHDL opisa
hijerarhijskog generatora parnosti. Dvodimenzionalnost strukture zahteva uvoenje
dvodimenzionog tipa podataka za signal p i korienje dve ugnjedene for generate
naredbe, gde e spoljanja prolaziti kroz stepene, a unutranja kroz vrste. Napomenimo da
broj stepena n-to ulaznog generatora parnosti iznosi log 2 n , sa 2s XOR kola u s-tom
stepenu.
Prilikom pisanja VHDL kda koji sledi polo se od pretpostavke da generiki parametar n
(broj ulaza) moe uzeti samo vrednosti koje su jednake stepenu dvojke. U deklarativnom
delu arhitekture sadrana je deklaracija funkcije log2c (linije 13-22 v. Pr. 7-11), koja se u
liniji 24 koristi za izraunavanje vrednosti konstante stage broj stepena u strukturi sa n
ulaza. Napomenimo da bi pravo mesto za ovu funkciju, zbog njene optosti, bilo u paketu.
U liniji 25 definisan je tip podataka d2sig koji predstavlja 2D polje dimenzija stage x n,
dok je u liniji 26 deklarisan signal p tipa d2sig. Telo arhitekture sadri tri for generate
naredbe. Prva se koristi za preklapanje ulaznih signala, a0, ..., a7 s internim signalima
plog2c(n)-1,0,..., p log2c(n),n-1 (linije 29-31). Hijerarhijsko polje XOR kola generie se pomou
dve ugnjedene for generate naredbe (linije 33-37). Konano, u liniji 40, rezultat
izraunavanja (vrednost signala p0,0) prosleuje se na izlazni port y.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
----------------------------------------------------------------ENTITY pargen IS
GENERIC(N: INTEGER);
PORT (a : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
y : OUT STD_LOGIC);
END pargen;
----------------------------------------------------------------ARCHITECTURE tree_arch OF pargen IS
-- f-ja log2c(n) -----------------------------------------------FUNCTION log2c(n : INTEGER) RETURN INTEGER IS
VARIABLE m, p : INTEGER;
BEGIN
m := 0; p := 1;
WHILE(p < n) LOOP
m := m + 1;
p := p * 2;
END LOOP;
RETURN m;
END log2c;
----------------------------------------------------------------CONSTANT STAGE : NATURAL := log2c(N);
TYPE d2sig IS ARRAY(STAGE DOWNTO 0,N-1 DOWNTO 0) OF STD_LOGIC;

GENERATE

217

SIGNAL p : d2signal;
BEGIN
28 -- preklapanje ulaznih signala ---------------------------------29
in_gen: FOR I IN 0 TO (N-1) GENERATE
30
p(STAGE,I) <= a(I);
31
END GENERATE;
32 -- generisanje XOR polja ---------------------------------------33
st_gen: FOR s IN (STAGE-1) DOWNTO 0 GENERATE
34
xor_gen: FOR r IN 0 TO (2**s - 1) GENERATE
35
p(s,r) <= p(s+1, 2*r) XOR p(s+1, 2*r+1);
36
END GENERATE;
37
END GENERATE;
38 izlaz --------------------------------------------------------39
y <= p(0,0);
40 END tree_arch;
41----------------------------------------------------------------26
27

Kao to je ve reeno, prethodni VHDL opis je korektan samo ako je broj ulaza generatora
parnosti jednak stepenu dvojke. Ako to nije sluaj, odreeni broj ulaza ulaznog stepena
ostae nepovezan. Na primer, za n = 11 generisae se stage = 4 stepena, a ulazni stepen
imae 2stage-1 = 8 XOR kola sa ukupno 16 ulaza, od kojih e 11 biti povezani s ulaznim
signalima (prva for generate petlja, linije 29-31), dok e preostalih 5 ostati nepovezani.
Ovaj problem se moe reiti ako se neiskorieni ulazi postave na konstantnu vrednost 0.
Ova modifikacija nee poremetiti funkciju kola budui da vai x = x 0. Takoe, prilikom
sinteze, sva redundantna XOR kola bie automatski eliminisana. Ovaj princip je za sluaj n
= 11 ilustrovan je na Sl. 8-8. Sl. 8-8(a) prikazuje hijerarhijsku XOR strukturu sa fiksiranim
neiskorienim ulazima. Zapazimo da zbog konstantnih vrednosti na svojim ulazima, ak
pet XOR kola iz donjeg dela ove strukture gube svoju svrhu i da se mogu odstraniti iz
mree. Strukturu sintetizovanog generatora parnosti prikazana je na Sl. 8-8(b).

(a)

(b)

Sl. 8-8. Generator bita parnosti za proizvoljan broj ulaza: (a) princip; (b) sintetizovano kolo.

U nastavku sledi modifikovan VHDL opis arhitekture hijerarhijskog generatora parnosti za


proizvoljan broj ulaza (deklaracija funkcije log2c je izostavljena). Modifikacija se sastoji u
uvoenju jo jedne naredbe for generate koja nakon povezivanja ulaza kola na ulazni
stepen, nastavlja sa postavljanjem nula na preostale ulaze ulaznog stepena (linije 13-15).
Uoimo da za sluajeve kad je n jednako stepenu dvojke, uvedena for generate naredba
nee imati nikakvo dejstvo, jer e poetni indeks opsega petlje biti vei od krajnjeg.

218
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

Parametrizovano projektovanje

----------------------------------------------------------------ARCHITECTURE tree_arch_1 OF pargen IS


CONSTANT STAGE : NATURAL := log2c(N);
TYPE d2signal IS ARRAY(STAGE DOWNTO 0, 2**STAGE-1 DOWNTO 0)
OF STD_LOGIC;
SIGNAL p : d2signal;
BEGIN
-- preklapanje ulaznih signala ---------------------------------in_gen: FOR I IN 0 TO (N-1) GENERATE
p(STAGE,I) <= a(i);
END GENERATE;
-- postavljanje nula -------------------------------------------zero_gen: FOR I IN N TO (2**STAGE-1) GENERATE
p(STAGE,I) <= '0';
END GENERATE;
-- generisanje XOR polja ---------------------------------------st_gen: FOR s IN (STAGE-1) DOWNTO 0 GENERATE
xor_gen: FOR r IN 0 TO (2**s - 1) GENERATE
p(s,r) <= p(s+1, 2*r) XOR p(s+1, 2*r+1);
END GENERATE;
END GENERATE;
-- izlaz -------------------------------------------------------y <= p(0,0);
END tree_arch_1;

8.4.2. IF GENERATE
U parametrizovanom projektovanju, naredba if generate se prevashodno koristi za
realizaciju funkcionalnih parametara. Pomou ove naredbe mogue je ukljuiti ili iskljuiti
pojedine delove kola iz konane implementacije. Sintakse naredbe if generate je sledeeg
oblika:
labela: IF uslov GENERATE
(konkurentne naredbe;)
END GENERATE;

lan uslov je logiki izraz koji vraa vrednost tipa boolean. Izvrenje konkurentnih naredbe
koje su obuhvaene if generate je onemogueno ako je uslov taan, to znai da e deo kola
koji one opisuju biti ukljuen u implementaciju. U suprotnom sluaju, ako je uslov netaan,
izvrenje obuhvaenih konkurentne naredbe je onemogueno, to praktino znai da e
odgovarajui deo kola biti izostavljen iz implementacije. Naredba if generate ne sadri else
granu. To znai da za ukljuenje u implementaciju jednog od dva alternativna kola treba
napisati dve if generate naredbe s komplementarnim uslovima. Kad se naredba if generate
koristi u kdu za sintezu, njen uslov mora biti statiki, tj. u fazi sinteze mora biti poznato da
li je uslov taan ili netaan. Uslov if generate naredbe se najee izraava preko
generikih parametara.
Pr. 8-15 Generator parnosti
Naredba if generate se esto koristi u opisima iterativnih kola, kada unutar for generate
naredbe treba izdvojiti neregularne stepene iz inae regularne strukture. Razmotrimo jo
jedanput realizaciju generatora parnosti iz Pr. 8-11. U strukturi sa Sl. 8-3, prvi i poslednji
stepen se razlikuju od unutranjih stepena po tome to se oni povezuju sa ulaznim i

GENERATE

219

izlaznim portovima za koje se koristi drugaija konvencija imenovanja. U Pr. 8-11, ovaj
problem je reen pomou dve naredbe dodele koje van for generate petlje preklapaju
portove i unutranje signale za povezivanje:
p(0) <= a(0);
y <= p(N-1);

U VHDL opisu generatora parnosti koji sledi, kd iz tela for generate petlje je naredbama if
generate podeljen na tri uzajamno iskljuive sekcije. Kao to se moe zapaziti, u zavisnosti
od vrednosti indeksa petlje, i, uvek e biti ispunjen uslov tano jedne if generate naredbe.
Za i = 1, kd tela petlje se svodi na naredbu dodele iz linije 8 koja generie krajnji levi
stepen; za i = n-1, u telu petlje omoguena je samo naredba iz linije 16 koja generie krajnji
desni stepen, dok za sve ostale vrednosti brojaa petlje, vai naredba dodele iz linije 12
koja generie unutranje stepene generatora parnosti.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

----------------------------------------------------------------ARCHITECTURE gen_if_arch OF pargen IS


SIGNAL p : STD_LOGIC_VECTOR(N-2 DOWNTO 1);
BEGIN
xor_gen: FOR I IN 1 TO (N-1) GENERATE
-- krajnji levi stepen
left_gen: IF I = 1 GENERATE
p(I) <= a(I) XOR a(0);
END GENERATE;
-- sredisnji stepeni
middle_gen: IF (I > 1) AND (I < (N-1) GENERATE
p(I) <= a(I) XOR p(I-1);
END GENERATE;
-- krajnji desni stepen
right_gen: IF I = (N-1) GENERATE
y <= a(I) XOR p(I-1);
END GENERATE;
END GENERATE;
END gen_if_arch;

Pr. 8-16 Up-or-Down broja

(a)

(b)

Sl. 8-9 (a) Up-or-Down broja; (b) Up-and-Down broja.

Pod Up-or-Down brojaem podrazumevaemo komponentu koja se moe instancirati za


rad u jednom od dva reima: brojanje navie (Up) ili brojanje nanie (Down). Naglasimo da
ovde nije re o obostranom brojau, tj. o brojau s mogunou izbora smera brojanja (tzv.
Up-and-Down broja), ve o parametrizovanom opisu brojaa koji nakon sinteze radi na
jedan ili drugi nain. Konceptualni dijagrami Up-or-Down i Up-and-Down brojaa

220

Parametrizovano projektovanje

prikazani su na Sl. 8-9. Opcioni delovi Up-or-Down brojaa prikazani su isprekidanim


linijama (Sl. 8-9(a)). U zavisnosti od vrednosti funkcionalnog generikog parametra,
sintetizovae se ili inkrementer (blok +1) ili dekermenter (blok -1). S druge strane, Upand-Down broja sadri oba ova bloka, a poseban ulazni signal (dir) slui za izbor bloka
iji e izlaz biti prihvaen kao novo stanje brojaa, odnosno za izbor smera brojanja (Sl.
8-9(b)).
VHDL opis Up-or-Down brojaa koji sledi sadri dva generika parametra: jedan
dimenzioni, n, koji definie duinu brojaa i drugi funkcionalni, up. Za up=1, bira se
broja koji broji navie, a za up 1 broja koji broji nanie. Dve alternativne logike
sledeeg stanja opisane su pomou dve zasebne if generate naredbe. Poto su uslovi ovih
naredbi komplementarni (tj. uzajamno iskljuivi), konflikt na signalu r_next ne postoji.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
-----------------------------------------------------------------ENTITY up_or_down_counter IS
GENERIC(N : NATURAL;
UP : NATURAL);
PORT (q : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);
clk, rst : IN STD_LOGIC);
END up_or_down_counter;
-----------------------------------------------------------------ARCHITECTURE arch OF up_or_down_counter IS
SIGNAL r_reg : UNSIGNED(N-1 DOWNTO 0);
SIGNAL r_next : UNSIGNED(N-1 DOWNTO 0);
BEGIN
-- registar ---------------------------------------------------PROCESS(clk, rst)
BEGIN
IF(rst = '1') THEN
r_reg <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk='1') THEN
r_reg <= r_next;
END IF;
END PROCESS;
-- logika sledeceg stanja - inkrementer -----------------------inc_gen: IF UP = 1 GENERATE
r_next <= r_reg + 1;
END GENERATE;
-- logika sledeceg stanja - dekremeter -----------------------dec_gen: IF UP /= 1 GENERATE
r_next <= r_reg - 1;
END GENERATE;
-- logika izlaza ----------------------------------------------q <= STD_LOGIC_VECTOR(r_reg);
END arch;

Poreenja radi, u nastavku je predstavljen VHDL opis Up-and-Down brojaa.


1
2
3
4

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;

GENERATE
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

221

-----------------------------------------------------------------ENTITY up_and_down_counter IS
GENERIC(N : NATURAL)
PORT (q : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);
clk, rst : IN STD_LOGIC);
END up_and_down_counter;
-----------------------------------------------------------------ARCHITECTURE arch OF up_and_down_counter IS
SIGNAL r_reg : UNSIGNED(N-1 DOWNTO 0);
SIGNAL r_next : UNSIGNED(N-1 DOWNTO 0);
BEGIN
-- registar ---------------------------------------------------PROCESS(clk, rst)
BEGIN
IF(rst = '1') THEN
r_reg <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk='1') THEN
r_reg <= r_next;
END IF;
END PROCESS;
-- logika sledeceg stanja inkrementer/dekrementer ------------r_next <= r_reg + 1 WHEN dir=1 ELSE
r_reg 1;
-- logika izlaza ----------------------------------------------q <= STD_LOGIC_VECTOR(r_reg);
END arch;

Pr. 8-17 Sinhroni ili asinhroni reset


Sekvencijalna kola po pravilu poseduju reset signal, koji se koristi za postavljanje kola u
inicijalno stanje. Kao to znamo, reset signal moe biti sinhronog ili asinhronog tipa. Izbor
izmeu ova dva tipa, izmeu ostalog, zavisi i od specifinih zahteva ciljne
implementacione tehnologije. Na primer, kod FPGA tehnologije, najee se koristi reset
signal sinhronog, a kod ASIC asinhronog tipa. Da bi se postigla to vea portabilnost
VHDL opis, tj. da bi opis mogao lako da se implementira u razliitim tehnologijama,
korisno je u kd uvrstiti generiki parametar za izbor tipa reset signala.

Sl. 8-10 Binarni broja sa sinhronim ili asinhronim resetom.

Realizacija asinhronog reseta je trivijalna (dovoljno je koristiti registre sa asinhronim


resetom). S druge strane, realizacija sinhronog reseta zahteva modifikaciju logike sledeeg
stanja, tako da pri neaktivnom signalu reseta generie binarni kd sledeeg, a pri aktivnom
kd inicijalnog stanja (najee, sve nule). Ova modifikacija se moe najlake ostvariti uz
pomo multipleksera 2-u-1 koji e u zavisnosti od vrednosti reset signala ka registru stanja

222

Parametrizovano projektovanje

da proputa bilo sledee bilo inicijalno stanje. Na Sl. 8-10, ovaj princip je ilustrovan na
primeru binarnog brojaa: ili se koriste D flip-flopovi bez mogunosti asinhronog reseta i
multiplekser, ili D flip-flopovi sa asinhronim resetom.
Sledi VHDL opis binarnog brojaa s parametarskim izborom tipa reset signala. Za sync=1,
kd se sintetie u broja sa sinhronim, a za sync1 u broja sa asinhronim resetom.,
Selektivno generisanje kda se javlja na dva mesta u ovom opisu. Prvi par if generate
naredbi s komplementarnim uslovima generie registar sa asinhronim resetom (linije 1928), odnosno registar bez reset signala (linije 30-37). Drugi par if generate naredbi slui za
povezivanje logike sledeeg stanja i registra stanja. U asinhronoj varijanti, ova veza je
direktna (linije 41-43), dok se u sinhronom sluaju izmeu logike sledeeg stanja i registra
stanja umee multiplekser (linije 45-47).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
----------------------------------------------------------------ENTITY syn_or_asyn_counter IS
GENERIC(N : NATURAL;
SYNC : NATURAL);
PORT (q : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);
clk, rst : IN STD_LOGIC);
END syn_or_asyn_counter;
-----------------------------------------------------------------ARCHITECTURE arch OF syn_or_asyn_counter IS
SIGNAL r_reg : UNSIGNED(N-1 DOWNTO 0);
SIGNAL r_inc : UNSIGNED(N-1 DOWNTO 0);
SIGNAL r_next : UNSIGNED(N-1 DOWNTO 0);
BEGIN
-- registar sa asinhronim resetom ------------------------------rst_reg_gen: IF(SYNC /= 1) GENERATE
PROCESS(clk, rst)
BEGIN
IF(rst = '1') THEN
r_reg <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk='1') THEN
r_reg <= r_next;
END IF;
END PROCESS;
END GENERATE;
-- registar sa sinhronim resetom -------------------------------reg_gen: IF(SYNC = 1) GENERATE
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN
r_reg <= r_next;
END IF;
END PROCESS;
END GENERATE;
-- logika sledeceg stanje - inkrementer ------------------------r_inc <= r_reg + 1;
-- asinhroni reset ---------------------------------------------asyn_rst: IF SYNC /= 1 GENERATE
r_next <= r_inc;

GENERATE
43
44
45
46
47
48
49
50
51

223

END GENERATE;
-- sinhroni reset ----------------------------------------------syn_rst: IF SYNC = 1 GENERATE
r_next <= (OTHERS => '0') WHEN rst = '1' ELSE
r_inc;
END GENERATE;
-- logika izlaza ----------------------------------------------q <= STD_LOGIC_VECTOR(r_reg);
END arch;

Razmotrimo jo jedanput kolo Up-and-Down brojaa iz Pr. 8-16. Logika sledeeg stanja
ovog brojaa se sastoji iz inkrementera, dekrementera i multipleksera, a spoljni upravljaki
signal dir svojom vrednou odreuje smer brojanja. Iako Up-and-Down broja ne
poseduje funkcionalni parametar up, efekat ovog generikog parametra se moe simulirati
postavljanjem ulaznog signala dir na konstantnu vrednost.
Na primer, pretpostavimo da se u nekom projektu javila potreba za 8-bitnim brojaem
navie. Ovakav broja moemo kreirati instanciranjem komponente Up-or-Down brojaa,
na sledei nain:
count8up: up_or_down_counter
GENERIC MAP(N=>8, UP=>1);
PORT MAP(clk=>clk, rst=>rst, q=>q);

Identian broja moemo kreirati i uz pomo komponente Up-and-Down brojaa:


count8up: up_and_down_counter
GENERIC MAP(N=>8);
PORT MAP(clk=>clk, rst=>rst, dir=>1, q=>q);

Budui da je signal dir fiksiran na 1, broja e uvek brojati navie, ba kao broja kreiran
instanciranjem komponente up_or_down_counter.
Iako su dve prethodne instance funkcionalno identine, one ipak predstavljaju dva razliita
kola. Instanciranjem Up-or-Down brojaa kreira se kolo koje sadri samo neophodne
funkcije, dok se instanciranjem brojaa Up-and-Down kreira kolo obostranog brojaa
kompletne funkcionalnosti, s tim to je funkcija brojanja nanie onemoguena
postavljanjem ulaza dir na 1.
Razlika izmeu dve instance manifestovae se i prilikom procesiranja VHDL kda. Kao to
znamo, procesiranje VHDL kda ukljuuje tri koraka, analizu, elaboraciju i izvrenje (tj.
sintezu). Naredba if generate se obrauje u prvom koraku, tokom elaboracije, tako to se
nepotrebni delovi kda odstranjuju iz opisa. Tako proien kd se prosleuje softveru za
sintezu, koji se bavi samo preostalim kdom. S druge strane, kad se koriste komponente
pune funkcionalnosti, kao to je to Up-and-Down broja, celokupan kd se prosleuje u
fazu sinteze, bez obzira na to to neke funkcije eventualno iskljuene postavljanjem
spoljanjih ulaza na konstantne vrednosti. Na softveru za sintezu je da izvri propagaciju
konstantnih ulaznih vrednosti kroz kolo i eliminie nepotrebnu logiku. U optem sluaju,
korienje naredbe za uslovno generisanje kda (if generate) je bolji pristup, jer omoguava
da se na jasniji nain izdvoje opcioni delovi kola i da se nepotrebni delovi odstrane iz opisa
pre njegove sinteze.
Selektivna sinteza hardvera se moe takoe postii pomou konfiguracije. Ovaj pristup se
sastoji u tome da se za neko kolo kreira vie zasebnih arhitektura specifinih funkcionalnih
karakteristika, a da se onda eljena funkcionalnost bira povezivanjem entiteta sa
odgovarajuom arhitekturom (v. 7.3). Na primer, parametrizovan opis Up-or-Down

224

Parametrizovano projektovanje

brojaa se moe razloiti na dve arhitekture, tako da jedna opisuje broja navie (Up), a
druga broja nanie (Down), a da se onda posredstvom konfiguracije bira po potrebi jedna
od njih.
Takoe, vie alternativnih arhitektura se moe objediniti u jedinstvenu parametrizovanu
arhitekturu u kojoj e se uz pomo funkcionalnih parametara i naredbi if generate biti
omoguen izbor eljenih funkcionalnih karakteristika.
Ne postoji opte pravilo kad je bolje koristiti funkcionalne parametre, a kad konfiguraciju.
Parametrizovan kd je tee napisati, budui da jednim opisom treba obuhvatiti vie
razliitih verzija jednog istog kola. S druge strane, ako se za svaku pojedinanu
kombinaciju funkcija kreira zasebna arhitektura, njihov broj moe postati veliki. Primera
radi, da bi se pokrile sve mogue kombinacije funkcija brojaa koji bi imao mogunost
izbora smera brojanja (Up/Down) i tipa reset signala (sinhron/asinhron) bilo bi neophodno
napisati etiri razliite arhitekture.

8.5. FOR LOOP


U ovom poglavlju bie predstavljeno nekoliko primera parametrizovanih opisa u kojima se
koristi sekvencijalna naredba for loop. Ova naredba je uvedena u poglavlju 5.4, a njena
pojednostavljena sintaksa je sledeeg oblika:
FOR indeks IN opseg LOOP
sekvencijalne naredbe;
END LOOP;

Naredbe for generate i for loop su sline po sintaksi i nain rada, s tom razlikom to se prva
koristi iskljuivo u konkurentnom, a druga u sekvencijalnom kdu. Upravo iz tog razloga,
naredba for loop je fleksibilnija i optija od for generate. Meutim, kao i za for generate,
opseg indeksa naredbe for loop mora biti statiki ako se ona koristi u kdu za sintezu.
Pr. 8-18 Binarni dekoder - parametrizovan opis
Binarni dekoder je razmatran u vie navrata u prethodnim glavama (v. Pr. 4-7, Pr. 4-13, Pr.
5-7 i Pr. 5-10). U Pr. 5-10, za opis dekodera koriena je sekvencijalna naredba case.
Meutim, s obzirom na to to je broj grana u case naredbi jednak broju izlaza dekodera,
ovakva realizacija nije pogodna kao osnova za kreiranje parametrizovanog opisa. To isto
vai i za opis dekodera pomou konkurentne naredbe when iz Pr. 4-7. Fleksibilniji opis
dekodera, koji se moe lako parametrizovati, zasnovan je na naredbi for loop. Odgovarajui
VHDL kd je dat ispod. Opis sadri dimenzioni parametar n koji definie broj ulaza
dekodera. Dekoder sa n ulaza poseduje 2n izlaza, od kojih je uvek samo jedan biti aktivan
(postavljen na 1) i to onaj iji je indeks, u vidu n-bitnog binarnog broja, postavljen na
ulazu kola. U kdu treba obratiti panju na uslov if naredbe iz linije 17, u kome se ulazna
vrednosti tipa std_logic_vector konvertuje u tip integer radi poreenja s indeksom petlje.
1
2
3
4
5
6
7
8

----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
----------------------------------------------------------------ENTITY bin_decoder IS
GENERIC( N : NATURAL);
PORT( a : IN STD_LOGIC_VECTOR (N-1 DOWNTO 0);

FOR LOOP
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

225

y : OUT STD_LOGIC_VECTOR (2**N-1 DOWNTO 0));


END bin_decoder;
----------------------------------------------------------------ARCHITECTURE loop_arch OF bin_decoder IS
BEGIN
PROCESS(a)
BEGIN
FOR I IN 0 TO 2**N-1 LOOP
IF(I = TO_INTEGER(UNSIGNED(a))) THEN
y(I) <= '1';
ELSE
y(I) <= '0';
END IF;
END LOOP;
END PROCESS;
END loop_arch;

Pr. 8-19 Prioritetni koder - parametrizovan opis i konceptualna implementacija


VHDL opis prioritetnog kodera, zasnovan na naredbi when, predstavljen je u Pr. 4-9.
Meutim, iz istih razloga kao kod binarnog dekodera, opis iz Pr. 4-9 nije pogodan za
parametrizaciju. Zato se u parametrizovanom opisu prioritetnog kodera iz ovog primera
koristi naredba for loop. Prioritetni koder ima n ulaza i log2n izlaza. Ulazima su pridrueni
prioriteti, a vrednost prisutna na izlazu, interpretirana kao neoznaen binarni broj,
predstavlja indeks (redni broj) aktivnog ulaza najvieg prioriteta. Prioritetni koder takoe
poseduje izlaz z koji je aktivan ako je barem jedan ulaz postavljen na 1. U datom kdu,
usvojeno je da najvii prioritet ima ulaz a(n-1), a najnii ulaz a(0). Kd sadri dva procesa.
Prvi proces (linije 19-27) realizuje funkciju prioritetnog kodiranja, dok drugi (linije 29-35)
opisuje funkciju n-to ulaznog ILI kola kojom se generie vrednost izlaznog signala z. Iako
oba procesa sadre for loop naredbu, samo prvi zahteva detaljnije objanjenje. Na poetku
ovog procesa, izlazni signal b se postavlja na sve nule (linija 21). Naredba for loop
skenira ulaze, poev od ulaza najnieg, pa do ulaza navieg prioriteta. Uvek kada se naie
na ativan ulaz, signal b se postavlja na kd tog ulaza, odnosno dodeli mu se vrednost
tekueg indeksa petlje u binarnom obliku (linija 24). Ako postoji vie aktivnih ulaza,
signalu b e vie puta biti dodeljena nova vrednost. Meutim, kao to znamo, viestruka
dodela vrednosti istom signalu u procesu razreava se tako to signal na kraju procesa
dobija poslednje dodeljenu vrednost, a to e upravo biti kd aktivnog ulaza navieg
prioriteta. Ako ni jedan ulaz nije aktivan, b e zadrati poetnu vrednost, tj. nulu.
1
2
3
4
5
6
7
8
9
10
11
12
13
14

----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE work.nas_paket.ALL;
----------------------------------------------------------------ENTITY pencoder IS
GENERIC(N : NATURAL);
PORT( a : IN STD_LOGIC_VECTOR (N-1 DOWNTO 0);
b : OUT STD_LOGIC_VECTOR (log2c(N)-1 downto 0);
z : OUT STD_LOGIC);
END pencoder;
----------------------------------------------------------------ARCHITECTURE loop_arch OF pencoder IS

226
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

Parametrizovano projektovanje

CONSTANT M : NATURAL := log2c(N);


SIGNAL p : STD_LOGIC_VECTOR(N-1 DOWNTO 0);
BEGIN
-- prioritetno kodiranje ---------------------------------------PROCESS(a)
BEGIN
b <= (OTHERS => '0');
FOR I IN 0 TO N-1 LOOP
IF(a(i) = '1') THEN
b <= STD_LOGIC_VECTOR(TO_UNSIGNED(I,M));
END IF;
END LOOP;
END PROCESS;
-- N-to ulazno ILI kolo ----------------------------------------PROCESS(a, p)
BEGIN
p(0) <= a(0);
FOR I IN 1 TO (N-1) LOOP
p(i) <= a(i) OR p(I-1);
END LOOP;
END PROCESS;
z <= p(N-1);
END loop_arch;
-----------------------------------------------------------------

Predstavljeni VHDL opis prioritetnog kodera je specifian po tome to nije izveden na


osnovu neke polazne konceptualne predstave o strukturi kola, kako je uobiajeno, ve na
osnovu apstraktnog opisa funkcije kola. Meutim, i pored toga, ovaj kd se moe
sintetizovati. Da bi smo se uverili da je to zaista tako, razmotriemo kako se petlja za
prioritetno kodiranje (linije 22-26) prevodi u konceptualni dijagram. Razmotavanjem for
loop petlje dobijamo sledei kd, uz pretpostavku da vai n=4:
b <= 00;
IF (a(0) = 1)
b <= 00;
END IF;
IF (a(1) = 1)
b <= 01;
END IF;
IF (a(2) = 1)
b <= 10;
END IF;
IF (a(3) = 1)
b <= 11;
END IF;

THEN
THEN
THEN
THEN

U razmotanom kdu obavlja se niz uzastopnih uslovnih dodela vrednosti istom signalu, b.
Imajui u vidu da je konana vrednost signala odreena poslednjom dodelom, prethodni niz
naredbi se moe prevesti u jednu if naredbu s vie elsif grana:
IF (a(3) = 1) THEN
b <= 11;
ELSIF (a(2) = 1) THEN
b <= 10;
ELSIF (a(1) = 1) THEN
b <= 01;
ELSIF (a(0) = 1) THEN

FOR LOOP

227

b <= 00;
ELSE
b <= 00;
END IF;

Naredba if-then-elsif-else se direktno prevodi u konceptualni dijagram sa Sl. 8-11, koji u


sutini predstavlja kaskadnu, prioritetnu mreu multipleksera 2-u-1.
11

T
b

10

01

00

00

a(0)

=1

a(1)

=1

a(2)

=1

a(3)

=1

Sl. 8-11 Konceptualni dijagram prioritetnog kodera.

Pr. 8-20 Vieulazno I kolo - parametrizovan opis i konceptualna implementacija


Sledi parametrizovan opis logike I funkcije za proizvoljan broj operanada. U kdu se
koristi varijabla v kao pomona promenljiva u petlji u kojoj se logika I operacija
primenjuje redom na sve ulazne bitove. Za razliku od signala, dodela vrednosti varijabli u
procesu je trenutna, to znai da se v aurira u svakoj iteraciji petlje.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

-----------------------------------------------------------------BRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY andN IS
GENERIC(N : NATURAL);
PORT( a : IN STD_LOGIC_VECTOR (N-1 DOWNTO 0);
y : OUT STD_LOGIC);
END andN;
-----------------------------------------------------------------ARCHITECTURE loop_arch OF andN IS
BEGIN
PROCESS(a)
VARIABLE v : STD_LOGIC;
BEGIN
v := a(0);
FOR I IN 1 TO (N-1) LOOP
v := v AND a(i);
END LOOP;
y <= v;

228
21
22
23

Parametrizovano projektovanje

END PROCESS;
END loop_arch;
------------------------------------------------------------------

Prethodni VHDL kd nalikuje programu pisanom u programskom jeziku. Meutim, to je


nivo apstraktnosti i deskriptivnosti kda vii, to izvoenje odgovarajue konceptualne
implementacije zahteva vie napora. U svakom sluaju, klju za konverziju kda u hardver
je u identifikovanju konstrukcija koje imaju direktnu hardversku interpretaciju. Prvi korak
u tom procesu je razmotavanje petlje. Pod pretpostavkom da je n=4, petlja se razmotava u
sledei kd:
v
v
v
v
y

:=
:=
:=
:=
<=

a(0);
a(1) AND v;
a(2) AND v;
a(3) AND v;
v;

Da bi se izbeglo samo-referenciranje, potrebno je izvriti preimenovanje varijable, tako da


se u svakoj sledeoj naredbi koristi novo ime za varijablu s desne strane znaka dodele (v.
5.1.4):
v0 := a(0);
v1 := a(1) AND v0;
v2 := a(2) AND v1;
v3 := a(3) AND v2;
y <= v3;

Sada postaje jasno da varijable predstavljaju veze izmeu dvoulaznih I kola, na nain kao
na Sl. 8-12.

Sl. 8-12 Konceptualna implementacija vieulaznog I kola.

Pr. 8-21 Broja jedinica - parametrizovan opis i konceptualna implementacija


Broja jedinica je kombinaciono kolo koje prebrojava 1-ce u ulaznom viebitnom signalu.
U parametrizovanom opisu brojaa jedinica iz ovog primera koristi se naredba for loop i
varijabla kao pomona promenljiva za sumiranje 1-ca:
1
2
3
4
5
6
7
8
9
10
11
12
13

-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE work.nas_paket.ALL;
-----------------------------------------------------------------ENTITY once_counter IS
GENERIC(N : NATURAL);
PORT( a : IN STD_LOGIC_VECTOR (N-1 DOWNTO 0);
b : OUT STD_LOGIC_VECTOR (log2c(N)-1 downto 0));
END once_counter;
-----------------------------------------------------------------ARCHITECTURE loop_arch OF once_counter IS

FOR LOOP
14
15
16
17
18
19
20
21
22
23
24
25
26
27

229

BEGIN
PROCESS(a)
VARIABLE sum : UNSIGNED(log2c(N)-1 DOWNTO 0);
BEGIN
sum := (OTHERS => '0');
FOR I IN 0 TO N-1 LOOP
IF(a(i) = '1') THEN
sum := sum + 1;
END IF;
END LOOP;
b <= STD_LOGIC_VECTOR(sum);
END PROCESS;
END loop_arch;
------------------------------------------------------------------

Kreiranje konceptualne implementacije datog kda zahteva


Pretpostavimo da je n=3. Petlja se razmotava u sledei kd:

vee

angaovanje.

sum := 0;
IF (a(0) = 1) THEN
sum := sum + 1;
END IF;
IF (a(1) = 1) THEN
sum := sum + 1;
END IF;
IF (a(2) = 1) THEN
sum := sum + 1;
END IF;
b <= sum;

Prosto preimenovanje varijabli, kao u prethodnom primeru, nije korektno:


sum0 := 0;
IF (a(0) = 1) THEN
sum1 := sum0 + 1;
END IF;
IF (a(1) = 1) THEN
sum2 := sum1 + 1;
END IF;
IF (a(2) = 1) THEN
sum3 := sum2 + 1;
END IF;
b <= sum3;

Oigledno, modifikovani kd nije funkcionalno identian polaznom, jer se tekua vrednost


sume ne prenosi korektno iz iteracije u iteraciju. Ako vai a(i)= 0, naredba za sumiranje
se preskae i varijabla sumi+1 ostaje neinicijalizovana. Ispravna modifikacija zahteva da se
svaka if-then naredba proiri else granom u kojoj e se u novu varijablu sumi+1 prepisati
vrednost prethodne, sumi, za sluaj ako vai a(i)= 0:
sum0 := 0;
IF (a(0) = 1) THEN
sum1 := sum0 + 1;
ELSE
sum1 := sum0;
END IF;
IF (a(1) = 1) THEN

230

Parametrizovano projektovanje

sum2 := sum1 + 1;
ELSE
sum2 := sum1;
END IF;
IF (a(2) = 1) THEN
sum3 := sum2 + 1;
ELSE
sum3 := sum2;
END IF;
b <= sum3;

Modifikovani kd se preslikava u iterativnu hardversku strukturu sa Sl. 8-13. Svakoj ifthen-else naredbi odgovara jedan bazini gradivni blok koji ine po jedan multiplekser i
inkrementer. Ako je odgovarajui ulazni bit jednak 0, u sledei stepen se prenosi suma iz
prethodnog. U suprotnom, ako je ulazni bit jednak 1, u sledei stepen se alje suma iz
prethodnog stepena uveana za 1.

Sl. 8-13 Konceptualna implementacija brojaa jedinica.

8.5.1. EXIT i NEXT


Naredbe exit i next su sekvencijalne naredbe koje se koriste iskljuivo unutar naredbe for
loop radi promene toka izvrenja petlje. Naredba exit prekida izvrenje for loop naredbe petlja se momentalno naputa, a preostale iteracije se zanemaruju. Naredba next prekida
izvrenje tekue iteracije petlja momentalno prelazi na sledeu iteraciju, a preostale
naredbe tekue iteracije se zanemaruju. Naredbe exit i next su korisne u apstraktnom
modeliranju, jer u nekim sluajevima mogu znaajno da pojednostave kd tela petlje, ali ih
je teko sintetizovati, pa se zbog toga retko koriste u kdu za sintezu. ta vie, pojedini
softveri za sintezu ne podravaju ove naredbe. U narednim primerima bie ilustrovana
primena naredbi exit i next i pokazano kako se izvodi njihova konceptualna implementacija.
Takoe, bie ukazano kako se ove dve naredbe mogu zameniti naredbom if.
Exit. Sintaksa exit naredbe je:
EXIT WHEN uslov;

lan uslov je logiki izraz koji definie uslov izlaska iz petlje. Ako je uslov taan, izvrenje
petlje se prekida. Treba napomenuti da naredba exit moe egzistirati i bez definisanog
uslova, kao u sledeem kontekstu:
IF (uslov) THEN
. . .
EXIT;
ELSE
. . .

FOR LOOP

231

Pr. 8-22 Vieulazno I kolo realizacija pomou naredbe for loop - exit end loop
Parametrizovan opis vieulaznog I kola, zasnovan na naredbi for loop, dat je u Pr. 8-20.
Naredba for loop iz Pr. 8-20 redom skenira i AND-uju ulazne bitove, od prvog do
poslednjeg. U ovom primeru, iskoristiemo osobinu logike I operacije da je x 0 = 0 ,
odnosno da je rezultat I operacije jednak 0 ako u ulaznom niz postoji barem jedna nula.
Dakle, umesto da se prolazi kroz ceo ulazni niz, biti po bit, skeniranje ulaza se moe
prekinuti im se naie na prvu nulu. VHDL kd koji sledi, zasnovan je na ovom opaanju.
U kdu se koristi naredba for loop za skeniranje ulaznih bitova i naredba exit koja prekida
petlju pri nailasku na prvu nulu.
Gledano iz perspektive programskih jezika, kd sa exit naredbom je efikasniji (bri) u
odnosu na kd iz Pr. 8-20, gde se petlja uvek izvrava do kraja. Budui da je efekat naredbe
exit takav da se petlja zavrava nailaskom na prvu nulu, vreme izvrenja programa u
proseku bie duplo krae nego da se petlja uvek izvrava do kraja. Meutim, ako se dati
kd realizuje u hardveru, poboljanja nee biti. Hardver ne moe dinamiki da se skupi ili
proiri zavisno od ulaznog podatka, ve mora biti fiziki prisutan u obimu koji je
neophodan da bi se obradila proizvoljna ulazna sekvenca. Prevremeni izlazak iz petlje ne
samo da ne doprinosi ubrzanju rada ve unosi dodatni hardver i usporava rad kola, kao to
e to biti pokazano kroz konceptualnu implementaciju kda iz sledeeg primera
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

-----------------------------------------------------------------ARCHITECTURE loop_exit_arch OF andN IS


BEGIN
PROCESS(a)
VARIABLE v : STD_LOGIC;
BEGIN
v := 1; -- podrazumevana vrednost
FOR I IN 0 TO (N-1) LOOP
IF a(I) = 1 THEN
v := 0;
EXIT;
END IF;
END LOOP;
y <= v;
END PROCESS;
END loop_exit_arch;

Pr. 8-23 Broja vodeih nula - Konceptualna implementacija for loop petlje sa exit
naredbom
Broja vodeih nula je kombinaciono kolo koje odreuje broj nula koje se nalaze na
poetku viebitnog ulaznog signala. Na primer, broj vodeih nula u vektoru 10011 je 0, a
u vektoru 00110 tri. U VHDL kdu koji sledi, naredba for loop se koristi za prebrojavanje
nula u ulaznom vektoru, a naredba exit za izlazak iz petlje kada se naie na prvu 1-cu.
1
2
3
4
5
6
7

----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
----------------------------------------------------------------ENTITY zero_counter IS
GENERIC(N : NATURAL);

232
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

Parametrizovano projektovanje

PORT(a : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);


z : OUT STD_LOGIC_VECTOR(log2(N)-1 DOWNTO 0));
END zero_counter;
----------------------------------------------------------------ARCHITECTURE loop_exit_arch OF zero_counter IS
BEGIN
PROCESS(a)
VARIABLE sum: UNSIGNED(log2(N)-1 DOWNTO 0);
BEGIN
sum := (OTHERS => '0');
FOR I IN N-1 DOWNTO 0 LOOP
IF a(I) = '1' THEN
EXIT;
ELSE
sum := sum + 1;
END IF;
END LOOP;
z <= STD_LOGIC_VECTOR(sum);
END PROCESS;
END loop_exit_arch;
-----------------------------------------------------------------

Naredba for loop sa exit naredbom se ne moe direktno sintetizovati. Problem je u tome to
exit naredba onemoguava razmotavanje petlje, jer se unapred ne moe znati kada e uslov
za izlazak iz petlje biti ispunjen. Sinteza petlji sa exit naredbom zasnovana je na emulaciji
naredbe exit dodatnom logikom koja e omoguiti preskakanje preostalih iteracija petlje
onda kada uslov za naputanje petlje postane ispunjen.
Modifikovana verzija kda data je u nastavku. Kao to moemo videti, u kdu sada postoje
dve for loop petlje. Ideja je sledea. Uvedena je jo jedna viebitna varijabla, bypass, iji
svaki bit kontrolie rad jednog stepena u iterativnoj strukturi. Bitovi ove varijable se
postavljaju u prvoj petlji (linije 12-18), a zatim se koriste u drugoj petlji (linije 20-26). Bit
bypass(i) postavljen na 1 znai da operaciju inkrementiranja koja se obavlja u i-tom
stepenu treba premostiti, odnosno da rezultat iz stepena i+1 treba, bez promene, preneti
kroz i-ti stepen. U suprotnom, bypass(i) = 0 ukazuje da i-ti stepen treba da obavi svoju
normalnu operaciju.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

-----------------------------------------------------------------ARCHITECTURE bypass_arch OF zero_counter IS


BEGIN
PROCESS(a)
VARIABLE sum: UNSIGNED(log2(N)- 1 DOWNTO 0);
VARIABLE bypass: STD_LOGIC_VECTOR(N DOWNTO 0);
BEGIN
-- Inicijalizacija ----------------------------------------------sum := (OTHERS => '0');
bypass(N) <= '0';
-- Postavljanje bypass indikatora -------------------------------FOR I IN N-1 DOWNTO 0 LOOP
IF a(I) = '1' THEN
bypass(I) := '1';
ELSE
bypass(I) := bypass(I+1);
END IF;
END LOOP;
-- Brojanje vodecih nula -----------------------------------------

FOR LOOP
20
21
22
23
24
25
26
27
28
29
30

233

FOR I IN N-1 DOWNTO 0 LOOP


IF bypass(I) = '0' THEN
IF a(I) = '0' THEN
sum := sum + 1;
END IF;
END IF;
END LOOP;
z <= STD_LOGIC_VECTOR(sum);
END PROCESS;
END bypass_arch;
----------------------------------------------------------------

Zapazimo da ako vai bypass(i)=0, tada mora da vai i a(i)=0. To znai da ispitivanje
uslova a(i)=0 iz druge for loop petlje nije neophodno i da se moe izostaviti:
FOR I IN N-1 DOWNTO 0 LOOP
IF bypass(I) = '0' THEN
sum := sum + 1;
END IF;
END LOOP;

Budui da u kdu vie ne postoji naredba exit, do konceptualne implementacije se moe


doi razmotavanjem petlji. Odgovarajui dijagram, za sluaj n=3, prikazan je na Sl. 8-14.
Prva petlja se transformie u lanac ILI kola, s obzirom na to to je efekat naredbe if (linije
13-17) identian ILI operaciji nad bitovima a(i) i bypass(i+1). Druga for loop petlja se
transformie u strukturu koja je slina strukturi brojaa jedinica iz Pr. 8-21. Uoimo da
onda kada u nekom stepenu bypass postane jednako 1, ova 1-ca se prenosi kroz sve
naredne stepene, to za posledicu ima preskakanje svih preostalih operacija
inkrementiranja.

Sl. 8-14 Konceptualna implemenacija brojaa vodeih nula.

Next. Sintaksa naredbe next je sledeeg oblika


NEXT WHEN uslov;

lan uslov je logiki iskaz koji moe biti taan ili netaan. Ako je netaan, naredba next se
preskae i nema nikakvog efekta na izvrenje kda tela petlje; ako je taan, efekat naredbe
next je taj da se preskau sve preostale naredbe iz tela petlje i momentalno se prelazi na
izvrenje sledee iteracije petlje. Slino naredbi exit, deo when uslov nije neophodan ako
se naredba next nalazi unutar naredbe if.
Pr. 8-24 Broja jedinica realizacije pomou naredbe next
Parametrizovan VHDL opis brojaa jedinica predstavljen je u Pr. 8-21. U ovom primeru
izloena je modifikovana arhitektura brojaa jedinica u kojoj se naredba next koristi za
preskakanje operacije inkrementiranja u sluajevima kada je ulazni bit jednak nuli.

234
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Parametrizovano projektovanje

--------------------------------------------------------------ARCHITECTURE loop_next_arch OF zero_counter IS


BEGIN
PROCESS(a)
VARIABLE sum: UNSIGNED(log2(N)-1 DOWNTO 0);
BEGIN
sum := (OTHERS => '0');
FOR I IN 0 TO N-1 LOOP
NEXT WHEN a(I)='0';
sum := sum + 1;
END LOOP;
b <= STD_LOGIC_VECTOR(sum);
END PROCESS;
END loop_next_arch;

Naredba next je u izvesnom smislu suprotna naredbi if : za ispunjen uslov, next preskae,
dok if izvrava obuhvaene naredbe. Imajui to u vidu, next naredba se moe izraziti preko
if naredbe, kao u sledeem primeru:
FOR ... LOOP
sekvencijalna naredba 1;
NEXT WHEN uslov;
sekvencijalna naredba 2;
END LOOP;

FOR ... LOOP


sekvencijalna naredba 1;
IF(NOT uslov) THEN
sekvencijalna naredba 2;
END IF;
END LOOP;

Treba naglasiti da se if naredba mnogo ee koristi od next naredbe budui da je


modularnija i deskriptivnija. Prethodni primer takoe ukazuje kako bi se obavila sinteza
next naredbe.

9. RTL PROJEKTOVANJE

Sloeni postupci izraunavanja esto se opisuju u vidu algoritama. Algoritam definie niz
koraka ili akcija koje treba sprovesti nad ulaznim podacima da bi se dobio eljeni rezultat.
Algoritmi se najee realizuju u vidu programa, koji se piu u konvencionalnim
programskim jezicima (tj. u softveru) i izvravaju na raunarima opte namene. Meutim,
radi postizanja boljih performansi i vee efikasnosti, nekada je bolje ili ak neophodno
algoritam realizovati direktno u namenski projektovanom hardveru. RTL (prema eng.
Register Transfer Level) projektovanje (ili projektovanje na registarskom, odnosno
mikroarhitekturnom nivou apstrakcije) je metodologija projektovanja koja prua
sistematski nain za konverziju algoritama u hardver.

9.1. RTL metodologija projektovanja


Algoritam predstavlja detaljan opis toka izvrenja nekog zadatka ili postupka reavanja
nekog problema u vidu sekvence akcija ili koraka. Budui da je semantika programskih
jezika zasnovana na sekvencijalnom modelu izraunavanja, algoritam se moe lako opisati
u vidu programa, koji se potom kompajlira i izvrava na raunaru opte namene.
Razmotrimo jedan jednostavan zadatak koji sumira etiri elementa niza, deli sumu sa 8 i
zaokruuje rezultat na najblii ceo broj. Pseudo kd odgovarajueg algoritma je:
size = 4;
sum = 0;
for i in (0 to size-1) do {
sum = sum + a(i);}
q = sum / 8;
r = sum rem 8;
if(r > 3) {
q = q + 1;}
outp = q;

Nakon dodele poetnih vrednosti promenljivama size i sum, algoritam u petlji sabira
elemente niza a, jedan po jedan, i njihov zbir smeta u promenljivu sum. Posle toga slede
operacije deljenja (/) i ostatka (rem) kojim se izraunao kolinik (q) i ostatak (r) deljenja
sume sa 8. Konano, ako je ostatak vei od 3 na kolinik se dodaje 1 radi zaokurivanja.
Opisani primer ilustruje dve osnovne osobine svakog algoritma:

Goran Lj. orevi, Arhitetkture mikrosistema, 2009.

236

RTL projektovanje

Upotreba promenljivih. Promenljive u algoritmu (ili pseudo kdu) mogu se razumeti


kao memorijske lokacije za uvanje meurezultata izraunavanja. Ime promenljive
ukazuje na simboliku adresu memorijske lokacije. Na primer, u drugoj naredbi, 0 se
smeta u memorijsku lokaciju sa simbolikim imenom sum. Ili, unutar for petlje a(i) se
sabira sa tekuim sadrajem promenljive sum i dobijeni zbir se smeta ponovo u
memorijsku lokaciju sa simbolikim imenom sum, itd.

Sekvencijalno izvrenje. Algoritam se izvrava sekvencijalno, tj. naredba po naredba, u


strogo definisanom redosledu. Na primer, sumiranje elemenata niza se mora obaviti
pre deljenja sume, deljenje nakon sumiranja, a zaokruivanje nakon deljenja.
Napomenimo da tok izvrenja algoritma moe da zavisi i od uslova definisanih u
naredbama kao to su for ili if.

Razmatrani pseudo kd se moe relativno lako prevesti u ekvivalentan VHDL kd, uz


neophodna sintaksna prilagoenja i pretpostavku da su sum, q i r 8-bitni brojevi:
. . .
CONSTANT size : INTEGER := 4;
SIGNAL outp : STD_LOGIC_VECTOR(7 DOWNTO 0);
. . .
PROCESS(a)
VARIABLE sum, q, r : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
sum := a(0);
FOR i IN 1 TO size-1 LOOP
sum := sum + a(i);
END LOOP;
q <= 000 & sum(7 DOWNTO 3);
r <= 00000 & sum(2 DOWNTO 0);
outp <= q + 1 WHEN (r > 3) ELSE
q;
END PROCESS;

Nakon razmotavanja for loop petlje i preimenovanja varijable sum (slino kao u primeru iz
odeljka 5.1.4), dolazimo do oblika kda koji je pogodan za konceptualnu implementaciju
(Sl. 9-1):
sum0
sum1
sum2
sum3
q <=
r <=
outp

:= a(0);
:= sum0 + a(1);
:= sum1 + a(2);
:= sum2 + a(3);
000 & sum(7 DOWNTO 3);
00000 & sum(2 DOWNTO 0);
<= q + 1 WHEN (r > 3) ELSE
q;

Sl. 9-1 Konceptualna implementacija

Rezultat sinteze je struktura kaskadno povezanih hardverskih blokova, gde svaki blok
odgovara jednoj operaciji iz algoritma, kao to se moe videti na Sl. 9-1. Promenljive vie
nisu direktno vidljive u ovoj strukturi (zato to su varijable i signali preslikani na interne

RTL metodologija projektovanja

237

veze u kolu), a sekvencijalno izvrenje, karakteristino za pseudo kd, samo je implicitno


ugraeno u nain kako su povezani hardverski blokovi. Sintetizovano kolo se moe
razumeti kao kombinaciona funkcionalna jedinica koja obavlja jednu sloenu aritmetiku
operaciju. Meutim, nain na koji se u hardveru obavlja zahtevana funkciju sutinski se
razlikuje od semantike (naina rada) polaznog sekvencijalnog algoritma. U hardverskom
reenju sa Sl. 9-1, hardverski blokovi rade u paraleli, to omoguava preklapanje izvrenja
pojedinih operacija, a time i ubrzanje procesa izraunavanja. Na primer, nakon
izraunavanja zbir etiri ulazne vrednosti, operacije deljenja i odreivanja ostatka deljenja
(predstavljene blokovima sa upisanim operatorom konkatenacije, &) mogu se obaviti
istovremeno. S druge strane, u softverskom reenju, koje je namenjeno za izvrenje na
raunaru opte namene, takva preklapanja izvrenja operacija nisu mogua, jer se naredbe
algoritma uvek izvravaju jedna za drugom, po definisanom redosledu.
Meutim, bez obzira na dobitak u performansama, digitalna kola koja se realizuju na opisan
nain nisu dovoljno univerzalna niti su, u najveem broju sluajeva, najbolje hardversko
reenje koje postoji za dati problem. Na primer, pretpostavimo da se u razmatranom
primeru vrednost konstante size promeni sa 4 na 20. Ova jednostavna modifikacije dovela
bi do drastinog poveanje sloenosti sintetizovanog hardvera, jer bi umesto 4 biti potrebno
ak 20 sabiraa. Ili, pretpostavimo da size vie nije konstanta, ve ulazna promenljiva koja
moe imati razliitu vrednost pri svakom novom pozivu algoritma. Ova modifikacija, iako
gotovo neprimetna sa stanovita sekvencijalnog izvrenja, stvorila bi nepremostive
potekoe prilikom realizacije hardvera hardver se ne moe dinamiki iriti i skupljati.
Prethodni primer ukazuje na ogranienja i nefleksibilnost direktnog preslikavanja
sekvencijalnog algoritma na hardversku strukturu, odnosno sugerie na drugaiji pristupa u
kreiranju hardvera. Da bi se sekvencijalni algoritam na efikasan nain realizovao u
hardveru, neophodno je raspolagati konstrukcijama koje e na neposredniji nain
realizovati koncept promenljivih i sekvencijalnog izvrenja. RTL metodologija slui upravo
ovoj svrsi, a njene kljune postavke su sledee:

Registri se koriste kao zamena za promenljive.

Hardver koji obavlja operacije sadrane u algoritmu (kao npr. +, -, /, ...) realizuju se u
vidu kombinacionih blokova.

Hardver koji regulie redosled izvrenja operacija realizuje se u vidu upravljake


jedinice.

U RTL projektovanju, registri se koriste kao memorijski elementi opte namene za uvanje
meurezultata izraunavanja, ba kao i promenljive u algoritmu. Primera radi, razmotrimo
kako bi se jedna tipinu naredbu iz pseudo kda, a = a + b, realizovala u hardveru.
Promenljivama a i b, u hardveru odgovaraju registri a_reg i b_reg. Naredba se izvrava
tako to se sadraji registara a_reg i b_reg sabiraju i zbir upisuje nazad u a_reg pod
dejstvom prve sledee rastue ivice taktnog signala. Kad se algoritam realizuje u hardveru,
sve manipulacije nad podacima se ostvaruju pomou namenski realizovanog hardvera. Na
primer, za realizaciju prethodne naredbe neophodan je sabira.
Hardver za manipulaciju nad podacima, zajedno sa registrima i strukturom koja ih povezuje
zajednikim imenom se zove staza podataka. Imajui u vidu da algoritam definie
sekvencu operacija, neophodan je i hardver koji e regulisati kada i koju operaciju treba
izvriti u stazi podataka. Ova struktura se naziva upravljakom jedinicom i realizuje se u
vidu konanog automata. Stanja konanog automata nameu redosled algoritamskih
koraka, dok viestruki prelazi izmeu stanja imitiraju grananja i petlje iz algoritma.

238

RTL projektovanje

9.1.1. Naredba registarskog prenosa


Naredba registarskog prenosa je osnovna operacija u RTL projektovanju, koja odgovara
naredbi dodele iz algoritma. Za zapisivanje ove operaciju koristi se sledea notacija:
rdest f(rsrc1, rsrc2, ..., rsrcn)
Registar s leve strane znaka , rdest, je odredini registar, dok su registri s desne strane,
rsrc1, rsrc2, ..., rsrcn, izvorni registri naredbe registarskog prenosa. (Tanije, rsrc1, rsrc2, ..., rsrcn
oznaavaju izlaze, tj. sadraje odgovarajuih izvornih registara). Funkcija f predstavlja
operaciju koju treba izvriti. Ova funkcija manipulie sadrajima izvornih registara i
eventualno podacima koji potiu sa spoljanjih ulazima u sistem, a njen rezultat se upisuje
u rdest pod dejstvom rastue ivice taktnog signala. Funkcija f moe biti bilo koja funkcija
koja se moe realizovati u hardveru u vidu kombinacione mree. Zapazimo da notacija
ne postoji u VHDL-u, ali e biti koriena u ASM dijagramima za oznaavanje naredbi
registarskog prenosa.
Pr. 9-1 Tipine naredbe registarskog prenosa
Slede primeri nekoliko tipinih naredbi registarskog prenosa:
Naredba
r1
rr
r r << 2
r0 r1
nn+1
s a2 + b2

Opis
U registar r se upisuje konstanta 1.
U registar r se upisuje njegov tekui sadraj. Sadraj registra r ostaje nepromenjen.
Sadraj registra r se pomera za 2 bitske pozicije ulevo, a zatim upisuje u isti registar
Sadraj registra r1 se upisuje (prenosi) u registar r0.
Sadraj registra n se uveava za 1 i rezultat se upisuje u isti registar.
Zbir kvadrata sadraja registra a i b se smeta u registar s.

Osnovna razlika izmeu promenljivih iz algoritma i registra je u tome to se upis u registar


inicira signalom takta, dok se upis u promenljivu obavlja istog momenta kada je njena nova
vrednost izraunata. U hardveru, naredba registarskog prenosa rdest f(rsrc1, rsrc2, ..., rsrcn)
se izvrava na sledei nain:
1.
2.

3.

U trenutku rastue ivice taktnog signala, na izlazima izvornih registara, rsrc1, rsrc2, ...,
rsrcn, dostupne su nove vrednosti.
Kombinaciona mrea koja realizuje funkciju f izraunava novi rezultat, koji se s njenog
izlaza mree prenosi do ulaza u odredini registar rdest. (Pretpostavka je da
propagaciono kanjenje kombinacione mree ne traje due od taktnog perioda.)
U trenutku prve sledee rastue ivice taktnog signala, rezultat funkcije f se upisuje u
registar rdest.

Hardverska realizacija pojedinane naredbe registarskog prenosa je gotovo trivijalna.


Potrebno je konstruisati funkciju f korienjem kombinacionih komponenti, a zatim
povezati njene ulaze sa izlazima izvornih registara i njen izlaz sa ulazom odredinog
registar.
Pr. 9-2 Realizacija naredbe registarskog prenosa
Na Sl. 9-2(a) je prikazan blok dijagram hardverske realizacije naredbe registarskog prenosa
r1 r1 + r2, a na Sl. 9-2(b) vremenski dijagrami koji ilustruju rada ovog kola.
Promenljivama r1 i r2 odgovaraju registri r1_reg i r2_reg. Prva rastua ivica takta upisuje
u registar r2_reg novu vrednost, koja se neposredno posle toga pojavljuje na izlazu ovog
registra. U tom trenutku zapoinje izraunavanje r1 + r2, a rezultat je dostupan na izlazu

RTL metodologija projektovanja

239

sabiraa (signal r1_next) nakon kanjenja Tadd. Iako je rezultat izraunat i prisutan na ulazu
registra r1_reg, sadraj ovog registra ostaje nepromenjen sve do sledee rastue ivice
taktnog signala. Takoe, treba zapaziti da kolo sa Sl. 9-2(a) u svakom taktnom ciklusu
obalja ne samo jednu, ve dve naredbe registarskog prenosa:
r1 r1 + r2, i
r2 din

(a)

(b)

Sl. 9-2 Realizacija naredbe registarskog prenosa r1 r1 + r2: (a) blok dijagram; (b) vremenski
dijagram. Napomena: Tadd propagaciono kanjenje sabiraa; Toq kanjenje flip-flopa.

9.1.2. Staza podataka


Svaki algoritam se sastoji iz vie koraka, a u neku promenljivu, odnosno odredini registar,
ne mora uvek da se upisuje isti podatak u svakom koraku. Na primer, u prvom koraku
nekog algoritma, u registar r1 se moe upisati vrednost 1; u sledea dva koraka r1 se moe
najpre sabrati sa r2, a zatim uveati za 1 i konano u etvrtom koraku, sadraj registra r1
moe ostati neizmenjen:
1. r1 1
2. r1 r1 + r2
3. r1 r1 + 1
4. r1 r1
Uoavamo da se r1 koristi kao odredini registar u sve etiri naredbe registarskog prenosa.
To znai da e prilikom hardverske realizacije biti neophodan multiplekser za izbor jednog
od etiri podatka koji e u datom koraku biti upisan u r1. Na Sl. 9-3 je prikazan
odgovarajui blok dijagram. Uoimo da se izbor jedne od etiri operacije vri posredstvom
selekcionog signala multipleksera.

Sl. 9-3 Realizacija etiri naredbe registarskog prenosa sa istim odredinim registrom.

240

RTL projektovanje

Kao to u tipinom algoritmu ne postoji samo jedna ve vie primenljivih, tako i u tipinom
RTL sistemu ne postoji samo jedan, ve vie odredinih registara, Ukoliko opisanu
proceduru ponovimo za svaki odredini registar, kreiraemo strukturu koja e biti u
mogunosti da obavlja sve operacije (naredbe registarskog prenosa) sadrane u polaznom
algoritmu. Takva jedna hardverska struktura se naziva stazom podataka.
Pr. 9-3 Paralelno izvrenje operacija
Za razliku od softvera, gde se operacije izvravaju jedna po jedna, u hardveru moe biti
izvrena jedna ili vie operacija u svakom taktnom ciklusu. Na primer, razmotrimo
algoritam koji koristi dve promenljive, x i y, i sastoji se iz 5 sukcesivnih koraka u kojima se
redom obavljaju sledee operacije:
x
y
y
y
x

=
=
=
=
=

A;
B;
x + y;
y + 1;
x + 1;

Najpre se u promenljive x i y upisuju ulazni podaci, A i B, zatim se y prvo sabira sa x, a


onda i uveava za 1. Konano, u poslednjem koraku, x se uveava za 1. Za hardversku
realizaciju opisanog postupka izraunavanja potrebna su dva registra: rx, za uvanje
vrednosti promenljive x, i ry, za promenljivu y. Svaka operacija iz pseudo kda postaje
naredba registarskog prenosa, koja se izvrava tokom jednog taktnog ciklusa:
ciklus
ciklus
ciklus
ciklus
ciklus

1:
2:
3:
4:
5:

rx
ry
ry
ry
rx

A;
B;
rx + ry;
ry + 1;
rx + 1;

Primetimo da su naredbe koje su predviene za izvrenje u prva dva taktna ciklusa


meusobno nezavisne i da ne postoji razlog (osim mehanikog prepisivanja pseudo kda)
zato ne bi mogle biti izvrene u istom taktnom ciklusu. To isto vai i za naredbe iz 4. i 5.
ciklusa. Ove dve naredbe su nezavisne zato to ni jedna od njih ne koristi rezultat one druge
kao svoj ulazni argument. Nakon jedne ovakve analiza dolazimo do sledee preraspodele
operacija po taktnim ciklusima:
ciklus 1: rx A; ry B;
ciklus 2: ry rx + ry;
ciklus 3: ry ry + 1; rx rx + 1;

Dakle, u prvom taktnom ciklusu, u registre rx i ry se istovremeno upisuju ulazne vrednosti.


Drugi taktni ciklus je posveen sabiranju sadraja dva registra, dok se u treem, sadraji
registra rx i ry inkrementiranju (ponovo, istovremeno). Zahvaljujui uvedenom
paralelizmu, broj taktnih ciklusa je smanjen sa 5 na 3.
Za obavljanje operacija sadranih u razmatranom algoritmu potrebni su: jedan sabira (za
operaciju +) i jedan inkrementer (za operaciju +1). Primetimo da je dovoljan samo jedan
inkrementer bez obzira na dve operacije inkrementiranja u 3. ciklusu. Sabira koji se u 2.
ciklusu koristi za sabiranje rx i ry, u 3. ciklusu je slobodan i moe se koristiti za
inkrementiranje bilo rx bilo ry (usvojiemo da se u 3. ciklusu sabira koristi za ry+1). Osim
registara i kombinacionih jedinica, za konstrukciju staze podataka takoe su neophodni
multiplekseri, pomou kojih e komponente staze podataka biti meusobno povezane. Na

241

RTL metodologija projektovanja

primer, u 1. ciklusu, u registar rx se u upisuje A, u 2. ciklusu njegova sopstvena vrednost, a


u 3. ciklusu vrednost sa izlaza inkrementera. Slino, u registar ry se u tri ciklusa upisuju
vrednosti iz dva razliita izvora: u 1. ciklusu to je konstanta 0, a u 2. i 3. ciklusu vrednost sa
izlaza sabiraa. Takoe, bie potreban i multiplekser za izbor jednog od operanda sabiraa
budui da se on koristi za dve razliite operacije, rx+ry i ry+1. Imajui u vidu jednu ovakvu
analizu, dolazimo do strukture staze podataka sa Sl. 9-4(a). Operacije koje e biti izvrene u
stazi podataka odreene su vrednostima selekcionih signala s0, s1 i s2, na nain kako je to
navedeno u tabeli sa Sl. 9-4(b).

Ciklus
1.

Operacije
rx A
ry B

s0
00

s1
0

s2
x

2.
3.

ry rx + ry
ry ry + 1
rx rx + 1

10
01

1
1

0
1

(a)

(b)

Sl. 9-4 Staza podataka iz Pr. 9-3: (a) struktura staze podataka; (b) tabela operacija.

9.1.3. Upravljaka jedinica


Da bi RTL sistem bio kompletan, osim staze podataka koja realizuje sve operacije sadrane
u algoritmu, neophodan je i mehanizam koji e upravljati radom stazom podataka tako to
e birati kada i koju operaciju treba izvriti. Takav jedan mehanizam se naziva
upravljakom jedinicom, koja shodno svom internom statusu selektivno inicira izvrenje
operacija u stazi podataka. Upravljaka jedinica se realizuje u vidu namenski
projektovanog konanog automata. Svakom stanju konanog automata se pridruuju
operacije koje u datom taktnom ciklusu treba izvriti u stazi podataka. Na taj nain,
prolaskom kroz stanja, konani automat moe da nametne eljenu sekvencu akcija. Nakon
ispitivanja ulaza, konani automat moe nastaviti dalje razliitim putanjama i tako izmeniti
sekvencu akcija, to se koristi za realizaciju grananja i petlji iz algoritma.
Pr. 9-4 Upravljaka jedinica za stazu podataka iz Pr. 9-3
Staza podataka sa Sl. 9-4(a) iako u mogunosti da obavi sve operacije sadrane u algoritmu
iz Pr. 9-3, ipak nije u sanju da samostalno sprovede celokupno izraunavanje. Da bi ovaj
RTL sistem bio kompletan, stazu podataka je neophodno proiriti upravljakom jedinicom,
kao na Sl. 9-5(a). Zadatak upravljake jedinice je da u tri uzastopna taktna ciklusa postavlja
selekcione signale staze podataka shodno tabeli operacija sa Sl. 9-4(b). Dodatno,
upravljaka jedinica treba da obezbedi i nain za interakciju korisnika i sistema. Iz tog
razloga, uvedena su dva nova signala, ulazni upravljaki signal start i izlazni statusni signal
rdy. Od korisnika se oekuje da nakon to postavi vrednosti koje eli da procesira na ulaze
A i B, aktivira signal start i na taj nain naloi sistemu da pone s radom. Na izlazu rdy je
prisutna 0 sve dok traje izraunavanje. Onda kad sistem zavri s radom izlaz rdy ponovo
dobija vrednost 1, to predstavlja indikaciju korisniku da sa izlaza podataka, rx i ry, moe
da preuzme rezultat. ASM dijagram koji opisuje rad upravljake jedinice prikazan je na Sl.
9-5(b). U stanju C0 sistem eka da bude aktiviran, dok stanja C1, C2 i C3 odgovaraju trima
algoritamskim koracima.

242

RTL projektovanje
C0
rdy = 1
s0 = 00;s1 = 0
s2 = 0

start

1
C1
rdy = 0
s0 = 00;s1 = 0
s2 = 0
C2
rdy = 0
s0 = 10;s1 = 1
s2 = 0
C3
rdy = 0
s0 = 01;s1 = 1
s2 = 1

(a)
(b)
Sl. 9-5 RTL sistem koji realizuje algoritam iz Pr. 9-3: (a) blok dijagram sistema; (b) ASM
dijagram upravljake jedinice.

9.1.4. Blok dijagram RTL sistema


Na Sl. 9-6 prikazan je uopteni blok dijagram RTL sistema. Kao to se moe videti, sistem
je podeljen na dva podsistema, upravljaku jedinicu i stazu podataka. Staza podataka
sadri: (a) registre neophodne za uvanje vrednosti promenljivih koje se javljaju u
naredbama registarskog prenosa; i (b) kombinacionu logiku neophodnu za obavljanje
izraunavanja specificiranih naredbama registarskog prenosa. Iako sadri sve to je
neophodno za izraunavanje i memorisanje vrednosti promenljivih, staza podataka nije u
stanju da samostalno sprovede sekvencu operacija na nain kako je to predvieno
algoritmom. To je razlog postojanja upravljake jedinice, iji je zadatak da u svakom
taktnom ciklusu naloi stazi podataka ta da uradi. Drugim reima, u upravljakoj jedinici
je ugraeno ponaanje sistema, dok se resursi neophodni za obavljanje svih potrebnih
izraunavanja i memorisanje podataka nalaze u stazi podataka. Upravljaka jedinica izdaje
komande stazi podataka tako to postavlja interne upravljake signale. Staza podataka
obavlja aktivnosti koje su naloene komandom i kao odgovor generie interne statusne
signale. Upravljaka jedinica ispituje statusne signale koje dobija od staze podataka i na
bazi njihove vrednosti i vrednosti upravljakih i statusnih ulaza, donosi odluke koje
odreuju dalji tok rada sistema.

Sl. 9-6 Struktura RTL sistema.

RTL metodologija projektovanja

243

9.1.5. ASMD dijagram


Konani automat upravljake jedinice se moe lako proiriti na nain da opisuje ne samo
rad upravljake jedinice ve rad celokupnog sistema (upravljaka jedinica + staza
podataka). Dovoljno je da se u svakom stanju automata naznae naredbe registarskog
prenosa koje se u stazi podataka izvravaju u tom stanju. Radi preglednijeg prikaza, za ovu
namenu se koristi ASM dijagram (a ne dijagram stanja), a jedna takva predstava se naziva
ASMD dijagramom (prema eng. ASM with Datapath).
Na Sl. 9-7(a) je prikazan jedan segment ASMD dijagrama. U bloku stanja S1 navedene su
dve linije. Prva, r1 r1 + r2, ukazuje na naredbu registarskog prenosa koja se tokom
stanja S1 izvrava u stazi podataka, dok druga, y, ukazuje da je u ovom stanju aktivan
istoimeni izlazni signal upravljake jedinice. Iako naveden kao odredini registar u naredbi
registarskog prenosa, r1 se ne menja u stanju S1, ve zadrava vrednost koju je imao u
momentu ulaska u ovo stanje. Rezultat izraunavanje izraza r1 + r2 bie upisan u r1 u
trenutku prelaska iz stanja S1 u stanje S2, a nova vrednost registra r1 postae dostupna tek
kad ASMD pree u stanje S2!

(a)
(b)
Sl. 9-7 Naredba registarskog prenosa u funkcionalnom ASM dijagramu: (a) segment ASM
dijagrama; (b) vremenski dijagram.

Na Sl. 9-7(b) je prikazan odgovarajui vremenski dijagram. Zapazimo da izraunavanje r1


+ r2 poinje odmah nakon to ASMD ue u stanje S1, ali da izlaz odredinog registra r1
ostaje nepromenjen sve do kraja ovog stanja. S druge strane, izlazni signal y je aktivan za
sve vreme dok je sistem u stanju S1, ba kao da se radi o regularnom ASM dijagramu. Sa
sledeom rastuom ivicom taktnog signala, sistem prelazi u stanje S2, a u registar r1 se
upisuje nova vrednost. Uoimo da je izlaz y neaktivan u stanju S2.
RTL sistemi su sinhroni sistem, odnosno spadaju u kategoriju digitalnih sistema kod kojih
se svi registri taktuju istim, sistemskim taktom. U sinhronom sistemu, u svakom taktu
obavlja se upis u sve registre budui da se rad registra ne moe zabraniti ili onemoguiti. U
konkretnom primeru to znai da se r1 aurira ne samo pri prelasku iz stanja S1 u stanje S2,
ve i prilikom svakog prelaska iz jednog u neko drugo stanje, tj. ak i onda kad to nije
potrebno. Onda kada sadraj registara treba da ostane nepromenjen, u registar se zapravo
upisuje njegova sopstvena vrednost, npr. r1 r1. Meutim, radi preglednosti, ove
operacije se ne navode u ASMD dijagramu. Drugim reima, ako se registar r ne pojavljuje
kao odredini registar ni jedne naredbe registarskog prenosa iz nekog stanju,
podrazumevaemo da se u tom stanju obavlja operacija r r.

244

RTL projektovanje

Premda ASMD dijagram nalikuje softverskom dijagramu toka, oblasti primene i


interpretacija ova dva tipa dijagrama se razlikuju. Dok softverske dijagrame toka koriste
programeri kao poetni korak u procesu razvoja programa, ija je namena da omogui
izvrenje datog algoritam na raunarskoj maini, dotle ASMD dijagrame koriste projektanti
digitalnog hardvera, kao poetni korak u procesu realizacije datog algoritma u hardveru. U
pogledu interpretacije, razlika izmeu softverskog dijagrama toka i ASMD dijagrama
ogleda se prvenstveno u tome kako protok vremena utie na rad algoritma. Raunar
izvrava program instrukciju-po-instrukciju; svaka instrukcija se obavlja u toku jednog
instrukcijskog ciklusa, pri emu instrukcijski ciklusi mogu biti razliitog trajanja. Iz tog
razloga, softverski dijagram toka ne sadri informaciju o tanom iznos vremena koje je
potrebno da bi se izvrio jedan algoritamski korak, ve samo jednoznano odreuje tok
(sekvencu) algoritamskih koraka. Programer je svestan injenice da izvrenje programa na
raunaru zahteva neko konano vreme, koje zavisi od broja i sloenosti operacija koje treba
izvriti, ali da sam tok algoritma i konaan rezultat ne zavise od vremena izvrenja
pojedinanih operacija. S druge strane, rad RTL sistema je iniciran taktnim signalom, a u
toku jednog taktnog perioda sistem moe da obavi jednu ili vie operacija. Naime, u radu
RTL sistema ispoljava se paralelizam. Stoga, osnovna pretpostavka kod ASMD dijagrama
jeste u sledeem: svaki algoritamski korak (tj. blok stanja) traje isto, fiksno vreme (jednako
taktnom periodu), a sve operacije obuhvaene jednim stanjem izvravaju se istovremeno (u
paraleli). Druga napomena se odnosi na interpretaciju naredbi registarskog prenosa. Uvek
treba imati na umu da naredba registarskog prenosa ne definie vrednost koju registar,
naveden s leve strane znak , dobija u datom stanju, ve vrednost koja e biti upisana u taj
registar sledeom aktivnom ivicom taktnog signala, tj. u trenutku naputanja datog stanja.

9.2. Postupak projektovanja


Uopteno govorei, postoje dva osnovna pristupa reavanju problema iz oblasti
projektovanja digitalnih sistema: odozdo-navie (prema eng. bottom-up) i odozgonanie (prema eng. top-down). Projektant koji primenjuje pristup odozdo-navie
zapoinje rad reavanjem nekog izdvojenog detalja celokupnog problema. Nakon toga,
projektant prelazi na neki drugi detalj koji ne mora obavezno biti u vezi s prvim. Konano,
projektant dolazi u situaciju da nezavisno reene delove problema spaja u konano reenje.
Meutim, pojedinano reavani delovi se obino ne uklapaju idealno jedni s drugim,
naroito ako se radi o problemima veeg obima. To je posledica samog pristupa koji
fokusiranjem na izdvojene detalje odvlai panju projektanta sa slike o celovitosti reenja.
Konaan rezultat je po pravilu takav da se najvei deo projektantskog vremena troi na
uklapanje nezavisnih detalja, to esto zahteva i prepravku ve reenih delova opteg
problema.
Projektant koji se pridrava pristupa odozgo-nanie zapoinje rad na problemu razradom
globalnog plana, to podrazumeva sveobuhvatno sagledavanje problema, razradu strategije
reavanja problema, razlaganje problema na potprobleme manjeg obima i definisanje
odnosa izmeu pojedinih potproblema. Drugim reima, projektant se trudi da polazni
problem, koji je obino isuvie obiman da bi se reio u jednom dahu, razloi na vei broj
jasno definisanih problema manjeg obima. Pri tom projektant ne reava odmah uoene
potprobleme, ve ih tretira kao apstraktne sklopove (crne kutije) koje meusobno uklapa i
povezuje. U drugoj fazi projektovanja, projektant nastavlja s razradom i reavanjem
uoenih potproblema. Pri tom projektant moe slobodno da se usredsredi na svaki
pojedinani, prethodno definisani potproblem, bez brige oko njihovog uklapanja, zato to je

Postupak projektovanja

245

detalje koji se tiu spajanja podeljenih delova razradio jo u prvoj fazi projekta i time ih
ugradio u definiciju svakog pojedinanog potproblema.
Projektanti-poetnici obino ne doivljavaju projektovanje odozgo-nanie kao prirodan
pristup. Prirodno je da neko ko nema iskustva u projektovanju hardvera bude zabrinut
detaljima koji se odnose na realizaciju. Pristup odozgo-nanie zasnovan je na iskustvu i
samopouzdanju projektanta, jer samo neko ko je ranije reavao detalje sline onim koji se
javljaju u tekuem problemu, moe u toku razrade globalnog plana ignorisati te detalje
siguran u to da e moi da ih rei onda kad pree na realizaciju svog plana.
U kontekstu RTL projektovanja, pristup odozgo-nanie podrazumeva sledee tri faze:

Opis ponaanja

Razrada

Realizacija

9.2.1. Opis ponaanja


Opis ponaanja se smatra najvanijom fazom celokupnog procesa projektovanja RTL
sistema. U ovoj fazi, sistem se opisuje na algoritamskom nivou, npr. u vidu ASMD
dijagrama. Blok dijagram koji specificira ulazne i izlazne portove sistema, tj. interfejs
sistema, jedina je struktura koja postoji u ovoj fazi projektovanja. Drugim reima, u fazi
opisa ponaanja, sistem se tretira kao crna kutija s definisanim ulazima i izlazima koja se
ponaa na nain kako je opisano algoritmom (odnosno ASMD dijagramom). Tipino,
projektant polazi od algoritma koji je predstavljen u obliku pseudo kda, a koji potom
prevodi u ekvivalentan ASMD dijagram. Tokom ove konverzije, projektant, po pravilu, ne
kreira samo jedan ASMD dijagram, ve istrauje razliite opcije i varijante moguih
reenja, vrednujui ih u skladu s unapred postavljenim kriterijumima (brzina rada,
hardverska sloenost i sl.). Napomenimo da ASMD dijagram, iako opis visokog nivoa
apstrakcije, prua dovoljno informacija na osnovu kojih je mogue odrediti broj taktnih
ciklusa potrebnih za obavljanje pojedinih aktivnosti i grubo proceniti sloenost hardverske
realizacije, npr., na osnovu broja registara i broja i tipova aritmetikih i logikih operacija.
Interfejs. Pored algoritma koji definie funkciju sistema, opis ponaanja sadri i
specifikaciju interfejsa. Kao pojam, interfejs oznaava mesto na kome se dva nezavisna
sistema susreu ili spajaju (ili sredstvo koje koriste) radi zajednikog dejstva ili meusobne
komunikacije i koordinacije. U toku rad, digitalni sistem interaguje sa okruenjem koje
mogu da ine drugi digitalni sistemi, nedigitalni ureaji, kao to su prekidai ili senzori, pa
ak i ovek koji posredstvom odgovarajuih ulazno-izlaznih ureaja komunicira sa
sistemom. Reiemo da se okruenje RTL sistema sastoji od nezavisnih aktora, koji
interaguju kako sa digitalnim sistemom, tako i izmeu sebe. S take gledita projektanta
RTL sistema, detalji koji se tiu rada i implementacije aktora nisu od znaaja. Za
projektanta je bitno da poznaje informacije koje se razmenjuju izmeu sistema i aktora kao
i nain na koji aktori komuniciraju sa sistemom, kako bi mogao da ih ugradi u specifikaciju
interfejsa. Za razliku od projektanta RTL sistema, programeri imaju na raspolaganju
standardne, sofisticirane korisnike interfejse (tastatura, mi, monitor), koji olakavaju
korisnicima da interaguju sa programom. Korisniki interfejsi ovog tipa reavaju dva
osnovna problema koji se javljaju uvek kada dva aktora pokuavaju da komuniciraju: (a)
koji podaci se razmenjuju u toj komunikaciji i (b) kada i kako se obavlja prenos
informacije. Prilikom projektovanja hardvera javljaju se isti ovi problemi, ali sada je
odgovornost na projektantu digitalnog sistema da ih rei.

246

RTL projektovanje
statusni/
upravljacki
ulazi

..
.

ulazi
podataka

..
.

RTL
SISTEM

..
.

statusni/
upravljacki
izlazi

..
.

izlazi
podataka

rst
clk

Sl. 9-8 Interfejs RTL sistema.

Specifikacija interfejsa RTL sistema ukljuuje specifikaciju ulaza i izlaza (tj. portova)
proirenu pravilima za korienje sistema od strane korisnika. U optem sluaju, RTL
sistem razmenjuje s aktorima iz okruenja dva tipa ulaznih i izlaznih informacija: (a)
upravljaki i statusni signali i (b) podaci (Sl. 9-8). Upravljaki i statusni signali su najee
jednobitni, dok su podaci viebitni signali. Aktor inicira neku akciju sistema posredstvom
upravljakih ulaza, dok preko ulaznih statusnih signala obavetava sistem o svom
trenutnom stanju. Putem statusnih ulaza sistem dobija odgovor na pitanja tipa da-ne, kao
to je npr.: da li je prekida zatvoren? U ASMD dijagramu koji opisuje ponaanje
sistema, imena statusnih i upravljakih ulaza se javljaju samo unutar blokova grananja, tj.
koriste se za donoenje direktnih odluka, ali ne i za neka druga izraunavanja. Slino,
sistem koristi upravljake izlaze da bi inicirao neku akciju aktora, a statusne da bi obavestio
okruenje o svom trenutnom stanju (npr. izraunavanje je zavreno). Klasifikacija na
upravljake i statusne signale nije stroga, a projektant ima slobodu da klasifikaciju obavi na
nain koji smatra najprikladnijim u kontekstu konkretnog problema. Ulazi podataka imaju
istu ulogu kao ulazne promenljive kod konvencionalnih programskih jezika, tj. koriste se za
prosleivanje sistemu informacije koju on treba da obradi. U ASMD dijagramu ulazi
podataka se javljaju samo s desne strane naredbi registarskog prenosa i/ili uslova u
blokovima grananja. Sistem koristi izlaze podataka da bi predao okruenju obraenu
informaciju (analogno izlaznim promenljivama iz programskih jezika). Vrednost koja se
postavlja na izlaz podataka uvek potie iz nekog internog registra. Dodatno, svaki sinhroni
digitalni sistem poseduje jo dva obavezna signala: signal takta, clk, i signal resetovanja,
rst, kojim se sistem postavlja u poetno stanje. Ova dva signala se obino ne crtaju, jer se
smatraju podrazumevanim.
Pr. 9-5 Interfejs sekvencijalnog delitelja
Na Sl. 9-9(a) je prikazan blok dijagram sekvencijalnog delitelja. Ovo kolo obavlja
operaciju deljenja q=x/y, gde su x i y neoznaeni celi brojevi. Rad delitelja se startuje
signalom start. Po zavrenom deljenju, sistem postavlja rezultat na izlaz podataka q i
aktivira statusni izlaz rdy.
Osim ulaza i izlaza, opis interfejsa moe da sadri i neka dodatna ogranienja koja se
odnose na interakciju sistema i korisnika. Na primer, mogu se postaviti sledei zahtevi:
1. Pre nego to aktivira upravljaki ulaza start (start=1), korisnik treba da postavi
deljenik i delilac na ulazne portove podatak x i y. Korisnik ne sme da menja x i y za
vreme dok traje izraunavanje (tj. dok je rdy=0).
2. Trajanje signala start mora biti tano jedan taktni period.
3. Korisnik je u obavezi da pre iniciranja sledeeg izraunavanja eka barem dva taktna
ciklusa nakon to je sistem zavrio prethodno izraunavanje.
Globalni oblik ASMD dijagrama koji opisuje ponaanje korisnikog interfejsa

Postupak projektovanja

247

sekvencijalnog delitelja prikazan je na Sl. 9-9(b). Za sada, ASMD dijagram ima samo jedno
stanje, PASIVNO, u kome eka na aktiviranje signala start i pri tom dri na izlazu rdy
vrednost 1. Rdy=1 predstavlja indikaciju okruenju da je sistem spreman za rad. U
nastavku projektovanja, oblak iz ovog ASMD dijagramu bie zamenjen blokovima stanja,
grananja i uslovnih izlaza, uz pomo kojih e biti opisan tok algoritma za deljenje.
Meutim, signal rdy nee figurisati ni u jednom od tih stanja. To znai da u prvom
narednom taktnom periodu nakon to korisnik aktivira signal start, signal rdy dobija
vrednost 0, a onda zadrava ovu vrednost za sve vreme izraunavanja kolinika. Nakon
to kolinik bude izraunat i ASMD se vrati u stanje PASIVNO, signal rdy e ponovo
dobiti vrednost 1.

(a)

(b)

Sl. 9-9 Sekvencijalni delitelj: (a) blok dijagram; (b) ASM opis ponaanja interfejsa.

Kao to se moe zakljuiti iz prethodnog primera, specifikacija interfejsa ukljuuje


specifikaciju ulaza i izlaza, proirenu pravilima za korienje sistema od strane korisnika.
Moe se rei da interfejs predstavlja neku vrstu ugovora izmeu dva aktora kojeg se moraju
pridravati obe strane kako bi krajnji rezultat njihove interakcije bio korektan. Prijateljski
korisnik je onaj koji se u radu sa sistemom pridrava svih navedenih ogranienja.
Pr. 9-6 Handshake interfejs
Handshake interfejs, kao pojam, ukazuje na princip koji se esto koristi za prenos podataka
izmeu digitalnih sistema. Handshake (u prevodu, rukovanje) definie nain koordinacije dva
sistema koji se ostvaruje posredstvom dva signala, req (od request - zahtev) i ack (od
acknowladge - potvrda) (Sl. 9-10(a)). Jedan sistem igra ulogu predajnika, a drugi prijemnika.
Aktivnosti predajnika i prijemnika tokom jednog ciklusa prenosa podatka prikazani su
vremenskim dijagramom sa Sl. 9-10(b). Predajnik postavlja podatak koji eli da preda
prijemniku na magistralu bus i aktivira signal req (1). S druge strane, prijemnik eka na ovaj
zahtev i po njegovom prijemu (req=1), prihvata podatak sa magistrale bus i posredstvom
signala ack potvruje prijem (ack=1, (2)). Nakon to je primio potvrdu, predajnik deaktivira
signal req (3), kako bi se pripremio za sledei prenos (1). Uslov req=0 je znak prijemniku
da deaktivira signal potvrde, (ack=0, (4)) i nastavi da eka na novi zahtev. Na Sl. 9-10(c) i
(d) su prikazani delimini ASMD dijagrami predajnika i prijemnika, koji zajedno opisuju rad
handshake interfejsa.

248

RTL projektovanje

(a)

(b)
R1

req
1
Rin <- bus
R2
ack

req
0

(c)

(d)

Sl. 9-10 Handshake interfejs: (a) blok dijagram; (b) vremenski dijagram; (c) ASMD dijagram
predajnika; (d) ASMD dijagram prijemnika.

Konverzija algoritma u ASMD dijagram. Proces projektovanja RTL sistema obino


poinje kreiranjem algoritma visokog nivoa. Algoritam se pie u obliku pseudo kda ili
dijagrama toka i kao takav zapravo predstavlja softversko reenje datog problema. Osnovna
pretpostavka kod softverskog algoritma je da se algoritamski koraci izvravaju jedan za
drugim, strogo sekvencijalno. Moe se desiti da su dve ili vie uzastopnih operacija
meusobno nezavisne (u smislu da ni jedna od njih kao operand ne koristi rezultat bilo koje
druge) i da bi usled toga mogle biti izvravane istovremeno (paralelno). Meutim, pomou
softverskog algoritma nije mogue izraziti paralelizam. Zbog toga, softverski algoritam nije
pogodno sredstvo za opis ponaanja RTL sistema.
RTL sistem se pobuuje taktnim signalom i u mogunosti je da izvri jednu ili vie
elementarnih operacija u svakom taktnom periodu. Ovakav model izraunavanja, koji
dozvoljava paralelizam i namee diskretizaciju vremena, efikasno se predstavlja ASMD
dijagramom. Kao to je ve reeno, ASMD dijagram definie stanja RTL sistema i
operacije koje se izvravaju u svakom stanju. Svako stanje traje jedan taktni period, a sve
operacije pridruene jednom stanju izvravaju se u paraleli. Meutim, algoritam je obino
tee predstaviti u obliku ASMD dijagrama nego u obliku softverskog dijagrama toka ili
pseudo kda. Iz tog razloga, opis ponaanja RTL sistema po pravilu poinje kreiranjem
softverskog algoritma koji se potom prevodi u ekvivalentan ASMD dijagram.

Postupak projektovanja

249

Naalost, direktno prevoenje softverskog algoritma u ASMD dijagram, tako to bi se


sekvencijalni blokovi iz softverskog algoritma prosto zamenili blokovima stanja u ASMD
dijagramu, nije korektno. Na taj nain bi se u potpunost ponitila sekvencijalnost u
izvrenju naredbi, pa bi rezultat rada algoritma bio pogrean u sluajevima kada u
sekvencijalnom bloku postoje meusobno zavisne naredbe. Prilikom prevoenja, s jedne
strane je neophodno rasporediti zavisne operacije u razliita stanja, da bi konverzija bila
korektna, dok je s druge strane poeljno spojiti nezavisne operacije u ista stanja, kako bi se
kroz paralelizam postigle to bolje performanse. To nije uvek jednostavan zadatak, kao to
e biti ilustrovano u primerima koji slede.
Pr. 9-7 Paralelizacija sekvencijalnog kda
Na Sl. 9-11(a) je prikazan sekvencijalni blok iz nekog softverskog dijagrama toka. Blok
sadri tri sekvencijalne naredbe. Zapazimo da zavisnost postoji samo izmeu prve i druge
naredbe, dok je trea nezavisna od obe prethodne. Zbog postojanja zavisnosti izmeu
naredbi, zamena ovog sekvencijalnog bloka jednim blokom stanja nije korektna (Sl.
9-11(b)). Budui da se sve naredbe iz istog bloka stanja izvravaju istovremeno, u drugoj
naredbi se ne bi koristila vrednost promenljive a koja je izraunata u prvoj naredbi bloka,
ve vrednost koju je ova promenljiva imala u momentu ulaska u dato stanje. Reenje gde se
svaka naredba iz sekvencijalnog bloka rasporeuje u posebno stanje ASMD dijagrama
svakako je korektno (Sl. 9-11(c)), jer se naredbe izvravaju jedna za drugom, po redosledu
kao u sekvencijalnom bloku. Meutim, reenje sa Sl. 9-11(c) je previe restriktivno, jer
nepotrebno uvodi posebno stanje za izvrenje tree naredbe. Budui da trea naredba
slobodno moe biti izvravana u isto vreme kad i druga, u mogunosti smo da utedimo
na jednom stanju i da na taj nain skratimo vreme rada sistema za jedan taktni ciklus (kao u
reenju sa Sl. 9-11(d)).
..
.
ab+c
dae
fb-g

..
.

(a)

(b)

(c)

(d)

Sl. 9-11 Konverzija softverskog dijagrama toka u ASMD dijagram: (a) sekvencijalni blok
naredbi; (b) ASMD maksimalni paralelizam, neispravno reenje; (c) sekvencijalni ASMD
dijagram minimalni paralelizam, ispravno reenje; (d) ASMD optimalno reenje.

Poetni korak u procesu konverzije algoritma u ASMD dijagram zasnovan je na sledea


dva jednostavna pravila:
1.
2.

Svaka naredba dodele iz softverskog algoritma prevodi se u naredbu registarskog


prenosa koja se smeta u zaseban blok stanja ASMD dijagrama.
Svaka naredba grananja (npr. if, while) iz softverskog algoritma se prevodi u prazan
blok stanja posle kojeg sledi blok grananja s upisanom relacijom iz softverske naredbe.

Promenljive iz softverskog algoritma tretiraju se kao registri, a naredbe dodele kao naredbe
registarskog prenosa. Pravila 1 i 2 su neophodna da bi se: (a) ouvao sekvencijalni tok
izvrenja algoritma (u svakom taktnom ciklusu izvrava se samo jedna naredbe.) (b)

250

RTL projektovanje

obezbedilo da se u bloku grananja nee koristiti promenljiva ija se vrednost modifikuje u


roditeljskom bloku stanja. (Podsetimo da se blok stanja zajedno sa pridruenim grananjima
izvrava u jednom taktnom periodu, a da se upis novih vrednosti u registre obavlja tek na
kraju taktnog perioda).
Pr. 9-8 ASMD dijagram sekvencijalnog delitelja
U cilju ilustracije postupka konverzije softverskog algoritma u ASMD dijagram,
razmotriemo hardversku realizaciju sekvencijalnog delitelja neoznaenih celih brojeva.
Blok dijagram i interfejs delitelja su specificirani u Pr. 9-5. Premda za ovu namenu postoji
vei broj efikasnih i brzih algoritama, u ovom primeru bie korien trivijalan algoritam
deljenja, koji se zasniva na uzastopnom oduzimanju delioca od deljenika. Rad ovog
algoritma moe se predstaviti u vidu sledeeg pseudo kda:
r1 = x;
r2 = 0;
while (r1 y)
{r1 = r1 y;
r2 = r2 + 1;}

Lako se uoava da nakon izlaska iz while petlje, promenljiva r2 ima vrednost x/y.
Oigledno, radi se o sporom algoritmu, s obzirom na to to se petlja mora izvriti x/y puta.
Uoimo da bi algoritam s promenjenim redosledom naredbi unutar while petlje takoe bio
korektan:
r1 = x;
r2 = 0;
while (r1 y)
{r2 = r2 + 1;
r1 = r1 y;}

Primenom pravila konverzije, dve prethodne varijante softverskog algoritma za deljenje


lako se prevode u ASMD dijagrame koji su prikazani na Sl. 9-12. Jedina razlika izmeu
ova dva ASMD dijagrama je u redosledu stanja C1 i C2 u petlji koja oduzima delilac od
deljenika i rauna kolinik. Sa stanovita algoritma deljenja redosled ove dve operacije je
nebitan, to znai da su oba ASMD dijagrama korektna.
Pregledom dva ASMD dijagrama moe se zapaziti da posle stanja PASIVNO sledi blok
grananja koji ispituje upravljaki ulaz start, to na prvi pogled nije u skladu s drugim
pravilom prevoenja softverskog algoritma u ASMD dijagram. Meutim, testiranje signal
start u stanju PASIVNO ne potie iz softverskog algoritma, ve je deo specifikacije
interfejsa, pa time ne naruava softverske zavisnosti izmeu naredbi registarskog prenosa.
Razmotrimo sada s vie detalja rad ASMD dijagrama sa Sl. 9-12(a). U stanju PASIVNO, u
registar r1 se upisuje vrednost deljenik x. Ovaj upis se ne deava samo jedanput, ve se
ponavlja u svakom taktnom ciklusu za sve vreme dok je sistem u stanju PASIVNO. Onda
kad korisnik postavi start=1, ASMD iz stanja PASIVNO prelazi u stanje INIT, gde e u
registar r2 biti upisana inicijalna vrednost kolinika, tj. 0. Kako se u stanju PASIVNO
vrednost registra r2 ne menja, a pri tom r2 sadri rezultat poslednjeg deljenja, ovako
koncipiran interfejs prua korisniku onoliko vremena koliko mu je potrebno da preuzme
rezultat. Zapazimo da interfejs, a ne algoritam deljenja, zahteva da se r2 inicijalizuje u
posebnom stanju, INIT. Naime, sa stanovita algoritma deljenja, inicijalizacija registra r2 u
stanju PASIVNO bila bi korektna, a pri tom bi i ukupan broj stanja u ASMD dijagramu bio
za jedan manji. Meutim, kod takvog reenja, rezultat deljenja bi bio dostupan za
preuzimanje s izlaza registra r2 samo tokom jednog taktnog ciklusa.

Postupak projektovanja

251

(a)
(b)
Sl. 9-12 ASMD dijagrami sekvencijalnog delitelja: (a) varijanta 1, (b) varijanta 2.

Deo ASMD dijagrama koji izraunava kolinik je petlja koju ine stanja TEST, C1 i C2. U
stanju TEST (tj. u bloku grananja koji je pridruen ovom stanju) ispituje se da li je r1
jednako ili vee od y, a to je isto ono ispitivanje koje postoji u while naredbi softverskog
algoritma. Stanja C1 i C2, u uzastopnim taktnim ciklusima, realizuju, u vidu naredbi
registarskog prenosa, naredbe dodele koje ine telo while petlje. Obe varijante ASMD
dijagrama, rade ispravno i onda kada je x < y. Za x < y, uslov r1y iz bloka grananja u
stanju TEST je netaan i ASMD se vraa u stanje PASIVNO sa nulom u registru r2 (tj.
q=0).
Paljivom analizom ASMD dijagrama sa Sl. 9-12(b), moe se uoiti razlog zato je stanje
TEST neophodno. Ovo stanje, osim ispitivanja uslova r1y, koji mu je pridruen, ne sadri
nikakvu dodatnu aktivnost. U stanju C1, koje prethodi stanju TEST u ovoj varijanti ASMD
dijagrama, izvrava se naredba registarskog prenosa r1r1y. Tanije, tokom stanja C1
obavlja se operacija oduzimanja, r1y, dok se upis razlike u r1 deava tek u momentu
prelasku u stanje TEST. Izostavljanjem stanja TEST, za ispitivanje r1y, koje bi tako
postalo deo stanja C1, koristila bi se stara, a ne nova vrednost registra r1, to bi svakako
dovelo do poremeaja u radu algoritma.
ASMD dijagrami sa Sl. 9-12 izraunavaju kolinik za 4+3q taktnih ciklusa, gde je q=x/y.
Konstantni lan 4 predstavlja zbir: dva taktna ciklusa koja je korisnik u obavezi da provede
u stanju PASIVNO pre nego to ponovo aktivira signal start (zahtev koji potie iz
specifikacije korisnikog interfejsa v. Pr. 9-5), jednog taktnog ciklusa za stanje INIT i jo
jednog taktnog ciklusa za stanje TEST u poslednjoj iteraciji petlje. Faktor 3 potie od tri
stanja po jednoj iteraciji petlje.
Optimizacija ASMD dijagrama. Prethodni primer pokazuje da se softverski algoritam uvek
moe prevesti u korektan ASMD dijagram primenom jednostavnih pravila. Meutim, za
isti polazni algoritam esto postoji vie varijanti ASMD dijagrama, pri emu ona koja se
dobija direktnim prevoenjem ne mora uvek biti i najbolja. Naime, ASMD dijagrami
dobijeni direktnim prevoenjem, premda garantovano ispravni, ne moraju biti i

252

RTL projektovanje

najefikasniji mogui u pogledu broja stanja i broja registara. Glavni uzrok neefikasnosti se
krije u injenici da su u ovako dobijene ASMD dijagrame prenesene sve zavisnosti izmeu
naredbi softverskog programa koje, forsirajui strogo sekvencijalan redosled izvrenja
naredbi registarskog prenosa, onemoguavaju ispoljavanje paralelizma u radu razliitih
delova digitalnog sistema. Zato, ovako dobijene ASMD dijagrame treba koristiti samo kao
polaznu osnovu za detaljniju analizu koja bi imala za cilj pronalaenje optimalne varijante
ASMD dijagrama, to e biti tema nekoliko narednih primera.
Pr. 9-9 Optimizacija sekvencijalnog delitelja - eliminacija stanja TEST
Stanje TEST je uvedeno u ASMD dijagram sekvencijalnog delitelja samo iz razloga
mehanikog (direktnog) prevoenja softverskog algoritma u ASMD. U mnogim
sluajevima, ispitivanje kao to je ono iz stanja TEST moe biti pridrueno nekom drugim
stanju, a da to ne narii korektnost algoritma. Na taj nain, eliminie se jedno stanje, to
ubrzava rad sistema. Podsetimo da blok grananja koji sledi neposredno posle bloka stanja
koji nije prazan, znai da se ispitivanje u bloku grananja i izraunavanja u bloku stanja
izvravaju u paraleli. Iz tog razloga, nije korektno spojiti grananje sa stanjem u kome se
obavlja izraunavanje iji se rezultat koristi u uslovu grananja. Razmotrimo modifikovane
verzije ASMD dijagrama sa Sl. 9-12 u kojima je stanje TEST, prosto, obrisano.
PASIVNO
r1 x
rdy

start

1
INIT
r2 0

r1 y

1
C2

r2 r2 + 1
C1
r1 r1 - y

(a)

(b)

Sl. 9-13 ASMD dijagrami sekvencijalnog delitelja sa izbaenim stanjem TEST: (a) neispravno
reenje; (b) ispravno reenje.

Bez obzira na to to ASMD dijagram sa Sl. 9-13(b) ispravno radi za x<y (jer ne ulazi u
petlju), greka u izraunavanju kolinika se javlja pri xy. Kao ilustraciju pogrenog rada,
razmotrimo rad ovog ASMD dijagrama za x=14 i y=7, pod pretpostavkom da je registar r1
12-bitni (T. 9-1).
U ASMD dijagramu sa Sl. 9-13(b), uslov r1y se ispituje dva stanja: INIT i C1.
Izraunavanje obuhvaeno stanjem INIT modifikuje jedino registar r2, to nema uticaja na
ispitivanje r1y. Meutim, problem postoji u stanju C1, jer izraunavanje obuhvaeno
ovim stanjem modifikuje registar r1, a odluivanje koje sledi zasnovano je upravo na
vrednosti registra r1. Prilikom drugog prolaska kroz stanje C1, koji bi trebalo da je
poslednji budui da je oekivana vrednost kolinika 2, r1 jo uvek sadri vrednost 7 (vrsta
u tabeli T. 9-1 prikazana masnim slovima). Naredba registarskog prenosa r1 r1 y

Postupak projektovanja

253

nalae promenu vrednosti u r1 na 0, ali to e se desiti tek prilikom prelaska u sledee


stanje. S obzirom na to to ispitivanje r1y koristi tekuu vrednost registra r1 (tj. 7), petlja
e se ponoviti jo jedanput, to daje pogrean rezultat (r2=3). Vrednost 4089, koju dobija
registar r1 prilikom treeg prolaska kroz petlju, posledica je potkoraenja prilikom
izvoenja operacije r1 y (4089+7 = 212).
T. 9-1 Ilustracija rada ASMD dijagrama sa Sl. 9-13(b).
Tekue stanje
PASIVNO
PASIVNO
INIT
C2
C1
C2
C1
C2
C1
PASIVNO
PASIVNO

r1= ?
r1= 14
r1= 14
r1= 14
r1= 14
r1= 7
r1= 7
r1= 0
r1= 0
r1= 4089
r1= ?

r2= ?
r2= ?
r2= ?
r2= 0
r2= 1
r2= 1
r2= 2
r2= 2
r2= 3
r2= 3
r2= 3

start=0
start=1
start=0
start=0
start=0
start=0
start=0
start=0
start=0
start=0
start=0

rdy=1
rdy=1
rdy=0
rdy=0
rdy=0
rdy=0
rdy=0
rdy=0
rdy=0
rdy=1
rdy=1

Premda je eliminacijom stanja TEST iz ASMD dijagrama sa Sl. 9-12(b) dobijeno pogreno
reenje, postavlja se pitanje ta e se desiti ako isto ovo stanje odstranimo iz ASMD
dijagrama sa Sl. 9-12(a), gde se stanje C1 nalazi na poetku petlje (Sl. 9-13(a)). U ASMD
dijagramu sa Sl. 9-13(a), ispitivanje r1y se javlja takoe u dva razliita stanja, INIT i C2.
Razlika u odnosu na ASMD sa Sl. 9-13(b) je u tome to sada izraunavanje iz stanja C2, r2
r2 + 1, ne utie na ishod ispitivanja r1y. Iz tog razloga, ASMD dijagram sa Sl. 9-13(a)
je ispravan. Poto petlja sada obuhvata dva, a ne vie tri stanja (kao u ASMD dijagramu iz
Pr. 9-8), ukupno vreme izraunavanja kolinika je smanjeno i iznosi: 3+2q taktnih ciklusa,
gde je q=x/y. Naglasimo da je ostvareno ubrzanje posledica preklapanja izvrenja dve
nezavisne operacije, naredbe registarskog prenosa r2 r2 + 1 i ispitivanja uslova r1y.
Pr. 9-10 Optimizacija sekvencijalnog delitelja - eliminacija stanja INIT
Stanje INIT se koristi za inicijalni upis vrednosti 0 u registar r2. Razmotriemo mogunost
eliminacije ovog stanja, pripajanjem operacije r20 stanju PASIVNO. Prebacivanjem ove
naredbe registarskog prenosa iz stanja INIT u stanje PASIVNO dobijamo ASMD dijagram
sa Sl. 9-14.
Broj naredbi registarskog prenosa koje se, obuhvaene istim stanjem, izvravaju u paraleli
moe biti proizvoljan, sve dok su odredini registri ovih naredbi jedinstveni u okviru datog
stanja. U ASMD dijagramu sa Sl. 9-14, stanje PASIVNO sadri dve naredbe registarskog
prenosa, koje iniciraju upise u registre r1 i r2 (naglasimo da e sam upis biti obavljen na
poetku sledeeg taktnog perioda). Zapazimo da je nakon uinjene intervencije ispitivanje
uslova r1y takoe pripojeno stanju PASIVNO, to moe da dovede do problema u radu,
jer se u istom stanju r1 koristi i kao odredini registar u naredbi registarskog prenosa i kao
operand u relacionom izrazu. Meutim, zahtev da korisnik treba da eka jo bar dva taktna
ciklusa nakon to postavi nove vrednosti deljenika i delioca (vidi specifikaciju interfejsa iz
Pr. 9-5), garantuje da e u momentu kada vrednost signala start postane 1, registar r1 ve
sadrati novu vrednost deljenika.

254

RTL projektovanje

Sl. 9-14 ASMD dijagram sekvencijalnog delitelja sa izbaenim stanjem INIT (pogreno
reenje).

Meutim, u ovoj verziji ASMD dijagrama javlja se novi problem, koji nije postojao u
prethodnim varijantama - kolinik se zadrava u registru r2 samo tokom jednog taktnog
perioda. Razlog za ovakvo ponaanje je taj to se ASMD odmah nakon zavrenog
izraunavanja vraa u stanje PASIVNO, gde se u r2 upisuje 0 ve u sledeem taktnom
ciklusu. S matematike take gledita, ASMD je ispravan, ali s take gledita korisnikog
interfejsa, ovakvo ponaanje je neprihvatljivo.

(a)
(b)
Sl. 9-15 ASMD dijagram sekvencijalnog delitelja s dodatnim registrom za pamenje kolinika:
(a) pogreno reenje; (b) ispravno reenje.

Problem u radu interfejsa koji postoji u ASMD dijagramu sa Sl. 9-14 moe se prevazii
uvoenjem jo jednog registra, r3, koji e se koristi za pamenje kolinika (Sl. 9-15(a)).
ASMD sa Sl. 9-15(a) radi korektno za xy (s napomenom da je sada kolinik smeten u r3,
a ne vie u r2). Naalost, i u ovom ASMD dijagramu postoji greka - u sluajevima kad
rezultat treba da bude nula (tj. onda kad vai x<y), registar r3 ostaje nepromenjen, umesto
da bude obrisan. To se dogaa usled toga to se upis u r3 obavlja samo unutar petlje.

Postupak projektovanja

255

Meutim, u sluajevima kada vai x<y, u petlju se ne ulazi, a r3 zadrava zateenu vrednost
(tj. rezultat prethodnog izraunavanja). Ovaj problem se moe reiti ako se uvede jo jedno
grananje koje e ispitati uslov x<y (odnosno uslov r1y) neposredno pre ulaska u petlju,
kao to je prikazano na Sl. 9-15(b). Meutim, uvoenje dodatnog stanja, C3, ima za
posledicu produenje vremena izraunavanja, koje sada iznosi: 2+3q. (Ponekad, projektant
mora da razmotri i sporije reenje, da bi nakon toga, eventualno, doao do breg).

Pr. 9-11 Optimizacija sekvencijalnog delitelja - parelelizacija petlje


U ovom primeru, polazei od ASMD dijagrama sa Sl. 9-15(b), isprobaemo razliite
varijante realizacije petlje, u smislu promene redosleda operacija i uvoenja paralelizma u
izvrenju operacija. Konani cilj je nai reenje koje e biti bre od polaznog.
Zamena redosleda stanja C2 i C3 daje pogreno reenje (Sl. 9-16(a)). Oigledno, upis u r3
se obavlja prerano, pa je usled toga rezultat za jedan manji od ispravnog. Jo jedna varijanta
izvoenja petlje, koja je iz slinih razloga kao prethodna takoe pogrena, dobija se
spajanjem stanja C2 i C3 u jedinstveno stanje C23 (Sl. 9-16(b)). Bez obzira na to to je
unutar bloka stanja C23 operacija upisa u registar r2 navedena ispred operacije upisa u
registar r3, ove dve operacije se izvravaju u paraleli. Budui da izmeu operacija r2 r2
+ 1 i r3 r2 postoji zavisnost, ASMD sa Sl. 9-16(b) nije ekvivalentan korektnom ASMD
dijagramu sa Sl. 9-15(b), ve je njegovo ponaanje identino ponaanju pogrenog ASMD
dijagrama sa Sl. 9-16(a) (zato to se u r3 ne upisuje vrednost registra r2 iz tekue, ve iz
prethodne iteracije petlje).

(a)
(b)
Sl. 9-16 Varijacije u petlji ASMD dijagrama sekvencijalnog delitelja (pogrena reenja).

Varijanta petlje koja daje ne samo ispravno ve i bre reenje jeste ona kod koje su sve tri
operacije, koje ine telo petlje, spojene u jedinstveno stanje C123 (Sl. 9-17). ASMD
dijagram sa Sl. 9-17 je ispravan uprkos tome to su naruena oba pravila prevoenja
algoritma u ASMD: prvo, zbog toga to su u isto stanje rasporeene meusobno zavisne
naredbe (r2 r2 + 1 i r3 r2), i drugo, zato to je ispitivanje uslova r1y pridrueno
stanju C123 u kome se r1 koristi kao odredini registar naredbe dodele. Zbog toga to se r1

256

RTL projektovanje

ispituje u istom stanju u kome se i menja, broj iteracija petlje bie za jedan vei od
ispravnog broja (kao u ASMD dijagramu sa Sl. 9-13(b) iz Pr. 9-9). Meutim, ova
nedoslednost u radu kompenzuje se time to se u r3 prepisuje vrednost registra r2 ne iz
tekue, ve iz prethodne iteracije (kao u ASMD dijagramu sa Sl. 9-16(b)). Konaan rezultat
je takav da po izlasku iz petlje r3 sadri taan rezultat. Izraunavanje traje samo 2+q
taktnih ciklusa.

Sl. 9-17 ASMD dijagram sekvencijalnog delitelja sa paralelizovanom petljom.

Pr. 9-12 Optimizacija sekvencijalnog delitelja - eliminacija stanja N3


Paljivom analizom rada ASMD dijagrama iz Pr. 9-11 moemo zakljuiti da bi stanje N3
moglo biti eliminisano ako se obezbedilo da ASMD ue u petlju i za x<y, jer bi tada
naredba registarskog prenosa r3r2 iz stanja C123, imala isti efekta kao naredba r30 iz
stanja N3. (Zato to pri naputanju stanja PASIVNO, r2 ima vrednost 0). Drugim reima,
treba obezbediti da ASMD iz stanja PASIVNO pree u stanje C123 bez obzira na ishod
ispitivanja r1y, a da nakon toga nastavi da koristi ovo ispitivanje kao test za kraj petlje.
Razdvajanje prvog ulaska u stanje C123 i ulaska u isto ovo stanje koje je posledica
ponavljanja petlje moe se ostvariti na osnovu ispitivanja vrednosti ulaznog upravljakog
signala start, koji ima vrednost je 1 pri prelasku iz stanja PASIVNO u stanje C123, a 0
za sve vreme dok u petlji traje izraunavanje kolinika. (Ovo podrazumeva da sistem
koristi prijateljski korisnik, koji se pridrava zahteva da trajanje start=1 mora biti tano
jedan taktni ciklus.)
Na Sl. 9-18(a) je prikazan ASMD dijagram u kome je ispitivanje uslova za kraj petlje
proireno testiranjem ulaznog signala start (| oznaava ili operaciju). Aktiviranje signala
start, koji traje tano jedan taktni ciklus, ima kao jedinu posledicu inicijalni ulazak u petlju.
Svako naredno eventualno ponavljanje petlje zavisi iskljuivo od sadraja registra r1.
Efekat pridruivanja signala start uslovu r1y ispoljava se pri x<y. Drugim reima, umesto
da se stanje C123 ne izvri ni jedanput, start=1 forsira da se ovo stanje ipak izvri. U tom
sluaju, stanje C123 se izvrava tano jedanput zato to x (tj. r1) nije jednako ili vee od y.
injenica da se nakon izvrenja stanja C123 u ASMD-u sa Sl. 9-18(a) sadraji registara r1 i
r2 razlikuju od onih koje su oni imali nakon izvrenja stanja N3 u prethodnoj varijanti
ASMD-a nije od znaaja, budui da korisnik oekuje konaan rezultat u registru r3.

Postupak projektovanja

257

Na Sl. 9-18(b) je prikazana funkcionalno identina varijanta ASMD dijagrama sa Sl.


9-18(a). Razlika je u tome to je sada pojednostavljeno grananje koje je pridrueno stanju
PASIVNO, jer ne sadri nepotrebno ispitivanje uslova r1 y.
PASIVNO
r1 x
r2 0
rdy

PASIVNO
r1 x
r2 0
rdy
0

start

start

1
C123

start | r1 y
0

r1 r1 y
r2 r2 + 1
r3 r2

C123
r1 r1 y
r2 r2 + 1
r3 r2

(a)

r1 y

(b)

Sl. 9-18 ASMD dijagram sekvencijalnog delitelja sa eliminisanim stanjem N3: (a) prva
varijanta; (b) druga varijanta.

ASMD Milijevog tipa. U optem sluaju, ASM dijagram sastoji od blokova stanja, grananja
i uslovnih izlaza povezanih granama (v. 6.1.2). U prethodnim primerima, blokovi uslovnog
izlaza nisu korieni. ASM dijagram koji ne sadri blokove uslovnog izlaza predstavlja
konani automat Murovog tipa. ASM dijagrami koji osim blokova stanja i grananja, sadre
i blokove uslovnog izlaza predstavljaju konane automate Milijevog tipa. Isti algoritam se
esto moe opisati ASMD dijagramom bilo Murovog bilo Milijevog tipa. U mnogim
sluajevima, ASMD dijagrami Milijevog tipa su bri (tj. sadre manji broj stanja) u odnosu
na funkcionalno identine Murove ASMD dijagrame.
Operacije koje se javljaju u blokovima stanja nazivaju se bezuslovnim operacijama, budui
da se izvravaju uvek kad se ASMD nae u datom stanju. Blokovi uslovnog izlaza se
koriste da bi se predstavile uslovne operacije, tj. operacije koje se ponekad (ali ne i uvek)
izvravaju kada je ASMD u odreenom stanju. Blokovi uslovnog izlaza nisu sami po sebi
stanja, ve se mogu smatrati decom nekog roditeljskog stanja. S obzirom na to to
predstavljaju uslovne operacije, oni se uvek slede posle jednog ili vie blokova grananja.
Kad se u ASMD dijagramu Milijevog tipa prate strelice, onda se polazei od bloka stanja
uvek proe kroz jedan ili vie blokova grananja dok se ne stigne do bloka uslovnog izlaza.
Sve operacije koje su navedene u bloku stanja i svim povezanim blokovima uslovnog
izlaza i grananja koji slede (bez blokova stanja izmeu njih) obavljaju se u istom taktnom
ciklusu. U sutini, kombinacija blokova grananja i blokova uslovnog izlaza omoguava
projektantu da realizuje ugnjedenu if-then-else konstrukciju koja se izvrava u jednom
taktnom ciklusu. U takvom ASMD dijagramu, veliki broj uslova se moe ispitivati u
paraleli, to moe bitno da ubrza rad algoritma.
Pr. 9-13 Jednostavan ASMD dijagram Milijevog tipa
ASMD dijagram sa Sl. 9-19 sadri dva uslovna izlazna signala: OSTANI i NAPUSTI.

258

RTL projektovanje

Signal OSTANI ima vrednost 1 za vreme dok ASMD ostaje u stanju UTO zbog BROJA
0. Signal NAPUSTI ima vrednost 1 samo u toku poslednjeg taktnog perioda u kome je
ASMD u stanju UTO. Uoimo da signali OSTANI i NAPUSTI nikada nisu aktivni u isto
vreme. U tabeli T. 9-2 je ilustrovan rad ASMD dijagrama sa Sl. 9-19 pod pretpostavkom da
taktni period iznosi 0.5 s i da je na poetku rada sadraj 3-bitnog registra BROJA jednak
000:

Sl. 9-19 ASMD Miljevog tipa iz Pr. 9-13.


T. 9-2 Ilustracija rada ASMD dijagrama iz Pr. 9-13
Vreme
(s)
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
5.5
6.0
...

Tekue
stanje
ZELENO
UTO
CRVENO
ZELENO
UTO
UTO
UTO
UTO
UTO
UTO
CRVENO
ZELENO
UTO
...

Signali i promenljive
STOP=0 BRZINA=11 BROJA=000 OSTANI=0 NAPUSTI=0
STOP=1 BRZINA=01 BROJA=000 OSTANI=0 NAPUSTI=1
STOP=1 BRZINA=00 BROJA=001 OSTANI=0 NAPUSTI=0
STOP=0 BRZINA=11 BROJA=011 OSTANI=0 NAPUSTI=0
STOP=1 BRZINA=01 BROJA=011 OSTANI=1 NAPUSTI=0
STOP=1 BRZINA=01 BROJA=100 OSTANI=1 NAPUSTI=0
STOP=1 BRZINA=01 BROJA=101 OSTANI=1 NAPUSTI=0
STOP=1 BRZINA=01 BROJA=110 OSTANI=1 NAPUSTI=0
STOP=1 BRZINA=01 BROJA=111 OSTANI=1 NAPUSTI=0
STOP=1 BRZINA=01 BROJA=000 OSTANI=0 NAPUSTI=1
STOP=1 BRZINA=00 BROJA=001 OSTANI=0 NAPUSTI=0
STOP=0 BRZINA=11 BROJA=011 OSTANI=0 NAPUSTI=0
STOP=1 BRZINA=01 BROJA=011 OSTANI=1 NAPUSTI=0
...

Izmeu 0.5 s i 1.0 s, ASMD je u stanju UTO, ali poto je BROJA = 0, ASMD nastavlja
dalje putanjom koja vodi u stanje CRVENO. Na ovoj putanji se nalazi blok uslovnog izlaza
koji postavlja signal NAPUSTI. Ovaj uslovni signal je aktivan u toku celog taktnog ciklusa
(0.5 - 1.0 s), ba kao bezuslovni signal STOP. Signal OSTANI, koji se nalazi na drugoj
putanji, ostaje neaktivan u toku ovog taktnog ciklusa. Izmeu 2.0 s i 2.5 s, ASMD je
ponovo u stanju UTO, ali budui da je sada vrednost registra BROJA razliita od nule,

Postupak projektovanja

259

ASMD nastavlja putanjom koja ga ostavlja u istom stanju. Ova putanja prolazi kroz blok
uslovnog izlaza koji postavlja signal OSTANI. Signal NAPUSTI je neaktivan tokom ovog
taktnog ciklusa. Sadraj registra BROJA ponovo postaje nula u vremenu 4.5 - 5.0 s (s
obzirom na to to je BROJA trobitni registar). To je zadnji taktni ciklus u kojem je
ASMD u stanju UTO. Znai, u toku ovog taktnog ciklusa, signal NAPUSTI je aktivan, a
signal OSTANI nije.
Pr. 9-14 Milijeva verzija sekvencijalnog delitelja - eliminacija stanja INIT
Na Sl. 9-13(b) iz Pr. 9-9 prikazana je jedna korektna varijanta Murovog ASMD dijagrama
sekvencijalnog delitelja sa etiri stanja i samo dva registra (r1 i r2). Na Sl. 9-14 je prikazan
jedan neuspean pokuaj eliminacije stanja INIT iz ovog ASMD dijagrama. U ASMD-u sa
Sl. 9-15(b) uveden je registar r3 kako bi se ispravila greka u korisnikom interfejsu koja je
postojala u ASMD-u sa Sl. 9-14.

Sl. 9-20 Milijev ASMD sekvencijalnog delitelja sa eliminisanim stanjem INIT.

Problem koji postoji u ASMD dijagramu sa Sl. 9-14 posledica je injenice da se u stanju
PASIVNO vri bezuslovan upis u registar r2. Korienjem bloka uslovnog izlaza mogue
je eliminisati stanje INIT, a da se pri tom ne narui sadraj registra r2 za vreme dok ASMD
u stanju PASIVNO eka da signal start postane aktiviran (Sl. 9-20). U ASMD dijagramu
Milijevog tipa sa Sl. 9-20, upis nule u r2 se vri u stanju PASIVNO, ali samo onda kad vai
start=1, kao to je to za sluaj x=14 i y=7 prikazano u tabeli T. 9-3.
T. 9-3 Ilustracija rada ASMD dijagrama Milijevog tipa sa Sl. 9-20.
Tekue stanje
PASIVNO
PASIVNO
PASIVNO
C1
C2
C1
C2
PASIVNO
PASIVNO

r1=?
r1=?
r1=14
r1=14
r1=7
r1=7
r1=0
r1=0
r1=?

r2=?
r2=?
r2=?
r2=0
r2=0
r2=1
r2=1
r2=2
r2=2

start=0
start=0
start=1
start=0
start=0
start=0
start=0
start=0
start=0

rdy=1
rdy=1
rdy=1
rdy=0
rdy=0
rdy=0
rdy=0
rdy=1
rdy=1

260

RTL projektovanje

Vrsta iz tabele T. 9-3 napisana masnim slovima ukazuje na situaciju u kojoj se ispoljava
dejstvo uslovnog upisa nule u registar r2. Naravno, efekat ove operacije je vidljiv tek u
trenutku delovanja naredne rastue ivice taktnog signala, odnosno tek onda kad ASMD iz
stanja PASIVNO pree u stanje C1. Zapazimo da ASMD Milijevog tipa sa Sl. 9-20
izraunava kolinik za 2+2*q taktnih ciklusa, to je za jedan taktni ciklus bre u odnosu na
korektan Murov ASMD dijagram sa dva registra iz Pr. 9-9.

Pr. 9-15 Milijeva verzija sekvencijalnog delitelja - spajanje stanja C1 i C2


ASMD sa Sl. 9-20 zahteva dvostruko due vreme izraunavanja u odnosu na najbre
reenje koje ne koristi blokove uslovnog izlaza (reenje iz Pr. 9-12). Da bi smo postigli isti
nivo performansi i sa Milijevom varijantom sekvencijalnog delitelja, neophodno je
paralelizovati operacije koje se izvravaju unutar petlje. Razmotrimo, najpre, neispravan
Milijev ASMD dijagram sa Sl. 9-21(a).
PASIVNO
r1 <- x
rdy

start

r2 0

r1 y

C
r1 r1 - y

r2 <- r2 + 1

r1 y
0

(a)
(b)
Sl. 9-21 Milijev ASMD dijagram sekvencijalnog delitelja sa paralelizovanom petljom: (a)
neispravno reenje; (b) ispravno reenje.

U trenutku kada se nakon obavljenog izraunavanja ASMD sa Sl. 9-21(a) vrati u stanje
PASIVNO, registar r2 je inkrementiran jedanput vie nego to bi trebalo, a sve zato to je
ispitivanje uslova r1 y pridrueno stanju C12 u kojem se r1 koristi kao odredini registar
naredbe registarskog prenosa. U Pr. 9-10 ovaj problem je bio reen uvoenjem registra r3,
koji je sluio za uvanje ispravnog kolinika. Meutim, bolje reenje bi bilo ono koje ne
zahteva uvoenje dodatnog registra. U tom cilju, neophodno je u stanju C12 vriti upis u r2
ako ASMD ostaje u petlji, a zadrati zateenu vrednost samo onda kad ASMD naputa
petlju da bi se vratio u stanje PASIVNO. Ovakav rad ASMD-a zahteva uvoenje bloka
uslovnog izlaza (Sl. 9-21(b)). ASMD dijagram sa Sl. 9-21(b) izraunava taan kolinik za
2+q taktnih ciklusa i to korienjem samo dva umesto tri registra, to znai da je
podjednako brz kao i najbri Murov ASMD i pri tom koristi manji broj registara.

Postupak projektovanja

261

Pr. 9-16 Milijeva verzija sekvencijalnog delitelja - ranije postavljanje signala rdy
Dva najbra ASMD-a sekvencijalnog delitelja (Murov iz Pr. 9-12 i Milijeve iz Pr. 9-15)
izraunavaju kolinik za 2+q taktnih ciklusa. Konstanti lan 2 potie od zahteva da korisnik
pre nego to inicira novo deljenje mora da eka bar 2 taktna ciklusa nakon to sistem
postavi signal rdy. Kod Murovih ASMD dijagrama situacija rdy =1 je isto to i biti u
stanju PASIVNO. Meutim, uz pomo bloka uslovnog izlaza mogue je signal rdy postavi
jedan taktni ciklus ranije. Postoje dva razloga koji opravdavaju ranije postavljanje signala
rdy. Prvo, u toku poslednjeg taktnog ciklusa u kome je ASMD sa Sl. 9-21(b) u stanju C,
registar r2 ve sadri ispravan kolinik. Drugo, korisnik nije svestan tekueg stanja
sistema, ve se oslanja na signal rdy koji ukazuje na trenutak kada je kolinik izraunat i
dostupan na izlazu y.
ASMD sa Sl. 9-22 postavlja signal rdy u stanju PASIVNO, ali takoe i u poslednjem
taktnom ciklusu stanja C. Sve dok je ASMD u stanju C, test r1y sa dna petlje se obavlja u
isto vreme kada i test r1y sa vrha petlje. U taktnim ciklusima kad ASMD treba da ostane u
petlji, r2 se inkrementira. U taktnom ciklusu kada ASMD treba da napusti petlju, postavlja
se signal rdy. Tabela T. 9-4 ilustruje rad ASMD dijagrama sa slike za x=14 i y=7:
PASIVNO
r1 <- x
rdy

start

r2 0

r1 y

C
r1 r1 - y

r2 <- r2 + 1

r1 >= y

rdy

Sl. 9-22 Konani oblik Milijevog ASMD dijagrama sekvencijalnog delitelja.


T. 9-4 Ilustracija rada ASMD dijagrama iz Pr. 9-16.
Tekue stanje
PASIVNO
PASIVNO
C
C
C
PASIVNO

r1=?
r1=14
r1=14
r1=7
r1=0
r1=4089

r2=?
r2=?
r2=0
r2=1
r2=2
r2=2

start=0
start=1
start=1
start=0
start=0
start=0

rdy=1
rdy=1
rdy=0
rdy=0
rdy=1
rdy=1

U poslednjem taktnom ciklusu stanja C, r2 ve sadri korektan kolinik i signal rdy je


postavljen. Umesto da eka jo jedan taktni ciklus, kako bi se sistem vratio u stanje
PASIVNO, korisnik moe ve od ovog momenta da otpone sa odbrojavanjem dva ciklusa.

262

RTL projektovanje

ASMD sa Sl. 9-22 izraunava korektan kolinik korienjem dva registra za samo 1+q
taktnih ciklusa. Znai, sekvencijalni delitelj realizovan na osnovu Milijevog ASMD
dijagrama sa Sl. 9-22 je jednostavniji i bri od bilo kog reenja zasnovanog na ASMD
dijagramima Murovog tipa.

9.2.2. Razrada
ASMD dijagram je vrsta grafike reprezentacije algoritma s preciznom informacijom o
tajmingu i indikacijom o tome koje operacije se obavljaju u paraleli, a koje sekvencijalno.
Meutim, krajnji cilj projektovanja jeste realizacija fizikog sistema, tj. precizna
specifikacija strukture sistema (na primer, u vidu logike eme). ASMD dijagram nam
govori kako sistem radi, ali ne govori nita o tome kako povezati digitalne komponente da
bi se ostvarilo eljeno ponaanje. Sledea faza projektovanja, razrada, upravo ukljuuje
jedan deo ukupne transformacije algoritma u hardversku strukturu.
U fazi razrade, cilj projektanta je da RTL sistem, ije ponaanje je prethodno precizno
opisao ASMD dijagramom, podeli na dva razdvojena ali povezana podsistema: upravljaku
jedinicu i staza podataka (v. Sl. 9-8). Uobiajeno je da se i u ovoj fazi projektovanja koristi
ASM dijagram, ali samo za opis ponaanja upravljake jedinice, dok se staza podataka
predstavlja u vidu strukturnog opisa. ASM dijagram koji je pridruen upravljakoj jedinici
vie ne sadri naredbe registarskog prenosa i relacije (jer su registri prebaeni u stazu
podataka), ali zato sadri detaljan opis aktivnosti upravljake jedinice, u vidu postavljanja
upravljakih i ispitivanja statusnih signala, koje su neophodne da bi se u stazi podatak
obavila izraunavanja i registarski prenosi i to u redosledu i na nain kako je to predvieno
polaznim ASMD dijagramom. Premda je nakon obavljene razrade struktura sistema
sloenija, a opis ponaanja sadri vie detalja, ponaanje celokupnog sistema, gledano sa
strane spoljanjeg sveta, ostaje identino polaznom ASMD dijagramu.
Pr. 9-17 Razrada sekvencijalnog delitelja reenje 1.
Kao to je opisano u uvodnom delu poglavlja 9.2, projektovanje RTL sistema na nain
odozgo-nanie ukljuuje tri faze: opis ponaanja, razradu i realizaciju, U primerima iz
odeljka 9.2.1 predstavljene su razliite varijante opisa ponaanja sekvencijalnog delitelja. U
ovom primeru bie razmatrana druga faza projektovanja (razrada) ovog kola. Za ilustraciju
razrade opisa ponaanja sekvencijalnog delitelja u strukturu koju e initi upravljaka
jedinica i staza podataka moemo uzeti bilo koji korektan ASMD dijagram iz odeljka 9.2.1.
Na primer, usredsredimo se na ASMD sa Sl. 9-18(b) iz Pr. 9-12, koji je najjednostavniji (u
pogledu broja stanja), ali ujedno i najbri Murov ASMD sekvencijalnog delitelja. Za
poetak, ignorisaemo signale start i rdy, budui da se radi o upravljakom ulazu i
statusnim izlazu sistema, koji ionako ostaju nepromenjeni u fazi razrade. Faza razrade je
prevashodno fokusirana na hardversku realizaciju naredbi registarskog prenosa i relacionih
izraza iz polaznog ASMD dijagrama.
Treba napomenuti da, po pravilu, ne postoji smo jedna ve mnotvo staza podataka
razliitih hardverskih struktura u kojima se mogu obaviti izraunavanja opisana polaznim
ASMD-om. Na projektantu je da odlui koje e hardverske komponente koristiti za
konstrukciju staze podataka, vodei se kriterijumima kao to su: brzina rada, sloenost i
raspoloivost komponenti. Jedina dva striktna zahteva koja se pri tom postavljaju su da
staza podataka treba da obezbedi: 1) obavljanje svih naredbi registarskog prenosa i

Postupak projektovanja

263

izraza iz istih stanja ASMD dijagrama. U konkretnom primeru, staza podataka


sekvencijalnog delitelja treba da omogui izvrenje sledeih naredbi registarskog prenosa:
r1x, r20, r1r1-y, r2r2+1 i r3r2, kao i ispitivanje relacionog izraza r1y, i da pri
tom omogui paralelno (istovremeno) izvrenje sledea dva skupa operacija: (r1x, r20)
u stanju PASIVNO i (r1r1-y, r2r2+1, r3r2 i r1y) u stanju C123.
Najlaki (mada ne uvek i najbolji) nain da se ovo postigne sastoji se u tome da se za
ugradnju u stazu podataka biraju takve registarske komponente koje e pored osnovne
funkcije memorisanja podataka omoguiti i neku dodatnu obradu koja se moe iskoristiti za
realizaciju celokupne (ili barem jednog dela) naredbe registarskog prenosa. Na primer, u
konkretnom primeru, za realizaciju registra r2 moemo upotrebiti broja. Broja, kao
registarska komponenta, pored memorisanja podatka dodatno omoguava brisanje
(resetovanje) i inkrementiranje svog sadraja - upravo one dve funkcije koje su potrebne za
izvoenje naredbi registarskog prenosa iz stanja PASIVNO i C123 u kojima se r2 koristi
kao odredini registar, tj. r20 i r2r2+1. Ukoliko se projektant odlui da za realizaciju
registra r2 umesto brojaa koristi prihvatni registar, on e morati da obezbedi dodatnu
kombinacionu logiku kako bi nadomestio nedostatak funkcija resetovanja i
inkrementiranja. Izbor prihvatnog registra za realizaciju registra r2 nije pogreno reenje,
ve samo reenje koje zahteva neto vee angaovanje projektanta. Da bi smo zadrali
jednostavnost primera, usvojiemo da se r2 realizuje uz pomo brojaa. Za razliku od r2,
registri r1 i r3 se pune vrednostima koje ne zavise iskljuivo od njihovog tekueg sadraja.
Iz tog razloga, za realizaciju r1 i r3 razumno je koristiti najjednostavnije registarske
komponente, koje osim bazinih registarskih funkcija upisa i memorisanja podataka,
poseduju jo samo funkciju dozvole upisa.

inc
clr

Nakon to smo odluili koje tipove registara emo koristiti u stazi podataka, neophodno je
razmotriti na koji nain e registri biti povezani. Za trenutak, usredsredimo se samo na
naredbe registarskog prenosa iz stanja C123. U ovom stanju, r1 se puni razlikom r1-y, r2 se
inkrementira, dok se u r3 prepisuje vrednosti iz registra r2. Sve ove operacije se izvravaju
u paraleli. Za izraunavanje razlike r1-y koristiemo oduzima. Punjenje registra r3
vrednou iz registra r2 se lako ostvaruje, tako to se izlaz brojakog registra koji realizuje
r2 direktno povee sa ulazom prihvatnog registra koji realizuje r3. Kada bi se r1, r2 i r3
kao odredini registri koristili samo u stanju C123, staza podataka sekvencijalnog delitelja
izgledala bi kao na Sl. 9-23.

Sl. 9-23 Staza podataka sa oduzimaem. Napomena: ld signal dozvole upisa u registar; clr
signal resetovanja brojaa; inc signal dozvole inkrementiranja brojaa.

Uoimo da u stazi podataka sa Sl. 9-23 nije mogue realizovati naredbu registarskog
prenosa r1x iz stanja PASIVNO i to iz prostog razloga to ne postoji mogunost da se u
registar r1 upie x. Pristup koji se koristi kad u razliitim taktnim ciklusima u isti registar
treba upisivati vrednosti koje potiu iz razliitih izvora, sastoji se u ugradnji multipleksera
na ulazu registra (slino kao u Pr. 9-3). U konkretnom primeru, za izbor ulaznog podatka

264

RTL projektovanje

registra r1 treba koristiti multiplekser 2-u-1. Jedan ulaz ovog multipleksera treba spojiti s
izlazom oduzimaa, a drugi s ulazim portom x. Nakon ugradnje multipleksera, staza
podataka dobija oblik kao na Sl. 9-24. Uoimo da se vrednosti za upis u r1 bira
posredstvom selekcionog ulaza multipleksera, muxctri. Multiplekser proputa r1-y za
muxctrl=1, a x za muxctrl=0.
muxctrl

ldr1

inc2 clr2

ldr3
ld

ld
x
r1
y

r2

r3

(-)

Sl. 9-24 Staza podataka sa multiplekserom.

Staza podataka sa Sl. 9-24, iako u stanju da realizuje sve naredbe registarskog prenosa iz
ASMD dijagrama sa Sl. 9-18(b), ne prua mogunost ispitivanja relacionog izraza r1y. U
hardveru, relacioni izraz se tipino realizuje u vidu kombinacione komponente koja
generie signal ija vrednost ukazuje na rezultat poreenja. U konkretnom primeru,
koristiemo komparator s jednim izlazom, r1y, ija e vrednost biti r1y=1 ako vai r1y,
odnosno r1y=0, u suprotnom sluaju.
Opisani postupak razrade sekvencijalnog delitelja ilustrovan je na Sl. 9-25. Na Sl. 9-25(a)
ponovljen je ASMD sa Sl. 9-18(b), dok je staza podataka, projektovana u ovom primeru,
prikazana na Sl. 9-25(b). Na Sl. 9-25(c) data je tabela operacija u kojoj su za svaku naredbu
registarskog prenosa iz ASMD dijagrama navedene vrednosti upravljakih signala kojim se
inicira njeno izvrenje u stazi podataka sa Sl. 9-25(b). Oznaka X znai da vrednost
konkretnog upravljakog signala nije od znaaja za datu naredbu. U ovoj tabeli su, takoe,
za oba stanja ASMD dijagrama, PASIVNO i C123, uvrtene vrste sa zbirnim vrednosti
upravljakih signala kojim se u stazi podataka iniciraju sve naredbe iz datog stanja. Uoimo
da meu naredbama registarskog prenosa iz tabele operacija postoji i naredba r3r3. Ova
naredba nije navedena u ASDM dijagramu, ali se podrazumeva u stanju PASIVNO, u
kojem r3 zadrava svoju vrednost.
Sada kad su poznati svi detalji staze podataka, prevoenje ASMD dijagrama u ASM
dijagram upravljake jedinice predstavlja, u sutini, mehaniki postupak. ASM dijagram
upravljake jedinice, prikazan na Sl. 9-25(d), ima identian oblik (isti skup na isti nain
povezanih stanja) kao polazni ASMD, s tom razlikom to su u njegovim blokovima stanja
umesto naredbi registarskog prenosa navedena imena upravljakih signala aktivnih u datom
stanju. Takoe, relacioni izraz je zamenjen testiranjem statusnog signala r1y. Konano,
blok dijagram sa Sl. 9-25(e) pokazuje spregu upravljake jedinice i staze podataka.
Treba napomenuti da prelaz sa ASMD dijagrama, koji opisuje ponaanje celokupnog
sistema na ASM koji opisuje ponaanje upravljake jedinice, uvek ima u vidu strukturu
staze podataka. Premda je obino mogue da za isti ASMD postoji vei broj staza podataka
razliite strukture koje mogu realizovati naredbe registarskog prenosa i relacione izraze
sadrane u ASMD dijagramom, svaka od tih varijanti zahtevae razliiti ASM dijagram
upravljake jedinice, prilagoen strukturi konkretne staze podataka.

265

(a)

r1 x
r2 0
r3 r3
PASIVNO
r1 r1 - y
r2 r2 + 1
r3 r2
C123

Komp.

1 mux 0

inc
clr

Postupak projektovanja

(b)

muxctrl
0
X
X
0
1
X
X
1

ldr1
1
X
X
1
1
X
X
1

(c)

inc2
X
0
X
0
X
1
X
1

clr2
X
1
X
1
X
0
X
0

ldr3
X
X
0
0
X
X
1
1

(d)

(e)
Sl. 9-25 Razrada sekvencijalnog delitelja: (a) ASMD; (a) staza podataka; (b) ASM dijagram
upravljake jedince; (c) sistemski blok dijagram.

266

RTL projektovanje

Pr. 9-18 Razrada sekvencijalnog delitelja - reenje 2


Paljivom analizom staze podataka iz prethodnog primera moemo zakljuiti da ona, iako
je razvijena u skladu sa ASMD dijagramom sekvencijalnog delitelja iz Pr. 9-12, takoe
moe da realizuje i bilo koji korektan ASMD dijagrama iz Pr. 9-8 i Pr. 9-9. Meutim, to
nije morao biti sluaj; ta vie, retko se deava da jedna staza podataka moe posluiti za
realizaciju vie razliitih ASMD-ova. Ono to izdvaja ASMD sa Sl. 9-18(b) od ostalih
ASMD dijagrama predstavljenih u Pr. 9-8 i Pr. 9-9 jeste maksimalan paralelizam. Postoji
jedno neformalno pravilo koje kae da staza podataka projektovana za maksimalan
paralelizam moe realizovati bilo koji ASMD sa manjim nivoom paralelizma koji je
izveden na osnovu istog polaznog algoritma. Na primer, prvi ASMD iz Pr. 9-8 (Sl.
9-12(a)), karakteristian po strogo sekvencijalnom nainu rada, moe biti realizovan
korienjem staze podataka iz prethodnog primera (Sl. 9-25). Na Sl. 9-26 je prikazan ASM
dijagram upravljake jedinice izveden na osnovu ASMD dijagrama sa Sl. 9-12(a) i staze
podataka sa Sl. 9-25(b). U ovom ASMD dijagramu, registar r3 se ne koristi, to znai da e
izlaz delitelja biti r2 umesto r3.

Sl. 9-26 Razraeni ASM dijagram iz Pr. 9-18. Napomena: u blokovima stanja navedena su samo
imena onih signala koji u datom stanju imaju vrednost 1.

Pr. 9-19 Razrada sekvencijalnog delitelja - reenje 3


Kod sekvencijalnih ASMD-ova, kakav je npr. ADMD sa Sl. 9-12(a), vai ogranienje da se
u jednom stanju moe obaviti najvie jedna operacija, dok kod paralelnih, kakav je npr.
ASMD sa Sl. 9-18(b), ovo ogranienje ne postoji. Za realizaciju paralelnog ASMD-a
neophodna je paralelna staza podataka, odnosno staza podatka koja e biti u mogunosti da
u jednom taktnom ciklusu istovremeno izvri vie razliitih operacija, kao to je to sluaj sa
stazom podataka sa Sl. 9-25(a). U Pr. 9-18 je pokazano kako se sekvencijalni ASMD moe
realizovati u paralelnoj stazi podataka. U ovom primeru predstavljena je sekvencijalna
staza podataka koja je namenski projektovana za sekvencijalni ASMD sa Sl. 9-12(a) iz Pr.
9-8. Budui da sekvencijalna staza podataka u svakom taktnom ciklusu treba da izvri samo
jednu operaciju, razumno je oekivati da e njena hardverska sloenosti biti manja od
sloenosti paralelne staze podataka.

Postupak projektovanja

267

(a)
PASIVNO
ldr1
muxctrl=00
aluctrl = 000
rdy

Operacija
Proputanje
Sve nule
Oduzimanje
Inkrementiranje
Vee-jednako

aluctrl
000
001
011
010
100

c
a
0
a-b
a+1
-

d
ab

(b)
Naredba/
relacija
r1x
r20
r1r1-y
r2r2+1
r1y

start

1
INIT
ldr2
muxctrl = --
aluctrl = 001
TEST
muxctrl = 01
aluctrl = 100
r1y

ldr1
1
1
-

ldr2
X
1
1
-

muxctrl
00
-01
10
01

aluctrl
000
001
010
011
100

1
C1
ldr1
muxctrl = 01
aluctrl = 010
C2
ldr1
muxctrl = 10
aluctrl = 011

(c)
(d)
Sl. 9-27 Sekvencijalni delitelj sa centralizovanom ALU: (a) staza podataka; (b) tabela operacija
ALU; (c) tabela operacija staze podataka; (d) ASM dijagram upravljake jedinice.

Uobiajen naina za realizaciju sekvencijalnih staza podataka zasnovan je na upotrebi ALU


kao centralne jedinice uz pomo koje se obavljaju sve operacije iz polaznog sekvencijalnog
ASMD dijagrama. Na Sl. 9-27(a) je prikazana struktura staze podataka zasnovane na ALU
za ASMD sa Sl. 9-12(a). Kod reenja ovog tipa, multiplekseri na ulazima registara nisu
potrebni, jer se podaci koji se upisuju u registre uvek uzimaju iz istog izvor, tj. sa izlaza
ALU jedinice. S druge strane, budui da se ALU koristi za obavljanje razliitih operacija
nad operandima koji potiu iz razliitih izvora, multiplekseri su neophodni na njenim
ulaznim portovima. Na Sl. 9-27(b) je data tabela operacija ALU jedinice. Skup podranih
operacija je odreen naredbama registarskog prenosa i relacionim izrazima koje treba
realizovati. Prvo, ALU treba da poseduje mogunost da podatak sa ulaznog porta a prenese

268

RTL projektovanje

prenosa r1x. Drugo, radi realizacije naredbe r20, ALU treba da je u mogunosti da na
svom izlazu postavi sve nule. Trea operacije, inkrementiranje, koristi se za realizaciju
naredbe r2r2+1, a etvrta, oduzimanje, za realizaciju naredbe r1r1-y. Poslednja, peta
operacija, vee-jednako, koristi se za realizaciju ispitivanja uslova r1y. Rezultat ovog
poreenja se generie na jednobitnom izlazu r1y. Vie detalja u vezi realizacije opisane
ALU jedinice moe se nai u Pr. 9-21.
Na Sl. 9-27(c) je data tabela operacija kompletne staze podataka. Konano, na Sl. 9-27(d)
je prikazan ASM dijagram upravljake jedinice, koji je izveden na osnovu ASMD
dijagrama sa Sl. 9-18(b) i tabele operacija sa Sl. 9-27(d).
Primeri razrade opisa ponaanja u strukturu upravljaka jedinica staza podataka, opisani
u prethodnim primerima iz ovog odeljka, ukazuju da se u fazi razrade projektant sree sa
irokim spektarom mogunih reenja. Staza podataka zasnovana na centralizovanoj ALU
(ilustrovana u Pr. 9-19), koja obavlja sva potrebna izraunavanja, predstavlja jedan kraj
ovog spektra. Druga krajnost je paralelna staza podataka, ilustrovana u Pr. 9-17 i Pr. 9-18,
kod koje se sva izraunavanja predviena algoritmom obavljaju zasebnim hardverskim
jedinicama. Pristup zasnovan na centralizovanoj ALU tipino zahteva manji utroak
hardvera, ali zato moe da realizuje samo sekvencijalne ASMD-ove. Na primer, ASMD
dijagrami koji predviaju vie od jednog izraunavanja po taktnom ciklusu ne mogu se
ostvariti u stazi podataka zasnovanoj na centralizovanoj ALU, zato to ALU moe da obavi
samo jednu operaciju u jednom taktnom ciklusu.

9.2.3. Realizacija
U zavrnoj faza projektovanja, projektant se bavi realizacijom hardvera RTL sistema.
Tokom ove faze, razraena struktura RTL sistema se opisuje u jeziku za opis hardvera, kao
to je VHDL, a zatim sintetie u hardver pomou softvera za sintezu. Pri tom se ASM
dijagram upravljake jedinice opisuje u vidu konanog automata, dok se staza podataka
opisuje funkcionalnim/strukturnim VHDL kdom. Za realizaciju staze podataka projektanti
esto koriste na pretprojektovane komponente (registri, ALU, multiplekseri). Konani
VHDL opis RTL sistema dobija se strukturnim povezivanjem upravljake jedinice i staze
podataka.
Prilikom korienja VHDL-a u kombinaciji sa softverom za sintezu, kreativni deo posla
projektanta se obino zavrava okonanjem faze razrade. Ponekad, projektanti preskau ak
i fazu razrade i preputaju softveru za sintezu da na osnovu VHDL opisa ASMD dijagrama
automatski obavi sintezu hardvera. Meutim, ovakav pristup je primenljiv samo pri
projektovanju relativno jednostavnih RTL sistema, koji u ogranienom obimu koriste
aritmetike operacije. U svakom sluaju, vano je da projektant dobro razume mogunosti i
ogranienja softvera za sintezu, kako bi bio u stanju da kreira efikasan i korektan VHDL
kd.
Rezultat druge faze projektovanja je opis sistema u vidu strukture koju ine upravljaka
jedinica i staza podataka, zajedno sa ASM dijagramom upravljake jedinice. Meutim, ak
i na ovom nivou, moe se desiti da pojedini moduli iz staze podataka nisu raspoloivi u
vidu pretprojektovanih komponenti ili su previe sloena za automatsku sintezu. Takvi
moduli moraju se nezavisno projektovati i opisati u VHDL-u. Ukoliko se radi o sloenim
modulima, proces njihovog projektovanja moe zahtevati dodatu razradu. Meutim, budui
da je njihov interfejs ve definisan u fazi razrade staze podataka globalnog sistema,
projektant moe slobodno da se usredsredi na projektovanje konkretnog modula siguran da

Postupak projektovanja

269

e se on bez problema uklopiti u strukturu staze podataka. U svakom sluaju, konani


rezultat projektovanja koje sledi koncept odozgo-nanie je hijerarhijski VHDL opis koji
se moe razloiti na biblioteke (pretprojektovane) komponente i module opisane
funkcionalnim i/ili strukturnim kdom koji se moe sintetizovati.
Pr. 9-20 Realizacija sekvencijalnog delitelja paralelna staza podataka
U ovom primeru bie predstavljena realizacija (u vidu VHDL opis) sekvencijalnog delitelja
na osnovu staze podataka i ASM dijagrama upravljake jedinice koji su razvijeni u Pr.
9-17. Sl. 9-28(a) prikazuje detaljan blok dijagram sekvencijalnog delitelja i ujedno ukazuje
na nain organizacije VHDL projekta. Na Sl. 9-28(b) je ponovljen ASM dijagram
upravljake jedinice iz Pr. 9-17. VHDL projekat sadri tri VHDL modula (datoteke):
datapath.vhd opis staze podataka, control.vhd opis upravljake jedinice i delitelj.vhd
vrni modul u kome su moduli staza podataka i upravljaka jedinica, dostupni u vidu
VHDL komponenti, strukturno povezani.
y

0
n

r1

n
ldr1
Upravljacka
jedinica
(control.vhd)
rst

r1y
ldr3
clrr2
incr2
inc clr

clk
rst

ld

muxctrl

start

rdy

(-)

Komp.

mux

Sekvencijalni
delitelj
(delitelj.vhd)

r2

Staza podataka
(datapath.vhd)

ld
n

r3

(a)
(b)
Sl. 9-28 Razraeni projekat sekvencijalnog delitelja: (a) hardverski blok dijagram sistema; (b)
ASM dijagram upravljake jedinice.

U nastavku sledi kompletan VHDL kd sekvencijalnog delitelja. Opis staze podataka


(datoteka datapath.vhd) sadri tri procesa koji su centrirani oko tri registra, r1, r2 i r3.
Prvi proces opisuje deo staze podataka koji obuhvata registar r1 zajedno sa multiplekserom
i oduzimaem (linije 17-30). Drugi proces opisuje registar r2, koji ima ulogu brojaa (linije
32-43), a trei registar r3 (linije 45-54). Komparator za uslov vee-jednako realizovan je
pomou konkurentne WHEN naredbe (linija 56). U liniji 57, sadraj registra r3 se
prosleuje na izlazni port staze podataka za kolinik, q. VHDL kd iz datoteke control.vhd
opisuje upravljaku jedinicu sekvencijalnog delitelja korienjem dvosegmentnog kdnog
ablona. U datoteci delitelj.vhd, komponente datapath i control su instancirane i povezane
na nain kao na Sl. 9-28(a).
1
2

-- fajl datapath.vhd --------------------------------------------LIBRARY IEEE;

270
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

RTL projektovanje

USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
----------------------------------------------------------------ENTITY datapath IS
PORT(x,y : IN STD_LOGIC_VECTOR(11 DOWNTO 0);
q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
muxctrl,ldr1,clr2,inc2,ldr3 : IN STD_LOGIC;
r1y : OUT STD_LOGIC;
clk, rst : IN STD_LOGIC);
END datapath;
----------------------------------------------------------------ARCHITECTURE datapath OF datapath IS
SIGNAL r1,r2,r3 : UNSIGNED(11 DOWNTO 0);
BEGIN
registar r1 --------------------------------------------------PROCESS(clk,rst)
BEGIN
IF(rst = '1') THEN
r1 <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk='1') THEN
IF(ldr1='1') THEN
IF(muxctrl='1') THEN
r1 <= r1 - UNSIGNED(y);
ELSE
r1 <= UNSIGNED(x);
END IF;
END IF;
END IF;
END PROCESS;
-- registar r2 (brojac) -----------------------------------------PROCESS(clk,rst)
BEGIN
IF(rst = '1') THEN
r2 <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk='1') THEN
IF(clr2='1') THEN
r2 <= (OTHERS=>'0');
ELSIF(inc2='1') THEN
r2 <= r2 + 1;
END IF;
END IF;
END PROCESS;
-- registar r3 --------------------------------------------------PROCESS(clk,rst)
BEGIN
IF(rst = '1') THEN
r3 <= (OTHERS => '0');
ELSIF(clk'EVENT AND clk='1') THEN
IF(ldr3 ='1') THEN
r3 <= r2;
END IF;
END IF;
END PROCESS;
-- komparator -------------------------------------------------r1y <= '0' WHEN r1<UNSIGNED(y) ELSE '1';

Postupak projektovanja

271

q <= STD_LOGIC_VECTOR(r3);
END datapath;
60 -- fajl control.vhd ---------------------------------------------61 LIBRARY IEEE;
62 USE IEEE.STD_LOGIC_1164.ALL;
63 ----------------------------------------------------------------64 ENTITY control IS
65
PORT(start, r1gey : IN STD_LOGIC;
66
rdy : OUT STD_LOGIC;
67
muxctrl,ldr1,ldr3,clr2,inc2 : OUT STD_LOGIC;
68
clk,rst : IN STD_LOGIC);
69 END control;
70 -----------------------------------------------------------------71 ARCHITECTURE control OF control IS
72
TYPE state IS (PASIVNO, C123);
73
SIGNAL pr_state, nx_state : state;
74 BEGIN
75 registar stanja -----------------------------------------------76 PROCESS (clk,rst)
77 BEGIN
78
IF(rst='1')THEN
79
pr_state <=PASIVNO;
80
ELSIF(clk'EVENT AND clk='1') THEN
81
pr_state <= nx_state;
82
END IF;
83 END PROCESS;
84 logika sledeeg stanja/izlaza ---------------------------------85 PROCESS(start,r1gey,pr_state)
86
BEGIN
87
nx_state <= pr_state;
88
rdy<='0';muxctrl<='0';ldr1<='0';ldr3<='0';clr2<='0';inc2<='0';
89
CASE pr_state IS
90
WHEN PASIVNO =>
91
ldr1<='1'; clr2<='1';rdy<='1';
92
IF(start='1') THEN
93
nx_state <= C123;
94
END IF;
95
WHEN C123 =>
96
ldr1 <= '1';inc2 <= '1';ldr3 <= '1';muxctrl <= '1';
97
IF(start = '0' AND r1y = '0') THEN
98
nx_state <= PASIVNO;
99
END IF;
100
END CASE;
101
END PROCESS;
102
END control;
103
-- fajl delitelj.vhd ----------------------------------------104
LIBRARY IEEE;
105
USE IEEE.STD_LOGIC_1164.ALL;
106
USE delitelj_pck.ALL; -- sadrzi deklaracije komponeti
107 ----------------------------------------------------------------108
ENTITY delitelj IS
109
PORT(x, y : IN STD_LOGIC_VECTOR(11 DOWNTO 0);
110
q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
111
rdy : OUT STD_LOGIC;
112
start, clk, rst : IN STD_LOGIC);
58
59

272
113
114
115
116
117
118
119
120
121
122
123
124

RTL projektovanje

END delitelj;
--------------------------------------------------------------ARCHITECTURE delitelj OF delitelj IS
SIGNAL muxctrl,ldr1,clr2,inc2,ldr3,r1y : STD_LOGIC;
BEGIN
CTRL: control PORT MAP(start=>start,rdy=>rdy,muxctrl=>muxctrl,
ldr1=>ldr1,ldr3=>ldr3,clr2=>clr2,
inc2=>inc2,r1y=>r1y,clk=>clk,rst=>rst);
DTPH: datapath PORT MAP(x=>x,y=>y,q=>q,muxctrl=>muxctrl,
ldr1=>ldr1,ldr3=>ldr3,clr2=>clr2,
inc2=>inc2,r1y=>r1y,clk=>clk,rst=>rst);
END delitelj;

Pr. 9-21 Realizacija sekvencijalnog delitelja sekvencijalna staza podataka


U ovom primeru predstavljena je realizacija, u vidu VHDL opisa, sekvencijalnog delitelja
zasnovanog na stazi podataka sa ALU iz Pr. 9-19. Najpre e biti kreiran VHDL opis ALU
jedinice, koji e potom, kao komponenta, biti iskorien u opisu staze podataka. VHDL
projekat sadri etiri datoteke: alu.vhd (opis ALU jedinice), datapath.vhd (opis staze
podataka), control.vhd (opis upravljake jedinice) i delitelj.vhd (vrni modul sa
instanciranim i spojenim komponentama staze podataka i upravljake jedinice).
Arhitektura alu_v1 (linije 14-25) predstavlja direktnu realizaciju ALU, kreiranu shodno
tabeli operacija sa Sl. 9-27(b), a po ugledu na opis ALU iz Pr. 4-14. Meutim, zbog veeg
broja aritmetikih operatora, ovakav VHDL opis ALU (a to vai i za opis iz Pr. 4-14) nije
racionalan u pogledu hardverske sinteze. Sintetizovan hardver bie funkcionalno korektan,
ali e sadrati ak tri aritmetike komponente i to po jedan oduzima, inkrementer i
komparator, kao to je u vidu konceptualnog dijagrama prikazano na Sl. 9-29(a). Iz tog
razloga, korisno je ispitati mogunost deobe funkcija u cilju smanjena broja operatora
sadranih u opisu (v. 4.5.2).
est je sluaj da su veina operacija viefunkcionalnih aritmetikih jedinica, kakva je i
konkretna ALU, zasnovane na operaciji sabiranja. Tako se oduzimanje svodi na sabiranje
umanjenika i potpunog komplementa umanjioca, a inkrementiranje na sabiranje sa
konstantom 1. ak se i ispitivanje uslova vee-jednako moe realizovati posredstvom
oduzimanja, na osnovu znaka razlike dva broja koji se porede. Kao to je poznato iz osnova
digitalne elektronike, izlazni prenos koji se generie prilikom oduzimanja neoznaenih
binarnih brojeva ukazuje na znak razlike. Konkretno, ako je razlika negativna, izlazni
prenos e imati vrednost 1, a ako je jednaka nuli ili pozitivna, vrednost izlaznog prenosa e
biti 0. Imajui to u vidu, ishod poreenja ab identian je komplementu vrednosti izlaznog
prenosa u operaciji a-b. Polazei od jednog ovakvog razmatranja, na Sl. 9-29(b) je prikazan
konceptualni dijagram optimizovane ALU za primenu u stazi podataka sekvencijalnog
delitelja. Centralno mesto u ovom kolu zauzima binarni sabira sa signalima ulaznog (cin) i
izlaznog (cout) prenosa. U zavisnosti od vrednosti upravljakog signala aluctrl na ulaze
sabiraa se posredstvom multipleksera dovodi odgovarajua kombinacija sabiraka i
vrednosti ulaznog prenosa, na nain kako je dato u tabeli sa Sl. 9-29(c). Proputanje
vrednosti sa ulaza a na izlaz c ostvaruje se tako to se a sabira s nulom. Postavljanje svih
nula na izlazu c rezultat je operacije 0 0. Inkrementirana vrednost a se dobija tako to
sabira obavlja operaciju a + 0, uz cin=1. Za izraunavanje razlike a b i poreenje ab,
kolo se podeava tako da sabira obavlja operaciju a + b + 1 .

273

Postupak projektovanja
d
a

01
others

b
aluctrl

+1

+ sc
00|11
01
10

b
d

cout
sa

0
1
aluctrl

00|01
10|11

sb

cin

Operacija
Proputanje
(c = a)
Sve nule
(c = 0)
Oduzimanje
(c = a b)
Inkrement
(c = a + 1)

aluctrl

sa

sb

cin

00

01

10

11

(a)
(b)
(c)
Sl. 9-29 ALU sekvencijalnog delitelja: (a) neoptimizovao reenje; (b) reenje optimizovano
primenom deobe funkcija; (c) funkcionalna tabela kola sa Sl. 9-29(b).

Arhitektura alu_v2 (linije 27-40) kreirana je shodno konceptualnom dijagramu sa Sl.


9-29(b). Naredba dodele iz linija 31 realizuje sabira sa signalom ulaznog prenosa (v. Pr.
4-18). Uoimo da su vektorski signali sa, sb i sc (deklarisani u liniji 28) za jedan bit dui od
duine ulaznih portova a i b. Ovo produenje je neophodno kako prilikom sabiranja izlazni
prenos ne bi bio izgubljen. Princip je taj da ako se na N+1 bitne ulaze sabiraa dovedu Nbitni sabirci proireni nulom s leve strane, tada e se na krajnjem levom bitu izlaznog
signala sc sabiraa, sc(N), generisati izlazni prenos N-bitnog sabiranja. U linijama 32 i 33,
na izlazne portove c i d se prenose signali sume i izlaznog prenosa sabiraa. Tri WHEN
naredbe koje slede u nastavku kda, slue da bi se u zavisnosti od zahtevane operacije, a
shodno tabeli sa Sl. 9-29(c), na ulaze sabiraa postavile odgovarajue vrednosti sabiraka i
ulaznog prenosa.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

-- fajl: ALU.vhd ------------------------------------------------LBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
-----------------------------------------------------------------ENTITY alu IS
GENERIC(N : NATURAL);
PORT(a, b : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
aluctrl : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
d : OUT STD_LOGIC;
c : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0));
END alu;
- neoptimizovano resenje ---------------------------------------ARCHITECTURE alu_v1 OF alu IS
SIGNAL dif, inc : STD_LOGIC_VECTOR(N-1 DOWNTO 0);
BEGIN
dif <= STD_LOGIC_VECTOR(UNSIGNED(a) - UNSIGNED(b));
inc <= STD_LOGIC_VECTOR(UNSIGNED(a) + 1);
c <= a
WHEN aluctrl = "00" ELSE
(OTHERS => '0') WHEN aluctrl = "01" ELSE
dif
WHEN aluctrl = "10" ELSE
inc;
d <= '1' WHEN a >= b ELSE
'0';
END alu_v1;
- optimizovano resenje------------------------------------------ARCHITECTURE alu_v2 OF alu IS

274
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82

RTL projektovanje

SIGNAL sa, sb, sc : UNSIGNED(N DOWNTO 0);


SIGNAL cin : UNSIGNED(0 DOWNTO 0);
BEGIN
sc <= sa + sb + cin;
c <= STD_LOGIC_VECTOR(sc(N-1 DOWNTO 0));
d <= NOT sc(N);
sa <= (OTHERS => '0') WHEN aluctrl = "01" ELSE
UNSIGNED('0' & a);
sb <= UNSIGNED(NOT('0' & b)) WHEN aluctrl = "10" ELSE
(OTHERS => '0');
cin <= "1" WHEN aluctrl = "10" OR aluctrl = "11" ELSE
"0";
END alu_v2;
fajl datapath.vhd ---------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE delitelj_pck.ALL; -- sadrzi deklaracije komponeti
ENTITY datapath IS
GENERIC(N : NATURAL := 8);
PORT(ldr1, ldr2 : IN STD_LOGIC;
x, y : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
muxctrl, aluctrl : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
r1y : OUT STD_LOGIC;
q : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);
clk : IN STD_LOGIC);
END datapath;
-----------------------------------------------------------------ARCHITECTURE datapath OF datapath IS
SIGNAL alu_c, alu_a, r1, r2 : STD_LOGIC_VECTOR(N-1 DOWNTO 0);
SIGNAL alu_d : STD_LOGIC;
BEGIN
-- registar r1 -------------------------------------------------PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN
IF(ldr1='1') THEN
r1 <= alu_c;
END IF;
END IF;
END PROCESS;
-- registar r2 -------------------------------------------------PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN
IF(ldr2='1') THEN
r2 <= alu_c;
END IF;
END IF;
END PROCESS;
-- mux ---------------------------------------------------------alu_a <= x WHEN muxctrl = "00" ELSE
r1 WHEN muxctrl = "01" ELSE
r2;
-- ALU ---------------------------------------------------------alu_1: alu GENERIC MAP (N => N)

Postupak projektovanja

275

PORT MAP(a=>alu_a, b=>y, aluctrl=>aluctrl,


c=>alu_c, d=>alu_d);
85
-- izlaz -------------------------------------------------------86 q <= r2;
87 r1y <= alu_d;
88 END datapath;
89 fajl control.vhd ----------------------------------------------90 LIBRARY IEEE;
91 USE IEEE.STD_LOGIC_1164.ALL;
92 -----------------------------------------------------------------93 ENTITY control IS
94 PORT(clk, rst, start : IN STD_LOGIC;
95
r1y : IN STD_LOGIC;
96
ldr1, ldr2 : OUT STD_LOGIC;
97
rdy : OUT STD_LOGIC;
98
muxctrl, aluctrl : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
99 END control;
100
---------------------------------------------------------------101 ARCHITECTURE control OF control IS
102
TYPE state IS (PASIVNO, INIT, TEST, C1, C2);
103
SIGNAL pr_state, nx_state : state;
104 BEGIN
105
-- registar stanja ------------------------------------------106
PROCESS (clk,rst)
107
BEGIN
108
IF(rst='1')THEN
109
pr_state <=PASIVNO;
110
ELSIF(clk'EVENT AND clk='1') THEN
111
pr_state <= nx_state;
112
END IF;
113
END PROCESS;
114
-- logika sledeceg stanja-izlaza -----------------------------115
PROCESS(start,r1y,pr_state)
116
BEGIN
117
nx_state <= pr_state;
118
rdy<='0';ldr1<='0';ldr2<='0';muxctrl<="00";aluctrl<="00";
119
CASE pr_state IS
120
WHEN PASIVNO =>
121
ldr1<='1';rdy<='1';
122
IF(start='1') THEN
123
nx_state <= INIT;
124
END IF;
125
WHEN INIT =>
126
ldr2<='1';aluctrl<="01";
127
nx_state <= TEST;
128
WHEN TEST =>
129
muxctrl<="01";aluctrl<="10";
130
IF(r1y = '1') THEN
131
nx_state <= C1;
132
ELSE
133
nx_state <= PASIVNO;
134
END IF;
135
WHEN C1 =>
136
ldr1<='1';muxctrl<="01";aluctrl<="10";
137
nx_state <= C2;
83
84

276
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169

RTL projektovanje

WHEN C2 =>
ldr2<='1';muxctrl<="10";aluctrl<="11";
nx_state <= TEST;
END CASE;
END PROCESS;
END control;
fajl delitelj.vhd --------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE delitelj_pck.ALL; -- sadrzi deklaracije komponeti
----------------------------------------------------------------ENTITY delitelj IS
GENERIC(N : NATURAL := 8);
PORT(clk,rst,start : IN STD_LOGIC;
x, y : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
rdy : OUT STD_LOGIC);
END delitelj;
----------------------------------------------------------------ARCHITECTURE delitelj OF delitelj IS
SIGNAL ldr1,ldr2,r1y : STD_LOGIC;
SIGNAL muxctrl, aluctrl : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
CTRL: control
PORT MAP (start=>start,rdy=>rdy,muxctrl=>muxctrl,
aluctrl=>aluctrl,ldr1=>ldr1,ldr2=>ldr2,
r1y=>r1y,clk=>clk,rst=>rst);
DTPH: datapath
GENERIC MAP(N=>N)
PORT MAP(x=>x,y=>y,q=>q,muxctrl=>muxctrl,aluctrl=>aluctrl,
ldr1=>ldr1,ldr2=>ldr2,r1y=>r1y,clk=>clk);
END delitelj;

9.3. Primeri RTL sistema


Pr. 9-22 Sekvencijalni broja jedinica
Broja jedinica (bit_counter) je kolo koje prebrojava 1-ce u ulaznom binarnom vektoru. U
Pr. 8-24 predstavljena je kombinaciona varijantu ovog kola. U ovom primeru,
realizovaemo sekvencijalni broja jedinica iji je blok dijagram prikazan na Sl. 9-30(a).
Ulazni vektor duine n bita se dovodi na ulaz a. Rad brojaa jedinica je ilustrovan
vremenskim dijagramom sa Sl. 9-30(b). Prebrojavanje 1-ca se startuje aktiviranjem signala
start u trajanju od jednog taktnog perioda. Nakon to zavri rad, kolo postavlja rezultat na
izlaz b i aktivira izlazni signal rdy. Za brojanje jedinica bie iskorien postupak
(algoritam) koji je, u vidu pseudo kda, dat na Sl. 9-30(c).
Algoritam. U algoritmu za brojanje 1-ca koriste se dve promenljive: A (sadri ulazni vektor
koje se obrauje) i B (slui za odbrojanje 1-ca). Algoritam radi tako to pomera sadraj
promenljive A udesno i broji koliko puta se na poziciji najmanje teine (A0) javila 1-ca.
Algoritam se zavrava onda kad u promenljivoj A vie nema 1-ca. Konani rezultat je
dostupan u promenljivoj B.

Primeri RTL sistema

277

Upis ulaznog vektora


clk

start
b

1 . . .

rdy
Rezultat dostupan
za oitavanje

(a)

Izraunaranje

Rezultat dostupan
za oitavanje

B = 0;
while(A0) do
if(A0=1)then
B = B + 1;
end if;
A = A >> 1;
end while;

(b)

(c)

Sl. 9-30 Broja jedinica: (a) blok dijagram; (b) vremenski dijagram; (c) algoritam.

Interfejs i inicijalizacija. Za hardversku realizaciju brojaa jedinica potrebna su dva


registra: regA (odgovara promenljivoj A) i regB (odgovara promenljivoj B) (Sl. 9-31(a)).
Na poetku rada, u registar regA se upisuje ulazni vektor. Izlaz registra regB je ujedno i
izlaz b ovog kola. Na Sl. 9-31(b) je prikazan segment ASMD dijagrama koji opisuje rad
interfejsa i inicijalizaciju registara regA i regB. Stanje IDLE je pasivno (neaktivno) stanje
brojaa jedinica. U ovom stanju, postavljen je signal rdy koji ukazuje korisniku da je kolo
spremno za rad. Takoe, u ovom stanju, u registar regA se upisuje vektora sa ulaza a. Pri
start=1, u registar regB se upisuju sve nule, stanje IDLE se naputa i poinje
izraunavanje.
IDLE
regA a
rdy

start

1
regB 0

Izraunavanje

(a)
(b)
Sl. 9-31 Interfejs i registri brojaa jedinica: (a) registri; (b) segment ASMD dijagrama.

ASMD dijagram. Na Sl. 9-32(a) je prikazan ASMD dijagram brojaa jedinica dobijen
direktnom konverzijom algoritma sa Sl. 9-30(c). Uvedena su tri nova stanja, TEST, INCR i
SHIFT. Uslovi iz while i if naredbe su pridrueni istom, praznom stanju TEST s obzirom
na to to se oba odnose na istu promenljivu (registar). Registar regB se inkrementira u
stanju INCR, dok se registar regA pomera za jednu poziciju udesno u stanju SHIFT. Na Sl.
9-32(b) je ilustrovan rad ASMD dijagrama za sluaj kada je ulazni vektor oblika a=0101.
Zapazimo da izraunavanje traje 10 taktnih ciklusa.

278

RTL projektovanje

clk
0
1
2
3
4
5
6
7
8
9
10
11

start
1
0
0
0
0
0
0
0
0
0
0
0

Tekue
stanje
IDLE
TEST
INCR
SHIFT
TEST
SHIFT
TEST
INCR
SHIFT
TEST
IDLE
IDLE

(a)

regA
xxxx
0101
0101
0101
0010
0010
0001
0001
0001
0000
0000
xxxx

regB
xx
00
00
01
01
01
01
01
10
10
10
10

Sledee
Stanje
TEST
INCR
SHIFT
TEST
SHIFT
TEST
INCR
SHIFT
TEST
IDLE
IDLE
IDLE

rdy
1
0
0
0
0
0
0
0
0
0
1
1

(b)

Sl. 9-32 Inicijalni ASMD brojaa jedinica; (a) ASMD; (b) ilustracija rada za a=0101.

clk
0
1
2
3
4
5
6
7
8
9
(a)

start
1
0
0
0
0
0
0
0
0
0

Tekue
stanje
IDLE
TEST
SHIFT
TEST
SHIFT
TEST
SHIFT
TEST
IDLE
IDLE

regA
xxxx
0101
0101
0010
0010
0001
0001
0000
0000
xxxx

regB
xx
00
01
01
01
01
10
10
10
10

Sledee
Stanje
TEST
SHIFT
TEST
SHIFT
TEST
SHIFT
TEST
IDLE
IDLE
IDLE

rdy
1
0
0
0
0
0
0
0
1
1

(b)

Sl. 9-33 ASMD sa izbaenim stanjem INCR: (a) ASMD; (b) ilustracija rada za a=0101.

279

Primeri RTL sistema

Prva optimizacija koja se moe uiniti u polaznom ASMD dijagramu brojaa jedinica
sastoji se u izbacivanju stanja INCR i pridruivanju naredbe regB regB + 1 stanju TEST
(Sl. 9-33(a)). Ova manipulacija je dozvoljena zato to vrednost registra regB nema uticaja
na ishod ispitivanja u stanju TEST. Uoimo da je u ASMD dijagramu sa Sl. 9-33(a)
operacija inkrementiranja registra regB napisana u zaobljenom pravougaoniku, tj. tretira se
kao uslovna naredba dodele koja se izvrava u stanju TEST, ali samo pod uslovom ako
vai regA0 i regA(0)= 1. Eliminisanjem jednog stanja iz petlje, rad ASMD dijagrama je
ubrzan tako da sada brojanje 1-ca u vektoru 0101 traje 8 taktnih ciklusa, kao to se to
moe videti u tabeli sa Sl. 9-33(b).
Druga optimizacija brojaa jedinica odnosi se na eliminaciju stanja SHIFT iz ASMD
dijagrama sa Sl. 9-33(a). To se postie prebacivanjem naredbe registarskog prenosa regA
regA << 1 u stanje TEST, koje je sada nazvano SHIFT (Sl. 9-34(a)). Na prvi pogled,
ini se da ova manipulacija remeti tok izvrenja algoritma, jer se u istom stanju sadraj
registra regA i modifikuje i ispituje. Meutim, ova nedoslednost nema uticaja na konani
rezultat. Prvo, kad se u stanje SHIFT ulazi iz stanja IDLE, u stanju SHIFT se za ispitivanje
uslova koristi stara vrednost registra regA, tj. a, ba kao u ASMD dijagramu sa Sl. 9-33(a).
Drugo, u poslednoj iteraciji petlje, tj. onda kada registar regA ima vrednost sve nule,
inicirae se jo jedno, nepotrebno pomeranje udesno sadraja ovog registra. Meutim,
eventualna pogrena vrednost u registru regA na kraju izraunavanja nije od znaaja budui
da se rezultat nalazi u registru regB. U svakom sluaju, pomeranje udesno vrednosti sve
nule kao rezultat daje takoe sve nule. S obzirom na to to je sada broj stanja (taktnih
ciklusa) po jednoj iteraciji smanjen na samo jedno stanje, brzina rada kola je znaajno
poveana. Kao to se moe videti iz table sa Sl. 9-34(b), za prebrojavanje 1-ca u vektoru
0101 sada je potrebno 5 taktnih ciklusa, u odnosu na 8 iz prethodne varijante ASMD
dijagrama.

clk
0
1
2
3
4
5
6
(a)

start
1
0
0
0
0
0
0

Tekue
stanje
IDLE
SHIFT
SHIFT
SHIFT
SHIFT
IDLE
IDLE

regA
xxxx
0101
0010
0001
0000
0000
xxxx

regB
xx
00
01
01
10
10
10

Sledee
Stanje
SHIFT
SHIFT
SHIFT
SHIFT
IDLE
IDLE
IDLE

rdy
1
0
0
0
0
1
1

(b)

Sl. 9-34 ASMD sa izbaenim stanjem SHIFT: (a) ASMD; (b) ilustracija rada za a=0101.

280

RTL projektovanje
IDLE
regA a
rdy

start

rdy
1
regB 0
SHIFT
regA regA >>1

regA 0

NE

DA
regA(0)
1
regB regB + 1

(a)

clk
0
1
2
3
4
5

start
1
0
0
0
0
0

Tekue
stanje
IDLE
SHIFT
SHIFT
SHIFT
SHIFT
IDLE

regA
xxxx
0101
0010
0001
0000
0000

regB
xx
00
01
01
10
10

Sledee
Stanje
SHIFT
SHIFT
SHIFT
SHIFT
IDLE
IDLE

rdy
1
0
0
0
1
1

(b)

Sl. 9-35 Konana verzija ASMD dijagrama brojaa jedinica; (a) ASMD; (b) ilustracija rada za
a=0101.

Poslednja u nizu optimizacija ASMD dijagrama brojaa jedinica tie se ranijeg postavljanja
izlaznog statusnog signala rdy. Iz tabele sa Sl. 9-34(b) vidimo da se indikacija zavrenog
izraunavanja (rdy = 1) postavlja u 5. taktnom ciklusu, iako je konaan rezultat dostupan
ve u 4. taktnom ciklusu. To znai da se ukupno vreme izraunavanja moe smanjiti za
jedan taktni ciklus, ako se signala rdy aktivira u stanju SHIFT u toku poslednje iteracije
petlje, tj. onda kad je uslov regA=0 ispunjen (Sl. 9-35(a)). Tabela sa Sl. 9-35(b) ilustruje
rad konane varijante ASMD dijagrama za ulazni vektor 0101. Treba napomenuti da je
znaajno ubrzanje rada u odnosu na polazni ASMD dijagram ostvareno zahvaljujui
maksimalno ispoljenom paralelizmu u izvrenju operacija obuhvaenih petljom.
Razrada. ASMD dijagram brojaa jedinica sadri dve promenljive, regA i regB kojima e u
stazi podataka odgovarati dve registarske komponente (v. Sl. 9-31(a)). Za manipulaciju
promenljivom regA moe se koristiti pomeraki registar sa pomeranjem udesno (zbog
operacije regAregA>>1 u stanju SHIFT). Zbog operacije regAa iz stanja IDLE, ovaj
registar treba da poseduje mogunost paralelnog upisa. S druge strane, za regB potreban je
broja (zbog regBregB+1 iz bloka uslovnog izlaza u stanju SHIFT). Dodatno, ovaj
broja treba da ima i mogunost sinhronog resetovanja (zbog regB0 u stanju IDLE).
Takoe, obe registarske komponente moraju imati ulaz za dozvolu rada, kako bi njihov rad
mogao da se onemogui u stanjima u kojima se ne obavljaju njihove operacije. Blok
dijagram sekvencijalnog brojaa jedinica dobijen razradom ASMD dijagram sa Sl. 9-35(a)
prikazan je na Sl. 9-36(a). Strukturu ine upravljaka jedinica i staze podataka koja sadri
dve opisane registarske komponente.

Primeri RTL sistema

281

(a)
(b)
Sl. 9-36 Sekvencijalni brojaa jedinica u fazi razrade: (a) strukturni dijagram; (b) ASM
dijagram upravljake jedinice.

Upravljaki ulaz pomerakog registra (komponenta shift) su: ld - dozvola paralelnog upisa i
ena dozvola rada. Za ld=ena=1, ulazni vektora a se upisuje u pomeraki registar, dok se
za ld=0 i ena=1, sadraj registra pomera za jednu poziciju udesno s upisom nule na
krajnju levu bitsku poziciju. Broja (komponenta counter) poseduje istoimene upravljake
ulaze. Za ld=ena=1, u broja se paralelno upisuju sve nule, koje su fiksno postavljene na
njegovom ulazu din. Na taj nain, realizovana je funkcija sinhronog resetovanja. Za ld=0
i ena=1, sadraj brojaa se uveava za 1. Izlaz brojaa je ujedno i izlaz b sekvencijalnog
brojaa jedinica. Za testiranje uslova regA=0, koristi se n-to ulazno NILI kolo. Izlaz NILI
kola, z, imae vrednost z=1 samo ako pomeraki registar sadri sve nule (tj. ako vai
regA=0). Za spregu s upravljakom jedinicom, osim z, koristi se i krajnji desni bit
pomerakog registra, oznaene kao a0. Radi jednostavnosti prikaza, izostavljeni su signali
takta, clk, i asinhronog resetovanja, rst, koji pobuuju upravljaku jedinicu i obe registarske
komponente.
Nakon to smo precizno opisali stazu podataka, u mogunosti smo da kreiramo ASM
dijagram upravljake jedinice (Sl. 9-36(b)). Ovaj dijagram ima identinu strukturu kao
ASMD dijagram sa Sl. 9-35(a), s tom razlikom to su naredbe registarskog prenosa i
relacije zamenjene naredbama postavljanja upravljakih signala i ispitivanjima statusnih
signala staze podataka. Na primer, blok stanja SHIFT sada sadri samo ime signala ea. To
znai da e u ovom stanju vaiti ea=1 i la=eb=lb=0. Pod ovim uslovima, pomeraki
registar obavlja pomeranje udesno, dok sadraj brojaa ostaje nepromenjen, to ima isti
efekat kao naredba registarskog prenosa regAregA>>1 sadrana u istoimenom stanju iz
ASMD dijagrama. Blok grananja koji sledi neposredno posle bloka stanja SHIFT, u ASMD
dijagramu sadri ispitivanje regA=0. U ASM dijagramu upravljake jedinice, ovo
ispitivanje je zamenjeno testiranjem statusnog signala staze podataka, z.
Realizacija. U nastavku je dat kompletan VHDL kd projekta sekvencijalnog brojaa
jedinica, pod pretpostavkom da je ulaz port a 8-bitni, a izlaz port b 3-bitni. Datoteka

282

RTL projektovanje

pomerakog registra (linije 19-32), a drugi brojaa (linije 34-47). Napomenimo da su opisi
pomerakog registra i brojaa kreirani shodno njihovim specifikacijama koje potiu iz faze
razrade. Konkurentna naredba when iz linije 49 postavlja statusni signal z ako je sadraj
registra regA jednak sve nule. Sledei deo VHDL kda, control.vhd, opisuje upravljaku
jedinicu na osnovu ASM dijagrama sa Sl. 9-36(b). Ovaj opis je usklaen sa dvosegmentnim
kodnim ablonom za konane automate. Konano, u vrnom modulu, ones_counter.vhd,
komponente datapath i control su instancirane i meusobno povezane..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

-------datapath.vhd ---------------------------------------------LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;;
ENTITY datapath IS
PORT(a : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
b : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
la,ea,lb,eb : IN STD_LOGIC;
a0,z : OUT STD_LOGIC;
clk : IN STD_LOGIC;
rst : IN STD_LOGIC);
END datapath;
-----------------------------------------------------------------ARCHITECTURE datapath OF datapath IS
SIGNAL regA : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL regB : UNSIGNED(3 DOWNTO 0);
BEGIN
-- regA - pomeracki registar -----------------------------------PROCESS (clk,rst)
BEGIN
IF(rst='1')THEN
regA <=(OTHERS => '0');
ELSIF(clk'EVENT AND clk='1') THEN
IF(ea ='1') THEN
IF(la = '1') THEN
regA <= a;
ELSE
regA <= '0' & regA(7 DOWNTO 1);
END IF;
END IF;
END IF;
END PROCESS;
-- regB brojac -----------------------------------------------PROCESS (clk,rst)
BEGIN
IF(rst='1')THEN
regB <=(OTHERS => '0');
ELSIF(clk'EVENT AND clk='1') THEN
IF(eb ='1') THEN
IF(lb = '1') THEN
regB <= (OTHERS => '0');
ELSE
regB <= regB + 1;
END IF;
END IF;
END IF;
END PROCESS;

Primeri RTL sistema

283

b <= STD_LOGIC_VECTOR(regB);
z <= '0' WHEN regA = "00000000" ELSE '1';
50 a0 <= regA(0);
51 END datapath;
52 ---- control.vhd -----------------------------------------------53 IBRARY IEEE;
54 SE IEEE.STD_LOGIC_1164.ALL;
55 NTITY control IS
56 PORT(start: IN STD_LOGIC;
57
rdy : OUT STD_LOGIC;
58
z, a0 : IN STD_LOGIC;
59
la,ea,lb,eb : OUT STD_LOGIC;
60
clk : IN STD_LOGIC;
61
rst : IN STD_LOGIC);
62 END control;
63 ----------------------------------------------------------------64 ARCHITECTURE control OF control IS
65
TYPE state IS (IDLE, SHIFT);
66
SIGNAL pr_state, nx_state : state;
67 BEGIN
68
-- registar stanja --------------------------------------------69 PROCESS (clk,rst)
70
BEGIN
71
IF(rst='1')THEN
72
pr_state <= IDLE;
73
ELSIF(clk'EVENT AND clk='1') THEN
74
pr_state <= nx_state;
75
END IF;
76
END PROCESS;
77
-- logika sledeceg stanja/izlaza -----------------------------78
PROCESS(pr_state,start,z,a0)
79
BEGIN
80
nx_state <= pr_state;
81
la <= '0'; ea <= '0';
82
lb <= '0'; eb <= '0';
83
rdy <= '0';
84
CASE pr_state IS
85
WHEN IDLE =>
86
rdy <= '1';
87
la <= '1';
88
ea <= '1';
89
IF(start = '1') THEN
90
lb <= '1';
91
eb <= '1';
92
nx_state <= SHIFT;
93
END IF;
94
WHEN SHIFT =>
95
ea <= '1';
96
IF(z = '0') THEN
97
rdy <= '1';
98
nx_state <= IDLE;
99
ELSIF(z = '1' AND a0 = '1') THEN
100
eb <= '1';
101
END IF;
102
END CASE;
48
49

284
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138

RTL projektovanje

END PROCESS;
END control;
-----ones_counter.vhd ------------------------------------------IBRARY IEEE;
SE IEEE.STD_LOGIC_1164.ALL;
NTITY bit_counter IS
PORT(a : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
b : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
start : IN STD_LOGIC;
rdy : OUT STD_LOGIC;
clk : IN STD_LOGIC;
rst : IN STD_LOGIC);
END bit_counter;
----------------------------------------------------------------ARCHITECTURE bit_counter OF bit_counter IS
COMPONENT datapath IS
PORT(a : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
b : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
la,ea,lb,eb : IN STD_LOGIC;
a0,z : OUT STD_LOGIC;
clk : IN STD_LOGIC;
rst : IN STD_LOGIC);
END COMPONENT;
COMPONENT control IS
PORT(start: IN STD_LOGIC;
rdy : OUT STD_LOGIC;
z, a0 : IN STD_LOGIC;
la,ea,lb,eb : OUT STD_LOGIC;
clk : IN STD_LOGIC;
rst : IN STD_LOGIC);
END COMPONENT;
SIGNAL la, ea, lb, eb, z, a0 : STD_LOGIC;
BEGIN
CTRL: control PORT MAP(start,rdy,z,a0,la,ea,lb,eb,clk,rst);
DPHT: datapath PORT MAP(a,b,la,ea,lb,eb,a0,z,clk,rst);
END bit_counter;

Pr. 9-23 Sekvencijalni delitelj ubrzani algoritam


U ovom primeru predstavljena je jo jedna varijanta sekvencijalnog delitelja, koja, za
razliku od ranije razmatranih varijanti ovog kola, umesto uzastopnom oduzimanju delioca
od deljenika realizuje jedan bri algoritam, izveden na osnovu tradicionalnog, runog
postupku deljenja.
Sl. 9-37(a) prikazuje primer runog deljenja decimalnih brojeva 140 i 9. Prvi korak je
pokuaj deljenja cifre najvee teine deljenika, 1, deliocem, 9. Poto se 9 ne sadri u 1,
uzimamo sledeu cifru deljenika, 4, i proveravamo da li se 9 sadri u 14. Sada je deljenje
mogue, to daje prvu cifru kolinika 1 (=14/9) i ostatak 5 (=14-9x1). Deljenje nastavljamo
tako to s desne strane ostatak dopisujemo sledeu (i poslednju) cifru deljenika, 0, i delimo
50 sa 9. To daje drugu cifru kolinika 5 (=50/9) i ostatak 5 (=50-5x9). Time je deljenje
zavreno. Rezultat je Q=15 (kolinik) i R=5 (ostatak). Postupak e biti identian i ako
umesto decimalnih delimo binarne brojevi, s pojednostavljenjem da svaki bit kolinika
moe imati samo dve vrednosti, 0 ili 1 (Sl. 9-37(b)).

Primeri RTL sistema

285

A
B
Q
10001100 : 1001 = 1111
-1001
----10001
-1001
----10000
-1001
----01110
-1001
-----0101 <- R

(a)
(b)
(c)
Sl. 9-37 Ilustracija postupka runog deljenja: (a) primer deljenja decimalnih brojeva; (b)
primer deljenja binarnih brojeva; (c) modifikovan postupak.

Na zadatak je da korienjem opisanog postupka deljenja projektujemo kolo koje na ulazu


dobija dva neoznaena n-bitna cela broja, a i b, i generie dva n-bitna cela broja, q i r, gde
je q kolinik, a r ostatak deljenja a/b. Procedura koja je ilustrovana na Sl. 9-37(b) moe se
sprovesti i na nain kao na Sl. 9-37(c), gde je sputanje cifara deljenika zamenjeno
operacijom pomeranja. Deljenik, sadran u promenljivoj A, proiren je s leve strane ciframa
ostatka, R, koje su na poetku sve nule. U svakom koraku, ostatak i deljenik se zajedno
pomeraju za jednu bitsku poziciju ulevo, a zatim se ispituje da li se delilac sadri u ostatku.
Odgovarajui bit kolinika dobija vrednost 0 ako deljenje nije mogue. Ako je deljenje
mogue, odgovarajui bit kolinika dobija vrednost 1, a ostatak se koriguje oduzimanjem
delioca. Opisani postupak se ponavlja N puta, gde je N broj bita operanada, odnosno sve
dok svi bitovi deljenika ne napuste promenljivu A.
R = 0;
for C = 0 to N-1 do
(R,A) = (R,A) << 1;
if(R B) then
QC = 1;
R = R - B;
else
QC = 0;
end if;
end for;

R = 0;
for C = 0 to N-1 do
(R,A) = (R,A) << 1;
if(R B) then
Q = (Q << 1)1;
R = R - B;
else
Q = (Q << 1)0;
end if;
end for;

R = 0;
C = N-1;
do
(R,A) = (R,A) << 1;
if(R B) then
Q = (Q << 1)1;
R = R - B;
else
Q = (Q << 1)0;
end if;
C = C 1;
while(C0);

(a)
(b)
(c)
Sl. 9-38 Algoritam deljenja: (a) polazni pseudo kd; (b) pseudo kd sa pomeranjem kolinika;
(c) pseudo kd sa do-while petljom.

286

RTL projektovanje

Algoritam. Algoritam opisanog postupka deljenja dat je u obliku pseudo kda na Sl.
9-38(a). (R,A) oznaava 2n-bitnu promenljivu dobijenu konkatenacijom n-bitnih
promenljivih R i A. Petlja se izvrava N puta, tako to se u svakoj iteraciji generie jedan bit
kolinika, QC, poev od C=0, do C=N-1. Bukvalna interpretacija algoritma znaila bi da se
u i-toj iteraciji petlje, i-ti bit kolinika direktno postavlja na 0 ili 1. Za hardversku
realizaciju, pogodnije je umesto direktnog postavljanja bitova koristiti pomeranje kolinika
Q ulevo sa serijskim upisom vrednosti QC. Pseudo kd s ovom modifikacijom prikazan je
na Sl. 9-38(b). Operacija Q (Q<<1)1 oznaava pomeranje ulevo sa serijskim upisom 1-ce
na krajnju desnu poziciju. Slino, operacija Q (Q<<1)0 pomera Q ulevo za jednu poziciju
i serijski upisuje 0.
Radi jednostavnije konverzije pseudo kda u ASMD dijagram, uineemo jo jednu
modifikaciju: for petlju zameniemo ekvivalentnom do while petljom (Sl. 9-38(c)). Kod do
while petlje, ispitivanje uslova za kraj petlje je na kraju, a ne na poetku petlje, kao to je to
sluaj kod for varijante. To znai da se telo do while izvrava barem jedanput, za razliku od
for petlje, ije telo moe da se izvri nula ili vie puta. Meutim, u konkretnom sluaju ova
nedoslednost nije od znaaja, zato to postoji prirodno ogranienje da N mora biti vee ili
jednako 1. Takoe, zapazimo da se broja petlje, C, koristi samo za odbrojavanje iteracija,
ali ne i kao argument u nekoj drugoj naredbi. Cilj je obezbediti da se petlja izvri tano N
puta, a da pri tom nije bitno da li se broja kree od 0 do N-1 ili od N-1 do 0, kao to je to u
do-while varijanti.
ASMD dijagram. Direktnom konverzijom pseudo kda sa Sl. 9-38(d), primenom pravila za
konverziju iz odeljka 9.2.1, dobijamo ASMD dijagram sa Sl. 9-39(a). Uoimo da ovaj
ASMD dijagram dodatno sadri signale start i rdy. Ova dva signala su deo interfejsa
sekvencijalnog delitelja, koji je identian kao u Pr. 9-5. Zapazimo da se telo petlje izvrava
za 6 ili 5 taktnih ciklusa, u zavisnosti od toga da li je u tekuoj iteraciji R jednako ili vee
od B ili ne. Meutim, ovo je tek polazni oblik ASMD dijagrama i treba oekivati da e se
njegovom optimizacijom postii znaajno poboljanje.
Prazni blokovi stanja TEST1 i TEST2 uvedeni su iz razloga da bi se prilikom ispitivanja
uslova grananja koristile aurne vrednosti promenljivih. U uslovu grananja se garantovano
koristi aktuelna vrednost registra ako se upis u registar i grananje ne vre u istom stanju. Pri
tom nije neophodno da blok stanja koji deli ove dve operacije bude prazan, ve je bitno da
se u tom stanju ne modifikuje sadraj registara koji se koristi u uslovu grananja. Imajui to
u vidu, oba prazna stanja iz ASMD dijagrama sa Sl. 9-39(a) mogu se eliminisati ako se
promeni redosled naredbi u petlji, tako da naredba dekrementiranja brojaa petlje pree s
kraj na poetak petlje (Sl. 9-39(b)). Razmak izmeu stanja upisa u registar R (stanje SHRA)
i grananja RB je ouvan, kao i izmeu stanja DECR, u kome se broja C dekrementira i
ispitivanja uslova C0. Na ovaj nain, broj taktnih ciklusa potrebnih za jednu iteraciju
petlje smanjen je na 3, odnosno 4.
Sledea optimizacija tie se stanja SHQ1, SHQ0 i SUBB. Kao prvo, uoimo da se stanja
SHQ1 i SUBB mogu spojiti u jedno stanje (SHQ1SUBB), u kome e se u paraleli
izvravati obe naredbe registarskog prenosa, Q(Q<<1)1 i RR-B. Ovo spajanje stanja je
dozvoljeno zato to su naredbe Q(Q<<1)1 i RR-B meusobno nezavisne, u tom
pogledu da ni jedna od njih ne koristi rezultat one druge. Na ovaj nain, broj taktnih ciklusa
po jednoj iteraciji postaje 3, bez obzira na ishod testiranja RB.
Pripajanjem izraunavanja iz stanja SHQ1SUBB i SHQ0 stanju DECR, odnosno zamenom

287

Primeri RTL sistema

jo jedan taktni ciklus po iteraciji. Meutim, s takvom modifikacijom, stanju DECR bilo bi
pripojeno i ispitivanje C0 s kraja petlje, to bi naruilo neophodan vremenski razmak
izmeu ovog ispitivanja i naredbe koja dekrementira broja C. Kao posledica toga, petlja bi
imala jedan prolazak vie, jer bi se izvrila na samo za C=n-1, ..., 0, ve i za C=-1.
Meutim, ovaj nedostatak se moe lako otkloniti ako se uslov za izlazak iz petlje promeni
na C>0. Na taj nain dolazimo do ASMD dijagrama sa Sl. 9-39(c) koji zahteva 2 taktna
ciklusa po iteraciji. Imajui to u vidu, deljenje n-bitnih brojeva trajae 2n+1 taktnih
intervala.
PASIVNO
rdy
Bb
Aa
C n-1

start

PASIVNO

rdy
Bb
Aa
C n-1

R <- 0
SHRA
(R,A) (R,A) << 1

start

TEST1

1
R <- 0
1

RB

SHRA

SHQ1

SHQ2

Q (Q << 1)1

(R,A) (R,A) << 1

Q (Q << 1)0
DECR

SUBB

CC-1

RR-B

DECR

RB

CC-1
Q (Q << 1)1
RR-B

TEST2

C0

(a)

(b)

Q (Q << 1)0

C>0

(c)

Sl. 9-39 ASMD dijagrami sekvencijalnog delitelja : (a) ASMD dobijen konverzijom softverskog
algoritma; (b) ASMD nakon eliminacije stanja TEST1 i TEST2; (c) ASMD nakon spajanja
stanja INCR, SHQ1, SUBB i SHQ2.

Postavlja se pitanje da li je mogue izraunavanja koja se obuhvaena petljom obaviti u


samo jednom taktnom ciklusu. Meutim, pre nego to damo odgovor na ovo pitanje,
usvojimo da je ASMD dijagram sa Sl. 9-39(c) konana verzija ASMD dijagrama
sekvencijalnog delitelja i obavimo njegovu razradu.
Razrada. ASMD dijagram sadri pet promenljivih: A, B, Q, R i C. Promenljive A, B i Q

288

RTL projektovanje

uestvuju u operacijama pomeranja i zato je normalno da se za njihovu realizaciju upotrebe


pomeraki registri. Zajedniko pomeranje kroz registre R i A ostvarie se povezivanjem
krajnjeg levog izlaznog bita registra A na serijski ulaz registra R. Osim u naredbi
registarskog prenosa iz stanja SHRA, koja pomera R i A, promenljiva A se javlja kao
odredite u jo jednoj naredbi, Aa, iz stanja PASIVNO. Ova dodatna operacija zahteva
da pomeraki registar A poseduje mogunost paralelnog upisa. Funkciju paralelnog upisa
treba da poseduje i pomeraki registar R. U stanju PASIVNO R se resetuje, a u stanju
DECR u R se upisuje razlika R-B. Izbor podataka za paralelni upis u registar R, 0 ili R-B,
moe se ostvariti pomou multipleksera. Promenljiva B se koristi za memorisanje delioca,
koji se ne menja tokom izraunavanja. Iz tog razloga, za promenljivu B moemo koristiti
prihvatni registar. Promenljiva B, zajedno s promenljivom R, koristi se u naredbi R-B iz
stanja DECR. Za oduzimanje R-B moemo koristiti n-bitni binarni sabira, pri emu e
promenljiva B biti komplementirana, a na ulazni prenos sabiraa postavljeno 1. Za
realizaciju relacije RB nije potrebno dodatno kolo u stazi podataka, poto informaciju o
tome da li je R vee ili jednako od B imamo na izlazu za izlazni prenos sabiraa koji se ve
koristi za oduzimanje B od R. Izlazni prenos e imati vrednost 0 ako vai RB, odnosno
1 ako vai R<B. ta vie, komplement izlaznog prenosa je upravo ona vrednost koju treba
serijski upisati u pomeraki registar Q, to omoguuje da se izlazni prenos sabiraa
posredstvom invertora direktno povee na serijski ulaz pomerakog registra Q. Konano,
promenljiva C, koja se koristi kao broja petlje, moe se realizovati pomou brojaa nanie
s mogunou paralelnog upisa. Pri tom poetnu vrednost, N-1, treba, kao konstantu,
postavlja na paralelne ulaze ovog brojaa. Na Sl. 9-40 je prikazana struktura sekvencijalnog
delitelja, nakon izvrene razrade. ASM dijagram upravljake jedinice prikazan je na Sl.
9-41.
a

datapath

n
1

rsel

mux

dr
lr
er

ld
ena

start

rdy

din
shift
(reg R)
q

ld
ena

si

din

din

shift
(reg A)
q

reg.
(reg B)
q

ena

si

qn-1

la
ea
eb

regB

n-1

regB_not

qr

control

log2n

eq

ena

shift
(reg Q)
q
n

ld
ena
si

cout

sum

(+)

cin

cout
lc
ec
z

Sl. 9-40 Razraena struktura sekvencijalnog delitelja iz Pr. 9-23.

din
counter
(C)
q
qc

Primeri RTL sistema

289

Sl. 9-41 ASM dijagram upravljake jedinice sekvencijalnog delitelja iz Pr. 9-23.

Realizacija. Nakon razrade ASMD dijagrama, sledi opis razraene strukture u VHDL-u.
VHDL opisi staze podataka (datoteka datapath.vhd) i upravljake jedinice (datoteka
control.vhd) dati su u nastavku. U datom kdu nedostaju opisi komponenti koje se koriste
za konstrukciju staze podataka (shift - pomeraki registar ulevo s paralelnim upisom,
counter - broja nanie s paralelnim upisom i adder - binarni sabira), kao i vrni modul
koji objedinjuje upravljaku jedinicu i stazu podataka. Zapazimo da se u ovom primeru
koristi neto drugaiji pristup za kreiranje VHDL opisa staze podataka. Umesto da je
celokupan opis sadran u jednoj arhitekturi, koriste se nezavisno kreirani VHDL moduli
registarskih komponenti i sabiraa. Meutim, iako koristi komponente, VHDL kd staze
podataka nije u potpunosti strukturnog tipa. Primetimo da se za opis prihvatnog registra B u
arhitektura staze podataka koristi proces; pomeraki registri, broja i sabira su kreirani
instanciranjem odgovarajuih komponenti, dok su multiplekser i invertori opisani
konkurentnim kdom. VHDL opis ASM dijagrama upravljake jedinice, napisan u skladu
sa dvosegmentnim kdnim ablonom, sadran je u datoteci control.vhd.
1
2
3
4
5
6
7
8
9
10
11
12

---- datapath.vhd -----------------------------------------------LIBRARY ieee;


USE ieee.std_logic_1164.all;
-----------------------------------------------------------------ENTITY datapath IS
PORT (a,b : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
rsel,lr,er,la,ea,eb,eq,lc,ec,rst,clk : IN STD_LOGIC;
cout,z : OUT STD_LOGIC;
q,r : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END datapath;
-----------------------------------------------------------------ARCHITECTURE structure OF datapath IS

290
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

RTL projektovanje

COMPONENT shift IS
GENERIC (N : INTEGER);
PORT (si,ld,ena,rst,clk : IN STD_LOGIC;
din : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
q : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0));
END COMPONENT;
COMPONENT counter IS
GENERIC (N : INTEGER);
PORT (ld,ena,rst,clk : IN STD_LOGIC;
din : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
q : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0));
END COMPONENT;
COMPONENT adder IS
GENERIC (N : INTEGER);
PORT (cin : IN STD_LOGIC;
x,y : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
s
: OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);
cout: OUT STD_LOGIC);
END COMPONENT;
SIGNAL regB : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL regB_not : STD_LOGIC_VECTOR(7 DOWNTO 0); -- komplement B
SIGNAL qa,dr,qr,sum : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL qc : STD_LOGIC_VECTOR(2 DOWNTO 0); -- izlaz brojaca C
SIGNAL co, co_not : STD_LOGIC;
BEGIN
-- prihvatni registar B ---------------------------------------REG_B: PROCESS (clk,rst)
BEGIN
IF(rst='1')THEN
regB <=(OTHERS => '0');
ELSIF(clk'EVENT AND clk='1') THEN
IF(eb ='1') THEN
regB <= b;
END IF;
END IF;
END PROCESS;
REG_A: shift GENERIC MAP(N=>8)
PORT MAP(si=>'0',ld=>la,ena=>ea,rst=>rst,
clk=>clk,din=>a,q=>qa);
REG_R: shift GENERIC MAP(N=>8)
PORT MAP(si=>qa(7),ld=>lr,ena=>er,
rst=>rst,clk=>clk,din=>dr,q=>qr);
REG_Q: shift GENERIC MAP(N=>8)
PORT MAP(si=>co_not,ld=>'0',ena=>eq,
rst=>rst,clk=>clk,
din=>(OTHERS=>'0'),q=>q);
ADD : adder GENERIC MAP(N=>8)
PORT MAP(cin=>'1',x=>qr,y=>regB_not,
s=>sum,cout=>co);
CNT : counter GENERIC MAP(N=>3)
PORT MAP(ld=>lc,ena=>ec,rst=>rst,
clk=>clk,din=>"111",q=>qc);
regB_not <= not regB;
dr <= sum WHEN rsel = '1' ELSE (OTHERS => '0');
z <= '1' WHEN qc = "000" ELSE '0'; -- multiplekser za reg R

Primeri RTL sistema

291

co_not <= not co; -- invertor na izlazu sabiraca


cout <= co_not;
70
r<=qr;
71 END structure;
72 -- control.vhd --------------------------------------------------73 LIBRARY ieee;
74 USE ieee.std_logic_1164.all;
75 -----------------------------------------------------------------76 ENTITY control IS
77
PORT (clk,rst,start,cout,z : IN STD_LOGIC;
78
rdy,rsel,la,ea,eb,lc,ec,lr,er,eq : OUT STD_LOGIC);
79 END control;
80 -----------------------------------------------------------------81 ARCHITECTURE ASM OF control IS
82
TYPE state IS (PASIVNO, SHRA, DECR);
83
SIGNAL pr_state, nx_state : state;
84 BEGIN
85
-- registar stanja --------------------------------------------86
PROCESS (clk,rst)
87
BEGIN
88
IF(rst='1')THEN
89
pr_state <=PASIVNO;
90
ELSIF(clk'EVENT AND clk='1') THEN
91
pr_state <= nx_state;
92
END IF;
93
END PROCESS;
94
-- logika sledeceg stanja/izlaza ------------------------------95
PROCESS(start,z,cout,pr_state)
96
BEGIN
97
nx_state <= pr_state;
98
rdy<='0';la<='0';ea<='0';eb<='0';lc<='0';
99
ec<='0';lr<='0';er<='0';eq<='0';rsel<='0';
100
CASE pr_state IS
101
WHEN PASIVNO =>
102
rdy<='1';eb<='1';la<='1';ea<='1';lc<='1';ec<='1';
103
IF(start = '1') THEN
104
lr<='1'; er<='1';
105
nx_state <= SHRA;
106
END IF;
107
WHEN SHRA =>
108
er<='1';ea <='1';
109
nx_state <= DECR;
110
WHEN DECR =>
111
ec<='1';
112
IF(cout = '1') THEN
113
eq<='1';rsel<='1';lr<='1';er<='1';
114
ELSE
115
eq<='1';
116
END IF;
117
IF(z = '1') THEN
118
nx_state <= PASIVNO;
119
ELSE
120
nx_state <= SHRA;
121
END IF;
122
END CASE;
68
69

292
123
124

RTL projektovanje

END PROCESS;
END ASM;

Pr. 9-24 Sekvencijalni delitelj - dodatna optimizacija


Sekvencijalni delitelj iz Pr. 9-23 obavlja deljenje dva n bitna broja za 2n taktnih ciklusa.
Razlog za to su dva stanja u unutranjoj petlji ASMD dijagrama (SHRA i DECR) (v. Sl.
9-39(c)). Ukoliko bismo uspeli da ova dva stanja samemo u jedno, broj potrebnih taktnih
ciklusa bio bi smanjen na n. U stanju INCR, pod uslovom da vai RB, u R se upisuje
razlika R-B, a novo stanje je SHRA. U stanju SHRA, R i A se zajedno pomeraju za jednu
poziciju ulevo. Da bismo stanja SHRA i DECR objedinili u jedno stanja (neka se zove
AKTIVNO), potrebno je da postoji mogunost da se u jednom koraku (taktu) na pozicije
vee teine registra R upie razliku i u isto vreme na poziciju najmanje teine registra R
prenese vrednost bita najvee teine registra A. To se moe postii uvoenjem dodatnog
flip-flopa, r0, za poziciju najmanje teine registra R (Sl. 9-42(a)). S ovim proirenjem, za
izraunavanje razlike koriste se n-1 niih bita registra R zajedno sa flip-flopom r0. Budui
da r0 sadri bit najvee teine registra A iz prethodnom ciklusa, efekat je isti kao da je pre
oduzimanja obavljeno (R,A) (R,A) << 1. Onda kad vai R < B, u R se ne upisuje razlika
ve se R pomera ulevo sa serijskim upisom vrednosti iz r0. Ostatak deljenja (r) jednak je
razlici koja je se u poslednjem ciklusu upisuje u registar R - zbog toga je neophodno da R
ima svih n bita. ASMD dijagram sekvencijalnog delitelja s jednim ciklusom po iteraciji
prikazan je na Sl. 9-42(b).

(a)
(b)
(c)
Sl. 9-42 Dodatno ubrzanje sekvencijalnog delitelja iz Pr. 9-23: (a) princip; (b) ASMD (prva
varijanta); (c) ASMD (druga varijanta, sa objedinjenim registrima A i Q).

Dodatna optimizacija, u pogledu utede hardvera, moe se postii ukoliko se za

293

Primeri RTL sistema

dijagrama sa Sl. 9-42(b), na poetku rada, u stanju PASIVNO, dobija vrednost deljenika, a,
a zatim se pomera ulevo s upisom 0 na poziciju najmanje teine (operacija A A << 1 iz
stanja AKTIVNO). Na kraju deljenja, posle n taktnih ciklusa, sadraj registra A bie jednak
svim nulama. S druge strane, u registar Q se serijski upisuje jedan bit kolinika u svakom
ciklusu deljenja, tako da na kraju deljenja Q sadri kompletan kolinik. Na Sl. 9-42(c) je
prikazan ASMD dijagram sekvencijalnog delitelja u kome se za promenljive A i Q koristi
isti registar Q. Na poetku, u Q se upisuje deljenik, a. Kako deljenje odmie, tako se iz Q
istiskuje a, a upisuje kolinik.
Strukturni blok dijagram sekvencijalnog delitelja, kreiran na osnovu ASMD dijagrama sa
Sl. 9-42(c), prikazan je na Sl. 9-43. Za realizaciju registra Q koristi se pomeraki registar s
mogunou paralelnog upisa. Za r0 se koristi D flip-flop s dodatnim multiplekserom
posredstvom kojeg se u flip-flop upisuje 0 (u stanju PASIVNO), odnosno bit najvee
teine registra Q (u stanju AKTIVNO). Na Sl. 9-44(a) je prikazan ASM dijagram
upravljake jedinice, koji je kreiran na osnovu ASMD dijagrama sa Sl. 9-42(c) i strukture
sa Sl. 9-43. Napomenimo da su i dalje mogua izvesna pojednostavljenja ovog ASM
dijagrama. Zapazimo da su upravljaki signali eq i ec aktivni u oba stanja, PASIVNO i
AKTIVNO, i da zbog toga mogu biti postavljeni fiksno na eq=ec=1, umesto da se
generiu iz upravljake jedinice. Takoe, signal er je aktivan u obe grane uslovnog koraka
iz stanja AKTIVNO i zbog toga moe biti prebaen u blok stanja AKTIVNO. Na Sl.
9-44(b) je prikazan ASM dijagram upravljake jedinice nakon izvrenih modifikacija.
itaocu se preputa da samostalno kreira odgovarajui VHDL opis.
a

b
datapath

n
lq
ld
ena

eq
eb

din

din

shift
(reg Q)
q

reg.
(reg B)
q

ena

si

start
n

rdy

n-1

log2n

cin

cout
n

log2n
din
counter
(C)
q

(+)

cout
control

ld
ena

lc
ec

rsel

mux

dr

lr
er

r0sel

ld
ena
Rn-2, R0
r0

din
shift
(reg R)
q

0
Q

(r0)

si

0
qn-1

Sl. 9-43 Razraena struktura sekvencijalnog delitelja iz Pr. 9-24.

294

RTL projektovanje

(a)
(b)
Sl. 9-44 ASM dijagram upravljake jedinice sekvencijalnog delitelja iz Pr. 9-24: (a) poetna
varijanta; (b) pojednostavljena varijanta.

10. LITERATURA

[1] Pong P. Chu, RTL Hardware Design Using VHDL Coding for Efficiency, Portability,
and Scalability, John Wiley & Sons, Inc., 2006.
[2] Volnei A. Pedroni, Circuit Design with VHDL, MIT Press, 2004.
[3] Douglas L. Perry, VHDL Programming by Examples, Forth Edition, McGrow-Hill,
2002.
[4] Parag K. Lala, Principles of Modern Digital Design, John Wiley & Sons, Inc., 2007.
[5] Peter J. Ashenden, The Designer's Guide to VHDL, (Systems on Silicon), Morgan
Kaufmann Publishers Inc., 3rd edition, 2008.
[6] Pong P. Chu, FPGA Prototyping by VHDL Examples, Xilinx Spartan-3 Version, John
Wiley & Sons, Inc., 2008.
[7] Stephen Brown, Zvonko Vranesic, Fundametals of Digital Logic with VHDL Desing,
McGraw-Hill Higher Education; 3rd edition, 2008.
[8] John F. Wakerly, Digital Design: Principles and Practices, Prentice Hall; 4th edition,
2005.
[9] Rendy H. Katz, Gaetano Borriello, Contemporary Logic Design, Pearson Education
Inc.,; 2nd edition, 2005.
[10] Mark Gordon Arnold, Verilog Digital Computer Design Algorithms into Hardware,
Prentice Hall PTR, 1999.
[11] Daniel D. Gajski, Principles of Digital Design, Prentice-Hall International, Inc., 1997.

Goran Lj. orevi, Arhitetkture mikrosistema, 2009.

You might also like