Professional Documents
Culture Documents
AMS2009
AMS2009
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
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.
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
10
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.
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
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
RTL nivo
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
12
Nivo tranzistora
Nivo gejtova
RTL nivo
Nivo procesora
Sl. 1-1 Nivoi apstrakcije.
Sinteza
Fiziko projektovanje
Verifikacija i
Testiranje
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
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
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
5.
6.
7.
8.
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.
18
19
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.
2. UVOD U VHDL
22
Uvod u VHDL
Deklaracija LIBRARY: sadri spisak biblioteka i/ili delova biblioteka koji se koriste u
projektu, npr. ieee, std, work itd.
ARCHITECTURE: sadri pravi VHDL kd koji opisuje ponaanje (tj. funkciju) ili
unutranju organizaciju (tj. strukturu) kola.
LIBRARY
(deklaracija)
ENTITY
ARCHITECTURE
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
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:
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.
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:
25
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).
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;
------------------------------------------------------------------
Stilovi projektovanja
27
-----------------------------------------------------------------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.
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
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
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;
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
-----------------------------------------------------------------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
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
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.
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
35
-----------------------------------------------------------------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
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;
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)
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
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
Simulacija/
Vremenska
analiza
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.
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.
42
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;
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;
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;
Iznad su data dva funkcionalno identina VHDL opisa. Razlika izmeu ova dva opisa je
44
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
-- a je tipa boolean
-- a je tipa bit
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; --
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
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
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
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
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)
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)
Neophodne su zagrade:
y <= (a NAND b) NAND c; (ili, y <= a NAND (b NAND c);)
48
Nepoznata vrednost
Nizak nivo
Visok nivo
Visoka impedansa
Slaba nepoznata vrednost
Slab nizak nivo
Slab visok nivo
Proizvoljna vrednost
L, 1
polldown
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).
50
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;
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
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
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
52
s3 <= b1 OR s2;
Tipovi podataka
53
Korienjem konkatenacije isti rezultat se dobija pomou samo jedne naredbe dodele:
dbus <= ctrl & en & rw & count;
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;
inicijalizuje vektor w na sve nule. Uoimo da e prethodna naredba ostati ista ak i ako se
naknadno promeni duina vektora w.
54
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);
------
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
56
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
Sledee naredbe dodele su ispravno jer je operator + definisan za tipove unsigned i natural
(v. T. 3-6):
u3 <= u2 + u1;
u4 <= u2 + 1;
Meutim, zbog neusklaenosti tipova, sledee dve naredbe dodele nisu ispravne:
u5 <= sg;
Tipovi podataka
u6 <= 5;
57
-- neispravno,neusklaeni tipovi
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;
std_logic_arith
std_logic_unsigned, i
std_logic_signed
58
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
Tipovi podataka
59
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
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.
Polja
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;
62
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
63
Tada vai:
dLOW = 0
dHIGH = 7
dLEFT = 7
dRIGHT = 0
dLENGTH = 9
dRANGE = (7 DOWNTO 0)
dREVERSE_RANGE = (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 . . .
64
naredba when i
naredba select.
66
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;
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;
67
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.
68
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.
(a)
(b)
Sl. 4-3 Multiplekser 4-u-1: (a) grafiki simbol; (b) kombinaciona mrea.
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;
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
Konceptualna implementacija
enable <= 1;
sel <= (r1 AND r2) OR (r3 AND r4);
sum <= a + b + c 1;
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
-----------------------------------------------------------------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
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;
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
74
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.
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
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.
(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 ...
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
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;
------------------------------------------------------------------
"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 <=
y <=
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
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
80
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
"0001",
"0010",
"0100",
"1000",
OTHERS;
81
SELECT
(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)
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
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
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
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:
85
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.
86
+
+
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;
SELECT
WHEN 00,
WHEN 01,
WHEN OTHERS;
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;
88
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.
-----------------------------------------------------------------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;
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
(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.
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;
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;
...
92
-----------------------------------------------------------------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
-----------------------------------------------------------------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
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
96
Sekvencijalne naredbe
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;
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;
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
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
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.
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;
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;
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;
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
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;
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
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
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
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
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;
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
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;
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.
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;
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 |
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
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
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
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
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;
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)
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;
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;
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
-----------------------------------------------------------------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);
--------------------------------------------------------------
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:
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;
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
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;
119
ELSE
lt <= 1;
END IF;
END PROCESS;
(a)
(b)
(c)
Sl. 5-9 Razlike izmeu flip-flopova i le kola: (a) D flip-flop; (b) D le; (c) vremenski dijagram.
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
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
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
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;
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.
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
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;
din
D FF
b
D FF
c
D FF
dout
D FF
clk
-----------------------------------------------------------------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
128
Sekvencijalne naredbe
U nastavku ovog poglavlja sledi nekoliko primera VHDL opisa tipinih registarskih
komponenti.
Pr. 5-19 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
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;
132
Sekvencijalne naredbe
(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
-----------------------------------------------------------------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
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
(a)
(b)
Sl. 5-21 Konceptualni dijagrami programabilnog mod-m brojaa: (a) polazno reenje; (b)
reenje nakon izvrene optimizacije.
136
Sekvencijalne naredbe
Registarske komponente
51
52
53
54
55
56
57
58
137
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 .
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;
------------------------------------------------------------------
-----------------------------------------------------------------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
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.
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.
(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).
143
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
1
2
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
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
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.
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.
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.
-----------------------------------------------------------------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);
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.
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;
154
Konani automati
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
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;
------------------------------------------------------------------
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
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:
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.
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.
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;
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;
-----------------------------------------------------------------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;
-----------------------------------------------------------------LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------------------ENTITY BCD IS
PORT (clk,rst : IN STD_LOGIC;
161
162
Konani automati
(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
163
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;
(a)
165
(b)
Sl. 6-17 Manester koder: (a) blok dijagram; (b) dijagram stanja.
-----------------------------------------------------------------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
(a)
(b)
Sl. 6-18 Automat za prodaju karata: (a) blok dijagram; (b) dijagram stanja.
167
----------------------------------------------------------------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;
-----------------------------------------------------------------
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.
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 =>
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
COMPONENT
GENERIC
CONFIGURATION
174
Hijerarhijsko projektovanje
LIBRARY
PACKAGE
FUNCTION
PROCEDURE
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
PACKAGE
4
5
6
7
8
9
175
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
COMPONENT
177
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.
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
180
Hijerarhijsko projektovanje
1
2
3
4
5
6
7
8
9
10
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
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
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);
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);
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 ...
184
Hijerarhijsko projektovanje
(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
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:
CONFIGURATION
187
188
Hijerarhijsko projektovanje
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
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;
Potprogrami
191
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
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);
. . .
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
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
194
Hijerarhijsko projektovanje
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
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;
196
Hijerarhijsko projektovanje
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.
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;
1
2
3
4
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;
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.
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.
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).
-----------------------------------------------------------------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;
-----------------------------------------------------------------
vai:
s1LEFT = 15; s1RIGHT = 0;
s1LOW = 0; s1HIGH = 15;
s1LENGTH = 32;
s1RANGE = 15 DOWNTO 0;
S1REVERSE_RANGDE = 0 TO 15;
-----------------------------------------------------------------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
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
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
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
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;
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
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 . . .
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 . . .
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
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);
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);
208
Parametrizovano projektovanje
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.
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
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
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
212
Parametrizovano projektovanje
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;
-----------------------------------------------------------------
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
GENERATE
215
216
Parametrizovano projektovanje
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.
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
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
(a)
(b)
220
Parametrizovano projektovanje
-----------------------------------------------------------------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;
-----------------------------------------------------------------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;
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);
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.
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
----------------------------------------------------------------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
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;
T
b
10
01
00
00
a(0)
=1
a(1)
=1
a(2)
=1
a(3)
=1
-----------------------------------------------------------------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;
------------------------------------------------------------------
:=
:=
:=
:=
<=
a(0);
a(1) AND v;
a(2) AND v;
a(3) AND v;
v;
Sada postaje jasno da varijable predstavljaju veze izmeu dvoulaznih I kola, na nain kao
na Sl. 8-12.
-----------------------------------------------------------------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;
------------------------------------------------------------------
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;
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.
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
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
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
FOR LOOP
20
21
22
23
24
25
26
27
28
29
30
233
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;
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
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;
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.
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:
236
RTL projektovanje
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;
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
237
Hardver koji obavlja operacije sadrane u algoritmu (kao npr. +, -, /, ...) realizuju se u
vidu kombinacionih blokova.
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
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.
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.
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.
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;
1:
2:
3:
4:
5:
rx
ry
ry
ry
rx
A;
B;
rx + ry;
ry + 1;
rx + 1;
241
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.
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.
243
(a)
(b)
Sl. 9-7 Naredba registarskog prenosa u funkcionalnom ASM dijagramu: (a) segment ASM
dijagrama; (b) vremenski dijagram.
244
RTL projektovanje
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
246
RTL projektovanje
statusni/
upravljacki
ulazi
..
.
ulazi
podataka
..
.
RTL
SISTEM
..
.
statusni/
upravljacki
izlazi
..
.
izlazi
podataka
rst
clk
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.
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.
Postupak projektovanja
249
..
.
(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.
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
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;}
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
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).
(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.
Postupak projektovanja
257
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:
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.
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.
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
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
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
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
(-)
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
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.
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.
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
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.
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;
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).
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
Postupak projektovanja
275
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;
277
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.
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
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.
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
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;
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.
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
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
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.
288
RTL projektovanje
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
din
counter
(C)
q
qc
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
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
291
292
123
124
RTL projektovanje
END PROCESS;
END ASM;
(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).
293
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
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.