prenos i kodiranje podataka na primeru vhdl kodaes.elfak.ni.ac.rs/papers/msrbulovic - mnikolic -...
TRANSCRIPT
UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET KATEDRA ZA ELEKTRONIKU Predmet: MIKROPROCESORSKI SISTEMI
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA
Profesor: Studenti: Maja Srbulovid 10966
Prof. Dr Mile Stojčev Marko Nikolid 10911
Niš, Novembar 2009.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
2 Maja Srbulovid 10966 / Marko Nikolid 10911
SADRŽAJ
1. Prenos Podataka ........................................................................... ............................... 3
1.1 Način Komunikacije ........................................................................................ 4
1.2 Serijski i Paralelni Prenos ................................................................................ 5
1.3 Asinhrini i Sinhroni Režim Rada ...................................................................... 9
2. Kodiranje Podataka ................................................................................................... .. 12
3. Opis Projektovanog Kola za Prenos i Kodiranje Podataka .......................................... 16
3.1 Opis Protokola Podataka ............................................................................... 16
3.2 Opis šeme i Rada Kola ................................................................................... 18
4. Opis Entiteta Kola u VHDL Kodu ................................................................................. 35
4.1 D Flip Flop ............................................................................. ......................... 35
4.2 T Flip Flop ...................................................................................................... 37
4.3 Multiplekser .................................................................................................. 38
4.4 Pomerački Registar ...................................................................................... . 41
4.5 Brojač ......................................................................................................... ... 43
4.6 Registar_16 ............................................................................................... .... 46
4.7 Komparator ............................................................................................... .... 48
4.8 Automat ........................................................................................................ 49
5. Testiranje Rada Kola ................................................................................................ .. 58
6. Laboratorijska Vežba ................................................................................................. 63
Zadatak 1 ......................................................................................................... ... 63
Zadatak 2 ............................................................................................................ 70
7. Literatura ............................................................................................................... .... 78
8. Biografije Autora ..................................................................................................... ... 79
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
3 Maja Srbulovid 10966 / Marko Nikolid 10911
1. PRENOS PODATAKA
Fundamentalni aspekt svakog sistema za prenos podataka odnosi se na tehniku koja se koristi
za slanje podataka između dve tačke (predajnika/prijemnika). Prenos podataka između
predajnika i prijemnika ostvaruje se preko prenosnog medijuma. Prenosne medijume možemo
svrstati u dve osnovne grupe:
a) trasirane (guided) i
b) netrasirane (unguided).
U oba slučaja komunikacija se ostvaruje zahvaljujudi prostiranju elektromagnetnih talasa kroz
medijum. Kod trasiranog prenosa prostiranje talasa (adekvatniji termin u ovom slučaju je
električni signal) se usmerava duž fizičkih puteva kakvi su upredeni kablovi, koaksijalni kablovi,
optička vlakna itd. Kod netrasiranog prenosa prostiranje elektromagnetnih talasa se vrši kroz
prostor (vazduh, vakuum, tečnost). Prenosni put između dve tačke naziva se veza (link), a deo
veze koji je namenjen prenosu podataka jednostavno nazivamo kanal. Termin direktna veza
(direct link) odnosi se na prenosni put između dva uređaja duž koga se prostiranje signala
između predajnika i prijemnika ostvaruje bez posrednika. U ovom slučaju kao posrednici na
prenosnom putu ne smatraju se uređaji tipa pojačavač ili repetitor, čija je osnovna uloga da
povedaju snagu (amplitudu) signala duž prenosnog puta, tj. da kompenziraju slabljenje signala
kroz prenosni medijum.
Na Slici 1.1 prikazane su dve konfiguracije koje se najčešde koriste kod trasiranog prenosa. Kod
usmerenog prenosa tipa tačka-ka-tački (point-to-point) prikazan na Slici 1.1a) ostvarena je
direktna veza između predajnika i prijemnika, a kod višetačkaste (multipoint) konfiguracije,
medijum za prenos je deljiv između vedeg broja uređaja (Slika 1.1b)).
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
4 Maja Srbulovid 10966 / Marko Nikolid 10911
Sl.1.1: Tipovi kod usmerenog prenosa
1.1 Načini Komunikacije
Razlikujemo tri načina prenosa podataka (Slika 1.1.1):
a) simpleks (simplex) – signali se prenose (predaju) samo u jednom smeru; jedna
stanica/terminal je predajnik, a druga prijemnik;
b) polu-dupleks (half-duplex) – obe stanice mogu vršiti predaju/prijem po istom kanalu, ali
ne istovremeno (kada je jedna predajnik, druga je prijemnik, i obratno);
c) potpuni dupleks (full-duplex) – obe stanice mogu istovremeno da obavljaju predaju
koristedi posebne kanale (po jedan za svaki smer prenosa).
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
5 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 1.1.1: Načini prenosa signala: a) simpleks; b) polu-dupleks; c) potpuni-dupleks
Napomena: Tx - predajnik (transmitter); Rx - prijemnik (receiver)
1.2 Serijski i paralelni prenos
Podaci se kroz medijum (žicu, vod, magistralu itd.) prenose ili serijski ili paralelno. Odlika
serijskog prenosa je jednostavnost realizacije – bitovi se prenose preko jedinstvene linije, jedan
po jedan. Kod paralelnog prenosa n bitova (n = 8, 16, 32, 64) podatka prenosi se istovremeno
(ovakav prenos se tipično ostvaruje kod sistemske magistrale mikroprocesora, IEEE-488 GPIB
magistrale itd.) Na Slikama 1.2.1 i 1.2.2 prikazani su serijski i paralelni prenos, respektivno.
Paralelni prenos podataka je brži od serijskog, ali je skuplji (zahteva vedi broj veza). Serijski
prenos je daleko pouzdaniji – greška ili prekid u prenosu mogu jednostavno da se detektuju.
Daleko značajnija prednost serijskog prenosa je u tome što su vremenom razvijeni brojni i
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
6 Maja Srbulovid 10966 / Marko Nikolid 10911
kvalitetni protokoli (pravila za razmenu podataka). Kod paralelnog prenosa, zbog različitih
formata paralelnih podataka, to nije slučaj. Uopšte, paralelni prenos podataka se daleko više
koristi kada se prenosi podatak na kradim rastojanjima: interno, unutar mikroprocesorskog
sistema (npr. komunikacija između mikroprocesora i memorije) i eksterno, do nekoliko metara,
u okviru računarskog okruženja (npr. komunikacija između računara i štampača preko
paralelnog porta). Kada su u pitanju rastojanja veda od reda nekoliko metara, serijski prenos
podataka je jedini izbor. Serijski prenos može da se ostvari preko jednog provodnika (žice). U
praksi su, međutim, potrebne najmanje dve linije (provodnika, žice) za serijsku komunikaciju:
jedna za podatke i druga, tzv. masa – da bi se zatvorilo strujno kolo između dva sistema koji
serijski komuniciraju. Veliki broj potrebnih veza (jedna žica po bitu n-bitnog podatka)
ograničava primenu paralelnog prenosa na kratka rastojanja. Na primer, u merno-informacionoj
tehnici projektovana je paralelna magistrala IEEE-488 GPIB, preko koje komuniciraju
sistemi/uređaji udaljeni maksimalno 20 m. Uređaji svih renomiranih proizvođača merno-
informacione opreme (digitalni osciloskopi, digitalni izvori napajanja, logički analizatori,
analizatori spektra itd.) poseduju IEEE-488 GPIB magistralu. Komunikacija u okviru
mikroprocesorskog sistema ostvaruje se preko sistemske magistrale u paralelnoj formi. Da bi se
ostvarila sprega sistema koji sa jedne strane obavljaju paralelni, a sa druge strane serijski
prenos podataka, neophodno je izvršiti paralelno-serijsku konverziju. Za tu svrhu se najčešde
koriste pomerački registri. U aplikacijama se često koriste oba tipa konverzije, i
paralelnoserijska i serijsko-paralelna, kako bi se ostvario prenos n-tobitnih paralelnih podataka
od predajnika ka prijemniku preko serijske linije.
Sl. 1.2.1: Ilustracija serijskog prenosa
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
7 Maja Srbulovid 10966 / Marko Nikolid 10911
Mikroprocesorski sistemi memorišu i procesiraju podatke u formi bitova koji su uređeni kao reči
fiksnog obima. Memoriju računara čini niz lokacija pri čemu svaka ima svoju jedinstvenu adresu.
Računarski sistemi mogu manipulisati sa rečima obima 8, 16, 32, 64 bitova, itd. U okviru velikog
broja gradivnih blokova računarskog sistema podaci se prenose u paralelnoj formi, što znači da
je svakom bitu u okviru reči dodeljen po jedan prenosni put. Primer paralelnog prenosa
podataka uobičajeno se srede kod hardverskih interfejsa za pobudu štampača ili kod interfejs
ploča za spregu sa diskom. Kod paralelnih interfejsa, kakva je recimo sprega računara sa
štampačem, potrebno je uvesti neki oblik signalizacije koji de na određeni način, sa jedne
strane, ukazati kada su podaci na izlazu računarskog sistema raspoloživi/validni, a sa druge
strane, kada je (da li je) štampač spreman da prihvati novi podatak. Glavni razlog uvođenja
signalizacije predstavlja velika razlika u brzini rada uređaja koji se međusobno povezuju.
Konkretnije, računar može da generiše nove podatke na svakih 0.5 ns, dok štampač može da
štampa podatke brzinom reda 100 znakova u minuti (postoje i štampači koji mogu štampati do
50000 znakova u minuti).
Sl. 1.2.2: Ilustracija paralelnog prenosa (n=8)
Da bi se na jedan regularan način ostvarila korekt na razmena podataka između uređaja koriste
se posebni signali poznati kao handshake signali. Procedura kojom se reguliše način razmene
podataka i tajming naziva se handshake procedura. Na Sl. 1.2.3 prikazana je handshake
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
8 Maja Srbulovid 10966 / Marko Nikolid 10911
procedura koja se uobičajeno koristi kod paralelnog interfejsa. U trenutku kada se upravljački
signal DAV (Data Available) menja sa nisko-na visoko, računar signalizira štampaču da je
podatak, prisutan na magistrali, dostupan. Sa druge strane, kada štampač prihvati novi podatak
on postavlja signal DAC (Data Accepted) na visoko.
Sl. 1.2.3: (a) Paralelni prenos; (b) handshaking (rukovanje)
Paralelni način prenosa podataka pogodan je kod onih aplikacija kada su uređaji bliski jedan
drugom. Kada signale (podatke) treba prenositi na veda rastojanja paralelni prenos postaje
nepraktičan iz slededih razloga: Kabliranje je složenije, prenos postaje nepouzdaniji zbog
različitih kašnjenja signala duž vodova, a greške u prenosu se teže otkrivaju u slučaju kada dođe
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
9 Maja Srbulovid 10966 / Marko Nikolid 10911
do nekog kratkog spoja ili prekida linija (žica u kablu). Alternativni pristup kod prenosa podataka
je onaj koji se zasniva na serijskom prenosu. Kod ovog načina prenosa postoji samo jedna linija
po kojoj se prenose bitovi podataka. I pored toga što je serijski prenos sporiji od paralelnog
prenosa, kabliranje je jednostavnije, a greške u prenosu se lakše otkrivaju. Svaki bit serijskog
niza podataka trajanja je određenog vremenskog perioda koji se naziva signalni elemenat.
Signali se predstavljaju pozitivnom vrednošdu za logičku jedinicu, a nultom vrednošdu za logičku
nulu.
1.3 Asinhroni i sinhroni režim rada
Bilo koji komunikacioni sistem za prenos podataka čine, u najopštijem slučaju, predajnik,
prijemnik i neki oblik komunikacionog kanala. Predajnik generiše niz podataka pri čemu je
tajming svakog bita pod kontrolom taktnih impulsa.
Asinhroni prenos
Za sistem kod koga predajnik može u bilo kojem trenutku da generiše bitove kažemo da koristi
asinhroni prenos. Ključne karakteristike asinhronog prenosa su te da predajnik ne predaje
prijemniku bilo kakvu informaciju o lokalnom taktnom impulsu ili tajming bit. Zadatak
prijemnika je da interpretira dolazede signale i da korektno interpretira svaki dolazedi bit. U
suštini asinhroni prijemnik ne regeneriše takt na osnovu dolazedeg signala. Naime, predajnik i
prijemnik koriste posebne taktne impulse čije su frekvencije veoma bliske jedna drugoj. Sa
ciljem da se odredi korektni početak rada prijema koristi se metod rada poznat kao start-stop
(Slika 1.3.1).
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
10 Maja Srbulovid 10966 / Marko Nikolid 10911
Sl.1.3.1: Start-stop operacija
Kada se podaci ne predaju, linija se nalazi u pasivnom (idle) stanju. Podatku prethodi start-bit
koji je trajanje jednog bitskog intervala i suprotnog je polariteta u odnosu na pasivno stanje.
Nakon toga slede nekoliko bitova podataka (obično je osam). Na kraju se pridružuje stop-bit koji
je istog polariteta kao i pasivno stanje. (Trajanje pasivnog stanja može biti proizvoljno). Stop bit
se uvodi sa ciljem da se jasno razgraniči zadnji bit prenetog znaka. Kada detektuje prednju ivicu
start-bita, prijemnik aktivira generisanje prijemnog takta. Prva pojava taktnog impulsa je tako
podešena da se javi na sredini, ili oko sredine, prvog bita podataka i koristi se za strobovanje
bita u registar ili leč (latch). Sa narednim taktnim impulsima, za ostale bitove podataka, proces
se ponavlja. U suštini, ako je taktna frekvencija prijemnika i predajnika identična, strobovanje de
se uvek javljati (dešavati) na sredini trajanja bitskog intervala. Zbog različitih frekvencija
predajnika i prijemnika ipak dolazi do "klizanja" tako da, ako se broj bitova povedava,
koincidencija taktnih impulsa i princip strobovanja podataka na sredini bitskog intervala se
narušava. Imajudi ovo u vidu, a iz razloga pouzdane detekcije, obim (trajanje) asinhronog signala
ograničen je na 12 bitova (misli se na prenos jedinstvenog karaktera (znaka ili simbola), zato što
se sinhronizacija kod ovog prenosa ostvaruje na nivou jednog znaka).
Sinhroni prenos
Daleko efikasniji način za održavanje sinhronizacije kod komunikacione veze je onaj koji se
zasniva na sinhronom prenosu (synchronous transmission). Podaci koji se sinhrono predaju
dolaze do prijemnika kao kontinualni niz u regularnim vremenski definisanim bitskim
intervalima. Predajnik i prijemnik moraju da rade sinhrono, a to se ostvaruje korišdenjem
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
11 Maja Srbulovid 10966 / Marko Nikolid 10911
sinhronizacionih signala na nivou takta. Predajnik generiše taktni signal koji mora biti prenet do
prijemnika bilo preko posebnog kanala ili direktno regenerisan od strane prijemnika iz
dolazedeg signala. Zbog toga u predajnoj poruci mora biti emitovana i informacija o
sinhronizaciji. Princip regenerisanja takta kod ovog načina prenosa prikazan je na Slici 1.3.2.
Slika 1.3.2: Sinhroni prijemnik
Uobičajeno se podaci predaju kao okviri, tj. ramovi (frame) fiksnog obima (Slika 1.3.3), pri čemu
svaku informaciju na početku i kraju prate specijalni bit oblici nazvani preambule (preamble).
Svrha preambule je da ostvari sinhronizaciju predajnog i prijemnog oscilatora pre početka
prijema informacionih bitova.
Sl.1.3.3: Izgled okvira (rama) podatka kod sinhronog prenosa
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
12 Maja Srbulovid 10966 / Marko Nikolid 10911
2. KODIRANJE PODATAKA
Ako kažemo da pojam podatak definiše najmanju esencijalnu celinu za funkcionisanje
najrazličitijih sistema koji su prisutni u svakodnevnom životu, onda je verodostojnost, sigurnost
i dostupnost tih podataka nešto što je neophodno ostvariti kako bi sve to funkcionisalo i davalo
očekivane rezultate. Podatak možemo definisati za veoma različite oblasti društvenog života. U
medicini, recimo, podataci bi bili simptomi bolesnika i nakon njihove obrade se postavi
dijagnoza. U muzici bi podaci bile note, kao nosioci informacija. Praktično, podaci su svuda oko
nas. Kako su se razvijale tehničke nauke, svi ti podaci su na neki način pretočeni u elektronsku
formu. Vremeno, kako su rasle naše potrebe za sve vedom upotrebom računara u svim sferama,
rasli su i problemi kako sve te potrebe zadovoljiti sa tako ograničenim faktorom, prenosnim
medijumom. Plus, bezbednost podataka više nije bilo sigurno.
Iz ovih, kao i iz mnogo drugih razloga je nastalo kodiranje, kao novi vid prenosa, kompresije i
zaštite podataka. I, naravno, našao veoma široku primenu. Recimo u TV tehnici koristimo
metodu kodovanja kao vid kompresije podataka u manje paketa koji de se lakše i brže prenositi.
U audio/video tehnici, kodovanjem se može menjati format podataka i lakše manipulisati njime.
Zatim u mobilnim i bežičnim kominikacijama se koristi za zaštitu podataka koje se šalju, kao i
neki vid kompresije koji de povedati brzinu prenosa. Kodovima je obezbeđena sinhronizacija
između predajnika i prijemnika. Zato je kodiranje postalo tako značajna oblat u savremenim
komunikacijama.
Ako potražimo neku definiciju kodiranja, možemo nadi da je kodiranje podataka, ustvari, proces
konvertovanja informacije iz jednog formata u drugi (kodirani) format. Komunikacija sa ovakvim
vrstama podataka je moguda jedino ako i predajna i prijemna strana razumeju tehniku kodiranja
tj načina na koji su formirani novi bitovi. Na prijemnoj strani se mora izvršiti dekodiranje
podataka pre nego što se bude manipulisalo sa njima.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
13 Maja Srbulovid 10966 / Marko Nikolid 10911
Danas je prisutno veoma velik broj načina kodiranja. Svaki oblik kodiranja je specifičan za neku
oblast za koju je bio pravljen. Tako na primer tzv kanalno kodiranje, koje podrazumeva
kodiranje na taj način da što više smanji veličinu podataka, poveda brzinu prenosa i smanji broj
pogrešno prenetih bitova, se razllikuje i zasebno projektuje za različita uslove. Prirodne
prepreke koje utiču na ovo se razlikuju kada se radi o satelitskoj komunikaciji (u svemiru je
problem termički šum koji se javlja na prijemniku), mobilnoj komunikaciji (učestanost fadinga je
mnogo veda nego inače), zemljanim telefonskim komunikacijama (uskopijasni modemi su
ograničeni bukom koja se javlja u ovoj mreži) itd.
Pojmom kodiranja obuhvadeni su postupci obrade koji se primenjuju pri digitalnom prenosu
digitalnih signala, kada se karakteristike digitalnog signala prilagođavaju karakteristikama
prenosnog puta, kao i pri digitalnom prenosu analognih signala, kada se vrši pretvaranje
analognog signala u digitalni oblik. Saglasno tome, u postupku obrade signala, razlikuju se dva
tipa kodiranja:
Kodiranje digitalnih signala u osnovnom opsegu učestanosti i
Kodiranje analognih signala, odnosno analogno/digitalna konverzija.
Kodiranjem se utiče na: oblik spektra signala, sinhronizaciju, otkrivanje grešaka, povedanje
otpornosti na uticaj šuma, složenost i ekonomičnost uređaja.
Najjednostavniji postupak kodiranja je onaj koji se upotrebljava za opisivanje binarnih signala
na način što se dva binarna stanja predstavljaju sa dva naponska nivoa u odgovarajudem
talasnom obliku signala. Ovakav kod se može realizovati tako što se binarna jedinica predstavi
višim nivoom napona (impulsom), a binarna nula nultim naponom (pauzom).
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
14 Maja Srbulovid 10966 / Marko Nikolid 10911
Druga, češda, mogudnost je ona u kojoj se negativni napon koristi da predstavi binarnu nulu, a
pozitivni napon za binarnu jedinicu, tj. signal zadržava stanje kod svakog bita u toku bitskog
intervala, pošto se signal ne vrada na nulu posle svakog bita. U tom slučaju se govori o
specifičnom postupku kodiranja bez povratka na nulu (NRZ – Non Return to Zero, NRZ-L – Non
Return to Zero Level). Ova tehnika kodiranja se često koristi kod asihronih komunikacija, ali ima
nedostatak što nije samotaktovana,tj. iz NRZ-L signala nije mogude izdvojiti taktnu frekvenciju.
Pored toga NRZ –L signal može ostati u istom stanju (0 ili 1) nedefinisani period vremena, tako
da je potrebno obezbediti u prenosu i DC spregu.
Da bi se obezbedilo više informacija o taktnoj frekvenciji smišljeni su i drugi kodovi.
Najjednostavniji među njima je NRZ-Mark (NRZ-M). Zasnovan je na postojanju tranzicije svaki
put kada je poslata 1. Lako se može zaključiti, da ova tehnika kodiranja ima manu kada se
pošalje duga sekvenca uzastopnih nula.
Povratak na nulu (RZ – Return to Zero) je linijski kod koji se, takođe, koristi kao jedna od
tehnika kodiranja u kojoj signal opada (vrada se) na nulu između svakog impulsa. Ovo se dešava
čak i ako u signalu postoji uzastopni niz nula ili jedinica. Ova tehnika kodovanja je
samotaktovana. To znači da nije potrebno poslati zaseban taktni signal pored signala, a
nedostatak je u tome što zauzima duplo vedi propusni opseg kako bi dosegla istu bitsku brzinu u
poređenju sa tehnikom kodiranja bez povratka na nulu.
Postoji još jedna grupa kodova kojima se na sličan način prevazilaze nedostaci NRZ kodova. To
su bifazni kodovi, od kojih se najviše koristi Manchester kod. Ova tehnika kodiranja zasnovana
je na postojanju tranzicije (prelaza) na sredini vremenskog intervala koji pripada pojedinačnom
binarnom simbolu. Pri tome je binarna 1 predstavljena tranzicijom sa nižeg na viši nivo, dok
binarnu 0 predstavlja tranzicija sa višeg naniži naponski nivo.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
15 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 2.1: Manchester kod
Bifazni kod je tehnika kodiranja binarnog niza podataka. Kada se binarni niz podataka bez
modulacije šalje kroz kanal, mogu se javiti veliki nizovi binarnih 0 ili 1 bez i jedne tranzicije tako
da je otežana sinhronizacija i regeneracija takta. Ova tehnika kodiranja omogudava lakšu
sinhronizaciju osiguravajudi pojavljivanje makar jedne tranzicije između svakog bita podataka u
kanalu. Kod kodiranja bitska brzina mora da je dvostruko veda od bitske brzine originalnog
signala. Svaki bit podatka koji se šalje predstavljen je sa dva logička stanja, koji zajedno čine
jedan bit. Svaka binarna 1 predstavljena je sa dva različita bita (10 ili 01) na izlazu. Binarna 0
predstavljena je sa dva jednaka bita (00 ili 11) na izlazu. Binarna 1 i 0 su predstavljene istom
amplitudom napona ali suprotnog polariteta.
Slika 2.2: Bifazni kod
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
16 Maja Srbulovid 10966 / Marko Nikolid 10911
3. OPIS PROJEKTOVANOG KOLA ZA PRENOS I KODIRANJE PODATAKA
3.1 Opis Protokola Podataka
Pre nego što opišemo sistem za kodiranje i prenos podataka, neophodno je sagledati kako de
izgledati jedan paket protokola za komunikaciju i način komunikacije između predajnika i
udaljenog prijemnika. Predviđeno je da generalno postoje dva moda rada: period kada se ne
šalje nikakva inforamcija i period kada se šalje informacija. Tokom neaktivnog perioda šalje se
niz nula i jedinica duplo vede periode od taktnog signala za predaju, tj. na svaki otkucaj takta
pošalje se npr. nula, a naredni put jedinica i tako dalje. Ovo je na Slici 3.1.1 prikazano kao niz
nula i jedinica pre preambule. Drugi mod rada je kada dođe do slanja poruke udaljenom
predajniku. Tad modul koji želi da šalje uputi zahtev za slanje i naše kolo treba da pripremi sve
da bi slanje informacije počelo. Paket je formiran od dva polja i preambule. Jedno polje je
dužine 16 bitova i ono nosi informaciju kolika je dužina polja sa podacima. Drugo polje koristi se
za slanje podataka. Maksimalna dužina drugog polja je 64KB, s’obziron da kada svih 16 bitova
prvog polja budu jedinice to je maksimalna moguda dužina paketa. Dakle drugi mod
podrazumeva slanje preambule, koja iznosi 47 heksadecimalno (01000111), nakon čega sledi
slanje podataka po ved utvrđenom redosledu.
Izbor preambule od 47 heksadecimanlo je odabrano tako da ukoliko dođe do eventualne greške
pre prenosu niza bitova nula i jedinica, to nede remetiti prenos preabule tj. automat de modi
razlikovati preambulu od sekvence koja označava pasivan rad sistema. Kao što je rečeno, u
modu kada nema podataka naizmenično se šalju nule i jedinice duplo vede periode od taktnog
signala za predaju, odnosno 01010101. Preambula je 01000111. Recimo da dodje do greške pri
prenosu druge jedinice u neaktivnom modu, odnosno da se registruje niz 010001010. Kao što se
vidi ovaj niz podseda na preambulu ali se ipak razlikuje na jednom bitu što sistem nede
registrovati kao preambulu i nede greškom predi u mod za slanje podataka. A verovatnoda da
dodje do greške pri prenosu ovako bliskih bitova(da se pored ovoga i četvrta nula prenese kao
jedinica odnosno 01000111) je izuzetno mala, takoredi zanemarljiva. Na taj način smo osigurali
da de automat uvek ispravno registrovati preabulu i prebaciti sistem u mod za prenos podataka.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
17 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 3.1.1: Izgled paketa protokola koji se generiše u predajniku
Komunikacija može da se odvija tako što uzastopno mogu da se pošalju jedan ili više paketa
informacije uzastopno. Na Slici 3.1.1a imamo situaciju kada se pošalje više od jednog paketa
(slanje drugog paketa počinje bez ikakve pauze), a na Slici 3.1.1b imamo situaciju kada se šalje
samo jedan paket informacije. Treba napomenuti i to da prvo polje od 16 bitova generiše modul
koji inicira komunikaciju, tj. mora nam biti poznata dužina polja sa podacima kako bi mogli da
ispravno formiramo frejm kojim se šalje podatak. Tako prva dva bajta koja preuzmemo od
modula koji inicira komunikaciju smeštamo u registar dužine 16 bitova koji de koristiti za
kontrolu rada kola da bi se ispravno formirao paket kojim se prenose podaci. Preostali deo
informacije se samo prosleđuje dalje.
Formiranjem ovakvog protokola rešene su neke od slededih stavki:
Preambula je fiksna i šalje se pre slanja svakog paketa sa podacima. Tako de kolo prijemnika
biti u mogudnosti da detektuje niz bitova koji se šalju kao preambula i počede sa prijemom
podataka.
Prvo polje je uvedeno iz razloga da protokol bude potpuno određen, tj. može se zamisliti
situacija da se u okviru podataka nađe sekvenca bitova koja je ista kao preambula. Na ovaj
način bi prijemnik protumačio to kao slanje novog paketa informacije i došlo bi do greške pri
slanju. Uvođenjem polja sa 16 bitova, koje nosi podatke o dužini polja sa podacima, ova
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
18 Maja Srbulovid 10966 / Marko Nikolid 10911
nepogodnost se eliminiše. Naime, kolo prijemnika tada zna da kada primi informaciju koja
može da predstavlja preambulu, tada se proveri da li primljena informacija ima
odgovarajudu dužinu i, ukoliko to nije slučaj, tada se taj bajt tretira kao bajt podatka koji je
primljen, a ne kao bajt preambule.
Kada se nikakvi podaci ne šalju, šalje se niz nula i jedinica koji se može iskoristiti na
prijemnoj strani da se frekvencija i faza prijemnog taktnog signala podese da budu u
sinhronizmu sa fazom i frekvencijom signala koji nosi podatke.
Na Slici 3.1.1 prikazan je i komentar koji govori o tome gde se formira informacija koja se šalje
na komunikacionu liniju.
3.2 Opis šeme i rada kola
Na Slici 3.2.1 prikazana je blok šema kola koje generiše signale za protokol prikazan na slici
3.1.1. Podaci koji se šalju dolaze na port koji je označen kao data_in. Podaci dolaze u
paralelnom obliku. Signal sa ovog porta vodi se na ulaze dva registra. Prvi je registar
pomeračkog tipa i on se koristi za prevođenje informacije iz paralelne u serijsku formu u okviru
koje se podaci šalju. Drugi registar na koji se vodi ovaj signal je registar duđine 16 bitova. U ovaj
registar vrši se upis dva prva bajta informacije. Vrednost ova dva bajta predstavlja dužinu polja
sa podacima.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
19 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 3.2.1: Blok šema kola koje generiše signale za protokol sa slike 3.1.1
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
20 Maja Srbulovid 10966 / Marko Nikolid 10911
Sekvenca rada kola je slededa:
Kolo se nalazi u idle stanju i šalje informaciju koja se dobija na izlazu T flip flopa. Tada je
multiplekser podešen tako da propušta ovaj signal na ulaz kola kodera. Sve kontrolne i
upravljačke signale generiše kolo FSM koje predstavlja kolo automata sa konačnim brojem
stanja. Tako se i signal za upravljanje radom multipleksera dobija iz ovog kola. To je signal
MUX_control_signal, koji se dovodi na ulaz registra_2 pa tek onda na kontrolni ulaz
multipleksera. Uloga registra_2 de biti kasnije objašnjena.
Sa slike se uočavaju i signali za kontrolu rada kola. To su signali koji realizuju hand shake
proceduru pri slanju podataka. Signalom send_request, modul koji šalje podatke obaveštava
naše kolo o tome da hode da pošalje neki podatak. Tad naše kolo prebaci stanje multipleksera
tako da se na ulaz kola za kodiranje dovede signal iz registra za preambulu. Istovremeno se
dozvoli pomenutom registru da počne sa pomeranjem upisanog sadržaja. Na slici je prikazano
da se u registar upiše vrednost 47 heksadecimalno, što predstavlja vrednost preambule.
Nakon slanja preambule, naše kolo šalje signal na port send_ack i tada modul koji šalje podatke
postavlja vrednost prvog bajta polja od 16 bitova. Ova vrednost se upisuje u dva registra kako je
ved rečeno ranije. U registar 16 se upisuje na poziciji višeg bajta. Nakon slanja bajta signalom
new_byte_req signalizira se modulu koji šalje podatke da treba da postavi novi bajt informacije
koja se šalje, a modul koji šalje odgovara signalom new_byte_set kada postavi novi bajt. Drugi
bajt iz polja sa 16 bajtova sada se upisuje na mesto donjeg bajta registra sa 16 bitova. Nakon
slanja ovog bajta počinje se sa slanjem podataka. Treba pomenuti da se slanje jednog bajta
podatka kontroliše pomodu brojača_8. Ovaj brojač ima moduo brojanja 8 i sam brojač formira
signal kojim signalizira kolu FSM da je došlo do slanja poslednjeg bita iz serijskog registra i kolo
FSM može da pređe u naredno stanje sekvence slanja informacije.
Došli smo do trenutka kada počinje slanje drugog polja, tj. polja za podatke. Tada počinje sa
radom i drugi brojač, brojač_16. Ovaj brojač koristi se za sinhronizaciju slanja polja sa
podacima. Brojač može da broji do 64K, a stanje brojača poredi se sa stanjem registra_16. Kada
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
21 Maja Srbulovid 10966 / Marko Nikolid 10911
se ova dva stanja poklope, FSM prima signal koji signalizira da je došlo do slanja poslednjeg
bajta drugog polja i slanje podataka se završava. FSM saopšti modulu signalom new_byte_req
da je završio sa slanjem bajta i tada se mogu desiti dve stvari. Prva je da izostane signal
send_req od strane modula koji šalje informaciju i tada se prelazi u tzv. idle stanje i počinje se
sa slanjem nula i jedinica. Druga stvar koja može da se desi da modul postavi signal kojim
zahteva slanje novog paketa informacije i tada kolo ponovo šalje preambulu, resetuje
registar_16 koji de pamtiti prvo polje paketa itd..
Nakon upisa, podaci se šalju u koder. Kontrolni ulaz multipleksera 5 u 1, code_select, određuje
na ulaz kog kodera de se dovoditi podaci koji se šalju i, samim tim, biti kodovani tim kodom.
Kola kodera, kao i multiplekser 5 u 1 su prikazani na Slici 3.2.2.
Slika 3.2.2: Šema kodera
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
22 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 3.2.3: Realizacija NRZ Level koda
Slika 3.2.3 prikazuje logiku kojom je realizovan deo kola koji generiše NRZ level kod. Kako se sa
slike vidi to je kolo D flip flopa koji upisanu informaciju čuva između dve ivice taktnog signala
kada se u flip flop upisuje nova vrednost. Na slededoj slici dat je dijagram simulacije rada kola
kada se na ulaz u pomerački registar dovede signal 10010110. Za NRZ_LEVEL kod stoji da se
jedninica kodira jednim nivoom (kod nas 1 se kodira visokim naponom), a nula se kodira drugim
nivoom (nizak naponski nivo). Kako smo mi uveli u naš protokol da se informacija upisuje na
rastudu ivici taktnog signala, a i D flip flop se taktuje na rastudu ivicu, to dovodi do toga da na
izlazu ovog kodera de biti ista informacija kao i na ulazu. Na Slici 3.2.4 je data grafička
interpretacija ovog NRZ Level koda.
Slika 3.2.4: Grafička interpretacija NRZ Level koda
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
23 Maja Srbulovid 10966 / Marko Nikolid 10911
NRZ Mark kod odlikuje se svojstvom da se stanje na izlazu hardvera koji generiše ovaj kod
promeni svaki put kada se javi jedinica ulaznog signala. Tako ako pogledamo Sliku 3.2.5 tačno se
može zapaziti ova pojava da se stanje signala NRZ Mark menja svaki put kada na ulaz dođe
jedinica. Vidi se da de T flip flop da se taktuje samo onda kada je ulaz postavljen u stanje 1.
Taktovanje T flip flop- a podrazumeva promenu njegovog stanja. Tako ako je prethodno stanje
bilo 0, nakon taktovanja se na izlazu postavlja 1, i obrnuto.
Slika 3.2.5: Realizacija NRZ Mark kodera
Grafička interpretacija NRZ Mark koda je data na Slici 3.2.6.
Slika 3.2.6.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
24 Maja Srbulovid 10966 / Marko Nikolid 10911
RZ kod je veoma prost kod koji signal sa ulaza koji ima trajanje stanja 1 tokom celog taktnog
intervala, pretvara u signal kod kojeg stanje 1 traje polovinu taktnog intervala. Otuda mu i ime
Return to Zero. Na Slici 3.2.7 je prikazano I kolo kojim se generiše RZ kod
Slika 3.2.7: Realizacija RZ koda
A izgled talasnog oblika signala kodovanog ovim kodom je dato na Slici 3.2.8.
Slika 3.2.8: Talasni oblik signala na izlazu iz RZ koda
Do sada opisani kodovi pripadaju grupi kodova kod kojih je potreban spoljni takt za ispravnu
detekciju. Manchester i Bifazni kod pripadaju grupi kodova koji se još nazivaju i samo-taktovani
kodovi. Na Slici 3.2.2 prikazana je blok šeme kola kodera. Na slici se može uočiti da ulazni signal
kola koje generiše Manchester i Bifazni kod, dolazi iz kola koje generiše NRZ Level kod. U suštini,
mogude je ulaz uzeti direktno sa ulaza za podatke, ali znamo da se signal za podatke postavlja
neposredno pre dešavanja rastude ivice taktnog signala. Na taj način ne bi bilo mogude direktno
poređenje signala kodova koji se u ovom projektu realizuju. Zato je za referentni ulazni signal
kola koja generišu Manchester i Bifazni kod uzet signal NRZ Level.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
25 Maja Srbulovid 10966 / Marko Nikolid 10911
Generisanje Manchester koda je veoma prosto. Svojstvo Manchester koda je da jedinica bude
predstavljena rastudom ivicom signala na sredini trajanja taktnog intervala, a nula bude
predstavljena opadajudom ivicom na sredini taktnog intervala. U slučaju da se treba generisati
samo signal Manchester koda, tada se na prvi ulaz XOR kola treba dovesti signal sa serijskog
izlaza pomeračkog registra koji upis i pomeranje informacije obavlja na rastudu ivicu taktnog
signala. Na drugi ulaz XOR kola dovodi se pomenuti taktni signal. U opisanom kolu ved postoji
signal koji može poslužiti za generisanje Manchester koda tako da bi uvođenje još jednog
registra predstavljalo nepotrebno unošenje redundanse.
Slika 3.2.9: Realizacija Manchester koda
Izlaz iz Manchester kodera za ulaznu sekvencu datu na početku, je prikazan na Slici 3.2.10.
Slika 3.2.10: Signal na izlazu Manchester kodera
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
26 Maja Srbulovid 10966 / Marko Nikolid 10911
Bifazni kod je kod čije je generisanje najsloženije. Osobina ovog koda je da na početku svakog
taktnog intervala postoji prelaz (prelazi se iz jednog u drugo stanje). Za nulu je karakteristično
da nema dodatnih prelaza u toku trajanja taktnog intervala, dok za jedinicu postoji prelaz na
sredini taktnog intervala. Hardver koji realizuje ovu funkciju dat je na Slici 3.2.11. Na slici
vidimo dva T flip flop-a i dodatnu logiku. Flip flop se taktuje rastudom ivicom taktnog signala. Na
slici vidimo da de gornji flip flop uvek da bude taktovan kada se desi rastuda ivica taktnog
signala što zapravo predstavlja prvu osobinu Bifaznog koda. Drugi flip flop taktuje se samo ako
je podatak koji treba preneti 1. Taktovanje se dešava na opadajudu ivicu taktnog signala za šta
je zaslužan invertor preko kojeg se dovodi taktni signal na I kolo, a I kolo ima ulogu da taktni
signal propusti samo ako je na ulazu za podatke stanje 1. Da bi se na izlazu desila promena
stanja na sredini tatktnog intervala potrebno je postaviti XOR kolo čija je uloga slededa:
Ukoliko se prenosi niz nula, stanje donjeg T flip flop-a je fiksno i pretpostavimo da je jednako 1.
Tada de pri pojavi svake rastude ivice taktnog signala, gornji T flip flop da promeni stanje. Može
se zaključiti da de pomenute promene da se jave i na izlazu (bitno je da se javi promena), dok se
stanje donjeg flip flopa koristi samo da se javi promena na sredini taktnog intervala kada se
prenosi jedinica. Ukoliko se sada na liniju za podatke dovede 1, tada de se osim promene na
početku trajanja taktnog intervala (rastuda ivica) javiti promena i na sredini taktnog intervala
(opadajuda ivica koja taktuje donji T flip flop). Ovakve promene nam omogudava XOR kolo koje
de promeniti stanje svaki put kada se jedan ulaz drži u jednom stanju (0 ili 1), a drugi ulaz
promeni svoju vrednost (sa 1 se pređe u 0 ili obratno). Na port sa oznakom ulaz dovodi se signal
NRZ level koda kao što je to slučaj i za Manchester kod.
Za razumevanje principa rada opisanog kola potrebno je sagledati i talasni oblik signala koda i
sagledati stanje kola u diskretnim vremenskim trenucima kako bi se u potpunosti razumeo
princip rada kola.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
27 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 3.2.11: Realizacija Bifaznog koda
Talasni oblik signala na izlazu iz Bifaznog kodera je predstavljen na Slici 3.2.12.
Slika 3.2.12: Talasni oblik signala na izlazu iz Bifaznoga kodera
Kako bi celokupan proces bio potpuno automatizovan, za ulazne podatke su uzete vrednosti
brojača modula 255. Na taj način je, pored hand shake procedure koju pravi kolo automata sa
svojim kontrolnim signalima new_byte_req, new_byte_set, send_request i send_ack,
postignuto da se i ulazni signali automatski generišu, osim ako se eksplicitno ne zahteva
manuelno unošenje. Način generisanja ulaznih podataka, kao i opcija za ručni unos de biti
kasnije objašnjene.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
28 Maja Srbulovid 10966 / Marko Nikolid 10911
Ulazni signali ovog sistema za prenos i kodiranje su clock, reset, signal za unos preambula(ovde
je uzeto 47 heksadecimalno ali se može menjati), data_in(gde se unose podaci kao i vrednost
polja od 16 bitova koje određuje veličinu podataka). Zatim za rad automata neophodni su ulazni
kontrolni signali new_byte_req, new_byte_set, send_request i send_ack. Dok je za rad kodera
potreban ulazani signal code_select kojim se definiše koji tip kodovanja se želi primeniti nad
podacima. Kao što se može primetiti, kolo sačinjavaju multiplekseri, registri, flip flopovi, brojači,
kao i kolo FSM-a. Uloga svakog od njih de biti sada objašnjena.
Multiplekser 4 u 1 određuje šta se dovodi u kolo kodera. Da li de to biti naizmenični niz nula i
jedinica kada je automat u idle stanju, ili preambula ili podatak, zavisi od kontrolnog ulaza koji
kontroliše automat. Izgled multipleksera je dat na Slici 3.2.13.
Slika 3.2.13: Multiplekser 4 u 1
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
29 Maja Srbulovid 10966 / Marko Nikolid 10911
Na ulazni signal ulaz_1 se dovodi niz nula i jedinica koji se generišu u T flip flopu. On je aktivan
kada se ceo sistem nalazi u idle stanju, odnosno kada se ne prenose podaci. Na ulaz_2 se dovodi
izlaz pomeračkog registra. U njemu se vrši upis i pomeranje preambule. Kada predajni modul
pošalje zahtev automatu za slanje podataka, tada se aktivira ovaj ulaz i počinje sa prenosom
vrednosti preambule, odnosno 47 heksadecimalno. Na ulaz_3 se dovodi izlaz pomeračkog
registra u kome se smeštaju i shift-uju podataci koji se generišu na ulazu. Ulaz za prenos
podataka iz ovog registra se aktivira odmah nakon završetka slanja preambule. Sistem je
zamišljen tako da se kontrolni signali dovode na rastudu ivicu taktnog signala, dok se promena
stanja automata dešava na opadajudu ivicu taktnog signala. Kako bi izlazni signal iz FSM-a
mogao da kontroliše rad multipleksera i dozvoljavao upis na rastudu ivicu, stavljen je registar_2
koji ima ulogu da sinhronizuje izlazni signal iz automata i clock singal, kako bi se kontrolni ulaz
multipleksera javljao na rastudu ivicu taktnog signala. Ulaz_4 multipleksera je neaktivan.
Sistem koji čine registar_16, komparator i brojač_16 omogudavaju da automat zna kada je
došao kraj podacima koje treba poslati i da, u zavisnosti od toga da li stigne send_req signal,
ponovo krene sa slanjem preambule, ili da se vrati u idle stanje i prenosi niz nula i jednica. U
registar_16 se upisuju bitovi koji određuju dužinu podataka koje treba preneti(16 bitova nakon
preambule). Sadži 2 enable ulaza. Kada je aktivan prvi upisuju se bitovi nižeg reda, a kada je
aktivan drugi bitovi višeg reda. Brojač_16 broji bajtove(taktuje se izlaznim signalom brojača 8,
byte_sent_signal, koji broji bajtove). Kako se podaci upisuju paralelno po 8 bitova, brojač_8 je
uveden da signalizira kada dodje do prenosa poslednjeg bita iz jedne sekvence. Tada automat
zatraži od modula za prenos da upiše naredno niz od 8 bitova. Izlaz ovog brojača smo iskoristili
da taktujemo brojač koji de brojati bajtove. Sadržaj brojača_16 i registra_16 se upoređuju u
komparatoru. Kada se poklope, odnosno kada brojač dođe do one vrednosti koja označava
dužinu podataka, aktivira se signal na izlazu komparatora koji signalizira automatu da nema više
podataka i da pređe u neko od narednih stanja.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
30 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 3.2.14: Brojač_16, komparator i regisrar_16
Kolo automata sa konačnim brojem stanja je najznačajniji deo sistema koji obezbeđuje
handshake proceduru. Na osnovu 4 ulazna kontrolna signala (new_byte_set, send_request,
komp_signal i byte_sent_signal) automat generiše izlazne signale koji predstavljaju kontrolne
signale za ostale delove kola: signal za dozvolu upisa u registar, pomeranje sadržaja registra,
signal za početak brojanja brojača, resetovanje brojača, kontrolni signal za multiplekser itd.
Slika 3.2.15: Automat sa konačnim brojem stanja
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
31 Maja Srbulovid 10966 / Marko Nikolid 10911
Spisak izlaznih signala automata
1. brojac_8_reset - signal kojim se resetuje samozaustavljujudi brojač osnove 8 2. brojac_8_en - signal za dozvolu brojanja brojača 8 3. data_write_en - dozvola upisa podataka u pomerački registar za podatke 4. data_shift_en - dozvola za pomeranje podataka u shift registru 5. data_shift_reset - reset shift registra za podatke 6. preamb_write_en - dozvola upisa u registar za preambulu 7. preamb_shift_en - dozvola za pomeranje bitova preambule 8. preamb_reset - reset registra za preambulu 9. brojac_16_count_en - dozvola brojanja brojača 16 10. brojac_16_reset - reset brojača 16 11. registar_16_reset - reset registra 16 12. registar_16_enable_H - dozvola upisa višeg bajta polja 2 13. registar_16_enable_L - dozvola upisa nižeg bajta polja 2 14. send_ack - potvrda o završetku predaje podataka 15. new_byte_req - zahtev za postavljanje novog bajta 16. MUX_control_signal - signal kojim se postavlja multiplekser
Spisak ulaznih signala automata
1. reset - signal za resetovanja FSM kola 2. clock - taktni signal FSM kola 3. byte_sent_signal - signal iz kola brojača 8 koji nam govori da je poslat jedan bajt 4. komp_signal - signal iz kola komparatora koji nam govori da je završeno sa slanjem
paketa 5. send_request - zahtev za slanje koji dolazi od modula koji šalje podatke 6. new_byte_set - potvrda o postavljanju novog bajta
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
32 Maja Srbulovid 10966 / Marko Nikolid 10911
Automat ima 13 stanja koja definišu svaki trenutak prireme i slanje podataka:
S1 - idle stanje. U okviru ovog stanja šalje se niz jedinica i nula S2 - pripremno stanje za slanje preambule. Ovo stanje koristi se za prebacivanje
multipleksera iz stanja u kojem se šalje niz nula i jedinica u stanje slanja preambule. S3 - stanje u okviru kojeg se šalje preambula. Traje 7 taktnih intervala. S4 - stanje byte_req/byte_set_1. Traje 1 taktni interval S5 - stanje kada se upisuje viši bajt polja dužine paketa u registar 16. Traje jedan taktni
interval. S6 - stanje u okviru kojeg se šalje viši bajt polja dužine paketa. Traje 6 taktnih intervala. S7 - stanje byte_req/byte_set_2. Traje 1 taktni interval S8 - stanje za upis drugog bajta polja dužine u registar 16. Traje jedan taktni interval. S9 - stanje u okviru kojeg se šalje drugi bajt polja dužine paketa. Traje 6 taktnih
intervala. S10 - stanje byte_req/byte_set_3. Traje 1 taktni interval S11 - stanje regularnog upisa u shift registar. Traje jedan taktni interval. S12 - stanje u okviru kojeg se šalje jedan bajt podatka. Traje 6 taktnih intervala. S13 - Očekivanje novog zahteva za slanje.
Početno stanje S1 je, kao što se vidi, stanje u kome nema slanje podataka. Tada sistem
automatski šalje niz nula i jedinica. Kada predajni modul pošalje zahtev automatu da želi da
pošalje podatke (signalom send_request), automat prelazi u stanje S2 gde se priprema za slanje
preambule. Nakon jednog taktnog intervala sistem prelazi u stanje S3 u okviru koga šalje
preambulu (47 heksadecimalno). Ovo stanje traje 7 taktnih intervala. Razlog zbog kojeg ovo
stanje ne traje 8 taktnih intervala (kolika je i dužina preambule) je ta što pre isteka poslednjeg
bita sistem mora od predajnog modula da zatraži postavljanje novog bajta jer tzv sekvenca rada
kola je 8 bitova, odnosno informacije te dužine sa paralelno upisuju. Pa zato pre isteka osmog
bita se traži zahtev od predajnog modula da postavi novi bit koji de se kasnije prenositi. Zato
nakon isteka sedmog taktnog intervala automat prelazi u stanje S4 gde automat signalizira
modulu koji šalje podatke da treba da postavi novi bajt informacije koja se šalje. Kada dobije
povratnu informaciju da je bit postavljen, automat prelazi u naredno stanje, S5. Kao što je
navedeno, u ovom stanju se naredni bajt upisuje u gornji deo registra_16, koji određuje dužinu
polja podataka. Nakon jednog taktnog intervala, koliko traje ovo stanje, prelazi se u stanje S6
gde se vrši slanje ovog bajta, koje traje 6 taktnih intervala. Pre isteka slanja ovog bajta podataka
ponovo se šalje zahtev predajnom modulu da postavi novi bajt podataka, koji de se sada upisati
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
33 Maja Srbulovid 10966 / Marko Nikolid 10911
u niži nivi registra_16 (S7). Kada dobije potvrdu da je novi bajt postavljen, (S8) vrši se upis novog
bajta u niži nivo registra_16. Za ovo vreme (2 dodatna takta) se i završi prenos višeg bajta (6+2
bita) i može se odmah krenuti sa prenosom nižeg upisanog bita, što se dešava u stanju S9.
Stanje S10 je identično stanju S7. Stanje S11 je slično stanju S8 ali s’tim što se sada upis u
registar_16 završio pa sledi upis u pomerački registar koji de prosleđivati korisnu informaciju tj
podatke. Oni se prosleđuju i šalju u stanju S12, koji traje takođe 6 taktnih intervala, dok za
preostala 2 intervala šalje zahtev predajnom modulu za postavljanje i upis novih 8 bitova u
pomerački registar. Kada se prenese ceo podatak sistem prelazi u stanje S13 gde očekuje zahtev
za novo slanje podataka. Ukoliko dobije zahtev od predajnog modula za ponovnim slanjem
podataka, automata prelazi u stanje S3 i krede iznova ceo postupak. Ukoliko ne dođe do zahteva
za slanjem novog podataka od predajnog modula, automat prelazi u idle stanje S1 i počinje da
prenosi naizmenični niz nula i jedinica.
Slika 3.2.16: Graf stanja automata
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
34 Maja Srbulovid 10966 / Marko Nikolid 10911
Na Slici 3.2.17 je prikazana tabela kodiranja signala automata, gde se može videti koji signal
automata je aktivan za svako od 13 stanja automata.
Slika 3.2.17: Tabela kodiranja signala automata
Stanje/signal S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13
brojac_8_reset 1 1 0 1 0 0 1 0 0 1 0 0 1
brojac_8_en 0 0 1 0 1 1 0 1 1 0 1 1 0
data_write_en 0 0 0 0 1 0 0 1 0 0 1 0 0
data_shift_en 0 0 0 0 0 1 0 0 1 1 0 1 0
data_shift_reset 1 1 0 0 0 0 0 0 0 0 0 0 0
preamb_write_en 0 1 0 0 0 0 0 0 0 0 0 0 1
preamb_shift_en 0 0 1 0 0 0 0 0 0 0 0 0 0
preamb_reset 1 0 0 0 1 0 0 0 0 0 0 0 0
brojac_16_count_en 0 0 0 0 0 1 0 0 1 0 1 1 0
brojac_16_reset 1 0 0 1 0 0 0 0 0 0 0 0 0
registar_16_reset 1 0 0 1 0 0 0 0 0 0 0 0 0
registar_16_enable_H 0 0 0 0 1 0 0 0 0 0 0 0 0
registar_16_enable_L 0 0 0 0 0 0 0 1 0 0 0 0 0
send_ack 0 0 0 0 0 0 0 0 0 0 0 0 1
new_byte_req 0 0 0 1 0 0 1 0 0 1 0 0 1
MUX_control_signal 00 00 01 01 10 10 10 10 10 10 10 10 10
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
35 Maja Srbulovid 10966 / Marko Nikolid 10911
4. OPIS ENTITETA KOLA U VHDL KODU
U cilju boljeg razumevanja funkcije i strukture svakog bloka kola pojedniačno, naredni deo de
biti posveden opisivanju entiteta naše šeme za prenos i kodiranje podataka. Obuhvatide
strukturni opis (ulaz, izlaz i osnovna funkcija), njegova funkcija u kolu, kao i VHDL kod kojim je
opisan u projektu.
4.1 D Flip Flop
D Flip Flop je standardno logičko kolo čije je uloga da informaciju na ulazu prikaže na izlaz samo
kada je prisutna aktivna ivica taktnog signala. U našem slučaju je to rastuda ivica. Ima 3 ulazna i
jedan izlazni port. Koristimo ga kada želimo da zakasnimo određeni signal (D je skradenica od
Delay). Jedan D flip flop je prikazan na Slici 4.1.1.
Slika 4.1.1: D flip flop
U našem kolu D flip flop se koristi u realizaciji NRZ Level kodera i u predajnom modulu, gde se
koristi da zakasni kontrolni signal za slanje odnosno pomeranje vrednosti preambule za jedan
taktni interval. Opis entiteta D flip flopa, kao i njegova arhitektura su date kao:
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
36 Maja Srbulovid 10966 / Marko Nikolid 10911
U deklaraciji entiteta vidimo da su svi portovi tipa Standard Logic (uzimaju vrednosti 0 ili 1), koji
se nalaze u biblioteci IEEE. Dok se u arhitekturalnom delu vidi da na rastudu ivicu taktnog
signala vrednost na ulazu se dodeljuje fiktivnoj promenljivoj STANJE, čija se vrednost nakon
ispitivanja uslova rastude ivice dodeljuje izlaznom portu Q. Ukoliko je aktivan reset signal,
promenljivoj STANJE se dodeljuje vrednost 0.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
37 Maja Srbulovid 10966 / Marko Nikolid 10911
4.2 T Flip Flop
T Flip Flop je standardno logičko kolo koje invertuje vrednost na izlazu sa svakom pojavom
rastude ivice taktnog signala na ulazu. U našem kolu T flip flop se koristi za generisanje
naizmeničnog niza nula i jedinica kada se sistem nalazi u idle stanju, kao i kod realizacije NRZ
Mark i Bifatnog kodera. Ima dva ulazna porta (clock i reset) i jedan izlazni.
Slika 4.2.1: T Flip Flop
Opis entiteta T flip flopa u VHDL kodu, kao u njegova arhitektura su date kao:
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
38 Maja Srbulovid 10966 / Marko Nikolid 10911
Kao i kod D flip flopa vidimo da se u opisu arhitekture uvodi fiktivna promenljliva STANJE, koja
ima početnu vrednost 0. Nakon dolaska svake rastude ivice njena vrednost se invertuje.
4.3 Multiplekser
Multiplekser je logičko kolo sa više ulaza, jednim izlazom i jednim kontrolnim ulazom koji
određuje koji ulaz de biti aktivan i samim tim njegova informacija prosleđena na izlaz
multipleksera. Broj ulaza predstavlja kombinatorsku logiku broja bitova kontrolnog ulaza tj
ukoliko je kontrolni port jednobitni, maksimalni broj ulaza je 2. Ako je kontrolni ulaz dvobitni,
maksimalni broj ulaza je četiri itd. U našem slučaju imamo multipleksera 4 u 1, koji se koristi za
realizaciju predajnog modula, i multiplekser 5 u 1 za realizaciju kodera, odnosno izbora jednog
od kodera.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
39 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 4.3.1: Multiplekser a) 4u1 ; b) 5u1
Opisi arhitektura multipleksera 4 u 1, kao i multipleksera 5 u 1 su dati kao:
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
40 Maja Srbulovid 10966 / Marko Nikolid 10911
S’obzirom da Standard Logic tip podataka uzima, pored nule i jedinice, još šest vrednosti, na
kraju smo stavili da bilo koja druga kombinacija na selektivnom ulazu dovodi multiplekser u
stanje visoke impedanse (Z).
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
41 Maja Srbulovid 10966 / Marko Nikolid 10911
4.4 Pomerački Registar
Pomerački (shift) registar, kao što mu i samo ime govori, služi za pomeranje podataka koji su
upišu u njega. U našem slučaju pomerački registar koristimo za prenos, odnosno slanje
preambule i korisne informacije, odnosno podataka ka kolu za kodiranje. Oba registra imaju po
5 ulaznih portova i po 1 izlazni port. Jedan ulazni port je osmobitni (onaj koji viši upis u registar;
jer se vrši paralelni upis od osam bitova), a ostala četiri su jednobitni portovi. To su clock, reset,
write enable signal, koji omoguduje upis podataka u registar, i shift enable signal, koji
omoguduje pomeranje, odnosno slanje podataka. Izgled jednog pomeračkog registra je dat na
Slici 4.4.1.
Slika 4.4.1: Pomerački registar
VHDL kod za pomerački registar je dat kao:
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
42 Maja Srbulovid 10966 / Marko Nikolid 10911
U deklaraciji entiteta imamo definisanje jednobitnih ulaznih portova na isti način kao i kod flip
flopova. Osmobitni ulazni port (kao i kod multipleksera) je tipa Standard Logic Vector sa
bitovima težine od 0 do 7. U deklaraciji arhitekture se uvodi promenljiva STANJE koje je tipa
Standard Logic Vector i koja de predstavljati novo stanje registra nakon pomeranja. Dakle,
ukoliko je aktivan reset signal, registar se resetuje i STANJE je osam nula. Kada dodje do rastude
ivice taktnog signala i kada je aktivan signal za upis u registar, stanje registra je ono što je na
ulazu. Ukoliko dođe do rastude ivice ivica taktnog signala a signal za upis nije aktivan, tada se
aktivira signal za pomeranje i registar počinje pomeranje sadržaja ulevo. Bit označen kao 7 (bit
najvede težine promenljive STANJE) se uvek vodi na izlaz registra, ostali deo se pomera ulevo i
dodaje mu se jedna nula sa desne strane. I tako sve dok se ne pošalje i poslednji bit, odnosno
dok promenljiva STANJE ponovo ne bude sve nule.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
43 Maja Srbulovid 10966 / Marko Nikolid 10911
4.5 Brojač
Brojač, kao što mu ime govori, je logičko kolo koje se koristi za brojanje. U zavisnosti od
potrebe, može brojati taktove, biitove, bajtove, ili za šta nam ved zatreba odnodno kako ga
isprogramiramo. U našem kolu imamo dva tipa brojača. Jedan, brojač_8, koristimo za brojanje
bitova, i on nam govori kada treba dozvoliti upis novom nizu od osam bitova informacija. Drugi
brojač je brojač_16, koji broji bajtove i služi nam da ukaže automatu kada je došlo do kraja
prenosa podataka i zatražiti postavljanje novog bajta za upis i prenos od strane predajnog
modula. Struktura im je ista. Imaju tri ulaza (reset, clock i count enable) i jedan izlaz. Razlika (u
našem slučaju) je samo u načinu taktovanja. Brojač_8 se taktuje standardnim clock signalom
kojim se taktuju svi ostali entiteti u koli, dok se brojač_16 taktuje izlaznim signalom brojača_8.
Dozvolu za brojanje oba brojača, kao i reset signale kontroliše automat. Na taj način smo
postigli da brojač_16 dobije jedan taktni signal kada brojač_8 završi sa brojanjem osam bitova,
odnosno jednog bajta. Oba brojača u sprezi su prikazana na Slici 4.5.1.
Slika 4.5.1: Brojač_8 i Brojač_16 u sprezi
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
44 Maja Srbulovid 10966 / Marko Nikolid 10911
VHDL kodovi ovih brojača su data kao:
Primedujemo da se za opis brojača koristi datoteka IEEE Numeric, koja se koristi za aritmetičke
operacije (kod brojača, množača, sabirača...). U deklaraciji arhitekture uvodimo fiktivni signal
STANJE od tri bita, koje de se aktivirati izlazni signal samo ukoliko stanje signala STANJE bude
111. Nakon ispitivanja uslova za resetovanje brojača ispitujemo da li je došlo do rastude ivice
taktnog signala i da li je aktivan signal za dozvolu brojanja. Ukoliko jeste, ispitujemo da li se
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
45 Maja Srbulovid 10966 / Marko Nikolid 10911
brojač nalazi u poslednjem stanju (111). Ukoliko jeste, on ostaje u tom stanju
(samozaustavljajudi brojač) i aktivira se izlazni signal. Ukoliko nije, onda se sa svakim taktom
stanje brojača povedava za jedan. Kada dođe do poslednjeg stanja, ponovo se aktivira izlazni
signal.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
46 Maja Srbulovid 10966 / Marko Nikolid 10911
Razlika između ova dva brojača je ta što je izlaz brojača_16 16-o bitni signal koji se uporađuje sa
izlazom registra_16 (kao što je ved objašnjeno). Zato na kraju moramo da stanje prebacimo u
format Standard Logic Vector i da ga dodelimo izlazu (jer je definisan kao unsigned da bi svako
sledede stanje moglo da se realizuje kao prethodno uvedano za jedan).
4.6 Registar_16
Registar_16 koristimo za čuvanje informacija o dužini paketa koji šaljemo. Zahvaljujudi njemu
automat zna kada je došlo do prenosa poslednjeg bita podataka i da treba da zatraži novu
informaciju od predajnog modula. Način upisa gornjeg i donjeg bajta u ovaj registar je ved
objašnjeno. Sadrži jedan osmobitni ulaz (na koji se dovode informacije), četiri jednobitna ulaza
(clock, reset, write enable 1 koji omogudava upis gornjeg bajta tj bajta vede težine, write enable
2 koji omogudava upis donjeg bajta tj bajta niže težine). Izlaz registra_16 je šesnaesto bitni (kao
i izlaz brojača_16).
Slika 4.6.1: Registar_16
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
47 Maja Srbulovid 10966 / Marko Nikolid 10911
VHDL kod ovog registra je dat kao:
Vidimo da nakon resetovanja ispitujemo uslov rastude ivice taktnog signala. Ukoliko jeste i
ukoliko je aktivan enable_1 kontrolni ulaz, tada prvih osam bitova fiktivne promenljive STANJE
ostaje nepromenjeno, a podaci sa ulaza postaju drugih osam bitova ove promenljive. Odnosno,
upisao se donji bajt u ovaj registar. Ukoliko je aktivan ulaz enable_2, onda se upisuje gornji bajt
u naš registar. I na kraju izlaz uzima vrednost naše fiktivne promenljive STANJE nakon njenog
update-ovanje, odnosno nakon upisa oba bajta u registar.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
48 Maja Srbulovid 10966 / Marko Nikolid 10911
4.7 Komparator
Komparator služi za upoređivanje dva vrednosti na izlazu iz brojača_16 i registra_16. Odnosdno,
kada nakon slanje preambule brojač_16 krene da broji bitove i kada se vrednost na izlazu
poklopi da vrednošdu na izlazu iz registra_16, znamo da je došlo do poslednjeg bita podatka čiju
dužinu određuje registar_16 i tada automat prelazi u novo stanje. Komparator ima, dakle, dva
šesnaestobitna ulazna porta i jedan jednobitni izlazni port. On se aktivira kada se vrednost
ulaznih portova poklopi tj izjedači. Izgled komparatora je dat na Slici 4.7.1.
Slika 4.7.1: Komparator
VHDL kod ovog komparatora je jednostavan i dat kao:
Dakle izlaz je aktivan samo ukoliko su ulaz_1 i ulaz_2 komparatora jednaki.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
49 Maja Srbulovid 10966 / Marko Nikolid 10911
4.8 Automat
Automat sa konačnim brojem stanja je, kao što je ved rečeno, ključni element hand shake
procedure. Kontroliše komunikaciju između svih blokova našeg kola i generiše kontrolne signale
za njihov rad. Ima ukupno šest ulaza i petnaest izlaza. Spisak svih ulaza/izlaza, kao i stanja
automata ved je objašnjeno ranije. VHDL kod automata je dat kao:
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
50 Maja Srbulovid 10966 / Marko Nikolid 10911
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
51 Maja Srbulovid 10966 / Marko Nikolid 10911
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
52 Maja Srbulovid 10966 / Marko Nikolid 10911
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
53 Maja Srbulovid 10966 / Marko Nikolid 10911
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
54 Maja Srbulovid 10966 / Marko Nikolid 10911
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
55 Maja Srbulovid 10966 / Marko Nikolid 10911
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
56 Maja Srbulovid 10966 / Marko Nikolid 10911
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
57 Maja Srbulovid 10966 / Marko Nikolid 10911
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
58 Maja Srbulovid 10966 / Marko Nikolid 10911
5. TESTIRANJE RADA KOLA
U cilju verifikacije dizajna, napravljen je Testbench na Waves Based principu i izvršena je
simulacija rada kola. Ispravnost rada kodera i predajnog modula bide objašnjena na talasnim
oblicima bitnijih kontrolnih i izlaznih signala.
Ulaz je zamišljen kao izlaz iz brojača modula 255, a u određenim vremenskim intervalima (32us,
159us i 167us) se na ulaz dovode bitovi koji određuju dužinu paketa. Oni se dovode pomodu
porta koji je nezavistan u odnosu na brojač, i samo u tim vremenskim intervalima predajni
modul zanemaruje izlaz iz brojača i upisuje podatke sa tog porta koji se naziva second_field.
Vrednost second_field polja se ne mogu menjati jer je protokolom zamišljeno da dužina paketa
bude 2 bajta.
Mogude je menjati samo vrednosti ulaznog signala (proizvoljna sekvenca dužine 16 bajtova),
kao i izbor koda u Testbench fajlu.
Na Slici 5.1 je prikazan izgled Testbench fajla za slučaj kada ulazni signal uzima vrednosti koje se
generišu na izlazu brojača modula 255.
Slika 5.1
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
59 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 5.2 pokazuje izgled Testbench fajla za slučaj kada želimo sami da unesemo sekvencu za
kodiranje. Treba napomenuti da sekvenca mora biti dužine dva bajta i to u trenucima kao što je
naznačeno na slici. Dve crte na početku svakog reda u VHDL kodu označavaju da je u pitanju
komentar i da nemaju uticaja u izvršenju Testbench fajla.
Slika 5.2
Ukoliko želimo da promenimo kod, to možemo učiniti promenom code_select signala kao što je
prikazano na slici 5.3.
Slika 5.3
Verifikacija rada kola je data na Slici 5.4 i Slici 5.5
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
60 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 5.4
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
61 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 5.5
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
62 Maja Srbulovid 10966 / Marko Nikolid 10911
Kao što je protokolom opisano, sistem se nalazi u idle stanju sve dok ne dobije zahtev od
predajnog modula za slanje podataka (signalom send_reuest). Do tog trenutka se šalje niz nula i
jedinica (15us). Nakon toga automat prelazi u stanje S2 (pripremno stanje za slanje preambule).
U slededem taktnom intervalu prelazi u stanje S3 u kojem se šalje preambula, kao što je
prikazano na Slici 5.4 (17us). U stanju S4 se, nakon zahteva, postavlja novi bajt, koji se nakon
toga upisuje u viši deo registra_16 (stanje S5), a u 32us se postavlja novi bajt za upis u niži deo
registra_16. To se dešava u stanju S8. U 40us se krede sa slanjem podataka (stanje S10) i traje
sve dok se ne pošalju dva bajta podataka. Tada se pošalje signal send_ack kojim se potvrđuje da
je poslat poslednji bit podataka i očekuje zahtev za novo slanje (stanje S13), kao što je prikazano
na Slici 5.5.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
63 Maja Srbulovid 10966 / Marko Nikolid 10911
6.LABORATORIJSKA VEŽBA
ZADATAK 1.
Proveriti ispravnost rada kola koristedi proizvoljan kod kojim de se podaci slati. Posmatrati
dijagram stanja.
Korak 1: Pokrenuti program Active-HDL 6.3 dvostrukim klikom na ikonicu
smeštenu na desktop-u računara.
Korak 2: U prozoru Getting Started izabrati levim klikom miša opciju Open existing workspace,
zatim levim klikom miša selektovati projekat transmit_unit i na kraju levim klikom na opciju Ok
pozivamo program koji opisuje naše kolo.
Slika 6.1: Ilustracija uz Korak 2
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
64 Maja Srbulovid 10966 / Marko Nikolid 10911
Posle Koraka 2 otvara se prozor kao na narednoj Slici 6.2.
Slika 6.2: Workspace (radni prostor) ’transmint_unit’
Korak 3: Za prikaz blok šeme kola i kodera u projektnim fajlovima dvostrukim klikom otvorimo
transmit_unit_sema.bde i koder.bde kao što je pokazano na Slici 6.3.
Slika 6.3: Ilustracija uz Korak 3
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
65 Maja Srbulovid 10966 / Marko Nikolid 10911
Korak 4: Pokretanje TestBench vrši se tako što se pointerom označi testbench runtest fajl i
desnim klikom pokrene meni iz kog se odabere opcija Execute. Na Slici 6.4 je prikazano
pokretanje izvršenja fajla za testiranje transmit_unit kola.
Slika 6.4: Ilustracija uz Korak 4
Nakon pokrenutog TestBench-a otvara se prozor kao na Slici 6.5.
Slika 6.5: Waveform Editor
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
66 Maja Srbulovid 10966 / Marko Nikolid 10911
Korak 5: Pokretanje simulacije vrši se levim klikom na ikonicu obojenu crvenom bojom.
Slika 6.6: Ilustracija uz Korak 5
Korak 6: Pored izlistanih signala izvlačimo i signal za stanje automata i signal za izlazno stanje
brojača_8 kao što je prikazano na slici. Prevlačenje se vrši tako što levim klikom izaberemo kolo
čiji signal želimo da prikažemo. U opadajudem meniju izaberemo signal i dok držimo levi taster
signal samo prevučemo u editor.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
67 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 6.7: Ilustracije uz Korak 6
Na narednoj slici (Slika 6.8) crvenom bojom je označeno da je vrednost code_select 2, što nam
kazuje da je izabrani kod RZ. Crvenom bojom je označen i izgled data_out.
Slika 6.8: Izgled kodirane sekvence kodom RZ
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
68 Maja Srbulovid 10966 / Marko Nikolid 10911
Korak 7: Promena koda kojim de se ulazna sekvenca poslati. Promena koda se vrši tako što se
dvostrukim klikom otvori TestBench fajl i promeni vrednost signala kojim se selektuje kod kojim
se podaci šalju. Posle promene vrednosti, pristupa se kompajliranju levim klikom na ikonicu
obojenu crvenom bojom. Postupak je prikazan na Slici 6.9.
Slika 6.9: Ilustracija uz Korak 7
Korak 8: Ponovnim pokretanjem simulacije u Waveform Editoru možemo zapaziti da je sada
vrednost code_select polja 3 (na slici obojeno crvenom bojom), a da je oblik data_out
promenjen. Izabrani kod je sad Manchester. Promene su prikazane na Slici 6.10.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
69 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 6.10: Ilustracija uz Korak 8
Napomena: Treba izabrati da vreme simulacije bude 200us (kao što može da se vidi na slikama),
kao i da je izbor koda proizvoljan (kodovi su opisani u poglavlju 3).
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
70 Maja Srbulovid 10966 / Marko Nikolid 10911
ZADATAK 2.
Proveriti ispravnost rada kola koristedi proizvoljni ulazni signal (proizvoljna sekvenca dužine dva
bajta). Posmatrati dijagram stanja.
Korak 1: Pokrenuti program Active-HDL 6.3 dvostrukim klikom na ikonicu
smeštenu na desktop računara.
Korak 2: U prozoru Getting Started izabrati levim klikom miša opciju Open existing workspace,
zatim levim klikom miša selektovati projekat transmit_unit i na kraju levim klikom na opciju Ok
pozivamo program koji opisuje naše kolo.
Slika 6.11: Ilustracija uz Korak 2
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
71 Maja Srbulovid 10966 / Marko Nikolid 10911
Posle koraka 2 otvara se prozor kao na narednoj slici:
Slika 6.12: Workspace (radni prostor) ’transmint_unit’
Korak 3: Za prikaz blok šeme kola i kodera u projektnim fajlovima dvostrukim klikom otvorimo
transmit_unit_sema.bde i koder.bde kao što je pokazano na Slici 6.13:
Slika 6.13: Ilustracija uz Korak 3
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
72 Maja Srbulovid 10966 / Marko Nikolid 10911
Korak 4: Pokretanje TestBench vrši se tako što se pointerom označi testbench runtest fajl i
desnim klikom pokrene meni iz kog se odabere opcija Execute. Na slici 6.14 je prikazano
pokretanje izvršenja fajla za testiranje transmit_unit kola.
Slika 6.14: Ilustracija uz Korak 4
Nakon pokrenutog TestBench-a otvara se prozor kao na narednoj slici:
Slika 6.15: Waveform Editor
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
73 Maja Srbulovid 10966 / Marko Nikolid 10911
Korak 5: Pokretanje simulacije vrši se levim klikom na ikonicu obojenu crvenom bojom.
Slika 6.16: Ilustracija uz Korak 5
Korak 6: Pored izlistanih signala izvlačimo i signal za stanje automata i signal za izlazno stanje
brojača_8 kao što je prikazano na slici. Prevlačenje se vrši tako što levim klikom izaberemo kolo
čiji signal želimo da prikažemo. U opadajudem meniju izaberemo signal i dok držimo levi taster
signal samo prevučemo u editor.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
74 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 6.17: Ilustracije uz Korak 6
Ulaz je zamišljen kao izlaz iz brojača modula 255, a u određenim vremenskim intervalima (32us,
159us i 167us) se na ulaz dovode bitovi koji određuju dužinu paketa. Oni se dovode pomodu
porta koji je nezavistan u odnosu na brojač, i samo u tim vremenskim intervalima predajni
modul zanemaruje izlaz iz brojača i upisuje podatke sa tog porta koji se naziva second_field.
Vrednost second_field polja se ne mogu menjati jer je protokolom zamišljeno da dužina paketa
bude 2 bajta.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
75 Maja Srbulovid 10966 / Marko Nikolid 10911
Na narednoj slici prikazan (uokviren crvenom bojom) je izgled signala data_in
Slika 6.18: : Izgled data_in signala
Korak 7: Promena ulaza u kolo. Promena ulazne sekvence vrši tako što se dvostrukim klikom
otvori TestBench fajl i prati postupak prikazan na slikama 1. I 2. Posle promene vrednosti,
pristupa se kompajliranju levim klikom na ikonicu obojenu crvenom bojom. Postupci su
prikazani na ilustracijama sa Slike 6.19.
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
76 Maja Srbulovid 10966 / Marko Nikolid 10911
Slika 6.19: Ilustracije uz Korak 7
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
77 Maja Srbulovid 10966 / Marko Nikolid 10911
Korak 8: Ponovnim pokretanjem simulacije Waveform Editoru možemo zapaziti da je sada
izgled signala data_in izmenjen (na slici uokvireno crvenom bojom). Promene su prikazane na
Slici 6.20.
Slika 6.20: Ilustracija uz Korak 8
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
78 Maja Srbulovid 10966 / Marko Nikolid 10911
8.LITERATURA
1) J.Mirkowski, M.Kapustka, Z.Skovronski, A.Biniszkiewicz − “Interactive VHDL Tutorial REV.
2.1”
2) Dennis Derickson, Marcus Műller - “Digital Communications Test and Measurement”
3) www.embedded.com - “Back to the future: Manchester encoding - Part 1” by Robert
Guastella
4) Dr Dejan B. Živkovid, Dr Miodrag V. Popovid - “Impulsna i digitalna elektronika”,
Elektrotehnički fakultet, Nauka, 1997
5) Robert Guastella – “VHDL Programming by Example ”
6) M.Stojčev, B.Petrovid - “Arhitekture i programiranje mikroračunarskih sistema
zasnovanih na familiji procesora 80x86”, Elektronski fakultet u Nišu, Niš, 1999
7) Internet
PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar 2009.
79 Maja Srbulovid 10966 / Marko Nikolid 10911
9.BIOGRAFIJE AUTORA
Ime i Prezime: Maja Srbulovid
Datum i mesto rođenja: 15. Maj 1983. – Negotin
Adresa stanovanja: Pariske Komune 9/21, Niš
Obrazovanje: Negotinska gimnazija
Godina upisa fakulteta: 2002.
Smer: Telekomunikacije
Poznavanje jezika: Engleski, Nemački
Interesovanja: Putovanja, Računari
Ime i Prezime: Marko Nikolid
Datum i mesto rođenja: 30. Avgust 1983. - Niš
Adresa stanovanja: Starca Vujadina 30, Niš
Obrazovanje: Gimnazija „Svetozar Markovid“
Godina upisa fakulteta: 2002.
Smer: Telekomunikacije
Poznavanje jezika: Engleski, Francuski
Interesovanja: Putovanja, Sport, Menadžment veštine