You are on page 1of 61

Kratki uvod u jezik VHDL

Marko upi

6. sijenja 2015.

ii

Sadraj
1

Uvod

Naini opisivanja sklopova

2.1

Opis jednog sklopa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2

O jeziku VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.3

Tip podataka std_logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.3.1

Booleove operacije nad trolanim skupom {U, 0, 1} . . . . . . . . . . . . . . . .

10

Modeliranje jednostavnog sklopa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

2.4.1

Opis sklopa modelom toka podataka . . . . . . . . . . . . . . . . . . . . . . . .

12

2.4.2

Strukturni opis sklopa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

2.4.3

Ponaajni opis sklopa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

2.5

Ispitni sklop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

2.6

O kanjenjima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

2.4

Standardni kombinacijski moduli

29

3.1

Modeliranje multipleksora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

3.2

Modeliranje binarnog dekodera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35

Modeliranje bistabila

41

4.1

Model toka podataka osnovnog bistabila . . . . . . . . . . . . . . . . . . . . . . . . . .

42

4.2

Ponaajni model bistabila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

4.2.1

48

Pojam sinkronosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Modeliranje strojeva s konanim bro jem stanja

51

5.1

51

Mooreov stroj s konanim brojem stanja . . . . . . . . . . . . . . . . . . . . . . . . . .


iii

iv

SADRAJ

5.2

Mealyjev stroj s konanim brojem stanja . . . . . . . . . . . . . . . . . . . . . . . . . .

54

Predgovor
Ova skripta slui kao popratni materijal laboratorijskim vjebama iz kolegija Digitalna logika. U
skripti je dan pregled podskupa jezika VHDL koji se koristi u okviru laboratorijskih vjebi. Ovaj
dokument nije konana verzija skripte (materijal je jo u izradi i postupno e se dopunjavati).
Pregledao: Marko Zec
c 2014.2015. Marko upi

Zatieno licencom Creative Commons ImenovanjeNekomercijalnoBez prerada 3.0 Hrvatska.
http://creativecommons.org/licenses/by-nc-nd/3.0/hr/

SADRAJ

Poglavlje 1

Uvod
Poveanjem sloenosti digitalnog sklopovlja pojavila se potreba za omoguavanjem njegovog
formalnog opisivanja kako bi se omoguilo obavljanje simulacije funkcionalnosti prije no to se
sklopovlje poalje u proizvodni proces. Ustanove li se pogreke prilikom simulacije, puno je
jednostavnije i bre (i jeftinije ) takvu pogreku ispraviti.
Daljnjim razvojem tehnologije te razvojem programirljivih sklopova pojavila se jo jedna zgodna
primjena formalno opisanog sklopovlja: razvijeni su raunalom potpomognuti alati koji na temelju
formalnog opisa digitalnog sklopovlja mogu programirati programirljive sklopove kako bi se oni
ponaali u skladu s tim formalnim opisom. Takve alate nazivamo sintetizatorima digitalnog
sklopovlja koji na temelju formalnog opisa sklopa generiraju naputak (obavljaju sintezu ) prema
kojem se programira programirljivi sklop. Rezultat sinteze najee je JEDEC datoteka koja se
koristi kao ulaz za program koji provodi sam postupak programiranja.
Za potrebe formalnog opisivanja digitalnog sklopovlja razvijeno je mnotvo jezika za opis sklopovlja.
Danas su u najiroj uporabi dva:

Verilog te
VHDL.
U okviru kolegija Digitalna logika koristit emo podskup jezika VHDL koji emo opisati u nastavku.
VHDL je skraenica od VHSIC Hardware Description Language, gdje je prvi dio kratica od Very
High Speed Integrated Circuit. Prevedemo li ovo na hrvatski, VHDL stoji za Jezik za opis integriranih
sklopova vrlo visokih brzina, to nas, naravno, ne treba sprjeavati da ga koristimo i za opisivanje
jednostavnijih i sporijih sklopova. Ponekad se u ali kae i da je VHDL zapravo kratica od Very Hard
and Dicult Language  no kroz ovaj tekst pokuat emo vas uvjeriti da to nije tako.

POGLAVLJE 1.

UVOD

Poglavlje 2

Naini opisivanja sklopova


U okviru ovog poglavlja upoznat emo se s osnovnim nainima opisivanja digitalnog sklopovlja
jezikom VHDL. Ovisno to znamo o digitalnom sklopu, opisat emo ga ili deniranjem njegove
funkcije ili deniranjem njegove grae koja se oslanja na uporabu jednostavnijih sklopova. Stoga
emo razlikovati tri vrste opisa, odnosno tri modela sklopa.
(engl. dataow model ) je model sklopa kod kojega piemo naredbe koje
kombiniraju ulazne signale (i eventualno pomone signale) uporabom naredbi dodjeljivanja
vrijednosti signalima i tako odreuju vrijednosti izlaza sklopa. Arhitektura (dio opisa sklopa koji
denira funkciju ili grau sklopa ) kod ovog modela sastoji se od jedne ili vie naredbi pridruivanja
vrijednosti signalu.

Model toka podataka

(engl. structural model ) je model sklopa koji sklop opisuje pozvajui se na


njegovu grau te nain na koji su jednostavnije komponente od kojih je sklop izgraen povezane s
ulazima, povezane meusobno te povezane s izlazima modeliranog sklopa. Arhitektura kod ovog
modela sastoji se od niza naredbi koje predstavljaju stvaranje primjeraka koritenih komponenata i
njihovo meusobno povezivanje.

Strukturni model

(zovemo ga jo i ponaajni model, engl. behavioral model ) je model sklopa kod


kojega funkcionalnost sklopa najee ne opisujemo oslanjajui se logike operatore koji bi oslikavali
nain na koji se ulazi transformiraju u izlaze ve piemo algoritam koji nam ne govori kako bi sklop
trebalo sintetizirati ve samo navodi kako se ulazi preslikavaju u izlaze. Ovo je najblie to moemo
prii klasinom modelu "crne kutije" kod kojega ni na koji nain ne opisujemo grau sklopa ve samo
njegovu funkcionalnost, koristei proceduralno programiranje, naredbe poput if , case, for i slino.
Arhitektura kod ovog modela sastoji se od jednog ili vie blokova process.

Funkcijski model

2.1

Opis jednog sklopa

Prilikom modeliranja digitalnog sklopa pisat emo odgovarajui opis jezikom VHDL. Iako to nije
nuno, dobra je praksa opis svakog sklopa staviti u zasebnu datoteku. Prilikom rada sa sustavom
VHDLLab2, sam e nas sustav tjerati da piemo upravo takve opise: unutar jednog projekta, za svaki
emo sklop morati napraviti novi model koji e biti pohranjen u vlastitu datoteku.
Sam opis sklopa jezikom VHDL sastojat e se od sljedeih dijelova.
1. Deklaracija koritenih biblioteka i paketa. Svaki opis zapoet e navoenjem biblioteka i paketa
5

POGLAVLJE 2.

NAINI OPISIVANJA SKLOPOVA

iz tih biblioteka koje emo koristiti u opisu. Biblioteke se ukljuuju uporabom kljune rijei
library (redak 1 u primjeru u nastavku) a pojedini paketi uporabom kljune rijei use (redak 2 u
primjeru u nastavku).
Jedna biblioteka moe se sastojati od vie paketa, a svaki paket moe nuditi deniciju tipova
podataka, funkcija i slinoga. elimo li iz nekog paketa ukljuiti sve to je u njemu denirano
(kako bismo sve mogli koristiti za opisivanje sklopova), u naredbi kojom se paket ukljuuje na
kraju emo napisati . all .
Cjeloviti primjer prikazan je u nastavku. Uoimo da svaka od naredbi zavrava znakom
toka-zarez.
1
2

l i b r a r y IEEE ;
u s e IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;

2. Deklaracija suelja sklopa. Modelirani sklop, gledan izvana, prema svojoj se okolini predstavlja
kao crna kutija koja ima odreen broj ulaza te odreen broj izlaza. Kroz svaki od ulaza
odnosno izlaza sklop prima/alje signale odreenog tipa. Deniranjem suelja sklopa korisnik
mora ponuditi detaljan opis svih ulaza i izlaza.
Denicija suelja zapoinje kljunom rijei ENTITY nakon ega slijedi naziv sklopa ije se
suelje modelira, kljune rijei IS PORT(, denicije ulaza i izlaza, potom ); i konano kljuna
rije END, naziv modeliranog sklopa pa znak toka-zarez. Svaki od ulaza odnosno izlaza naziva
se jednim portom sklopa. Denicija porta zapoinje navoenjem naziva porta, slijedi dvotoka,
kljuna rije IN (ako je port ulaz) odnosno OUT (ako je port izlaz), naziv programskog tipa koji
opisuje vrstu signala koji se prima/alje kroz taj port te na kraju znak toka-zarez (ali samo
ako to nije denicija posljednjeg porta; ako je, znak toka-zarez ne smije se navesti).
Pretpostavimo da modeliramo suelje sklopa koji smo nazvali SklopS1 i koji ima tri ulaza (A, B
i C ) te dva izlaza (f i g ). Denicija suelja takvog sklopa bila bi sljedea.
1
2
3
4
5
6
7
8

ENTITY s k l o p S 1 IS PORT (
a : IN s t d _ l o g i c ;
b : IN s t d _ l o g i c ;
c : IN s t d _ l o g i c ;
f : OUT s t d _ l o g i c ;
g : OUT s t d _ l o g i c
);
END s k l o p S 1 ;

Kao tip podataka ovdje smo koristili tip std_logic koji je deniran u biblioteci IEEE. Denicije
portova koji su istog smjera (ulaz/izlaz) i kroz koje putuju signali istog tipa mogu se navesti
krae, tako da se nazivi portova nanizaju uz razdvajanje znakom zareza. Tako je, primjerice,
ekvivalentna denicija suelja prethodno navedenoj prikazana u nastavku.
1
2
3
4
5

ENTITY s k l o p S 1 IS PORT (
a , b , c : IN s t d _ l o g i c ;
f , g : OUT s t d _ l o g i c
);
END s k l o p S 1 ;

Uoite kako u oba sluaja, nakon posljednje denicije porta nema znaka toka-zarez.
3. Deklaracija arhitekture sklopa. U ovom djelu se daje opis unutranjosti "crne kutije". Kako smo
prethodno napomenuli, taj opis moe biti ostvaren na vie naina. U odreenim sluajevima, u
opisu emo kombinirati elemente razliitih naina opisivanja  takav emo opis onda zvati
hibridni.
Deklaracija arhitekture sklopa zapoinje navoenjem kljune rijei ARCHITECTURE, nakon ega
slijedi naziv arhitekture, kljuna rije OF, naziv sklopa ija je to arhitektura te kljuna rije IS.
Slijedi dio u kojem po potrebi moemo denirati pomone (unutarnje odnosno interne) signale,

2.2.

O JEZIKU VHDL

konstante i nove tipove podataka. Nakon toga dolazi kljuna rije BEGIN, jedna ili vie naredbi
koje ine model toka podataka, strukturni model ili ponaajni model (svaka naredba zavrava s
tokom-zarezom), i konano dolazi kljuna rije END, naziv arhitekture i toka-zarez.
Primjer jedne arhitekture dan je u nastavku.
1
2
3
4
5
6
7
8

ARCHITECTURE a r c h 1 OF s k l o p S 1 IS
o v d j e b i do l e d e k l a r a c i j e pomo n i h s i g n a l a
BEGIN
o v d j e d o l a z e naredbe pona a j n o g
i l i s t r u k t u r n o g o p i s a
f <= a AND b AFTER 10 ns ;
g <= ( a OR c ) AND b AFTER 10 ns ;
END a r c h 1 ;

U prethodnom primjeru sve to je navedeno iza ini komentar. Naziv arhitekture moe biti
bilo kakav valjan identikator. Treba napomenuti da opi oblik opisa jednog sklopa moe imati
jo neke elemente, ali na ovom mjestu ih neemo navoditi.
Operator <= (retci 6 i 7 u prethodnom primjeru) je operator kojim se vrijednost izraza
navedenog s desne strane pridruuje izlazu (odnosno openito nekom signalu) navedenom s
lijeve strane. Ako prije znaka toka-zarez doe kljuna rije AFTER, tada se denira da se to
pridruivanje dogaa uz kanjenje koje je navedeno nakon kljune rijei, ime imamo
mogunost modeliranja kanjenja u digitalnim sklopovima. Vrijeme koje se navodi ima iznos i
mjernu jedinicu. Primjerice, u prethodnom primjeru oba izlaza za svojim ulazima kasne po 10
nanosekundi.

2.2

O jeziku VHDL

Jezik VHDL nije osjetljiv na velika i mala slova. Tako, primjerice, kljunu rije kojom zapoinjemo
arhitekturu sklopa moemo pisati ARCHITECTURE, architecture , ArChItEcTuRe ili na bilo koji drugi
nain.
Prilikom rada sa sustavom VHDLLab2 treba se ipak drati jednog ogranienja koje namee taj
sustav: naziv sklopa (tj. naziv modela) mora se uvijek pisati na isti nain. Ako smo napravili model
sklopS1, onda ga na svim mjestima moramo navoditi upravo tako.
Od logikih operatora, na raspolaganju nam stoje sljedei operatori.
not
and
or
nand
nor
xor
xnor

logiko NE
logiko I
logiko ILI
logiko NI
logiko NILI
logiko iskljuivo-ILI
komplement logikog iskljuivo-ILI

Operator NOT vieg je prioriteta od ostalih operatora. Svi preostali binarni operatori navedeni u
prethodnoj tablici istog su prioriteta. Posljedica toga je da prilikom pisanja logikih izraza moramo
koristiti zagrade za deniranje prioriteta operatora jer emo u sluaju da ih ne koristimo a u izrazu
imamo vie razliitih operatora dobiti prijavljenu pogreku prilikom prevoenja modela. Tako je,
primjerice, sljedei isjeak kda kojim pokuavamo denirati da je f = a
b + c pogrean.
1

f <= NOT a AND b OR c ;

POGLAVLJE 2.

NAINI OPISIVANJA SKLOPOVA

Prilikom prevoenja ovog modela, sustav e nas upozoriti da ne zna jesmo li htjeli najprije izraunati
logiko I izmeu a
i b pa s tim rezultatom napraviti logiko ILI s c, ili je najprije trebalo izraunati
logiko ILI izmeu b i c pa s tim rezultatom napraviti logiko I s a
. Uz pretpostavku da smo htjeli da
se izraz protumai na nama uobiajen nain (I je veeg prioriteta od ILI), stavili bismo zagrade kako
je prikazano u nastavku.
1

f <= (NOT a AND b ) OR c ;

2.3

Tip podataka

std_logic

Tip std_logic denira vrijednosti signala koje jedan digitalni sklop moe slati drugom digitalnom
sklopu. Razmislite li, brzo ete doi do zakljuka da smo i mi na kolegiju osim logike nule i logike
jedinice ve spominjali i neke druge vrijednosti. Tako smo, primjerice, spomenuli da izlaz nekog
sklopa moe biti u stanju visoke impedancije (Z ). Spomenuli smo i da nas ponekad uope nije briga u
kojem je stanju izlaz sklopa (don't care ).
Prisjetite se sada cjeline s predavanja na kojoj smo govorili o implementacijama logikih sklopova.
Na izlazu logikog sklopa visoka naponska razina moe biti ostvarena na dva naina: jedan je
ostvaren tako da je izlaz pull-up -otpornikom pritegnut prema napajanju (a tranzistor koji izlaz
pritee prema masi je blokiran), a drugi je ostvaren tako da od izlaza prema napajanju imamo
ukljuen tranzistor a od izlaza prema masi iskljuen tranzistor (pasivno vs. aktivno generiranje).
Koja je posljedica ovih dvaju naina? Izlaze dva sklopa koja imaju izlaz pritegnut na napajanje preko
pull-up otpornika moemo spojiti zajedno, i time emo dobiti novu Booleovu funkciju. To isto s
izlazima koji imaju aktivno generiranje napona ne smijemo napraviti jer emo unititi sklopove.
Kako bi omoguio opisivanje svih takvih vrsta sklopova, tip std_logic denira ak 9 razliitih
vrijednosti signala. Vrijednosti su pobrojane u nastavku.
1. 1: predstavlja aktivno generiranu logiku jedinicu (engl. forcing 1 ). Ako se na izlazu sklopa
pojavi ovakav signal, moemo zamisliti da sklop ima izlaz tranzistorom pritegnut na napajanje.
2. 0: predstavlja aktivno generiranu logiku nulu (engl. forcing 0 ). Ako se na izlazu sklopa pojavi
ovakav signal, moemo zamisliti da sklop ima izlaz tranzistorom pritegnut na masu.
3. H: predstavlja pasivno generiranu logiku jedinicu (engl. weak 1 ). Ako se na izlazu sklopa
pojavi ovakav signal, moemo zamisliti da sklop ima izlaz pritegnut na napajanje preko pull-up
otpornika.
4. L: predstavlja pasivno generiranu logiku nulu (engl. weak 0 ). Ako se na izlazu sklopa pojavi
ovakav signal, moemo zamisliti da sklop ima izlaz pritegnut na masu pull-down otpornikom.
5. X: obino predstavlja stanje koje se dobije ako se dva izlaza koja aktivno generiraju izlaz spoje
zajedno a sklopovi generiraju komplementarne izlaze (u praksi, oznaava nastanak kratkog
spoja od napajanja prema masi). Naziv ove vrijednosti je forcing Unknown.
6. W: obino predstavlja stanje koje se dobije ako se dva izlaza koja pasivno generiraju izlaz spoje
zajedno a sklopovi generiraju komplementarne izlaze (u praksi, oznaava situacije kada je kroz
izlaze sklopova otvoren put od napajanje prema masi, ali koje obino nemaju fatalne posljedice
jer je struja ograniena sumom iznosa pull-up i pull-down otpornika). Napon koji se dobije bit
e vjerojatno negdje u zabranjenom podruju pa sljedei sklop nee dobro protumaiti to mu
se alje. Naziv ove vrijednosti je weak Unknown.

2.3.

TIP PODATAKA

STD_LOGIC

7. Z: predstavlja izlaz koji je i od napajanja i od mase izoliran velikim otporom; to je izlaz koji je
u treem stanju (stanju visoke impedancije).
8. -: predstavlja situaciju u kojoj nas nije briga to je na izlazu (engl. don't care ).
9. U: predstavlja situaciju u kojoj simulator ne zna to je na izlazu (engl. uninitialized ).
Primjerice, ako modeliramo sklop ILI tako da ima kanjenje od 10 nanosekundi i na poetku
simulacije (od t=0) na ulaze dovedemo vrijednosti koje odgovaraju logikoj nuli, to e biti na
izlazu tog sklopa? Kako god da radimo simulaciju, simulator e temeljem naeg opisa moi
zakljuiti da e od 10. nanosekunde na izlazu biti vrijednost nula; meutim, to e biti od
trenutka t = 0ns do t = 10ns? Na to ne moemo odgovoriti, pa emo takve situacije oznaavati
s vrijednosti U.
Konstante tipa std_logic piu se pod jednostrukim navodnicima. Primjerice:
1

f <= ' 1 ' ;

Uz tip std_logic koji predstavlja jedan signal, biblioteka IEEE nudi nam i tip std_logic_vector koji se
moe koristiti za opisivanje vie signala istog imena i tipa. Sjetimo se primjera multipleksora 8/1: to
je sklop koji ima 8 podatkovnih ulaza koje obino oznaavamo slovom D i indeksima od 0 do 7, ima 3
adresna ulaza koje obino oznaavamo slovom A i indeksima od 2 do 0 te ima jedan izlaz (obino y).
Uporabom tipa std_logic_vector u VHDL-u moemo napisati upravo takvu deniciju. Primjerice,
suelje ovakvog multipleksora denirali bismo na sljedei nain.
1
2
3
4
5
6

ENTITY mux81 IS PORT (


d : IN s t d _ l o g i c _ v e c t o r ( 0 t o 7 ) ;
a : IN s t d _ l o g i c _ v e c t o r ( 2 downto 0 ) ;
y : OUT s t d _ l o g i c
);
END mux81 ;

Uoite kako se nakon naziva tipa std_logic_vector u oblim zagradama navodi raspon indeksa; ako je
poetni broj manji od zavrnog, raspon se pie s TO a ako je poetni broj vei od zavrnog, dolazi
kljuna rije DOWNTO. Pojedinim signalima moe se pristupati indeksiranjem; primjerice moemo
zatraiti vrijednost d(6) to je predzadnji od signala ulaza d. Moemo uzimati i podraspone;
primjerice: d(1 to 4) predstavlja signale d(1), d(2), d(3) i d(4), i to je po tipu opet std_logic_vector.
Konstante koje su tipa std_logic_vector navode se pod dvostrukim navodnicima. Primjerice, ako je
izlaz f deniran kao std_logic_vector(0 to 3), primjer naredbe kojom emo vrijednosti dodijeliti svim
etirima signalima je:
1

f <= " 001U" ;

to je ekvivalentno kao da smo dali etiri naredbe:


1
2
3
4

f (0)
f (1)
f (2)
f (3)

<=
<=
<=
<=

'0 ';
'0 ';
'1 ';
'U ' ;

10

POGLAVLJE 2.

2.3.1

NAINI OPISIVANJA SKLOPOVA

Booleove operacije nad trolanim skupom {U, 0, 1}

Osim djelovanja Booleovih operatora nad dvolanim skupom {0, 1}, za potrebe laboratorijskih vjebi
moramo se upoznati s djelovanjem tih operatora nad neto irim skupom. Biblioteka IEEE u okviru
paketa std_logic_1164 denira djelovanje Booleovih operatora nad svih devet vrijednosti signala
std_logic. Mi emo se upoznati s minimalnim proirenjem kod kojeg emo dvolani skup {0, 1}
proiriti na trolani skup {0, 1, U} ukljuivanjem jo i vrijednosti U.
Nad tako deniranim trolanim skupom, vrijednost U e i dalje oznaavati situaciju u kojoj ne znamo
koja je vrijednost signala (ali ako su jedine druge mogue vrijednosti 0 i 1, znamo da signal mora biti
neto od toga  samo ne znamo to).
Imajui to u vidu, proirenje djelovanja operatora je trivijalno, i dano je u nastavku.
Logiko I

Logiko ILI

0I0=0

0 ILI 0 = 0

0I1=0

0 ILI 1 = 1

0IU=0

0 ILI U = U

1I0=0

1 ILI 0 = 1

1I1=1

1 ILI 1 = 1

1IU=U

1 ILI U = 1

UI0=0

U ILI 0 = U

UI1=U

U ILI 1 = 1

UIU=U

U ILI U = U

Logiko NE

NE 0 = 1
NE 1 = 0
NE U = U

Pogledajmo zato su rezultati uz vrijednost U takvi kakvi jesu. Prema aksiomima Booleove algebre,
0 A = 0; stoga, ako je A bilo nula, bilo jedan, rezultat ne ovisi o njemu i uvijek je nula. Stoga je i
0 U = 0 jer nam U samo govori da ne znamo je li konkretna vrijednost nula ili jedan.
Oslanjajui se na jednako razmiljanje, dolazimo i do toga da je 1 U = U ; naime, ako je signal (iju
vrijednost ne znamo) zapravo u logikoj jedinici, tada bi rezultat logikog I bio 1; ako je pak u logikoj
nuli, rezultat bi bio nula. Kako nismo sigurni u rezultat logike operacije (odnosno rezultat ovisi o
konkretnoj vrijednosti tog signala), moramo i za sam rezultat rei da njegovu vrijednost ne znamo.
Tragom jednakog razmiljanja slijedi i da je U U = U . Preostale situacije neemo razmatrati jer su
ili podudarne s dvolanom Booleovom algebrom, ili su rjeive oslanjajui se na komutativnost
operatora I.
Pogledajmo u nastavku dva primjera.
Primjer 1.

to e biti dodijeljeno u signal f nakon izvoenja naredbe pridruivanja f <= (a and b) or c; ako je
a='0', b='U', c='0'?
Rjeenje:

Prema prethodno deniranom djelovanju operatora, najprije raunamo a and b = '0' and 'U' = '0' .
Potom raunamo '0' or '0' = '0' . Signalu f bit e pridjeljena vrijednost '0' .

2.4.

MODELIRANJE JEDNOSTAVNOG SKLOPA

11

Primjer 2.

to e biti dodijeljeno u signal f nakon izvoenja naredbe pridruivanja f <= a and not a; ako je a='U'?
Rjeenje:

Prema prethodno deniranom djelovanju operatora, najprije raunamo not a = not 'U' = 'U'. Potom
raunamo 'U' and 'U' = 'U'. Signalu f bit e pridjeljena vrijednost 'U'. Uoite da u ovako deniranom
trolanom skupu ne vrijedi da je A A = 0 ili da je A + A = 1.

2.4

Modeliranje jednostavnog sklopa

U nastavku emo proi kroz modeliranje jednostavnog sklopa i to uporabom modela toka podataka,
potom strukturnog modela i konano ponaajnog modela. Sve primjere isprobajte i u sustavu
VHDLLab2. Kao prvi korak, u sustavu VHDLLab2 napravite novi projekt (vjezba1): iz izbornika
File odaberite New pa Project.

U dijalogu koji se otvori unesite kao ime projekta vjezba1 i pritisnite Finish.

S lijeve strane u popisu projekata pojavit e se novostvoreni projekt. Sve to je opisano u nastavku
ovog poglavlja radite u tom projektu.

12

POGLAVLJE 2.

2.4.1

NAINI OPISIVANJA SKLOPOVA

Opis sklopa modelom toka podataka

Pretpostavimo da je potrebno napisati model sklopa koji ima etiri ulaza a, b, c i d te jedan izlaz f , i
koji ostvaruje sljedeu Booleovu funkciju: f = (a b + c) d. Takoer, neka sklop kao "crna kutija"
ima kanjenje od 10 nanosekundi.
Model toka podataka takvog sklopa dan je u nastavku. Sklop smo nazvali sklop1. Model se sastoji od
jedne naredbe pridruivanja vrijednosti signalu.
Listing 2.1 :

Opis sklopa modelom toka podataka

u k l j u i v a n j e k o r i s t e n i h b i b l i o t e k a
l i b r a r y IEEE ;
3 u s e IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
1
2
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

d e f i n i c i j a su e l j a s k l o p a
ENTITY s k l o p 1 IS PORT (
a : IN s t d _ l o g i c ;
b : IN s t d _ l o g i c ;
c : IN s t d _ l o g i c ;
d : IN s t d _ l o g i c ;
f : out s t d _ l o g i c ) ;
END s k l o p 1 ;
d e f i n i c i j a a r h i t e k t u r e s k l o p a
dan j e f u n k c i j s k i model
ARCHITECTURE a r c h 1 OF s k l o p 1 IS
BEGIN
f <= ( ( a AND b ) OR c ) AND d AFTER 10 ns ;
END a r c h 1 ;

U projektu koji ste pripremili otiite na New pa VHDL source.

2.4.

MODELIRANJE JEDNOSTAVNOG SKLOPA

13

U dijalogu koji e se otvoriti unesite naziv sklopa (sklop1) i pritisnite Next.

Na sljedeoj stranici dijaloga denirajte suelje (dodajte etiri ulaza i jedan izlaz pritiskom na gumb
+ i podesite imena). Kad ste gotovi, pritisnite gumb Finish.

14

POGLAVLJE 2.

NAINI OPISIVANJA SKLOPOVA

Otvorit e se ureiva VHDL modela, kako je prikazano na sljedeoj slici.

Otiite u arhitekturu sklopa i tamo denirajte izraz prema kojem se rauna vrijednost izlaza f uz
zadano kanjenje od 10 nanosekundi.

2.4.

MODELIRANJE JEDNOSTAVNOG SKLOPA

15

Jednom kada smo napravili model sklopa, isti bi trebalo i ispitati. Stoga u istom projektu napravite
novi ispitni sklop: New, Testbench.

U dijalogu koji se otvori provjerite da je kao odabrani projekt doista oznaen vjezba1 (ako nije,
odaberite ga), i potom odaberite da elite ispitati sklop ije je ime sklop1. Na dnu dijaloga sustav e
automatski predloiti da se ispitni sklop zove sklop1_tb, to je uobiajena konvencija koje se valja
drati. Pritisnite Finish.

16

POGLAVLJE 2.

NAINI OPISIVANJA SKLOPOVA

Potom e Vas sustav pitati je li to kombinacijski ili sekvencijski sklop, i koje vremenske parametre
elite koristiti. Ostavite sve stavke kako su podeene, i samo pritisnite OK.

Pred Vama e se otvoriti ureiva ispitnog sklopa. Ureiva e Vam omoguiti da svakih 100
nanosekundi promijenite pobudu koja e biti dovedena na ispitivani sklop. Va je zadatak osigurati
da rad sklopa ispitate u cijelosti: to znai da u trenutku t=0 ns na ulaze a, b, c i d dovodite
vrijednosti 0, 0, 0, 0; u trenutku t=100 ns vrijednosti 0, 0, 0, 1, i tako redom sve do trenutka
t=1500 ns kada na ulaze treba dovesti 1, 1, 1, 1. Kad ste gotovi, snimite ispitni sklop.

2.4.

MODELIRANJE JEDNOSTAVNOG SKLOPA

17

Nakon to je ispitni sklop napravljen i snimljen, moemo ga pokrenuti. Napravite desni klik na naziv
ispitnog sklopa u stablu projekta s lijeve strane, i odaberite stavku Simulate.

Sustav e na posluitelju napraviti simulaciju. Otvorit e se novi prozor u kojem e biti prikazani
rezultati simulacije.

Pogledajmo malo bolje te rezultate. Inicijalno je odabran takav faktor uveanja uz koji se na zaslonu
prikazuje prvih pedesetak nanosekundi simulacije. Naime, analizom rezultata, sustav je zakljuio da

18

POGLAVLJE 2.

NAINI OPISIVANJA SKLOPOVA

se ve u tom dijelu poinje dogaati neto zanimljivo. Prva etiri retka prikazuju kako se kroz
vrijeme mijenjaju signali a, b, c i d: mijenjaju se upravo onako kako smo ih u ureivau ispitnog
sklopa podesili. U t=0 ns sva etiri signala postavljena su na vrijednost '0' , i eka se odgovor naeg
ispitivanog sklopa da postavi neto na izlaz f .
Pogledajte to se dogaa na izlazu f . U trenutku t=0 ns izlaz f postavljen je na vrijednost U, i tako
ostaje jo neko vrijeme prije no to se promijeni i postane '0' . Vidite li sa slike koliko je vremena na
izlazu vrijednost 'U'? Moete li to povezati s nainom na koji smo modelirali na sklop? Koja je
tono naredba odgovorna za to?
Ako ste odgovorili na prethodna pitanja, sada moete malo odzumirati simulaciju. U tu svrhu
koristite alat za odzumiravanje (malo plavo povealo sa znakom minusa u alatnoj traci).
Odzumiravajte sve dok ne dobijete prikaz kao na sljedeoj slici.

Na prikazanoj slici jedan od kursora je prebaen na t=544 ns a drugi (zeleni, aktivan) na t=352 ns.
Vrijednosti svih signala u trenutku u kojem se nalazi zeleni kursor ujedno su prikazana (oitana) uz
lijevi rub simulacije, izmeu naziva signala i njihovih valnih oblika.
Iz simulacije vidimo da funkcija postaje '1' u 5 sluajeva: kada su a, b, c i d redom 0,0,1,1, zatim kada
su 0,1,1,1, zatim kada su 1,0,1,1, zatim kada su 1,1,0,1 i konano kada su 1,1,1,1. Je li to u redu?

2.4.

19

MODELIRANJE JEDNOSTAVNOG SKLOPA

Denirate li ispitni sklop na prikazani nain (tako da navedete sve kombinacije ulaza i to redosljedom
kako biste ih inae pisali u tablici istinitosti, u odreenom smislu simulacija Vam daje prikaz stvarne
tablice istinitosti kroz vrijeme: svakih 100 nanosekundi izmjenjuje se jedan redak tablice). Ako ste
funkciju prethodno i sami tabelirali, tada bi se provjera radi li sklop ispravno trebala svesti na
usporedbu Vae tablice i tablice koju je dala simulacija.

2.4.2

Strukturni opis sklopa

Strukturni opis sklopa polazi od pretpostavke da emo sklop opisivati uporabom jednostavnijih
gotovih komponenata i njihovim povezivanjem. Strukturni model sklopa konceptualno je upravo ono
to radimo kada sklop deniramo uporabom shematica.
Za ilustraciju emo u nastavku napraviti strukturni model sklopa koji ostvaruje ve prethodno
razmatranu funkciju: f = (a b + c) d. Sklop emo nazvati sklop2.
Shematski prikaz ovog sklopa dan je u nastavku.

A
B

&
1

&

Stoga emo pretpostaviti da u projektu ve imamo napravljene gotove jednostavnije komponente koje
odgovaraju sklopovima od kojih se sastoji prikazana shema. Konkretno, pretpostavit emo da u
projektu imamo napravljen model SklopAND koji predstavlja sklop koji ima dva ulaza i jedan izlaz i
rauna logiko I, te da imamo napravljen model SklopOR koji predstavlja sklop koji ima dva ulaza i
jedan izlaz i rauna logiko ILI.
S obzirom da te sklopove jo nemamo u projektu, evo njihovih denicija u nastavu (uoite, te smo
sklopove opisali modelom toka podataka). Dodajte ih u projekt (napravite dva nova VHDL modela).
Listing 2.2 :

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

Model toka podataka sklopa SklopAND

l i b r a r y IEEE ;
u s e IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
ENTITY SklopAND IS PORT (
a , b : IN s t d _ l o g i c ;
y : out s t d _ l o g i c ) ;
END SklopAND ;
ARCHITECTURE a r c h 1 OF SklopAND IS
BEGIN
y <= a AND b AFTER 10 ns ;
END a r c h 1 ;

20

POGLAVLJE 2.

Listing 2.3 :

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

NAINI OPISIVANJA SKLOPOVA

Model toka podataka sklopa SklopOR

l i b r a r y IEEE ;
u s e IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
ENTITY SklopOR IS PORT (
a , b : IN s t d _ l o g i c ;
y : out s t d _ l o g i c ) ;
END SklopOR ;
ARCHITECTURE a r c h 1 OF SklopOR IS
BEGIN
y <= a OR b AFTER 10 ns ;
END a r c h 1 ;

Da bismo prikazali strukturni model sklopa sklop2, najprije emo nadopuniti prethodnu shemu, kako
je prikazano u nastavku.

SklopAND

A
B
C

a
b
c1

&

i1

SklopOR
a
b
c2

1 y

i2

SklopAND
a
b

&

c3

to smo napravili?

Iznad svakog sklopa dopisali smo naziv komponente koja u projektu predstavlja model tog
sklopa.
Ispod svakog sklopa naveli smo jedinstveno ime primjerka komponente. U shemi imamo ukupno
tri primjerka od dvije komponente: imamo dva primjerka komponente SklopAND (nazvali smo ih
c1 i c3) te jedan primjerak komponente SklopOR (nazvali smo ga c2).
U svaki sklop ucrtali smo "lokalna" imena ulaza i izlaza. U skladu s prethodno danom
denicijom, sklopovi SklopAND i SklopOR imaju ulaze a i b te izlaz y .
Svim icama koje nisu niti ulazi sklopa niti izlazi sklopa (odnosno koje se izvana ne vide i ne
ine suelje sklopa) dali smo imena. Te e ice postati interni signali: vodii kojima emo
povezivati komponente na nain koji se izvana ne vidi.

Sada smo spremni za pisanje strukturnog modela. Model je prikazan u nastavku.

2.4.

MODELIRANJE JEDNOSTAVNOG SKLOPA

Listing 2.4 :

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

21

Strukturni model sklopa

l i b r a r y IEEE ;
u s e IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
ENTITY s k l o p 2 IS PORT (
a , b , c , d : IN s t d _ l o g i c ;
f : out s t d _ l o g i c ) ;
END s k l o p 2 ;
ARCHITECTURE
SIGNAL i 1 ,
BEGIN
c1 : ENTITY
c2 : ENTITY
c3 : ENTITY
END a r c h 1 ;

a r c h 1 OF s k l o p 2 IS
i2 : std_logic ;
work . SklopAND PORT MAP ( a , b , i 1 ) ;
work . SklopOR PORT MAP ( i 1 , c , i 2 ) ;
work . SklopAND PORT MAP ( i 2 , d , f ) ;

Usporedite sklop1 i sklop2: prvog smo opisali modelom toka podataka a drugog strukturnim
modelom. Suelja su u oba sluaja jednaka: radi li se o ponaajnom ili o strukturnom opisu, nije
mogue zakljuiti iz suelja sklopa ve iskljuivo iz arhitekture sklopa. Stoga u strukturnom opisu sve
do retka 10 nema nikakvih razlika u odnosu na ponaajni opis.
U retku 10 dodali smo deklaraciju dvaju signala: i1 i i2, oba tipa std_logic. Interni signali
deklariraju se u arhitekturi sklopa prije kljune rijei BEGIN uporabom kljune rijei SIGNAL.
Nakon kljune rijei BEGIN zapoinje strukturni opis. Za svaki od primjeraka sklopova koje imamo u
shemi naveli smo po jednu naredbu kojom se stvara primjerak komponente. Naredba uvijek zapoinje
nazivom primjerka komponente, slijedi znak dvotoke, kljuna rije ENTITY, potom work. pa naziv
nae komponente; potom dolaze kljune rijei PORT MAP, otvorena obla zagrada, denicija
povezivanja komponente, zatvorena obla zagrada pa toka-zarez.
Prethodni primjer u sva tri retka koristi pozicijsko povezivanje : u oblim zagradama redosljedom
kojim su ulazi i izlazi denirani u suelju komponente iji primjerak stvaramo navodimo ulaze, izlaze
odnosno interne signale iz naeg sklopa koje spajamo. Pogledajmo paljivije redak 13: u oblim
zagradama pie (i1 ,c, i2). Iz suelja komponente SklopOR pak znamo da sklop najprije ima ulaz a,
potom ulaz b pa izlaz y . Slijedi da smo na ulaz a komponente SklopOR doveli interni signal i1, na
ulaz b komponente SklopOR na vlastiti ulaz c a na izlaz y komponente SklopOR na interni signal i2.
Osim pozicijskog povezivanja, VHDL nam dozvoljava i uporabu povezivanja putem imena. U tom
sluaju u oblim zagradama navodimo lokalno ime ulaza/izlaza komponente, znak => pa ime
ulaza/izlaza/internog signala naeg sklopa koji spajamo na taj port komponente. Stoga smo tijelo
arhitekture mogli napisati i ovako.
1
2
3

c1 : ENTITY work . SklopAND PORT MAP ( a=>a , b=>b , y=>i 1 ) ;


c2 : ENTITY work . SklopOR PORT MAP ( a=>i 1 , b=>c , y=>i 2 ) ;
c3 : ENTITY work . SklopAND PORT MAP ( a=>i 2 , y=>f , b=>d ) ;

Pri pisanju povezivanja putem imena redosljed navoenja signala vie nije bitan. To je ilustrirano u
prethodnom primjeru kod primjerka c3, gdje je povezivanje izlaza komponente navedeno u sredini.
Kako kod ovog povezivanja prevoditelju dajemo sve potrebne informacije, redosljed kojim ih
navodimo postaje nebitan.
Valja napomenuti da se primjerci komponenti mogu stvarati na jo jedan nain. Kako se tu
zahtjevaju promjene na dva mjesta, cjelovit modicirani primjer prikazan je u nastavku.

22

POGLAVLJE 2.

Listing 2.5 :

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

NAINI OPISIVANJA SKLOPOVA

Strukturni model sklopa uz deklaraciju komponenti

l i b r a r y IEEE ;
u s e IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
ENTITY s k l o p 2 IS PORT (
a , b , c , d : IN s t d _ l o g i c ;
f : out s t d _ l o g i c ) ;
END s k l o p 2 ;
ARCHITECTURE a r c h 1 OF s k l o p 2 IS
component SklopAND i s p o r t (
a : IN STD_LOGIC;
b : IN STD_LOGIC;
y : OUT STD_LOGIC
);
end component ;
component SklopOR i s p o r t (
a : IN STD_LOGIC;
b : IN STD_LOGIC;
y : OUT STD_LOGIC
);
end component ;
SIGNAL i 1 , i 2 : s t d _ l o g i c ;
BEGIN
c1 : SklopAND PORT MAP ( a , b , i 1 ) ;
c2 : SklopOR PORT MAP ( i 1 , c , i 2 ) ;
c3 : SklopAND PORT MAP ( i 2 , d , f ) ;
END a r c h 1 ;

U emu su razlike? Poev od retka 10 u arhitekturi smo uz deniciju potrebnih internih signala
ponudili i deniciju suelja svih koritenih komponenata. Ova se denicija radi uporabom kljune
rijei COMPONENT, nakon ega je ostatak jednak kao kod denicije suelja komponente. Tako u
retcima 10 do 15 dajemo deniciju suelja komponente SklopAND a u retcima 16 do 21 deniciju
suelja komponente SklopOR.
Uz te denicije sada vie nema potrebe da se u arhitekturi sklopa prilikom stvaranja primjeraka
komponenata pie ENTITY work.; dovoljno je samo navesti naziv komponente (ilustrirano u retcima
2426).
Postoji jo razlika izmeu ova dva naina opisivanja, ali te nam razlike na ovom kolegiju nisu
znaajne pa ih neemo niti navoditi.

2.4.3

Ponaa jni opis sklopa

Kod ponaajnog modela sklopa njegovu funkcionalnost ne opisujemo oslanjajui se iskljuivo na


logike operacije, ve koristimo proceduralno programiranje i naredbe za kontrolu toka izvoenja. U
arhitekturi sklopa, za to se koriste blokovi process. Svaki blok process moe imati svoje ime (pie se
ispred kljune rijei process i odvaja dvotokom), moe imati listu osjetljivosti (to je popis signala koji
simulatoru kau da se pri promjenama tih signala program naveden u bloku process mora ponovno
izvesti), moe denirati vlastite varijable (varijable su sline signalima samo to se deklariraju unutar
bloka process prije kljune rijei begin, vidljive su samo u tom bloku, ne omoguavaju modeliranje
kanjenja i vrijednost im se pridruuje znakom := a ne kao kod signala znakom <=), i konano unutar
tijela bloka koje je omeeno kljunim rijeima begin i end process dolazi programski opis.
Primjer ponaajnog opisa sklopa za koji smo ve prikazali i model toka podataka i strukturni model
prikazan je u nastavku.

2.4.

MODELIRANJE JEDNOSTAVNOG SKLOPA

Listing 2.6 :

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

23

Ponaa jni model sklopa

l i b r a r y IEEE ;
u s e IEEE . s t d _ l o g i c _ 1 1 6 4 . a l l ;
ENTITY s k l o p 3 IS PORT (
a : IN s t d _ l o g i c ;
b : IN s t d _ l o g i c ;
c : IN s t d _ l o g i c ;
d : IN s t d _ l o g i c ;
f : out s t d _ l o g i c ) ;
END s k l o p 3 ;
ARCHITECTURE a r c h 1 OF s k l o p 3 IS
BEGIN
f j a : process (a , b , c , d)
v a r i a b l e tmp : s t d _ l o g i c ;
begin
tmp := ' 0 ' ;
i f d = '1 ' then
i f a = '1 ' and b = '1 ' then
tmp := ' 1 ' ;
e l s i f c = '1 ' then
tmp := ' 1 ' ;
end i f ;
end i f ;
f <= tmp a f t e r 10 ns ;
end p r o c e s s ;
END a r c h 1 ;

Sve naredbe napisane unutar bloka process na poetku simulacije izvedu se jednom i potom se njegovo
izvoenje suspendira tako dugo dok se ne promijeni neki od signala unutar navedene liste osjetljivosti
(u naem primjeru ine je signali a, b, c i d). Kada se bilo koji od tih signala promijeni, naredbe u
bloku process ponovno se izvedu i blok se opet zamrzne na kraju. Blok process s listom osjetljivosti
ponaa se kao beskonana petlja koja na dnu ima naredbu koja zamrzava izvoenje sljedee iteracije
sve dok se ne detektira promjena vrijednosti na nekom od signala iz liste osjetljivosti. Ekvivalentni
blok process onome iz prethodnog primjera prikazan je u nastavku: sada nemamo listu osjetljivosti ve
eksplicitnu naredbu koja zamrzava prelazak u novu iteraciju sve do promjene na bilo kojem od
navedenih signala.
Listing 2.7 :

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

Blok process bez liste osjetljivosti

fja : process
v a r i a b l e tmp : s t d _ l o g i c ;
begin
tmp := ' 0 ' ;
i f d = '1 ' then
i f a = '1 ' and b = '1 ' then
tmp := ' 1 ' ;
e l s i f c = '1 ' then
tmp := ' 1 ' ;
end i f ;
end i f ;
f <= tmp a f t e r 10 ns ;
w a i t on a , b , c , d ;
end p r o c e s s ;

Pogledajmo sada ovaj posljednji opis. U bloku process denirali smo pomonu varijablu tmp (redak 2).
Potom je u tijelu bloka najprije inicijaliziramo na vrijednost '0' pa nizom if naredbi provjeravamo i

24

POGLAVLJE 2.

NAINI OPISIVANJA SKLOPOVA

po potrebi korigiramo njezinu vrijednost na '1' (retci 5 do 11). Konano, u retku 12 imamo naredbu
koja izlazu f pridruuje izraunatu vrijednosti uz kanjenje od 10 nanosekundi. U retku 13 imamo
naredbu koja suspendira prelazak u sljedeu iteraciju sve dok se ne detektira promjena na bilo kojem
od signala a, b, c ili d. Kod verzije bloka process koji ima eksplicitno navedenu listu osjetljivosti ovaj
redak nije potreban.

2.5

Ispitni sklop

Ostalo nam je za odgovoriti na jo jedno pitanje: to je zapravo ispitni sklop ? Do sada smo se s
ispitnim sklopovima upoznali koristei "arobnjake" sustava VHDLLab2 koji su nam nudili lijepo
grako suelje za njihovo ureivanje, i kada smo pokrenuli simulaciju, magija se dogodila i mi smo
dobili rezultate. Da bismo demisticirali ispitne sklopove, vratimo se osnovama. Kroz prethodne
primjere napravili ste i u projekt dodali model toka podataka sklopa SklopAND. Napravimo za njega
ispitni sklop pomou ugraenog arobnjaka, i podesimo pobudu tako da u t=0 ns postavi ulaze a i b
na '0' , u t=100 ns postavi a na '0' a b na '1' , u t=200 ns postavi a na '1' a b na '0' te u t=300 ns
postavi a na '1' i b na '1' . Kad ste gotovi, snimite ispitni sklop.

U stablu projekta s lijeve strane odaberite sada miem sam ispitni sklop SklopAND_tb i iz iskonog
izbornika odaberite stavku View VHDL. Iznenaenje: ispitni sklop nije nita drugo doli jo jedan sklop
koji je opisan u VHDL-u. VHDL kd koji ete dobiti prikazan je i ovdje u nastavku.

2.5.

ISPITNI SKLOP

Listing 2.8 :

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

25

Ispitni sklop

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
e n t i t y SklopAND_tb i s
end SklopAND_tb ;
a r c h i t e c t u r e s t r u c t u r a l o f SklopAND_tb i s
component SklopAND i s p o r t (
a : IN STD_LOGIC;
b : IN STD_LOGIC;
y : OUT STD_LOGIC ) ;
end component ;
s i g n a l tb_a : STD_LOGIC;
s i g n a l tb_b : STD_LOGIC;
s i g n a l tb_y : STD_LOGIC;
begin
p r i m j e r a k s k l o p a k o j i s e i s p i t u j e
uut : SklopAND p o r t map ( tb_a , tb_b , tb_y ) ;
s k l o p k o j i g e n e r i r a zadane i s p i t n e u z o r k e
process
begin
tb_a <= ' 0 ' ;
tb_b <= ' 0 ' ;
w a i t f o r 100 ns ;

tb_b <= ' 1 ' ;


w a i t f o r 100 ns ;
tb_a <= ' 1 ' ;
tb_b <= ' 0 ' ;
w a i t f o r 100 ns ;
tb_b <= ' 1 ' ;
w a i t f o r 100 ns ;
wait ;
end p r o c e s s ;
end s t r u c t u r a l ;

Uoimo: ispitni sklop je sklop ije je suelje prazno; on nema niti ulaza, niti izlaza (retci 4 i 5). U
arhitekturi sklopa prije kljune rijei BEGIN dana je deklaracija suelja komponente SklopAND_tb: to
je ispitivana komponenta. Potom je jo deklarirano upravo onoliko internih signala koliko ispitivani
sklop ima ulaza i izlaza. Tijelo arhitekture sastoji se od samo dvije naredbe (redak 20 te redak 23).
U retku 20 dana je naredba koja stvara jedan primjerak ispitivane komponente i interne signale spaja
na njezine ulaze i izlaze. Tom je primjerku dano ime uut (to je kratica od engleske fraze Unit Under
Test ).
Druga naredba je naredba process: ona se protee od retka 23 pa sve do retka 39, i VHDL itav njezin
sadraj tretira kao jednu naredbu, odnosno ta itava naredba modelira novi sklop koji se takoer
nalazi u naem ispitnom sklopu. Specinost ove naredbe (bloka process) je da nam omoguava da dio
funkcionalnosti sklopa opisujemo gotovo kao u klasinom programskom jeziku: naredbe koje se
navedu unutar bloka process sustav izvrava slijedno. Blok process kakav je napisan u ovom primjeru
ponaa se kao beskonana petlja ije bi se naredbe neprestano ponavljale (vie emo nauiti neto
kasnije).

26

POGLAVLJE 2.

NAINI OPISIVANJA SKLOPOVA

Pogledajmo sada malo detaljnije naredbe unutar bloka process. Retci 25 i 26 na interne signale tb_a i
tb_b postavljaju vrijednost '0' . No ti isti interni signali spojeni su na ulaze a i b nae ispitivane
komponente, ime ovaj blok process postavlja vrijednosti koje se kao ulazi dovode na ispitivanu
komponentu koja e odreagirati na odgovarajui nain i svoj izlaz y postaviti na odgovarajuu
vrijednost (uz zadano kanjenje); ta e vrijednost biti vidljiva i na internom signalu tb_y jer je izlaz y
spojen na njega.
Izvoenje ovog bloka potom se zamrzava u trajanju od 100 ns (redak 27, naredba wait for ), nakon
ega naredba u retku 29 mijenja vrijednost internog signala tb_b na '1' (tb_a ostaje kakav je bio) i
blok process se opet zaglavljuje na sljedeih 100 ns (redak 30). Postupak se ponavlja jo dva puta
(retci 32 do 34, pa retci 36 do 37). Na ovaj nain blok process na interne je signale postavio ulazne
signale upravo u skladu s onime kako smo ih mi naklikali u grakom ureivau. Kako bi se sprijeilo
da se ova pobuda sada cikliki ponavlja, blok process terminira se u retku 38 naredbom bezuvjetnog
ekanja wait; iz koje blok process vie nikada ne moe izai.
Ako u simuliranom sustavu u tom trenutku vie nema nikakvih promjena, ovo je i trenutak u kojem
e zavriti i simulacija.
Jo nam je ostalo da pokrenemo simulaciju i promotrimo rezultate (slika u nastavku). Pogledajte
sada malo paljivije popis svih signala koje prikazuje simulator. Uoite da postoji 6 signala.

/tb_a: to je interni signal koji se nalazi u ispitnom sklopu; vrijednosti mu postavlja blok process
a ita na ispitivani sklop.

/tb_b: to je interni signal koji se nalazi u ispitnom sklopu; vrijednosti mu postavlja blok process
a ita na ispitivani sklop.

/tb_y: to je interni signal koji se nalazi u ispitnom sklopu; vrijednosti mu postavlja na


ispitivani sklop.

/uut/a: to je ulaz sklopa SklopAND; vrijednosti mu izvana postavlja na ispitni sklop, a


vrijednost ita naredba u arhitekturi sklopa SklopAND koja odreuje vrijednost izlaza y.

/uut/b: to je ulaz sklopa SklopAND; vrijednosti mu izvana postavlja na ispitni sklop, a


vrijednost ita naredba u arhitekturi sklopa SklopAND koja odreuje vrijednost izlaza y.

/uut/y: to je izlaz sklopa SklopAND; vrijednosti mu postavlja naredba u arhitekturi sklopa


SklopAND koja odreuje vrijednost tog izlaza.

Da smo imali bogatije strukturne modele (sklop koji sadri sklop koji sadri sklop) popis signala bio
bi vei i bogatiji. U rezultatima simulacije za svaki od postojeih signala mogli biste vidjeti
vrijednosti u bilo kojem trenutku.

2.6.

O KANJENJIMA

27

Primjetimo: ispitni sklop modeliran je hibridnim modelom.

2.6

O kanjenjima

Jezik VHDL uz niz kljunih rijei koje slue za modeliranje funkcionalnosti sklopova nudi i neke
jezine konstrukte koji omoguavaju speciciranje kanjenja. Primjerice, ve smo se upoznali s
naredbom oblika:
1

f <= a AND b AFTER 10 ns ;

Treba napomenuti da ti jezini konstrukti nisu sintetizabilni: opiete li digitalni sklop na takav nain
i potom zatraite od sintetizatora digitalnog sklopovlja da takav opis "utoi" u Va programirljivi
sklop (primjerice, FPGA), sintetizator e naredbe kanjenja zanemariti. Naime, prilikom sinteze
sklopa iz VHDL opisa sintetizator na raspolaganju ima programirljiv sklop koji ste mu zadali i koji je
ostvaren u odreenoj tehnologiji. U toj tehnologiji, komponente e imati kaenjenja koja su odreena
samom tehnologijom i na koja Vi (niti sintetizator) ne moete utjecati.
Zapitate li se zato onda takve naredbe uope postoje, odgovor je jednostavan: kako bi se omoguilo
izvoenje to je mogue realnijih simulacija. Naime, svaki ozbiljniji alat za modeliranje i sintezu

28

POGLAVLJE 2.

NAINI OPISIVANJA SKLOPOVA

digitalnog sklopovlja korisnicima nudi mogunost izvoenja nekoliko razliitih vrsta simulacija.
Najjednostavnija simulacija je simulacija ponaajnog modela (engl. Behavioral model simulation ) kod
koje simulator simulira Va opis upravo onako kako ste ga denirali. Meutim, takav alat moete
zatraiti i provoenje simulacije koja uzima u obzir ziki razmjetaj komponenata u programirljivom
sklopu i nain na koji su komponente meusobno povezane (engl. Post place and route simulation ).
Ono to e se u tom trenutku dogoditi jest da e alat zanemariti Va polazni opis i generirati novi
VHDL opis koji koji u obzir uzima grau programirljivih komponenata i njihova stvarna kanjenja
koja e opisivati koristei naredbe poput prethodne navedene uz AFTER 10 ns. Takav opis potom e
poslati simulatoru na simulaciju ime ete dobiti vjerniju sliku onoga to e se u stvarnosti dogaati
jednom kada se konani sklop sintetizira. Ciljani korisnik ovih primitiva niste dakle Vi kao dizajner
sklopa (iako Vam nitko ne brani da ih koristite, tako dugo dok znate da se to ne moe tako
sintetizirati) ve je to sam alat u kojem radite razvoj i sintezu.
Iz upravo opisanog razloga niti sljedei isjeak kda napisanog u VHDL-u koji se u ispitnim
sklopovima esto koristi za generiranje signala takta nije sintetizabilan.
Listing 2.9 :

1
2
3
4
5
6
7

Nesintetizabilan generator signala takta

process
begin
cp <= ' 1 ' ;
w a i t f o r 50 ns ;
cp <= ' 0 ' ;
w a i t f o r 50 ns ;
end p r o c e s s ;

Naime, rad opisanog sklopa temelji se na pretpostavci da je sintetizator sposoban osigurati upravo
navedena kanjenja, to naravno nije sluaj. Stoga e ovakvi dijelovi kda esto biti koriteni u
ispitnim sklopovima koje e simulator moi simulirati, ali ih nikada neemo imati u opisima sklopova
koje ziki treba sintetizirati: programirljivi sklopovi za ovu e svrhu morati imati unaprijed
proizveden sklop ija je zadaa generiranje signala takta, ili e u jednostavnijoj varijanti imati
zaseban ulaz preko kojeg e korisnik izvana morati dovesti prikladno generiran signal takta (nekim
primjerice relaksacijskim oscilatorom ili kvarcnim oscilatorom).

Poglavlje 3

Standardni kombinacijski moduli


Pojam standardni kombinacijski moduli predstavlja zajedniki nazivnik za nekoliko razliitih esto
koritenih kombinacijskih modula, poput:

multipleksori,
dekoderi,
koderi i prioritetni koderi,
pretvornici koda te
komparatori.
Kroz ovo poglavlje osvrnut emo se na modeliranje nekih od ovih sklopova uporabom jezika VHDL.

3.1

Modeliranje multipleksora

Simbol multipleksora 2/1 s ulazom za omoguavanje prikazan je na slici u nastavku.

d0

e
y

d1

Prisjetimo se, kada je onemoguen (e =0 00 ), multipleksor mora na izlazu generirati vrijednost '0' .
Kada je omoguen (e =0 10 ), na izlaz treba proslijediti vrijednost dovedenu na podatkovni ulaz d0 ako
je adresni ulaz a =0 00 , odnosno vrijednost dovedenu na podatkovni ulaz d1 ako je adresni ulaz a =0 10 .
Ponaajni model ovog sklopa prikazan je u nastavku.
29

30

POGLAVLJE 3.

Listing 3.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

STANDARDNI KOMBINACIJSKI MODULI

Ponaa jni model multipleksora 2/1 s ulazom za omoguavanje

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY mux21e IS PORT(
d : IN STD_LOGIC_VECTOR( 0 TO 1 ) ;
a : IN STD_LOGIC;
e : IN STD_LOGIC;
y : OUT STD_LOGIC ) ;
END mux21e ;
ARCHITECTURE a r c h OF mux21e IS
BEGIN
process (d , a , e )
begin
i f e = '0 ' then
y <= ' 0 ' ;
e l s i f a = '0 ' then
y <= d ( 0 ) ;
e l s i f a = '1 ' then
y <= d ( 1 ) ;
else
y <= ' 0 ' ;
end i f ;
end p r o c e s s ;
END a r c h ;

U suelju sklopa, podatkovne ulaze smo modelirali dvobitnim vektorom (redak 5 prethodnog modela)
dok su za sve ostalo koriteni jednobitni signali tipa std_logic (retci 6, 7 i 8).
Arhitektura je u cijelosti opisana ponaajno, jednim blokom process ija je zadaa na temelju ulaza d,
a i e odrediti vrijednost izlaza y ; stoga se u listi osjetljivosti bloka process nalaze upravo ulazi d, a i e.
Za potrebe opisa funkcionalnosti koristi se if -pitalica. Ako je multipleksor onemoguen, na izlaz se
stavlja vrijednost 0 (retci 15, 16); u suprotnom se provjerava je li adresni ulaz postavljen na '0' i ako
je, na izlaz se prosljeuje podatak doveden na podatkovni ulaz d0 (retci 17, 18); inae se provjerava je
li a postavljeno na '1' pa ako je, na izlaz se prosljeuje podatak doveden na podatkovni ulaz d1 (retci
19, 20); konano, ako nita od prethodnoga nije bilo zadovoljeno (razmislite zato je to mogue ), na
izlaz se postavlja vrijednost '0' (retci 21, 22).
Uoite sintaksu naredbe if kada ispitujemo vie opcija: koristi se elsif (ne else if ) te za posljednju
opciju else . itav izraz zatvara se s end if ; .
Umjesto ovakve if -pitalice mogli smo iskoristiti i naredbu case. Ekvivalentan blok process za taj sluaj
prikazan je u nastavku.
Pogledajmo i sintaksu naredbe case. Nakon kljune rijei case dolazi signal ili varijabla ija se
vrijednost razmatra, pa kljuna rije is . Potom se navode opcije. Svaka opcija zapoinje kljunom
rijei when, slijedi vrijednost pa znak => nakon ega dolaze naredbe pridruivanja (u naem sluaju
dodjeljivanje vrijednosti izlazu y). Naredba case zavrava navoenjem kljunih rijei end case; .
Ako se kroz eksplicitno navoenje opcija ne pokriju sve vrijednosti koje razmatrani signal/varijabla
moe imati, nuno je dodati jo opciju koja e pokupiti te sve vrijednosti, to se radi navoenjem
kljune rijei others. Prisjetite se, ulaz a je tipa std_logic pa kao takav moe poprimiti jednu od 9
razliitih vrijednosti. Ako bismo se u opisu izjasnili samo o vrijednostima '0' i '1' , preostalo bi nam
jo 7 nepokrivenih vrijednosti. Stoga je u ovom sluaju navoenje when others nuno; njegovim

3.1.

31

MODELIRANJE MULTIPLEKSORA

izostavljanjem napisani se kd nee moi prevesti i generirat e se odgovarajua poruka pogreke.


Listing 3.2 :

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

Opis koji se temelji na naredbi case

process (d , a , e )
begin
i f e = '0 ' then
y <= ' 0 ' ;
else
case a i s
when ' 0 '
=> y <= d ( 0 ) ;
when ' 1 '
=> y <= d ( 1 ) ;
when o t h e r s => y <= ' 0 ' ;
end c a s e ;
end i f ;
end p r o c e s s ;

Da bismo prikazali model multipleksora koji se temelji na toku podataka, prikaimo njegovo
ostvarenje osnovnim logikim sklopovima, kako je prikazano na slici u nastavku.

E
d0
a

ac

d1

&

i1

1
&

i2

Internim signalima (icama koje nisu niti ulazi niti izlazi) dana su imena ac, i1 te i2 . Sada moemo
prikazati model toka podataka.
Listing 3.3 :

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

Opis koji se temelji na toku podataka

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY mux21e IS PORT(
d : IN STD_LOGIC_VECTOR( 0 TO 1 ) ;
a : IN STD_LOGIC;
e : IN STD_LOGIC;
y : OUT STD_LOGIC ) ;
END mux21e ;
ARCHITECTURE a r c h OF mux21e IS
SIGNAL ac , i 1 , i 2 : s t d _ l o g i c ;
BEGIN
ac <= not a ;
i 1 <= e and ac and d ( 0 ) ;
i 2 <= e and a and d ( 1 ) ;
y <= i 1 o r i 2 ;
END a r c h ;

Umjesto uprabe internih signala, s obzirom da se radi o kombinacijskom sklopu, moemo napisati i
arhitekturu koja sadri samo konaan izraz kojim je odreen izlaz multipleksora, to je ilustrirano u
nastavku.

32

POGLAVLJE 3.

Listing 3.4 :

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

STANDARDNI KOMBINACIJSKI MODULI

Krai opis ko ji se temelji na toku podataka

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY mux21e IS PORT(
d : IN STD_LOGIC_VECTOR( 0 TO 1 ) ;
a : IN STD_LOGIC;
e : IN STD_LOGIC;
y : OUT STD_LOGIC ) ;
END mux21e ;
ARCHITECTURE a r c h OF mux21e IS
BEGIN
y <= e and ( ( not a and d ( 0 ) ) o r ( a and d ( 1 ) ) ) ;
END a r c h ;

Naposlijetku, dajmo jo i strukturni model ovakvog multipleksora. Pretpostavit emo da u projektu


ve imamo na raspolaganju komponente invertor ( invertor ), troulazni sklop I (sklopAND3) i dvoulazni
sklop ILI (sklopOR2). Nazivi komponenata te nazivi primjeraka komponenata prikazani su na slici u
nastavku.

E
d0
a

sklopAND3
invertor
a

x1

ac

c1:

d1

&
x3

x2

i1
sklopOR2
x1

1y

c2:

sklopAND3
x1
x2
x3

&

x2

c4:

i2

c3:

Pripadni VHDL model dan je u nastavku.


Listing 3.5 :

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

Strukturni model multipleksora

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY mux21e IS PORT(
d : IN STD_LOGIC_VECTOR( 0 TO 1 ) ;
a : IN STD_LOGIC;
e : IN STD_LOGIC;
y : OUT STD_LOGIC ) ;
END mux21e ;
ARCHITECTURE a r c h OF mux21e IS
SIGNAL ac , i 1 , i 2 : s t d _ l o g i c ;
BEGIN
c1 :
c2 :
c3 :
c4 :

ENTITY
ENTITY
ENTITY
ENTITY

END a r c h ;

work . i n v e r t o r PORT MAP( a=>a , y=>ac ) ;


work . sklopAND3 PORT MAP( x1=>d ( 0 ) , x2=>e , x3=>ac , y=>i 1 ) ;
work . sklopAND3 PORT MAP( x1=>d ( 1 ) , x2=>e , x3=>a , y=>i 2 ) ;
work . sklopOR2 PORT MAP( x1=>i 1 , x2=>i 2 , y=>y ) ;

3.1.

33

MODELIRANJE MULTIPLEKSORA

U nastavku emo jo pogledati dva modela multipleksora 4/1: najprije ponaajni model a potom
strukturni model koji oslikava izvedbu ovog multipleksora multipleksorskim stablom koje kao osnovnu
gradbenu komponentu koristi prethodno opisani multipleksor 2/1 s ulazom za omoguavanje.
Simbol multipleksora 4/1 s ulazom za omoguavanje prikazan je na slici u nastavku.

d0

d1

d2
d3 a a0
1

U suelju sklopa sada emo i podatkovne i adresne ulaze modelirati vektorom.


Ponaajni model multipleksora 4/1 slian je ponaajnom modelu multipleksora 2/1 i prikazan je u
nastavku.
Listing 3.6 :

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

Ponaa jni model multipleksora 4/1

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY mux41e IS PORT(
d : IN STD_LOGIC_VECTOR( 0 TO 3 ) ;
a : IN STD_LOGIC_VECTOR( 1 DOWNTO 0 ) ;
e : IN STD_LOGIC;
y : OUT STD_LOGIC ) ;
END mux41e ;
ARCHITECTURE a r c h OF mux41e IS
BEGIN
process (d , a , e )
begin
i f e = '0 ' then
y <= ' 0 ' ;
else
case a i s
when " 00 "
when " 01 "
when " 10 "
when " 11 "
when o t h e r s
end c a s e ;
end i f ;
end p r o c e s s ;

=>
=>
=>
=>
=>

y
y
y
y
y

<=
<=
<=
<=
<=

d(0);
d(1);
d(2);
d(3);
'0 ';

END a r c h ;

U ovom sluaju naredba case imat e etiri opcije koje provjerava (uz defaultnu opciju): opcije za
vrijednosti adresnih ulaza "00", "01", "10" i "11". Uoite da se, s obzirom da je a sada vektor,
vrijednosti piu pod dvostrukim navodnicima.

34

POGLAVLJE 3.

STANDARDNI KOMBINACIJSKI MODULI

Za potrebe speciciranja strukturnog modela prikaimo najprije shemu multipleksorskog stabla


izvedenog multipleksorima 2/1 (slika u nastavku). Iznad svake komponente napisat emo vrstu
komponente a ispod svake komponente naziv primjerka komponente. Kako se ovdje radi o malim
multipleksorima, koristit emo imena m1, m2 i m3 (u stablu imamo 3 primjerka malih multipleksora).
Za potrebe povezivanja dvije razine multipleksora koristit emo interni signal tmp koji emo denirati
kao dvobitni vektor.

mux21e

d0

d0

E
y

d1

d1

mux21e

tmp0
d0

m1:

e
y

mux21e

tmp1
d2

d0

d1

m3:

y
d3

d1

m2:

a1
a0

Strukturni model napravljen temeljen ove sheme prikazan je u nastavku.


Listing 3.7 :

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

Strukturni model multipleksora 4/1 ostvarenog stablom

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY mux41e IS PORT(
d : IN STD_LOGIC_VECTOR( 0 TO 3 ) ;
a : IN STD_LOGIC_VECTOR( 1 DOWNTO 0 ) ;
e : IN STD_LOGIC;
y : OUT STD_LOGIC ) ;
END mux41e ;
ARCHITECTURE a r c h OF mux41e IS
SIGNAL tmp : s t d _ l o g i c _ v e c t o r ( 0 TO 1 ) ;
BEGIN
m1 : ENTITY work . mux21e PORT MAP ( d => d ( 0 t o 1 ) , a => a ( 0 ) , e => ' 1 ' , y => tmp ( 0 ) ) ;
m2 : ENTITY work . mux21e PORT MAP ( d => d ( 2 t o 3 ) , a => a ( 0 ) , e => ' 1 ' , y => tmp ( 1 ) ) ;
m3 : ENTITY work . mux21e PORT MAP ( d => tmp , a => a ( 1 ) , e => e , y => y ) ;
END a r c h ;

3.2.

35

MODELIRANJE BINARNOG DEKODERA

Za vjebu napiite model multipleksora 4/1 s ulazom za omoguavanje koji se temelji na toku
podataka (prikaite shemu ovog multipleksora koristei samo osnovne logike sklopove, kako je
napravljeno u predavanjima).

3.2

Modeliranje binarnog dekodera

Binarni dekoder je sklop koji obavlja funkciju suprotnu onoj binarnog kodera: on na ulazu dobiva
n-bitnu binarnu kodnu rije te aktivira jedan od izlaza koji je odabran ulaznom kodnom rijei. Ulaz
na koji se dovodi kodna rije jo se naziva i adresni ulaz jer podatak doveden na taj ulaz u
odreenom smislu "adresira" izlaz koji e biti aktiviran.
Primjerice, imamo li jednobitni binarni dekoder, on e imati jedan (jednobitni) ulaz a te dva izlaza:
y0 i y1 . Ako je a = 0, izlaz y0 postavit e se u stanje 1 a ako je a = 1, izlaz y1 postavit e se u stanje
1 (preostali izlaz bit e u 0).
Dvobitni binarni dekoder imat e etiri izlaza: y0 do y3 ; uz a = 00 aktivan e biti y0 , uz a = 01
aktivan e biti y1 , uz a = 10 aktivan e biti y2 te uz a = 11 aktivan e biti y3 (svi neaktivni izlazi
bit e postavljeni na 0).
Ako dekoder raspolae i ulazom za omoguavanje E , tada e, za sluaj da je E postavljen na 0 svi
izlazi biti neaktivni (u nuli), neovisno o kodnoj rijei na adresnom ulazu. Kada je E = 1, dekoder e
obavljati svoju "uobiajenu" funkciju.
Simbol dekodera 1/2 s ulazom za omoguavanje prikazan je na slici u nastavku.

e
y0
a
y1

Ponaajni model ovakvog dekodera prikazan je u nastavku.

36

POGLAVLJE 3.

Listing 3.8 :

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

STANDARDNI KOMBINACIJSKI MODULI

Ponaa jni model binarnog dekodera 1/2

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY dek21e IS PORT(
a : IN STD_LOGIC;
e : IN STD_LOGIC;
y : OUT STD_LOGIC_VECTOR( 0 TO 1 ) ) ;
END dek12e ;
ARCHITECTURE a r c h OF dek12e
BEGIN
process (a , e )
begin
i f e = '0 ' then
y <= " 00 " ;
else
case a i s
when ' 0 ' =>
y <=
when ' 1 ' =>
y <=
when o t h e r s => y <=
end c a s e ;
end i f ;
end p r o c e s s ;
END a r c h ;

IS

" 10 " ;
" 01 " ;
" 00 " ;

Implementacija binarnog dekodera 1/2 s ulazom za omoguavanje koja se temelji na uporabi


osnovnih logikih sklopova prikazana je na slici u nastavku.

E
a

ac

&

y0

&

y1

Temeljem ove slike moemo ponuditi model toka podataka.

3.2.

Listing 3.9 :

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

37

MODELIRANJE BINARNOG DEKODERA

Model toka podataka binarnog dekodera 1/2

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY dek21e IS PORT(
a : IN STD_LOGIC;
e : IN STD_LOGIC;
y : OUT STD_LOGIC_VECTOR( 0 TO 1 ) ) ;
END dek12e ;
ARCHITECTURE a r c h OF dek12e IS
SIGNAL ac : s t d _ l o g i c ;
BEGIN
ac <= not a ;
y ( 0 ) <= e and ac ;
y ( 1 ) <= e and a ;
END a r c h ;

I konano, dajmo jo i strukturni model ovog dekodera. Za tu svrhu najprije emo dodatno oznaiti
shemu ostvarenja dekodera, kako je prikazano na slici u nastavku. Pretpostavit emo da su nam na
raspolaganju komponenta invertor te dvoulazni sklopovi I (komponenta sklopAND2); drugim rijeima,
prije pisanja ovog modela, ti bi sklopovi ve trebali biti denirani u trenutnom projektu.

sklopAND2
invertor

c1:

x1

ac

&
x2

y0

c2:

sklopAND2
x1
x2

&

y1

c3:

Strukturni model ostvaren uporabom ovih komponenata prikazan je u nastavku.


Listing 3.10 :

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

Model toka podataka binarnog dekodera 1/2

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY dek21e IS PORT(
a : IN STD_LOGIC;
e : IN STD_LOGIC;
y : OUT STD_LOGIC_VECTOR( 0 TO 1 ) ) ;
END dek12e ;
ARCHITECTURE
SIGNAL ac :
BEGIN
c1 : ENTITY
c2 : ENTITY
c3 : ENTITY
END a r c h ;

a r c h OF dek12e IS
STD_LOGIC;
work . i n v e r t o r PORT MAP ( a=>a , y=>ac ) ;
work . sklopAND2 PORT MAP ( x1=>e , x2=>ac , y=>y ( 0 ) ) ;
work . sklopAND2 PORT MAP ( x1=>e , x2=>a , y=>y ( 1 ) ) ;

Pogledat emo jo i binarni dekoder 2/4, i to najprije njegov ponaajni model a potom strukturni

38

POGLAVLJE 3.

STANDARDNI KOMBINACIJSKI MODULI

model ostvaren na temelju dekoderskog stabla.


Suelje binarnog dekodera 2/4 s ulazom za omoguavanje prikazano je na slici u nastavku.

e
a1
a0

y0
y1
y2
y3

Kako sklop sada ima dvobini adresni ulaz, modelirat emo ga vektorom iji je raspon indeksa
padajui.
Ponaajni model binarnog dekodera 2/4 prikazan je u nastavku.
Listing 3.11 :

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

Ponaa jni model binarnog dekodera 2/4

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY dek24e IS PORT(
a : IN STD_LOGIC_VECTOR( 1 DOWNTO 0 ) ;
e : IN STD_LOGIC;
y : OUT STD_LOGIC_VECTOR( 0 TO 3 )
);
END dek24e ;
ARCHITECTURE a r c h OF dek24e
BEGIN
process (a , e )
begin
i f e = '0 ' then
y <= " 0000 " ;
else
case a i s
when " 00 " =>
y <=
when " 01 " =>
y <=
when " 10 " =>
y <=
when " 11 " =>
y <=
when o t h e r s => y <=
end c a s e ;
end i f ;
end p r o c e s s ;

IS

" 1000 " ;


" 0100 " ;
" 0010 " ;
" 0001 " ;
" 0000 " ;

END a r c h ;

Da bismo prikazali strukturni model, najprije je potrebno prikazati dekodersko stablo multipleksora
1/2 kojim emo ostvariti multipleksor 2/4. Ovo stablo prikazano je na slici u nastavku. Za sve
koritene komponente iznad njih je napisan naziv komponente, ispod njih naziv primjerka
komponente (ovaj puta, s obzirom da se radi o dekoderima, odluili smo ih imenovati d1, d2 i d3), a za
sve ice koje nisu niti ulazi niti izlazi odabrana su prikladna imena koja e postati interni signali.

3.2.

39

MODELIRANJE BINARNOG DEKODERA

tmp0

dek21e

e
e

y0

y0

y1

y1

y0

y2

y1

y3

dek21e

e
y0
a
y1

d2:

tmp1
dek21e

e
d1:

d3:

a1

a0

Strukturni model napravljen temeljem ove slike prikazan je u nastavku.


Listing 3.12 :

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

Strukturni model binarnog dekodera 2/4 ostvarenog stablom

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY dek24e IS PORT(
a : IN STD_LOGIC_VECTOR( 1 DOWNTO 0 ) ;
e : IN STD_LOGIC;
y : OUT STD_LOGIC_VECTOR( 0 TO 3 )
);
END dek24e ;
ARCHITECTURE a r c h OF dek24e IS
SIGNAL tmp : s t d _ l o g i c _ v e c t o r ( 0 t o 1 ) ;
BEGIN
d1 : ENTITY work . dek12e PORT MAP ( a=>a ( 1 ) , e=>e , y=>tmp ) ;
d2 : ENTITY work . dek12e PORT MAP ( a=>a ( 0 ) , e=>tmp ( 0 ) , y=>y ( 0 t o 1 ) ) ;
d3 : ENTITY work . dek12e PORT MAP ( a=>a ( 0 ) , e=>tmp ( 1 ) , y=>y ( 2 t o 3 ) ) ;
END a r c h ;

40

POGLAVLJE 3.

STANDARDNI KOMBINACIJSKI MODULI

Poglavlje 4

Modeliranje bistabila
Kroz prethodna poglavlja dali smo kratak osvrt na modeliranje kombinacijskih sklopova jezikom
VHDL. Sada emo razmotriti modeliranje sekvencijskog sklopovlja, i to krenuvi od njegovog
osnovnog graevnog elementa: bistabila.
Kod kombinacijskog sklopovlja izlaz je uvijek i iskljuivo funkcija samo njegova ulaza. Tako,
primjerice, razmotrimo li dvoulazni logiki sklop I, pitamo li se to je na njegovu izlazu kada su ulazi
0 i 0, odgovor je uvijek 0; isto vrijedi i ako su ulazi 0 i 1 ili pak 1 i 0. Ako su oba ulaza 1, izlaz je
takoer 1. Vrijednost izlaza nikada ne ovisi ni o emu drugome osim o trenutnim ulazima sklopa.
Sekvencijsko sklopovlje je drugaije. Kod sekvencijskog sklopovlja izlaz sklopa moe ovisiti o onome
to je u tom trenutku na ulazima sklopa, ali moe ovisiti i o stanju u kojem se sklop nalazi, a to je
neto to izvana promatrau nije vidljivo. tovie, izlaz sekvencijskog sklopa moe ovisiti ne o onome
to je u promatranom trenutku na njegovom ulazu, ve o vrijednostima koje su bile na njegovu ulazu
u nekom ranijem trenutku (primjerice, posljednji puta kada se dogodio padajui brid signala takta).
Tako, primjerice, ako pogledamo bistabil tipa SR, i zapitamo se to je na njegovu izlazu Q u trenutku
kada je na ulazima S i R vrijednost 0, ne moemo dati odgovor: odgovor e ovisiti o onome to je
zapisano u sam bistabil, odnosno podatku koji bistabil u tom trenutku pamti. Ograniimo li se samo
na bistabil tipa SR, tada je teko vidjeti kako to da stanje sustava moe biti skriveno od promatraa,
kada je kod bistabila njegovo stanje po deniciji ujedno i njegov izlaz. Pogledajmo stoga sklop koji je
prikazan na slici u nastavku.

Promatra izvana vidi sklop koji ima dva ulaza (ulaz za takt CP, te ulaz A) te dva izlaza (izlazi O1 i
O0). to e biti na izlazima tog sklopa direktno je ovisno o stanju sustava koje pamte bistabili B1 i
B0. To stanje promatra izvana ne moe uvijek odrediti ak i ako zna to je na izlazima sklopa.
Primjerice, razmotrite situaciju u kojoj je na izlazu O1 vrijednost 0, a na izlazu O0 vrijednost 1;
41

42

POGLAVLJE 4.

MODELIRANJE BISTABILA

moete li jednoznano zakljuiti u kojem je stanju sustav (dakle, to je na izlazu bistabila B1 a to na


izlazu bistabila B0)? Odgovor je, naravno, ne. ak i poznavajui shemu samog sklopa (to vanjski
promatra obino ne zna) nemamo dovoljno informacija da bismo odgovorili na ovo pitanje. Mogue
je da je uz zadane izlaze na izlazu bistabila B1 vrijednost 0 a na izlazu bistabila B0 vrijednost 1. Ali
to nije nuno. Mogue je da je na izlazu bistabila B1 vrijednost 1 a na izlazu bistabila B0 vrijednost
0. U oba sluaja izlazi bi bili onakvi kakve smo zadali.
Razmotrimo jo jedno pitanje: ako znamo da su izlazi O1=0 i O0=1, znamo li to e biti izlazi nakon
sljedeeg impulsa takta (odnosno, gledajui shemu, korektnije bi bilo pitati nakon sljedeeg rastueg
brida signala takta)? I opet je odgovor ne. Evo samo kao primjer razmotrimo dvije hipoteze: ako je
A=1, i ako je izlaz od bistabila B1 bio 0 a izlaz od bistabila B0 bio 1, tada e se nakon rastueg brida
izlazi O1 i O0 promijeniti tako da e oba biti 1. Ali ako je izlaz od bistabila B1 bio 1 a izlaz od
bistabila B0 bio 0, izlazi se nee promijeniti. Ili, ako je izlaz od bistabila B1 bio 0 a izlaz od bistabila
B0 bio 1 i ako je pri tome na A bila dovedena 0, izlazi se takoer nee promijeniti.
U opem sluaju, vidimo da je, dakle, ono to promatra vidi izvana na izlazima sekvencijskog
sklopa, odnosno slijed promjena koje se tu vide ovisno i o vrijednostima dovedenima na ulaze
sekvencijskog sklopa (u naem sluaju ulaz A koji promatra vidi) i o stanju u kojem se itav sustav
nalazi (stanje ine podatci zapameni u svim memorijskim elementima, a u naem sluaju ine ga
izlazi svih bistabila od kojih je sustav izgraen, i to je neto to promatra izvana ne vidi).
Kako su graevni elementi svakog sekvencijskog sklopa memorijski elementi, u ovom emo poglavlju
se poglavlju osvrnuti na modeliranje bistabila.

4.1

Model toka podataka osnovnog bistabila

Na predavanjima smo vidjeli da se uporabom kombinacijskih sklopova moe izgraditi sklop koji vie
nije kombinacijski, ako se u sklop uvede petlja (odnosno povratna veza). Na taj smo nain uporabom
dvaju dvoulaznih logikih sklopova NI ostvarili sklop koji ima dva stabila stanja: dobili smo osnovni
. Povezivanjem dvaju dvoulaznih logikih sklopova NILI dobili bismo osnovni
bistabil tipa S R
prikazan je u nastavku.
bistabil tipa S R. Model toka podataka osnovnog bistabila tipa S R
Listing 4.1 :

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

Model toka podataka osnovnog bistabila tipa

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY SROsnovni IS PORT(
nS , nR : IN STD_LOGIC;
Q, nQ : OUT STD_LOGIC ) ;
END SROsnovni ;
ARCHITECTURE a r c h OF SROsnovni IS
SIGNAL intQ : s t d _ l o g i c := ' 0 ' ;
SIGNAL intQn : s t d _ l o g i c := ' 1 ' ;
BEGIN
intQ <= nS nand intQn ;
intQn <= nR nand intQ ;
Q <= intQ ;
nQ <= intQn ;
END a r c h ;

S R

4.2.

PONAAJNI MODEL BISTABILA

43

Prethodni kd za potrebe modeliranja osnovnog bistabila uvodi dva interna signala kojima je
ostvarena povratna veza. Redak 14 denira nain na koji se ulaz nS kombinira sa signalom intQn kako
bi se denirala vrijednost signala intQ, a redak 15 denira nain na koji se ulaz nR kombinira sa
signalom intQ kako bi se denirala vrijednost signala intQn (ime je zatvorena povratna veza). Razlog
iz kojeg na ovom mjestu koristimo interne signale, a ne direktno izlaze bistabila Q i nQ lei u
ogranienju jezika VHDL koji ne doputa da se vrijednost izlaza ita. Ako bismo sklopom NI
direktno pokuali odrediti vrijednost izlaza, onda nam ta vrijednost ne bi bila dostupna u retku 15 za
itanje. Jedno rjeenje je signale Q i Qn proglasiti ulazno-izlaznima (koristi se kljuna rije INOUT) ali
time korisnicima ovog modela bistabila zapravo aljemo krivu informaciju: Q i nQ jesu izlazi bistabila,
a ulazima bismo ih proglasili samo zbog potreba modeliranja. Bolje rjeenje je uvati suelje koje ima
jasno razgraniene ulaze i izlaze, a opisani problem rijeiti uporabom internih signala (koji po
deniciji nisu niti ulazi niti izlazi pa im vrijednost moemo bez ogranienja i zapisivati i itati).
Daljnjom razradom osnovnog bistabila mogli bismo doi do razinom pravljanih bistabila pa bridom
upravljanih bistabila. Za ove sklopove, meutim, neemo razmatrati niti modele toka podataka niti
strukturne modele. Umjesto toga, pri modeliranju sekvencijskih sklopova preferirat emo ponaajne
modele i njih emo razraditi u sljedeem podpoglavlju.

4.2

Ponaajni model bistabila

Osnovni bistabil po deniciji je asinkron sklop: on nema ulaz za takt i na pobudu reagira trenutno
(uzevi u obzir, naravno, vrijeme kanjenja logikih sklopova od kojih je izgraen). Dodamo li
bistabilu ulaz za sinkronizacijski signal (signal takta), moemo izgraditi dvije porodice bistabila.
Prvu porodicu ine bistabili upravljani razinom signala takta. Simboli bistabila tipa D iz ove porodice
prikazani su na slici u nastavku.

Lijevi dio slike prikazuje simbol bistabila D koji svoj ulaz D "slua" kad god (i sve dok je) na ulazu
za signal takta CP visoka razina, odnosno logika jedinica. U engleskoj terminologiji, ovaj se sklop
naziva transparent latch : tako dugo dok je CP=1, bistabil kao da ne postoji, odnosno sve to se
dovodi na njegov ulaz uz vrijeme kanjenja bistabila proputa se direktno na njegov izlaz. U trenutku
kada CP padne na 0, ono to je u tom trenutku bilo upisano u bistabil zakljuava se i odrava na
izlazu; promjene na ulazu D sada nemaju nikakvog efekta na izlaz. Na desnom dijelu slike prikazan je
simbol sklopa koji svoj ulaz D "slua" tako dugo dok je na ulazu za signal takta niska razina. Kod
tog sklopa podatak se zakljuava u trenutku kada se signal takta promijeni iz niske razine u visoku.
Razlika izmeu ta dva simbola je u kruiu koji je na desnom simbolu nacrtan uz ulaz za signal
takta, i koji govori da ulaz djeluje niskom razinom.
Prilikom modeliranja ovog bistabila u arhitekturi emo koristiti jedan blok process i lokalnu varijablu
koja e pamtiti stanje. To stanje mijenjat emo samo kada nam to signal takta dopusti, a izlaze

44

POGLAVLJE 4.

MODELIRANJE BISTABILA

bistabila generirat emo temeljem tog stanja. Ponaajni model visokom razinom upravljanog
bistabila D prikazan je u nastavku.
Listing 4.2 :

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

Ponaa jni model visokom razinom upravljanog bistabila D

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY DLatch IS PORT(
D, CP: IN STD_LOGIC;
Q, nQ : OUT STD_LOGIC ) ;
END DLatch ;
ARCHITECTURE a r c h OF DLatch IS
BEGIN
PROCESS(D, CP)
VARIABLE s t a n j e : s t d _ l o g i c := ' 0 ' ;
BEGIN
IF CP= '1 ' THEN
s t a n j e := D;
END IF ;
Q <= s t a n j e ;
nQ <= not s t a n j e ;
END PROCESS;
END a r c h ;

Lista osjetljivosti bloka process sadri i ulaze bistabila i signal takta. Naime, kad god se signal takta
promijeni, izlaz bistabila bi se mogao promijeniti pa signal takta mora biti u listi osjetljivosti. Ali to
mora i ulaz D: ako je signal takta u visokoj razini, svaka promjena ulaza D mora se prenijeti na izlaze
bistabila pa i taj ulaz mora biti u listi osjetljivosti.
Za potrebe bloka process denirali smo jednu varijablu tipa std_logic koju smo nazvali stanje i koju smo
za potrebe simuliranja inicijalizirali na vrijednost '0' . Inicijalizacija koju smo ovdje napisali dogaa
se u trenutku t=0, odnosno samo na poetku simulacije.
U retku 15 provjeravamo je li signal takta u visokoj razini; ako je, vrijednost koja je trenutno
dovedena na ulaz D zapisuje se kao trenutno stanje (redak 16). Retci 18 i 19 temeljem trenutnog
stanja deniraju to treba postaviti na izlaze bistabila; na izlaz Q zapisuje se stanje a na izlaz nQ
njegov komplement. elimo li za potrebe simuliranja modelirati bistabil s kanjenjem, u ova dva
retka dodali bismo AFTER 10 ns (ili slino).
Zato ovaj opis rezultira sekvencijskim a ne kombinacijskim sklopom? Razmotrite redak 18. U njemu
se izlaz Q denira temeljem onoga to je zapisano u varijabli stanje . A to je u tom trenutku zapisano
u toj varijabli? Ako je kojim sluajem CP bio 1, onda je u trenutnom izvoenju bloka process u tu
varijablu bila zapisana vrijedost s ulaza D. Meutim, ako je CP bio 0, u trenutnom izvoenju bloka
process nita nije bilo zapisano u tu varijablu - stoga je potrebno generirati memorijski element koji e
zapamtiti to je prije toga bilo zapisano i koji e taj podatak staviti na raspolaganje za izrau izlaza
Q. Na ovaj nain denirali smo, dakle, memorijski element. Memorijski elementi nastat e uvijek
kada u bloku process itamo vrijednost neke varijable za koju postoji put kroz taj blok process kojim se
vrijednost varijabli ne denira. U prethodnom kdu dali smo lijep primjer toga: redak 18 ita
vrijednost varijable, ali toj se varijabli u kdu iznad vrijednost nekad denira (ako je CP=1) a nekad
ne (ako je CP=0).
elimo li modelirati bistabil iji je simbol na slici 4.2 prikazan desno, u prethodnom kdu morali
bismo napraviti samo jednu izmjenu. Ispitivanje IF CP='1' u retku 15 zamijenili bismo ispitivanjem

4.2.

PONAAJNI MODEL BISTABILA

45

IF CP='0'.

Druga porodica bistabila su bridom upravljani bistabili. To su bistabili koji svoje ulaze sluaju u vrlo
kratkom vremenskom periodu (relativno u odnosu na trajanje signala takta): oni stanje mijenjaju ili
u trenutku rastueg brida signala takta, ili u trenutku padajueg brida signala takta. Slika u
nastavku prikazuje simbole bridom upravljanih (kaemo jo okidanih ) bistabila. Bridom okidani
bistabili uz ulaz za signal takta imaju nacrtan trokuti. Na lijevom dijelu slike prikazan je simbol
bistabila koji je okidan rastuim bridom signala takta (onim bridom koji vodi prema visokoj razini) a
na desnom dijelu slike prikazan je simbol bistabila koji je okidan padajuim bridom signala takta
(bridom koji vodi prema niskoj razini signala takta, na to nas upuuje krui).

Ponaajno model ovakvog bistabila prikazan je u nastavku.


Listing 4.3 :

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

Ponaa jni model rastuim bridom upravljanog bistabila D

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY DFlipFlop IS PORT(
D, CP: IN STD_LOGIC;
Q, nQ : OUT STD_LOGIC ) ;
END DFlipFlop ;
ARCHITECTURE a r c h OF DFlipFlop IS
BEGIN
PROCESS(CP)
VARIABLE s t a n j e : s t d _ l o g i c := ' 0 ' ;
BEGIN
IF r i s i n g _ e d g e (CP) THEN
s t a n j e := D;
END IF ;
Q <= s t a n j e ;
nQ <= not s t a n j e ;
END PROCESS;
END a r c h ;

U odnosu na prethodni model razinom upravljanog bistabila, ovdje ete uoiti tri promjene.
1. Modelu smo dali novo ime (DFlipFlop ).
2. Umjesto ispitivanja je li vrijednost signala CP jednaka 1 (ili 0), u retku 15 sada koristimo
funkciju rising_edge i kao argument joj predajemo signal takta. Funkcija provjerava je li na
predanom signalu u trenutku poziva funkcije nastupio rastui brid, i vraa istinu ako je. Slijedi

46

POGLAVLJE 4.

MODELIRANJE BISTABILA

da emo vrijednost s ulaza D u varijablu stanje upisati samo ako je na signalu takta u tom
trenutku rastui brid. Da smo htjeli modelirati padajuim bridom upravljani bistabil, koristili
bismo funkciju falling_edge nad signalom takta.
3. Iz liste osjetljivosti izbacili smo ulaz D. Naime, nemogue je da promjena na tom ulazu ita
promjeni, osim ako se ba u tom trenutku nije dogodila promjena na signalu takta; a kako je
signal takta ve u listi osjetljivosti, ulaz D ne mora biti. Moemo zapamtiti i openitije pravilo:
kod sklopova koji su upravljani bridom signala takta, u listi osjetljivosti mora biti jedino signal
takta (i eventualno drugi asinkroni ulazi, ako ih sklop ima); sinkroni ulazi ne moraju biti dio
liste osjetljivosti.
Takoer, nije loe skrenuti jo jednom panju na redak 16 u prethodnom kdu: uoite da je to
jednadba promjene stanja bistabila D. Ovo nam direktno daje naputak kako modelirati i druge vrste
bistabila.
Razmotrimo sada bistabil tipa D koji ima jo dva dodatna (pomona) ulaza: ulaz S za postavljanje
bistabila te ulaz R za njegovo resetiranje. Uobiajeno, ako dodatni ulazi djeluju, oni imaju prioritet
nad standardnim ulazima modeliranog bistabila. Pogledajmo model jednog takvog bistabila koji je
prikazan u nastavku. to moemo rei o modeliranom bistabilu?
Listing 4.4 :

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

Model bistabila D za analizu

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY DFlipFlop IS PORT(
D, S , R, CP: IN STD_LOGIC;
Q, nQ : OUT STD_LOGIC ) ;
END DFlipFlop ;
ARCHITECTURE a r c h OF DFlipFlop IS
BEGIN
PROCESS(CP, S ,R)
VARIABLE s t a n j e : s t d _ l o g i c := ' 0 ' ;
BEGIN
IF R= '0 ' THEN
s t a n j e := ' 0 ' ;
ELSIF S = '0 ' THEN
s t a n j e := ' 1 ' ;
ELSIF f a l l i n g _ e d g e (CP) THEN
s t a n j e := D;
END IF ;
Q <= s t a n j e ;
nQ <= not s t a n j e ;
END PROCESS;
END a r c h ;

Promotrite grau bloka process i nain na koji je kd napisan. U retku 15 provjerava se je li ulaz R
postavljen na vrijednost 0, i ako je, u stanje se upisuje 0. Uoite, nita drugo se ne provjerava
(posebice ne signal takta); moemo rei i ovako: im se R postavi u 0, u stanje e se upisati 0. Ulaz R
djeluje dakle asinkrono (neovisno o signalu takta), niskom razinom i resetira bistabil. Uoite takoer,
tako dugo dok je R postavljen u 0, ostatak ispitivanja se ne izvodi (jer su grane oznaene s ELSIF).
Slijedi da je ulaz R ulaz najveeg prioriteta: njegovim aktiviranjem svi ostali ulazi (niti S, niti D, niti
CP) vie nisu bitni i nemaju utjecaja na stanje bistabila.

4.2.

PONAAJNI MODEL BISTABILA

47

Tek ako R ne djeluje (nije 0), ispitivanje e propasti na sljedeu granu, i provjeriti je li moda S=0
(redak 17). Ako je, stanje se postavlja u 1 i prestaju daljnja ispitivanja. Uoite: i ulaz S je asinkron;
on djeluje im ga se aktivira (niskom razinom) ali je nieg prioriteta od asinkronog ulaza R: da bi S
mogao doi do izraaja, R ne smije djelovati.
Konano, ako niti R niti S ne djeluju, ispitivanje propada na redak 19 koji ispituje je li nastupio
padajui brid signala takta, i ako je, bistabil e promijeniti stanje u skladu s ulazom D. Ulaz D stoga
je sinkroni ulaz: on stanje bistabila moe promijeniti samo ako mu signal takta to dopusti.
Sumirajmo: prethodni model je model bistabila D okidanog padajuim bridom signala takta koji ima
dva asinkrona ulaza, ulaz S koji postavlja stanje bistabila i ulaz R koji ga resetira. Oba asinkrona
ulaza djeluju na nisku razinu pri emu je ulaz R veeg je prioriteta od ulaza S, pa ako oba djeluju,
bistabil e se ponaati kao da djeluje samo ulaz R. Uoite i listu osjetljivosti bloka process (redak 12):
u skladu s prethodno danim pravilom za bridom okidane sekvencijske sklopove, u listi osjetljivosti
bloka process nalazi se signal takta i svi asinkroni ulazi, i nita vie od toga.
Pogledajmo jo jedan primjer (kd u nastavku).
Listing 4.5 :

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

Model bistabila D za analizu

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY DFlipFlop IS PORT(
D, S , R, CP: IN STD_LOGIC;
Q, nQ : OUT STD_LOGIC ) ;
END DFlipFlop ;
ARCHITECTURE a r c h OF DFlipFlop IS
BEGIN
PROCESS(CP, S )
VARIABLE s t a n j e : s t d _ l o g i c := ' 0 ' ;
BEGIN
IF S = '1 ' THEN
s t a n j e := ' 1 ' ;
ELSIF f a l l i n g _ e d g e (CP) THEN
IF R= '1 ' THEN
s t a n j e := ' 0 ' ;
ELSE
s t a n j e := D;
END IF ;
END IF ;
Q <= s t a n j e ;
nQ <= not s t a n j e ;
END PROCESS;
END a r c h ;

Vidite li razlike? Dodatni ulazi za postavljanje i brisanje sada djeluju na visoku razinu. U ovom
modelu ulaz S je najprioritetniji ulaz, i on je jedini asinkroni ulaz. Ulaz R postao je sinkron (ispituje
ga se samo kad to signal takta dozvoli, pa je ujedno uklonjen i iz liste osjetljivosti bloka process). Tek
ako niti S niti R ne djeluju, provjerava se ulaz D.
Ovakvih razliitih kdova mogue je generirati mnotvo i nije ideja da ih ovdje sve analiziramo.
Umjesto toga, prouite nain kako su ovi kdovi napisani i kako smo ih analizirali. Pokuajte sami
napisati modele rastuim bridom okidanog bistabila D sa sinkronim ulazima za postavljanje i brisanje
koji djeluju visokom razinom i brisanje je prioritetnije. Pokuajte napisati slian model ali bistabila

48

POGLAVLJE 4.

MODELIRANJE BISTABILA

T. Napiite model padajuim bridom okidanog bistabila T koji ima dodatni asinkroni ulaz za brisanje
koji djeluje visokom razinom.
Pogledajmo jo kako bismo ponaajno modelirali bistabil JK s asinkronim ulazom za reset koji
djeluje niskom razinom.
Listing 4.6 :

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

Ponaa jni model bistabila JK s asinkronim ulazom za reset

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY JKFlipFlop IS PORT(
J , K, R, CP: IN STD_LOGIC;
Q, nQ : OUT STD_LOGIC ) ;
END JKFlipFlop ;
ARCHITECTURE a r c h OF JKFlipFlop IS
BEGIN
PROCESS(CP,R)
VARIABLE s t a n j e : s t d _ l o g i c := ' 0 ' ;
BEGIN
IF R= '0 ' THEN
s t a n j e := ' 0 ' ;
ELSIF f a l l i n g _ e d g e (CP) THEN
s t a n j e := ( s t a n j e AND NOT R) OR (NOT s t a n j e AND S ) ;
END IF ;
Q <= s t a n j e ;
nQ <= not s t a n j e ;
END PROCESS;
END a r c h ;

Umjesto jednabe promjene stanja u retku 18 mogli smo raspisati direktno i tablicu promjene stanja.
Koristei naredbu IF i ispitujui sve sluajeve (je li J=0, K=0, ili J=0, K=1, ili ...) i temeljem toga
denirati kako se mijenja stanje. Meutim, jednadba promjene stanja denira isto ponaanje ali uz
bitmo manje pisanja kda, pa smo je zato iskoristili.

4.2.1

Po jam sinkronosti

Za kraj ovog poglavlja osvrnimo se jo na nekoliko vanih denicija sinkronosti i asinkronosti.

Kaemo da neki signal djeluje sinkrono ako djeluje samo kada mu to signal takta dopusti. Ako
djeluje neovisno o signalu takta, kaemo da djeluje asinkrono.
Kaemo da je digitalni sklop sinkron ako ima ulaz za takt koji mu odreuje u kojem trenutku
slua svoje "glavne" ulaze. Takav sklop moe imati dodatne asinkrone ulaze; sam sklop emo i
dalje zvati sinkronim (uz pretpostavku da se asinkroni ulazi koriste u kontroliranim specinim
uvjetima gdje ne stvaraju probleme). Primjerice, moemo imati sinkroni bistabil tipa D koji
ima dodatni asinkroni ulaz za resetiranje koji se koristi samo po ukljuenju sklopa na napajanje
kako bi se bistabil doveo u poznato poetno stanje. Ako digitalni sklop nije sinkron, on je
asinkron.
Kaemo da je digitalni sustav izgraen od vie sinkronih sklopova i sam sinkron ako i samo ako
svi sinkroni sklopovi dobivaju isti signal takta (koji je paralelno razveden do svih njih), tako da

4.2.

PONAAJNI MODEL BISTABILA

49

svi takvi sklopovi u istim trenutcima reagiraju na pobudu i mijenjaju stanje. Digitalni sustav
izgraen od vie sinkronih sklopova je asinkron ako nije sinkron.
to moemo rei o samom signalu takta? Je li on sinkron ili asinkron? Ako ste paljivo prouili
prethodne denicije, onda bi trebalo biti jasno da je to pitanje besmisleno: sinkronost odnosno
asinkronost signala, digitalnih sklopova i digitalnih sustava denira se temeljem razmatranja je li
djelovanje istih uvjetovano (istim) signalom takta ili nije  signal takta ne djeluje sam na sebe niti u
skladu sa sobom pa je pitanje besmisleno.
Kod bridom okidanih sinkronih sklopova vano je ponoviti da postoje uvjeti na vremenske odnose
izmeu trenutaka kada se smiju mijenjati sinkroni signali i izmeu djelotvornog brida signala takta.
Ta vremena za primjer bridom okidanih bistabila navedena su u nastavku i morate ih razumjeti.

Vrijeme postavljanja bistabila (engl. setup time, tsetup ) je minimalno vrijeme prije nailaska
djelotvornog brida signala takta nakon kojeg se sve do nailaska djelotvornog brida signala takta
vrijednost sinkronog ulaza vie ne smije mijenjati (kako bi u trenutku nailaska djelotvornog
brida sklop pouzdano oitao tu vrijednost).
Vrijeme zadravanja bistabila (engl. hold time, thold ) je minimalno vrijeme nakon nailaska
djelotvornog brida signala takta unutar kojeg se vrijednost sinkronog ulaza i dalje ne smije
mijenjati (kako bi sklop pouzdano stigao odreagirati na tu pobudu).
Uz pretpostavku da su oko djelotvornog brida svi sinkroni signali zadovoljili vrijeme postavljanja
bistabila i vrijeme zadravanja bistabila, sklop e odreagirati i promijeniti izlaze najkasnije
nakon vremena kanjenja bistabila (engl. delay time, tdb ) mjereno od trenutka nailaska
djelotvornog brida signala takta. Kod bistabila ovo se vrijeme prikladno jo oznaava i tcptoq .

50

POGLAVLJE 4.

MODELIRANJE BISTABILA

Poglavlje 5

Modeliranje strojeva s konanim brojem


stanja
U prethodnom poglavlju osvnuli smo se na pojam sekvencijskog sklopa i neke njegove karakteristike:
to je sklop koji za razliku od kombinacijskog sklopa ima stanje i kod njega izlaz nije samo funkcija
ulaza (kaemo jo i pobude) ve i trenutnog stanja. Tako je mogue da uz istu pobudu (iste
vrijednosti na ulazima) sklop u razliitim trenutcima ima razliite izlaze (jer e biti u razliitim
stanjima). U sklopovskom smislu, stanje sekvencijskog sklopa ine izlazi svih memorijskih elemenata.
Za potrebe openitog razmatranja grae ovakvih sklopova uvijek moemo zamisliti da se sklop sastoji
od registra koji pamti trenutno stanje te dva kombinacijska sklopa: jednog koji odreuje to sljedee
treba biti upisano u registar (drugim rijeima: koje e biti sljedee stanje) i drugog koji odreuje to
treba postaviti na izlaze sklopa.
U nastavku emo najprije pogledati Mooreov a potom i Mealyjev model stroja s konanim brojem
stanja (odnosno automata).

5.1

Mooreov stro j s konanim brojem stanja

Openiti oblik (shema) Mooreovog automata prikazan je na slici u nastavku.

Sredinji dio sklopa ini registar (memorija) koja dobiva prijedlog sljedeeg stanja i kada to signal
takta dopusti (na slici kako je prikazano radilo bi se o rastuem bridu signala takta), taj predlog
51

52

POGLAVLJE 5.

MODELIRANJE STROJEVA S KONANIM BROJEM STANJA

upisuje kao trenutno stanje. Konceptualno, registar nije nita drugo ve potreban broj bistabila tipa
D koji su svi spojeni na isti signal takta, pa kada im takt to dopusti, vrijednosti dovedene na ulaze
zapamte kao novo stanje i prebace ga na izlaze.
Lijevi kombinacijski sklop na svoje ulaze dobiva ulaze automata koje postavlja korisnik te trenutno
stanje automata. Temeljem tih podataka rauna to treba biti sljedee stanje i to generira na svojem
izlazu. Taj izlaz dovodi se na ulaz registra koji e, kada mu to signal takta dopusti, taj prijedlog
upisati kao novo "trenutno" stanje. Uoite, ako se ulazi automata mijenjaju asinkrono, prijedlog
sljedeeg stanja takoer se moe mijenjati ali nee imati nikakvog utjecaja na trenutno stanje sve do
sljedeeg impulsa signala takta.
Desni kombinacijski sklop kao jedini ulaz dobiva trenutno stanje automata. Temeljem tog stanja
rauna vrijednosti koje je potrebno postaviti na izlaze automata. Kako kod ovog sklopa ne postoji
direktna veza izmeu ulaza automata i ovog izlaznog kombinacijskog sklopa, promjene ulaza ne
utjeu na izlaz: izlaz je iskljuivo funkcija od trenutnog stanja i moe se promijeniti samo promjenom
stanja automata.
Pogledajmo ovo na konkretnom primjeru. Neka je zadan automat dijagramom promjene stanja
prikazanim na slici u nastavku.

Prikazani automat ima jedan ulaz (nazovimo ga A) te dva izlaza (nazovimo ih O1 i O0).
Zadaa prvog kombinacijskog sklopa jest na temelju trenutnog stanja i ulaza automata denirati to
treba biti sljedee stanje. Gledajui dani dijagram promjene stanja, ovaj bi kombinacijski sklop
trebao sadravati kod poput sljedeeg:

Ako je trenutno stanje S0 i na ulazu je 0, sljedee stanje bi moralo biti S0.


Ako je trenutno stanje S0 i na ulazu je 1, sljedee stanje bi moralo biti S2.
...

Ako je trenutno stanje S3 i na ulazu je 0, sljedee stanje bi moralo biti S2.


Ako je trenutno stanje S3 i na ulazu je 1, sljedee stanje bi moralo biti S0.
Uoite da je ovo po karakteru doista isti kombinacijski sklop: on uvijek za odreenu kombinaciju
stanja i ulaza generira isti prijedlog sljedeeg stanja.
Zadaa drugog kombinacijskog sklopa je generiranje izlaza. Kod Mooreovog automata izlaz je funkcija
samo trenutnog stanja, pa ih zato i na slici piemo direktno u kruiima (koji predstavljaju stanja).
Gledajui zadani dijagram promjene stanja, ovaj bi kombinacijski sklop trebao sadravati kod poput
sljedeeg:

5.1.

Ako
Ako
Ako
Ako

53

MOOREOV STROJ S KONANIM BROJEM STANJA

je
je
je
je

trenutno
trenutno
trenutno
trenutno

stanje
stanje
stanje
stanje

S0,
S1,
S2,
S3,

postavi
postavi
postavi
postavi

na
na
na
na

izlaze
izlaze
izlaze
izlaze

O1=0,
O1=0,
O1=0,
O1=1,

O0=0.
O0=1.
O0=1.
O0=1.

Konano, zadaa registra je zapamtiti predloeno stanje kao trenutno, u trenutku kada mu to signal
takta dozvoli. Za potrebe primjera pretpostavit emo da modeliramo Mooreov automat koji svoju
pobudu slua na rastui brid signala takta. Kako imamo 4 stanja, denirat emo sljedeu tablicu
kodiranja stanja:
Stanje
S0
S1
S2
S3

Q3
0
0
0
1

Q2
0
0
1
0

Q1
0
1
0
0

Q0
1
0
0
0

Na registar imat e etiri bistabila koja uvaju stanje automata. Za kodiranje stanja iskoristili smo
jednojedinini kd: u stanju Si samo je izlaz i-tog bistabila postavljen na vrijednost 1 dok su svi
ostali bistabili resetirani.
VHDL kd odnosno ponaajni model zadanog Mooreovog automata prikazan je u nastavku. Uoite
tri bloka process: dva modeliraju kombinacijske sklopove a jedan modelira registar. Obratite panju i
na njihove liste osjetljivosti koje bi sada morale biti jasne. Kako nam je informacija o trenutnom
stanju potrebna i izvan bloka process koji generira memorijski element, ovom prilikom nismo za
pamenje stanja koristili varijablu (kao to je to bio sluaj kod modeliranja bistabila) ve interni
signal.
Listing 5.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
27
28
29
30
31

Ponaa jni model Mooreovog automata

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY AutomatMoore IS PORT(
A, CP: IN STD_LOGIC;
O1 , O0 : OUT STD_LOGIC ) ;
END AutomatMoore ;
ARCHITECTURE a r c h OF AutomatMoore IS
t a b l i c a k o d i r a n j a s t a n j a :
CONSTANT S0 : s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) := " 0001 " ;
CONSTANT S1 : s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) := " 0010 " ;
CONSTANT S2 : s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) := " 0100 " ;
CONSTANT S3 : s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) := " 1000 " ;
i n t e r n i s i g n a l i za pam e n j e s t a n j a i p r i j e d l o g a s l j e d e eg s t a n j a
SIGNAL s t a n j e : s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) := S0 ;
SIGNAL s l j e d _ s t a n j e : s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) ;
BEGIN
k o m b i n a c i j s k i s k l o p k o j i p r e d l a e s l j e d e e
PROCESS( s t a n j e , A)
BEGIN
CASE s t a n j e IS
WHEN S0 => IF A=0 THEN s l j e d _ s t a n j e <= S0 ;
WHEN S1 => IF A=0 THEN s l j e d _ s t a n j e <= S1 ;
WHEN S2 => IF A=0 THEN s l j e d _ s t a n j e <= S3 ;
WHEN S3 => IF A=0 THEN s l j e d _ s t a n j e <= S2 ;
WHEN OTHERS => s l j e d _ s t a n j e <= S0 ;
END CASE ;
END PROCESS;

stanje :

ELSE
ELSE
ELSE
ELSE

sljed_stanje
sljed_stanje
sljed_stanje
sljed_stanje

<=
<=
<=
<=

S2 ;
S3 ;
S1 ;
S0 ;

END
END
END
END

IF ;
IF ;
IF ;
IF ;

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

POGLAVLJE 5.

MODELIRANJE STROJEVA S KONANIM BROJEM STANJA

k o m b i n a c i j s k i s k l o p k o j i o d r e d u j e i z l a z automata :
PROCESS( s t a n j e )
BEGIN
CASE s t a n j e IS
WHEN S0 => O1 <= ' 0 ' ; O0 <= ' 0 ' ;
WHEN S1 => O1 <= ' 0 ' ; O0 <= ' 1 ' ;
WHEN S2 => O1 <= ' 0 ' ; O0 <= ' 1 ' ;
WHEN S3 => O1 <= ' 1 ' ; O0 <= ' 1 ' ;
WHEN OTHERS => O1 <= ' 0 ' ; O0 <= ' 0 ' ;
END CASE ;
END PROCESS;
model 4 b i t n o g r e g i s t r a :
PROCESS(CP)
BEGIN
IF r i s i n g _ e d g e (CP) THEN
s t a n j e <= s l j e d _ s t a n j e ;
END IF ;
END PROCESS;

END a r c h ;

Blokove process koji modeliraju kombinacijske sklopove rijeili smo uporabom naredbe case. Uoite da
smo morali dodati stavku when others jer signal stanje moe poprimiti puno vie vrijednosti od
pokrivene 4 (sjetite se, radi se 4-bitnom signalu tipa std_logic gdje svaki bit moe poprimiti jednu od
9 moguih vrijednosti. Da bismo dobili kombinacijski sklop, za svaki mogui prolaz kroz ovaj blok
moramo neto zapisati u signal koji deniramo; u suprotnom emo i na ovim mjestima dobiti
memorijske elemente, a to ne elimo. Stoga smo u kombinacijskom sklopu koji odreuje sljedee
stanje denirali da je ono S0 ako se naemo u nekom nepoznatom stanju odnosno da na izlaze u tom
sluaju treba upisati 0.
Za potrebe simulacije denirali smo da bi poetna vrijednost signala stanje trebala biti S0 (redak 16).

5.2

Mealyjev stroj s konanim brojem stanja

Opi oblik (shema) Mealyjevog automata prikazana je na slici u nastavku. Kod ove vrste automata
trenutni ulazi dostupni su i u izlaznom kombinacijskom sklopu pa izlazi kod ove vrste automata
mogu ovisiti i o trenutnom stanju i o trenutnim vrijednostima dovedenim na ulaze automata.

5.2.

MEALYJEV STROJ S KONANIM BROJEM STANJA

55

Zahvaljujui toj slobodi, ponekad nam je jednostavnije modelirati ponaanje odreenih sklopova na
ovaj nain. Meutim, negativna strana ovog modela je da asinkrona promjena ulaza postaje direktno
vidljiva i na izlazima: mijenjamo li ulaze dok je stanje ksno i signal takta miruje, izlazi automata e
se takoer mijenjati to moe nepovoljno utjecati na rad sklopova kojima automat (preko svojih
izlaza) upravlja. Stoga se umjesto ovakve direktne realizacije Mealyjev automat najee realizira uz
uporabu dodatnog registra koji stvarne izlaze automata odvaja (i sinkronizira s taktom) od
vrijednosti koje generira izlazni kombinacijski sklop. Modicirana shema koja prikazuje ovakvu
izvedbu (koju emo i mi sami dalje koristiti) prikazana je na novoj slici u nastavku.

Ovakav model podrazumijeva postojanje dvaju registara (jedan koji pamti stanje, drugi koji pamti
izlaze) te dvaju kombinacijskih sklopova (jedan koji predlae sljedee stanje a drugi koji predlae
vrijednost izlaza), to bi znailo pisanje etiriju blokova process. Meutim, u praksi se oba
kombinacijska sklopa kod Mealyjevog automata modeliraju u jednom bloku process (jer imaju
zajedniku listu osjetljivosti) te se oba registra modeliraju u jednom bloku process. To pak znai da
model Mooreovog automata u praksi ima tri bloka process a model Mealyjevog automata dva bloka
process.
Ponaajni opis Mealyjevog automata dat emo za automat iji je dijagram promjene stanja prikazan
na slici u nastavku.

Za kodiranje stanja opet emo koristiti jednojedinini kd: kako imamo 3 stanja, kdne rijei imat e
tri bita. Tablica kodiranja stanja prikazana je u nastavku.

56

POGLAVLJE 5.

Stanje
S0
S1
S2

Q2
0
0
1

Q1
0
1
0

MODELIRANJE STROJEVA S KONANIM BROJEM STANJA

Q0
1
0
0

Ponaajni VHDL model za zadani automat dan je u nastavku.


Listing 5.2 :

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

Ponaa jni model Mealyjevog automata

l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL ;
ENTITY AutomatMealy IS PORT(
A, CP: IN STD_LOGIC;
O1 , O0 : OUT STD_LOGIC ) ;
END AutomatMealy ;
ARCHITECTURE a r c h OF AutomatMealy IS
t a b l i c a k o d i r a n j a s t a n j a :
CONSTANT S0 : s t d _ l o g i c _ v e c t o r ( 2 downto 0 ) := " 001 " ;
CONSTANT S1 : s t d _ l o g i c _ v e c t o r ( 2 downto 0 ) := " 010 " ;
CONSTANT S2 : s t d _ l o g i c _ v e c t o r ( 2 downto 0 ) := " 100 " ;
i n t e r n i s i g n a l i za pam e n j e s t a n j a , p r i j e d l o g a s l j e d e eg s t a n j a
t e p r i j e d l o g a i z l a z a
SIGNAL s t a n j e : s t d _ l o g i c _ v e c t o r ( 2 downto 0 ) := S0 ;
SIGNAL s l j e d _ s t a n j e : s t d _ l o g i c _ v e c t o r ( 2 downto 0 ) ;
SIGNAL sljed_O1 , sljed_O0 : s t d _ l o g i c ;
BEGIN
k o m b i n a c i j s k i s k l o p k o j i p r e d l a e s l j e d e e s t a n j e i i z l a z e :
PROCESS( s t a n j e , A)
BEGIN
CASE s t a n j e IS
WHEN S0 =>
IF A=0 THEN s l j e d _ s t a n j e <= S0 ; sljed_O1 <= ' 0 ' ; sljed_O0 <= ' 0 ' ;
ELSE s l j e d _ s t a n j e <= S1 ; sljed_O1 <= ' 1 ' ; sljed_O0 <= ' 0 ' ; END IF ;
WHEN S1 =>
IF A=0 THEN s l j e d _ s t a n j e <= S2 ; sljed_O1 <= ' 1 ' ; sljed_O0 <= ' 1 ' ;
ELSE s l j e d _ s t a n j e <= S1 ; sljed_O1 <= ' 0 ' ; sljed_O0 <= ' 0 ' ; END IF ;
WHEN S2 =>
IF A=0 THEN s l j e d _ s t a n j e <= S1 ; sljed_O1 <= ' 0 ' ; sljed_O0 <= ' 1 ' ;
ELSE s l j e d _ s t a n j e <= S0 ; sljed_O1 <= ' 1 ' ; sljed_O0 <= ' 1 ' ; END IF ;
WHEN OTHERS => s l j e d _ s t a n j e <= S0 ; sljed_O1 <= ' 0 ' ; sljed_O0 <= ' 0 ' ;
END CASE ;
END PROCESS;
model r e g i s t r a s t a n j a i r e g i s t r a i z l a z a :
PROCESS(CP)
BEGIN
IF r i s i n g _ e d g e (CP) THEN
s t a n j e <= s l j e d _ s t a n j e ;
O1 <= sljed_O1 ;
O0 <= sljed_O0 ;
END IF ;
END PROCESS;

END a r c h ;

Kada bismo itavom automatu trebali dodati asinkroni ulaz za reset (ijim bi se djelovanjem automat
prebacio u poetno stanje S0), trebalo bi napraviti dvije korekcije (i kod Mooreovog automata, i kod
Mealyjevog automata) koje su opisane u nastavku.

5.2.

MEALYJEV STROJ S KONANIM BROJEM STANJA

57

1. Promijeniti suelje automata tako da se doda jo jedan ulaz (primjerice, reset ).


2. Modicirati blok process koji modelira registar tako da se omogui asinkrono brisanje (na isti
nain kao to smo to napravili kod bistabila). Konkretno, umjesto:
1
2
3

IF r i s i n g _ e d g e (CP) THEN
s t a n j e <= s l j e d _ s t a n j e ;
END IF ;

trebali bismo napisati neto poput:


1
2
3
4
5

IF r e s e t = '1 ' THEN


s t a n j e <= S0 ;
ELSIF r i s i n g _ e d g e (CP) THEN
s t a n j e <= s l j e d _ s t a n j e ;
END IF ;

Takoer, primjetimo da prilikom modeliranja automata nije nuno denirati tablicu kodiranja stanja.
Mogue je umjesto toga denirati novi podatkovni tip i potom njega koristiti:
1
2

TYPE s t a n j a IS ( S0 , S1 , S2 ) ;
SIGNAL s t a n j e : s t a n j a ;

Ovo pri simulaciji rada sklopa ne ini nikakvu razliku. Meutim, prilikom sinteze sklopa ovaj drugi
pristup omoguava sintetizatoru da sam pokua pronai optimalnu tablicu kodiranja stanja uz koju
e potroiti minimalnu koliinu kombinacijskog i sekvencijskog sklopovlja. Za potrebe laboratorijskih
vjebi ovog kolegija, molim studente koji koriste VHDLLab okolinu za simuliranje sklopova da koriste
prvi pristup (s eksplicitnom tablicom kodiranja stanja). Naime, u sluaju uporabe korisniki
deniranih tipova podataka ti se signali nee vidjeti u rezultatu simulacije to je jedno od ogranienja
simulacijskog alata koji koristimo i koji u ovom trenutku ne moemo jednostavno razrijeiti.
Opisujete li automat u VHDL kako biste ga mogli sintetizirati, treba napomenuti da postavljanje
inicijalnih (poetnih) vrijednosti na nain kako smo prethodno pokazali:
1

SIGNAL s t a n j e : s t d _ l o g i c _ v e c t o r ( 2 downto 0 ) := S0 ;

moe uzrokovati nesintetizabilnost takvog opisa. Naime, ovisno o karakteristikama programirljivog


sklopa takva inicijalizacija moe i ne mora biti podrana. Stoga se u sluaju modeliranja automata
koji e biti sintetizirani u sklopovlje preporua da se automat izvede s eksplicitnim ulazom za
resetiranje (kako je prethodno komentirano) te da se na taj ulaz po ukljuenju sustava dovede
kratkotrajni impuls koji e obaviti reset i koji e nakon toga do kraja rada sklopa ostati neaktivan.
Konano, ako automat ima mnotvo ulaza, da bi bio korektno speciciran, nuno je da na dijagramu
promjene stanja za svako stanje naznaimo to e automat napraviti za svaku moguu kombinaciju
ulaza. Za automat koji ima jedan binarni ulaz to ne predstavlja nikakav problem: imat emo iz
svakog stanja maksimalno po dva luka (jedan koji govori to napraviti ako je taj ulaz u nuli a drugi
koji govori to napraviti ako je taj ulaz u jedinici). Ako automat ima vei broj ulaza (primjerice, 6
binarnih ulaza), tada ovo postaje nepraktino (i nepregledno); za 6 binarnih ulaza morali bismo se
izjasniti to e automat napraviti za 26 = 64 razliite kombinacije ulaznih vrijednosti. Najee,
pojedina stanja e predstavljati situacije u kojima automat eka na neku interesantnu pobudu, a za
sve ostalo radi neto zajedniko. Kako bismo imali pregledniju sliku, za sve "interesantne" pobude
(ma to to u pojedinom sluaju znailo) nacrtat emo lukove i navesti te pobude. Ono za sve ostalo
to nije eksplicitno pokriveno pobudama napisanim na lukovima koristit emo luk na kojem emo
napisati samo zvjezdicu na mjestu pobude. Pretpostavit emo da automat taj luk slijedi samo i
iskljuivo ako je pobuda takva da nije pokrivena niti jednim drugim prijelazom iz tog stanja.

You might also like