Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SEMINARSKI RAD
SADRAJ:
1.1 VHDL
1.2 Struktura VHDL koda
o 1.2.1 Biblioteka
o 1.2.2 Entitet
o 1.2.3 Arhitektura
1.3 Tipovi podataka
1.4 Konkurentni kod
o 1.4.1 When konstrukcija
1.5 Sekvencijalno programiranje
1.6 Signali, konstante i varijable
1.7 Proces
o 1.7.1 If konstrukcija
o 1.7.2 Case konstrukcija
o 1.7.3 Wait konstrukcija
1.8 Operatori
o 1.8.1 Operatori dodjele
o 1.8.2 Logiki operatori
o 1.8.3 Aritmetiki operatori
o 1.8.4 Relacioni operatori
o 1.8.5 Operatori pomjeranja
1.9 Atributi
o 1.9.1 Atributi za opis vekotora (nizova)
o 1.9.2 Atributi za opis signala
2.1 Opis problema
2.2 Razrada
o 2.2.1 Semafor #1
o 2.2.2 Semafor #2
o 2.2.3 Semafor #3
2.3 Kod
2.4 Simulacija koda i rezultati simulacije
3 Zakljuak
4 Literatura
1.1 VHDL
VHDL je programski jezik koji prpada grupi HDL (Hardware Description Language) jezika,
odnosno jezika koji se koriste za opis hardverske implementacije. Pomou VHDL-a tekstualno
opisujemo osnovne djelove hardverske implementacije i veze izmeu njih. Za razliku od
klasinih programskih jezika, poput C, C++, Jave i drugih kod kojih se niz naredbi kompajlira
uvijek na istom hardveru tj. procesoru, kod VHDL-a to nije sluaj. Naime, VHDL treba da opie
hardversku implementaciju koja, u krajnjem sluaju, treba i da se realizuje tako da izvrava
odreeni skup logikih funkcija. U zavisnosti od toga koji skup logikih funkcija treba da se
izvrava, razlikovae se i implementirani hardver. Jo jedna razlika u odnosu na klasine
programske jezike jesu i tipini kriterijumi performansi. Za razliku od klasinih programskih
jezika, gdje su glavni kriterijumi bili broj instrukcija potreban za izvrenje neke funkcije ili
koliina memorije koja se zauzima, kod VHDL-a su tipini kriterijumi minimalno zauzimanje
fizikih resursa, minimalno kanjenje, maksimalna frekvencija koju realizacija podrava i sl.
Takoe, treba napomenuti i da VHDL jezik nije case sensitive tj. ne razlikuje velika i mala slova.
1.2.1 Biblioteka
Biblioteka u VHDL-u predstavlja skup razliitih paketa koji u sebi sadre razliite funkcije,
procedure, komponente, tipove i konstante. Organizacija biblioteke je prikazana na slici 1. U
VHDL-u postoje sistemske i korisnike biblioteke. Ukljuivanjem neke biblioteke u kod,
FUNKCIJE
PROCEDURE
KOMPONENTE
KONSTANTE
TIPOVI
Library je kljuna rije kojom se poziva biblioteka ime_biblioteke, a kljunom rijeju use se
specificira koji paket (ime_paketa) i koji dio paketa (dio_paketa) elimo ukljuiti. Ukoliko
elimo da ukljuimo sve djelove paketa u dio_paketa se stavlja all.
Najpoznatije sistemske biblioteke su std i ieee biblioteka i one su uvijek koriste u svakom VHDL
kodu. Std je standardna (sistemska) biblioteka koja sadri osnovne definicije tipova
promjenljivih i osnovne funkcije. Biblioteka work je korisniki definisana biblioteka i ona je
takoe uvijek ukljuena, tj. ne mora se eksplicitno pozivati. U njoj su sadrani svi dijelovi
projekta (VHDL fajlovi, ali i ostali fajlvi koji su ukljueni u projekat). U sluaju kada korisnik
eli da iskoristi pakete koje je sam kreirao unutar nekog VHDL koda mora ih pozvati upotrebom
komande use.
1.2.2 Entitet
Digitalni sistem je obino zamiljen kao kolekcija razliitih modula, pri emu svaki modul ima
svoje portove koji predstavljaju vezu sa spoljnim svijetom. Ulogu da opie te konekcije sa
spoljnim svijetom ima entitet, koji nije nita drugo do lista koja sadri specifikaciju ulaznih i
izlaznih portova. Sintaksa entiteta je sljedea:
entity ime_entiteta is
generic
port
(
o
o
o
o
);
end ime_entiteta;
Kljunom rijeju entity se deklarie entitet ije je ime ime_entiteta, a potom slijedi kljuna rije
is. Kao to su i kod veine programskih jezika postojala ogranienja prilikom imenovanja
promjenljivih, funkcija i sl., to je sluaj i u VHDL-u. Naziv entiteta je proizvoljan, ali je vano
da poinje slovom i da se ne koristi kljuna rije za naziv entiteta, zatim u nazivu ne smije biti ni
razmaka, niti dva uzastopna _ (underscore) simbola, ne smije se zavravati sa _ underscore
simbolom i ne smije sadrati zabranjene simbole (npr. ?). Unutar port dijela se definu
interfejsi (portovi, pinovi) tako to se prvo navede ime porta, a zatim, nakon dvotake i mod i tip
porta. Mod porta definie smjer porta i postoje etiri moda: in, out, inout i buffer. Kao to im i
ime govori in je ulazni mod, out je izlazni mod, inout je ulazno/izlazni mod, odnosno port moe
predstavljati i ulaz i izlaz. Buffer mod je slian out modu, jer je i on izlazni mod, ali ovaj mod
posjeduje dodatak da se vrijednost ovog porta moe oitavati unutar entiteta. Deklaracije portova
se odvajaju sa ; pri emu se iza posljednjeg porta ne stavlja ; ime se oznaava kraj deklarisanja
portova entiteta. U sluaju da ima vie portova koji su identinog moda i tipa, oni se mogu
navesti i u jednom redu na sljedei nain:
ime_porta1, ime_porta2, ime_portaN : mod tip;
Kljuna rije end oznaava kraj deklaracije entiteta, a slijedi je ime entiteta i ;.
1.2.3 Arhitektura
Jednom kada su portovi specificirani u deklaraciji entiteta potrebno je jednu ili vie uloga tog
entiteta opisati unutar arhitekture. Jedan isti entitet moe da ima vie razliitih arhitektura, pri
emu je unutar tijela svake od njih opisana neka od funkcija entiteta. Struktura arhitekture je
sljedea:
architecture ime_arhitekture of ime_entiteta is
deklaracije
begin
kod
end ime_arhitekture;
Kljuna rije architecture oznaava poetak deklaracije arhitekture ije je ime ime_arhitekture.
Nakon toga slijedi kljuna rije of koju prati ime_entiteta i na kraju ide kljuna rije is. S
obzirom da je ime arhitekture vidljivo samo unutar entiteta naziv arhitekture mora biti smislen
samo u sluaju kada za jedan entitet definiemo vie arhitekturi. Pritom sva pravila u vezi imena
koja su vaila za entitete vae i za arhitekture (ime mora poinjati slovom, ne smije sadrati dva
uzastopna _ (underscore) simbola ). Nakon definisanja naziva arhitekture slijedi dio u
okviru koga se definiu interni signali koji su vidljivi samo unutar te arhitekture. Takoe se
navode i funkcije, konstante, drugi entiteti itd. koji se koriste unutar tijela arhitekture. Tijelo
arhitekture poine kljunom rijeju begin. Unutar tijela arhitekture se opisuje interna struktura
modula, tj. ta zaista modul koji realizujemo treba da radi.
Tip
Objanjenje
Biblioteka
Mogunost
hardverske
implementacije
Da
BIT
BIT_VECTOR
Da
Da
Paket std_logic_1164
biblioteke ieee
Paket std_logic_arith
biblioteke ieee
Da
Paket std_logic_arith
biblioteke ieee
Da
Da
Cio broj
Da
STD_LOGIC
STD_LOGIC_VECTOR
STD_ULOGIC
STD_ULOGIC_VECTOR
SIGNED
UNSIGNED
BOOLEAN
INTEGER
Da
Da
Da
NATURAL
Da
POSITIVE
REAL
Da
Ne
CHARACTER
STRING
ASCII karakter
Niz ASCII karaktera
Nivo znaaja generisane
poruke u simulaciji
Ne
Ne
Ne
TIME
Vrijeme
Ne
DELAY_LENGTH
FILE_OPEN_KIND
Duina kanjenja
Mod rada otvorenog fajla
Ne
Ne
FILE_OPEN_STATUS
Ne
SEVERITY_LEVEL
'0' - logika 0;
'1' - logika 1;
'Z' - visoka impedansa;
'X' - neodreena vrijednost;
'W' - slab signal neodreene vrijednosti;
'L' - slab signal logike 0;
'H' - slab signal logike 1;
'-' - dont care vrijednost.
Prva tri nivoa signala (0, 1 i Z) se najee koriste u praksi, jer se bez ogranienja mogu
hardverski implementirati, dok je etvrti nivo X primjenu naao prije svega u okviru simulacija,
kao signalizacija neodreene vrijednosti signala. Ostali nivoi se takoe uglavnom koriste u
okviru simulacija. Signalu ovog tipa se dodijeljena vrijednost navodi unutar jednostrukih
navodnika,
ime_signala <= vrijednost_signala.
Ako se vrijednost dodjeljuje samo jednom indeksu onda se koriste jednostruki navodnici, kao i
kod STD_LOGIC tipa,
ime_signala(indeks) <= vrijednost_signala.
Ukoliko se vri dodjela vrijednosti opsegu indeksa signala tipa STD_LOGIC_VECTOR opet se
moraju koristit dvostruki navodnici, ak i u sluaju kada je duina opsega jedan,
ime_signala(indeks1 to / downto indeks2) <= vrijednost_signala.
Nad signalima tipa STD_LOGIC_VECTOR mogu se vriti samo logike operacije, dok su
aritmetike operacije nedozvoljene. Ukljuivanjem paketa std_logic_unsigned ili
std_logic_signed biblioteke ieee dobija se podrka i za aritmetike operacije nad signalima ovog
tipa.
INTEGER Rije je o predefinisanom tipu koji obino koristi 32 bita za predstavljanje cijelih
brojeva. Sa hardverskog stanovita INTEGER predstavlja 32 linije pri emu svaka linija moe
imati vrijednost 0 ili 1. Ukoliko korisniku nije neophodno svih 32 bita za predstavljanje opsega
nekog signala on moe pomou kljune rijei range ograniiti taj opseg na sljedei nain,
signal ime_signala : INTEGER range donja_granica to gornja_granica ;
U sluaju da korisnik ne koristi svih 32 bita za opisivanje nekog signala kompajler e u svakom
sluaju odraditi skraivanje opsega, iako korisnik to nije eksplicitno naveo. Vrijednosti signalu
ovoga tipa se dodjeljuju u decimalnom zapisu
ime_signala <= decimalni_broj;.
Osim velikog broja definisanih tipova, VHDL prua potpunu slobodu korisniku da definie nove
tipove podataka. Iako je ova mogunost veoma primamljiva na prvi pogled u praksi se ipak ne
zloupotrebljava previe. Uglavnom se definiu enumerisani tipovi koji slue da dizajniranje
automata stanja (state machine), gdje se stanja automata opisuju rijeima (nizom karaktera) i na
taj nain se postie vea razumljivost i preglednost koda. Takoe, veliki primjenu ima i
definisanje tipova koji predstavljaju nizove i matrice. Sintaksa enumerisanog tipa je:
type ime_enumeracije is (vrijednost1, vrijednost2, , vrijednostN);
With/select/when konstrukciju je mogue koristiti samo u sluaju kad pokrijemo sve vrijednosti
selektora. U sluajevima kada selektor moe uzeti veliki broj vrijednosti, a nama su od interesa
samo neke od njih, koristi se kljuna rije others kojom pokrivamo sve ostale vrijednosti
selektora (one koje nam nijesu od interesa). Ako znamo da signali tipa STD_LOGIC i sl. mogu
imati devet moguih nivoa, a skoro nikad ne uzimamo u obzir sve njih, to praktino znai da e
kljuna rije others da se koristi uvijek kada je selektor ovog tipa.
vrijednost_N when others;
Ukoliko nije potrebno izvriti nijednu akciju za neku vrijednost selektora koristi se kljuna rije
unaffected, kojom signaliziramo da elimo da se vrijednost rezultujueg signala ne mijenja,
unaffected when others;
entitetu ili deklarativnom dijelu arhitekture i gdje god da su deklarisani oni postaju globalne
promjenljive. Ako ih deklariemo u paketu, onda su vidljivi i u svim entitetima tog paketa, ako ih
deklariemo u entitetu, onda su vidljivi i u svim arhitekturama tog entiteta. Deklaracija signala
unutar entiteta nije nita do deklaracija portova tog entiteta. U stvarnosti se uvijek, bar jedan
signal mora deklarisati unutar entiteta, jer entitet mora imati bar jedan ulaz ili izlaz. S druge
strane, deklaracija signala u paketima nije ba popularna, jer ako se signal koristi u vie entiteta
njegva upotreba postaje dosta komplikovana. Sintaksa signala unutar paketa ili deklarativnog
dijela arhitekture je sljedea:
signal naziv_signala : tip_signala := inicijalna_vrijednost_signala;
U ovom sluaju vrijednost konstante se mora navesti. Za dodjelu vrijednosti nekom signal se
koristi operator <=.
Varijable predstavljaju lokalne promjenljive karakteristine samo za sekvencijalni kod. U skladu
sa tim, one se mogu deklarisati samo u unutar tijela procesa, funkcije ili procedure i vidljive su
samo unutar istih. Varijable, za razliku od signala, ne mogu da se hardverski implementiraju ve
se koriste kao pomone promjenljive (slino kao u klasinim programskim jezicima). Druga
razlika izmeu varijabli i signala je u tome to signal dodijeljenu vrijednost dobija tek na kraju
procesa, dok je promjena vrijednosti varijable trenutna. I dok je signal mogue dodijeliti samo
jednu vrijednost u toku procesa, kod varijabli to nije sluaj. Sintaksa varijabli je sljedea:
variable naziv_varijable : tip_varijable := vrijednost_varijable;
Kao i kod signala i ovdje navoenje inicijalne vrijednosti varijable nije neophodno, tj. moe se
izostaviti. Vrijednost nekoj od varijabli se dodjeljuje pomou operatora =.
1.7 Proces
Sekvencijalni kod koji se koristi unutar tijela arhitekture nekog entiteta mora se nalaziti u proces
bloku. Sama proces naredba je paralelna, pa se na taj nain praktino postie da se i sekvencijalni
kod u VHDL-u izvrava istovremeno. Takoe, mogua je kombinacija proces bloka ili vie njih
sa paralelnim naredbama. Sintaksa procesa je sljedea:
ime_procesa : process (lista_osjetljivosti)
deklarativni_dio
begin
sekvencijalni kod
end process ime_procesa;
Ime procesa nije neophodno navoditi. U deklarativnom dijelu procesa se deklariu varijable koje
se koriste unutar procesa. Lista osjetljivosti predstavlja signal ili skup signala ijom promjenom
poinje da se izvrava sekvencijalni kod iz tijela procesa.
1.7.1 If konstrukcija
Slino kao i u klasinim programskim jezicima if naredba je nala veliku primjenu i u VHDL-u.
Sintaksa if konstrukcije je sljedea:
if (uslov1) then
sekvencijalni kod;
elsif (uslov2) then
sekvencijalni kod;
elsif (uslov3) then
sekvencijalni kod;
else
sekvencijalni_kod;
end if;
end case;
Velika razlika u odnosu na klasine programske jezike je ta to se izvrava samo onaj dio
sekvencijalnog koda koji se nalazi desno od operatora => tj. nije dozvoljeno pisati vie linija
koda. Slino kao kod with/select/when konstrukcije i ovdje je zgodna upotreba kljune rijei
others koja imaju identinu ulogu,
when others => sekvencijalni kod;.
S druge strane, ako nije potrebno da se izvri bilo ta u nekoj selekciju, koristi se kljuna rije
null (kod with/select/when konstrukcije je to bila kljuna rije unaffected),
when (vrijednost1) => null;.
i za razliku od ostalih, ona se moe nai na bilo kojem mjestu unutar tijela procesa.
Operator
<=
Dodjela vrijednosti signal
:=
Opis
=>
Operator
NOT
AND
OR
Negacija
Logika I operacija
Logika ILI operacija
NAND
NOR
XOR
XNOR
Opis
Logika NI operacija
Logika NILI operacija
Logika ekskluzivno ILI operacija
Inverzna XOR operacija
Tabela 3. Osnovni logiki operatori
Sabiranje
Oduzimanje
Mnoenje
Opis
/
**
Dijeljenje
Stepenovanje
MOD
REM
Moduo
Ostatak dijeljenja
ABS
Apsolutna vrijednost
Tabela 4. Aritmetiki operatori
Tipovi podataka nad kojima se mogu vriti aritmetike operacije su INTEGER i REAL.
Ukljuivanjem odgovarajuih biblioteka podrku za aritmetike operacije mogu dobiti i tipovi
SIGNED, UNSIGNED i STD_LOGIC_VECTOR. Poto ne postoji mogunost hardverske
implementacije tipa REAL primjena gore navedenih operatora je veoma ograniena. Praktino,
samo se sabiranje i oduzimanje mogu implementirati bez ogranienja. Kod mnoenja vektora se
mora voditi rauna o njihovoj duini, a kod mnoenja signala o broju bita koji se koristi za
predstavljanje proizvoda. Dijeljenje vektora je mogue samo ako je djelilac stepen dvojke i tada
se operacija dijeljenja svodi na pomjeranje udesno. Dijeljenje INTEGER tipova je mogue, ali se
pritom kao rjeenje uzima samo cio broj ispred decimalnog zareza.
Opis
Jednako
Nejednako
<
>
Manje
Vee
<=
>=
Operator
SLL
SRL
Opis
Logiko pomjeranje ulijevo
Logiko pomjeranje udesno
Tip
BIT_VECTOR
BIT_VECTOR
SLA
SRA
BIT_VECTOR
BIT_VECTOR
ROL
ROR
SHL
Rotiranje ulijevo
Rotiranje udesno
Pomjeranje ulijevo
BIT_VECTOR
BIT_VECTOR
STD_LOGIC_VECTOR, SIGNED, UNSIGNED
SHR
Pomjeranje udesno
STD_LOGIC_VECTOR, SIGNED, UNSIGNED
Tabela 6. Pomjeraki operatori
Vraa
Indeks krajnjeg lijevog lana
vektorright(N)
vektorhigh(N)
Najvii indeks
vektorlow(N)
Najnii indeks
vektorlength(N)
Duinu vektora
vektorrange(N)
Opseg indeksa
vektorreverse_range(N)
Obrnuti opseg indeksa
Tabela 7. Osnovni atributi za opis vektora (nizova)
Naziv atributa
EVENT
Opis atributa
Vraa TRUE ako se dogodila promjena vrijednosti signala
STABLE
ACTIVE
QUIET <vrijeme>
Vraa TRUE ako nije bilo promjene vrijednosti signala za specificirano vrijeme
LAST_EVENT
LAST_ACTIVE
LAST_VALUE
Vraa vrijednost signala prije posljednjeg EVENT-a tj. promjene vrijednosti signala
Tabela 7. Atributi za opis signala
P2
P3
P4
P1
V1
V2
V4
P8
V3
P7
P5
P6
2.2 Razrada
Posmatrajui raskrnicu sa slike 1. moe se zakljuiti da e odreene semaforske table raditi u
paraleli. Drugim rijeima, semaforske table V1 i V3 e uvijek imati ista pokazivanja, a to
naravno vai i za par V2-V4, odnosno grupe P1-P4-P5-P8 i P2-P3-P7-P7. Pretpostavimo na
samom poetku, da table V1-V3 reguliu saobraaj vozila po glavnom, a table V2-V4 po
sporednom putu. Radi jednostavnosti, par V1-V3 oznaimo G, par V2-V4 sa S, a grupe P1-P4P5-P8 i P2-P3-P6-P7 sa Ps i Pg, respektivno. Za regulaciju jednog pravca se koriste dvije grupe i
to jedna za vozila, a druga za pjeake.
2.2.1 Semafor #1
etiri grupe semaforskih tabli treba da obezbijede normalno funkcionisanje saobraaja. Raspored
svjetala na semaforskim tablama e se mijenjati u pravilnim intervalima i to je jo vanije,
ponavljae se u ciklusima. Razmotrimo koja su mogua stanja ovog primitivnog semafora.
Stanje 1.
U prvom sluaju, neka je stanje na semaforima G-zeleno, S-crveno, Pg-crveno i Ps-zeleno ili
drugim rijeima, glavni put je aktivan za vozila, a sporedni za pjeake. Ovaj raspored svjetala
treba da se zadri specificirano minimalno vrijeme. Nakon toga potrebno je prei u sljedee
stanje.
Stanje 2.
Raspored svjetala na semaforima je G-uto, S-crveno, Pg-crveno i Ps-zeleno. To je upozorenje
vozilima na glavnom putu da ponu da usporavaju. I ovo stanje traje odreeno vrijeme.
Stanje 3.
Raspored svjetala na semaforima je G-crveno, S-uto, Pg-crveno i Ps-crveno. Vozila na glavnom
putu se moraju zaustaviti, dok se vozila na sporednom putu pripremaju za polazak. U isto
vrijeme, pjeacima se zabranjuje kretanje.
Stanje 4.
Raspored svjetala na semaforima je G-crveno, S-zeleno, Pg-zeleno i Ps-crveno. Kreu vozai sa
sporednog puta i pjeaci preko glavnog puta. U ovom stanju semafori treba da se zadre isto
onoliko vremena koliko su proveli u stanju 1. Naravno, ovo vai pod pretpostavkom da je
frekvencija vozila i pjeaka preko obje saobraajnice ista.
Stanje 5.
Raspored svjetala na semaforima je G-crveno, S-uto, Pg-zeleno i Ps-crveno. Trajanje ovog
stanja je jednako trajanju stanja 1. ili 4.
Stanje 6.
Raspored svjetala na semaforima je G-uto, S-crveno, Pg-crveno i Ps-crveno. Poziv vozilima na
glavnom putu da se pripreme za polazak. Vozila na sporednom putu miruju. Trajanje ovog stanja
je otprilike isto kao i trajanje stanja 5. Nakon isteka specificiranog vremena sistem treba da pree
pre
opet u stanje 1. i sve tako u krug.
Prethodna priaa se jednostavno moe prikazati dijagramom stanja na slici 2. Oigledno, rad
gornjeg semafora nije nita drugo do beskona
beskonano
no ponavljanje navedenih est stanja, pri emu
svako stanje ima svoje vrijeme trajanja. Mana ovakve realizacije je u tome to nijesu ukljuene
uklju
informacije o prisustvu vozila ili pjeaka na putu koji nije
nije aktivan za saobraaj.
saobra Naime, moe se
desiti da je na glavnom putu veliki broj vozila, a da se na sporednom putu ne nalazi nijedno
vozilo, niti da ima pjeaka koji ekaju
prelazak
lazak preko glavnog puta. U tom sluaju semafor koji
funkcionie na prethodno opisani
isani nain
na
e zaustaviti saobraaj
aj na glavnom putu, a sporedni put
ee postati aktivan, to nikako ne valja. Isto tako moe se dogoditi i obrnuta situacija, da je guva
na sporednom putu, a glavni put je prazan. Iz tog razloga neophodno je u obzir uzeti i
informaciju o prisustvu/odsustvu vozila ili pjeaka na putu koji u tome trenutku nije aktivan.
aktivan
2.2.2 Semafor #2
Kao to je ve reeno prethodni primitivni semafor ima veliku manu, jer u obzir ne uzima
informacije o prisustvu/odsustvu vozila ili pjeaka na neaktivnom putu. Ukoliko bi se i ove
informacije uzele u obzir rad semafora bi bio znatno efikasniji, jer bi se u nekim sluajevima
vrijeme ekanja znaajno smanjilo. Analizom prethodnih est stanja oigledno je da stanja 2., 3.,
5. i 6. predstavljaju stanja ije se vrijeme trajanja ne moe znaajno mijenjati, jer njegovo
poveanje nema smisla, a smanjenjem ovog vremena se moe ugroziti bezbjednost uesnika u
saobraaju. Dakle, mogue je poveati trajanje stanja 1. i 4. na osnovu informacija o saobraaju
na neaktivnom putu. Njihov uticaj se ogleda u sljedeem: sve dok sistem ne dobije informaciju
da se pojavilo vozilo ili pjeak na dijelu puta koji nije aktivan, trajanje stanja 1. ili 4. treba
produiti. Na ovaj nain je prevazien problem do koga je dolazilo u sluaju kada na nekom od
pravaca nema saobraaja. Meutim, kada je potrebno da saobraaj na raskrsnici regulie
policajac, ovaj reim rada semafora nije pogodan, pa je neophodno u obzir uzeti i informacije o
tome u kojem reimu radi semafor.
2.2.3 Semafor #3
Poto prethodni semafor ne moe funkcionisati u nekim vanrednim situacijama i taj problem je
potrebno prevazii. Kada je potrebno da saobraaj na raskrsnici regulie policajac, rad
prethodnog semafora treba prilagoditi i toj situaciji. U prethodnim analizama pjeake
semaforske table pokazivale samo dvije signalne boje (crvena i zelena), pa e se u ovom sluaju
smatrati da su ove semaforske table iskljuene. Dakle, potrebno je samo regulisati rad etiri
semaforske table za motorna vozila. U tom sluaju, na ovim tablama uto signalno svijetlo treba
da se naizmjenino pali i gasi. Na taj nain se dobija semafor koji moe da radi u dva reima:
normalnom i vanrednom, pri emu je pri radu u normalnom reimu rada vrijeme ekanja
minimalno. Na kraju, vano je napomenuti da se odgovarajuim podeavanjima iz ovog tipa
mogu izvesti oba prethodna tipa semafora.
2.3 Kod
Sva tri prethodno opisana semafora mogue je realizovati pomou programskog jezika VHDL
primjenom odgovarajueg kompajlera. Ovdje e biti dat VHDL kod koji simulira rad treeg
semafora. Malim korekcijama ovog koda, tj. izostavljanjem odgovarajuih uslova, moe se
jednostavno dobiti i VHDL kod prvog i drugog tipa semafora.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_unsigned.all;
entity semafor is
port (
clk: in STD_LOGIC;
clr: in STD_LOGIC;
nacin: in STD_LOGIC;
cekanje: in STD_LOGIC;
vozila: out STD_LOGIC_VECTOR(5 downto 0);
pjesacki: out STD_LOGIC_VECTOR(3 downto 0)
);
end semafor;
architecture shema of semafor is
type stanje_type is (s0, s1, s2, s3, s4, s5, s6, s7);
signal stanje: stanje_type;
signal brojac: STD_LOGIC_VECTOR(3 downto 0);
constant SEC5: STD_LOGIC_VECTOR(3 downto 0) := "1011";
constant SEC1: STD_LOGIC_VECTOR(3 downto 0) := "0011";
begin
process(clk, clr,cekanje,nacin)
begin
if clr = '1' then
o if nacin='1' then
stanje <= s0;
o elsif nacin='0' then
stanje <= s6;
o end if;
brojac <= X"0";
elsif (clk'event and clk = '1') then
o if nacin='1' then
case stanje is
when s0 =>
else
o if(cekanje='0') then
o stanje <= s0;
o else
o stanje <= s1;
o brojac <= X"0";
o end if;
end if;
when s1 =>
else
o stanje <= s2;
o brojac <= X"0";
end if;
when s2 =>
o
o
else
end if;
when s3 =>
end if;
when s4 =>
else
o stanje <= s5;
o brojac <= X"0";
end if;
when s5 =>
else
o stanje <= s0;
o brojac <= X"0";
end if;
when others =>
end if;
when s7 =>
end if;
o end case;
o end if;
o end if;
end process;
C2: process(stanje)
begin
case stanje is
when s0 => vozila <= "100001"; pjesacki <= "0110";
when s1 => vozila <= "100010"; pjesacki <= "0110";
when s2 => vozila <= "010100"; pjesacki <= "1010";
when s3 => vozila <= "001100"; pjesacki <= "1001";
when s4 => vozila <= "010100"; pjesacki <= "1001";
when s5 => vozila <= "100010"; pjesacki <= "1010";
when s6 => vozila <= "010010"; pjesacki <= "0000";
when s7 => vozila <= "000000"; pjesacki <= "0000";
when others => vozila <= "100001"; pjesacki <= "0110";
end case;
end process;
end shema;
Napomena: Bez obzira to se u prethodnom kodu pojavljuje osam umjesto est analiziranih
stanja, on potpuno odgovara analiziranom sluaju. Dodatna dva stanja su uvedena iz dva
razloga: zbog preglednosti (jer se ova dva stanja javljaju samo u jednoj - vanrednoj situaciji)
i iz razloga to u prethodnim analizama ne postoji stanje u kojemu su sve semaforske table
istovremeno ugaene. Takoe je veoma vano znati da vrijednost konstanti sec5 i sec1 same po
sebi ne znae mnogo. One u sutini zavisi od izbora clk - klok signala, tj. za razliite clk signale
vrijednosti ovih konstanti se moraju mijenjati da bi se dobili intervali istog trajanja.
Slika 2. Sluaj
Slu kada nema saobraaja na sporednom putu (niko ne eka)
Slika 3. Sluaj
Slu kada se saobraaj odvija normalno (uvijek neko eka)
Slika 4. Sluaj
Slu kada se pojavi vozilo ili pjeak na sporednom putu
Slika 5. Sluaj
Slu kada saobraaj regulie policajac (trepue uto)
3. Zakljuak
U prvom dijelu rada, ukratko je opisan programski jezik VHDL, njegovi osnovni principi,
struktura, tipovi podtaka, sintaksa nekih naredbi i sl. Pritom je, uglavnom, opisan onaj dio
VHDL-a koji je korien u drugom dijelu rada. to se tie drugog dijela, u njemu je analiziran
rad semafora na jednoj prostoj raskrsnici. Bez obzira to je u samom startu bilo jasno koju ulogu
treba da ima posmatrani semafor, analiza je zapoeta od najprostijeg tipa semafora koji je kasnije
nadograivan. Cilj takvog pristupa je bio da se na najjednostavniji nain istakne osnovna uloga
semafora u razliitim situacijama, pri emu je, na kraju, ukazivano i na osnovne nedostatke
pojedinih tipova semafora. Na osnovu te analize i iz nje izvedenih zakljuaka je kreiran VHDL
kod koji simulira rad posljednjeg, ujedno i najsloenijeg tipa semafora. Rezultati simulacije koda
koji opisuje trei tipa semafora su na kraju i prikazani i prodiskutovani. Poto je kod napisan na
osnovu prethodne analize rada semafora, bilo je i oekivano da se rezultati u simulaciji poklope
sa onim to je zakljueno na osnovu te analize.
4. Literatura
[2] Stojanovi, Radovan D., (2008), Automatizovano projektovanje digitalnih sistema (VHDL
I FPGA), University of Montenegro, Podgorica
[4] http://www.lbebooks.com/downloads/exportal/VHDL_BASYS_Example62TrafficLights.pdf
(Pristup: 25.06.2015.)