25.07.2013 Views

prenos i kodiranje podataka na primeru vhdl koda - Univerzitet u Nišu

prenos i kodiranje podataka na primeru vhdl koda - Univerzitet u Nišu

prenos i kodiranje podataka na primeru vhdl koda - Univerzitet u Nišu

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

UNIVERZITET U NIŠU<br />

ELEKTRONSKI FAKULTET<br />

KATEDRA ZA ELEKTRONIKU<br />

Predmet: MIKROPROCESORSKI SISTEMI<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU<br />

VHDL KODA<br />

Profesor: Studenti:<br />

Maja Srbulovid 10966<br />

Prof. Dr Mile Stojčev Marko Nikolid 10911<br />

Niš, Novembar 2009.


SADRŽAJ<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

1. Prenos Podataka .......................................................................................................... 3<br />

1.1 Način Komunikacije ........................................................................................ 4<br />

1.2 Serijski i Paralelni Prenos ................................................................................ 5<br />

1.3 Asinhrini i Sinhroni Režim Rada ...................................................................... 9<br />

2. Kodiranje Podataka ..................................................................................................... 12<br />

3. Opis Projektovanog Kola za Prenos i Kodiranje Podataka .......................................... 16<br />

3.1 Opis Protokola Podataka ............................................................................... 16<br />

3.2 Opis šeme i Rada Kola ................................................................................... 18<br />

4. Opis Entiteta Kola u VHDL Kodu ................................................................................. 35<br />

4.1 D Flip Flop ...................................................................................................... 35<br />

4.2 T Flip Flop ...................................................................................................... 37<br />

4.3 Multiplekser .................................................................................................. 38<br />

4.4 Pomerački Registar ....................................................................................... 41<br />

4.5 Brojač ............................................................................................................ 43<br />

4.6 Registar_16 ................................................................................................... 46<br />

4.7 Komparator ................................................................................................... 48<br />

4.8 Automat ........................................................................................................ 49<br />

5. Testiranje Rada Kola .................................................................................................. 58<br />

6. Laboratorijska Vežba ................................................................................................. 63<br />

Zadatak 1 ............................................................................................................ 63<br />

Zadatak 2 ............................................................................................................ 70<br />

7. Literatura ................................................................................................................... 78<br />

8. Biografije Autora ........................................................................................................ 79<br />

2 Maja Srbulovid 10966 / Marko Nikolid 10911


1. PRENOS PODATAKA<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Fundamentalni aspekt svakog sistema za <strong>prenos</strong> <strong>podataka</strong> odnosi se <strong>na</strong> tehniku koja se koristi<br />

za slanje <strong>podataka</strong> između dve tačke (predajnika/prijemnika). Prenos <strong>podataka</strong> između<br />

predajnika i prijemnika ostvaruje se preko <strong>prenos</strong>nog medijuma. Prenosne medijume možemo<br />

svrstati u dve osnovne grupe:<br />

a) trasirane (guided) i<br />

b) netrasirane (unguided).<br />

U oba slučaja komunikacija se ostvaruje zahvaljujudi prostiranju elektromagnetnih talasa kroz<br />

medijum. Kod trasiranog <strong>prenos</strong>a prostiranje talasa (adekvatniji termin u ovom slučaju je<br />

električni sig<strong>na</strong>l) se usmerava duž fizičkih puteva kakvi su upredeni kablovi, koaksijalni kablovi,<br />

optička vlak<strong>na</strong> itd. Kod netrasiranog <strong>prenos</strong>a prostiranje elektromagnetnih talasa se vrši kroz<br />

prostor (vazduh, vakuum, tečnost). Prenosni put između dve tačke <strong>na</strong>ziva se veza (link), a deo<br />

veze koji je <strong>na</strong>menjen <strong>prenos</strong>u <strong>podataka</strong> jednostavno <strong>na</strong>zivamo ka<strong>na</strong>l. Termin direkt<strong>na</strong> veza<br />

(direct link) odnosi se <strong>na</strong> <strong>prenos</strong>ni put između dva uređaja duž koga se prostiranje sig<strong>na</strong>la<br />

između predajnika i prijemnika ostvaruje bez posrednika. U ovom slučaju kao posrednici <strong>na</strong><br />

<strong>prenos</strong>nom putu ne smatraju se uređaji tipa pojačavač ili repetitor, čija je osnov<strong>na</strong> uloga da<br />

povedaju s<strong>na</strong>gu (amplitudu) sig<strong>na</strong>la duž <strong>prenos</strong>nog puta, tj. da kompenziraju slabljenje sig<strong>na</strong>la<br />

kroz <strong>prenos</strong>ni medijum.<br />

Na Slici 1.1 prikazane su dve konfiguracije koje se <strong>na</strong>jčešde koriste kod trasiranog <strong>prenos</strong>a. Kod<br />

usmerenog <strong>prenos</strong>a tipa tačka-ka-tački (point-to-point) prikazan <strong>na</strong> Slici 1.1a) ostvare<strong>na</strong> je<br />

direkt<strong>na</strong> veza između predajnika i prijemnika, a kod višetačkaste (multipoint) konfiguracije,<br />

medijum za <strong>prenos</strong> je deljiv između vedeg broja uređaja (Slika 1.1b)).<br />

3 Maja Srbulovid 10966 / Marko Nikolid 10911


1.1 Načini Komunikacije<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Sl.1.1: Tipovi kod usmerenog <strong>prenos</strong>a<br />

Razlikujemo tri <strong>na</strong>či<strong>na</strong> <strong>prenos</strong>a <strong>podataka</strong> (Slika 1.1.1):<br />

a) simpleks (simplex) – sig<strong>na</strong>li se <strong>prenos</strong>e (predaju) samo u jednom smeru; jed<strong>na</strong><br />

stanica/termi<strong>na</strong>l je predajnik, a druga prijemnik;<br />

b) polu-dupleks (half-duplex) – obe stanice mogu vršiti predaju/prijem po istom ka<strong>na</strong>lu, ali<br />

ne istovremeno (kada je jed<strong>na</strong> predajnik, druga je prijemnik, i obratno);<br />

c) potpuni dupleks (full-duplex) – obe stanice mogu istovremeno da obavljaju predaju<br />

koristedi posebne ka<strong>na</strong>le (po jedan za svaki smer <strong>prenos</strong>a).<br />

4 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 1.1.1: Načini <strong>prenos</strong>a sig<strong>na</strong>la: a) simpleks; b) polu-dupleks; c) potpuni-dupleks<br />

1.2 Serijski i paralelni <strong>prenos</strong><br />

Napome<strong>na</strong>: Tx - predajnik (transmitter); Rx - prijemnik (receiver)<br />

Podaci se kroz medijum (žicu, vod, magistralu itd.) <strong>prenos</strong>e ili serijski ili paralelno. Odlika<br />

serijskog <strong>prenos</strong>a je jednostavnost realizacije – bitovi se <strong>prenos</strong>e preko jedinstvene linije, jedan<br />

po jedan. Kod paralelnog <strong>prenos</strong>a n bitova (n = 8, 16, 32, 64) podatka <strong>prenos</strong>i se istovremeno<br />

(ovakav <strong>prenos</strong> se tipično ostvaruje kod sistemske magistrale mikroprocesora, IEEE-488 GPIB<br />

magistrale itd.) Na Slikama 1.2.1 i 1.2.2 prikazani su serijski i paralelni <strong>prenos</strong>, respektivno.<br />

Paralelni <strong>prenos</strong> <strong>podataka</strong> je brži od serijskog, ali je skuplji (zahteva vedi broj veza). Serijski<br />

<strong>prenos</strong> je daleko pouzdaniji – greška ili prekid u <strong>prenos</strong>u mogu jednostavno da se detektuju.<br />

Daleko z<strong>na</strong>čajnija prednost serijskog <strong>prenos</strong>a je u tome što su vremenom razvijeni brojni i<br />

5 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

kvalitetni protokoli (pravila za razmenu <strong>podataka</strong>). Kod paralelnog <strong>prenos</strong>a, zbog različitih<br />

formata paralelnih <strong>podataka</strong>, to nije slučaj. Uopšte, paralelni <strong>prenos</strong> <strong>podataka</strong> se daleko više<br />

koristi kada se <strong>prenos</strong>i podatak <strong>na</strong> kradim rastojanjima: interno, unutar mikroprocesorskog<br />

sistema (npr. komunikacija između mikroprocesora i memorije) i eksterno, do nekoliko metara,<br />

u okviru raču<strong>na</strong>rskog okruženja (npr. komunikacija između raču<strong>na</strong>ra i štampača preko<br />

paralelnog porta). Kada su u pitanju rastojanja veda od reda nekoliko metara, serijski <strong>prenos</strong><br />

<strong>podataka</strong> je jedini izbor. Serijski <strong>prenos</strong> može da se ostvari preko jednog provodnika (žice). U<br />

praksi su, međutim, potrebne <strong>na</strong>jmanje dve linije (provodnika, žice) za serijsku komunikaciju:<br />

jed<strong>na</strong> za podatke i druga, tzv. masa – da bi se zatvorilo strujno kolo između dva sistema koji<br />

serijski komuniciraju. Veliki broj potrebnih veza (jed<strong>na</strong> žica po bitu n-bitnog podatka)<br />

ograničava primenu paralelnog <strong>prenos</strong>a <strong>na</strong> kratka rastojanja. Na primer, u merno-informacionoj<br />

tehnici projektova<strong>na</strong> je paralel<strong>na</strong> magistrala IEEE-488 GPIB, preko koje komuniciraju<br />

sistemi/uređaji udaljeni maksimalno 20 m. Uređaji svih renomiranih proizvođača merno-<br />

informacione opreme (digitalni osciloskopi, digitalni izvori <strong>na</strong>pajanja, logički a<strong>na</strong>lizatori,<br />

a<strong>na</strong>lizatori spektra itd.) poseduju IEEE-488 GPIB magistralu. Komunikacija u okviru<br />

mikroprocesorskog sistema ostvaruje se preko sistemske magistrale u paralelnoj formi. Da bi se<br />

ostvarila sprega sistema koji sa jedne strane obavljaju paralelni, a sa druge strane serijski<br />

<strong>prenos</strong> <strong>podataka</strong>, neophodno je izvršiti paralelno-serijsku konverziju. Za tu svrhu se <strong>na</strong>jčešde<br />

koriste pomerački registri. U aplikacijama se često koriste oba tipa konverzije, i<br />

paralelnoserijska i serijsko-paralel<strong>na</strong>, kako bi se ostvario <strong>prenos</strong> n-tobitnih paralelnih <strong>podataka</strong><br />

od predajnika ka prijemniku preko serijske linije.<br />

Sl. 1.2.1: Ilustracija serijskog <strong>prenos</strong>a<br />

6 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Mikroprocesorski sistemi memorišu i procesiraju podatke u formi bitova koji su uređeni kao reči<br />

fiksnog obima. Memoriju raču<strong>na</strong>ra čini niz lokacija pri čemu svaka ima svoju jedinstvenu adresu.<br />

Raču<strong>na</strong>rski sistemi mogu manipulisati sa rečima obima 8, 16, 32, 64 bitova, itd. U okviru velikog<br />

broja gradivnih blokova raču<strong>na</strong>rskog sistema podaci se <strong>prenos</strong>e u paralelnoj formi, što z<strong>na</strong>či da<br />

je svakom bitu u okviru reči dodeljen po jedan <strong>prenos</strong>ni put. Primer paralelnog <strong>prenos</strong>a<br />

<strong>podataka</strong> uobičajeno se srede kod hardverskih interfejsa za pobudu štampača ili kod interfejs<br />

ploča za spregu sa diskom. Kod paralelnih interfejsa, kakva je recimo sprega raču<strong>na</strong>ra sa<br />

štampačem, potrebno je uvesti neki oblik sig<strong>na</strong>lizacije koji de <strong>na</strong> određeni <strong>na</strong>čin, sa jedne<br />

strane, ukazati kada su podaci <strong>na</strong> izlazu raču<strong>na</strong>rskog sistema raspoloživi/validni, a sa druge<br />

strane, kada je (da li je) štampač spreman da prihvati novi podatak. Glavni razlog uvođenja<br />

sig<strong>na</strong>lizacije predstavlja velika razlika u brzini rada uređaja koji se međusobno povezuju.<br />

Konkretnije, raču<strong>na</strong>r može da generiše nove podatke <strong>na</strong> svakih 0.5 ns, dok štampač može da<br />

štampa podatke brzinom reda 100 z<strong>na</strong>kova u minuti (postoje i štampači koji mogu štampati do<br />

50000 z<strong>na</strong>kova u minuti).<br />

Sl. 1.2.2: Ilustracija paralelnog <strong>prenos</strong>a (n=8)<br />

Da bi se <strong>na</strong> jedan regularan <strong>na</strong>čin ostvarila korekt <strong>na</strong> razme<strong>na</strong> <strong>podataka</strong> između uređaja koriste<br />

se posebni sig<strong>na</strong>li poz<strong>na</strong>ti kao handshake sig<strong>na</strong>li. Procedura kojom se reguliše <strong>na</strong>čin razmene<br />

<strong>podataka</strong> i tajming <strong>na</strong>ziva se handshake procedura. Na Sl. 1.2.3 prikaza<strong>na</strong> je handshake<br />

7 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

procedura koja se uobičajeno koristi kod paralelnog interfejsa. U trenutku kada se upravljački<br />

sig<strong>na</strong>l DAV (Data Available) menja sa nisko-<strong>na</strong> visoko, raču<strong>na</strong>r sig<strong>na</strong>lizira štampaču da je<br />

podatak, prisutan <strong>na</strong> magistrali, dostupan. Sa druge strane, kada štampač prihvati novi podatak<br />

on postavlja sig<strong>na</strong>l DAC (Data Accepted) <strong>na</strong> visoko.<br />

Sl. 1.2.3: (a) Paralelni <strong>prenos</strong>; (b) handshaking (rukovanje)<br />

Paralelni <strong>na</strong>čin <strong>prenos</strong>a <strong>podataka</strong> pogodan je kod onih aplikacija kada su uređaji bliski jedan<br />

drugom. Kada sig<strong>na</strong>le (podatke) treba <strong>prenos</strong>iti <strong>na</strong> veda rastojanja paralelni <strong>prenos</strong> postaje<br />

nepraktičan iz slededih razloga: Kabliranje je složenije, <strong>prenos</strong> postaje nepouzdaniji zbog<br />

različitih kašnjenja sig<strong>na</strong>la duž vodova, a greške u <strong>prenos</strong>u se teže otkrivaju u slučaju kada dođe<br />

8 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

do nekog kratkog spoja ili prekida linija (žica u kablu). Alter<strong>na</strong>tivni pristup kod <strong>prenos</strong>a <strong>podataka</strong><br />

je o<strong>na</strong>j koji se zasniva <strong>na</strong> serijskom <strong>prenos</strong>u. Kod ovog <strong>na</strong>či<strong>na</strong> <strong>prenos</strong>a postoji samo jed<strong>na</strong> linija<br />

po kojoj se <strong>prenos</strong>e bitovi <strong>podataka</strong>. I pored toga što je serijski <strong>prenos</strong> sporiji od paralelnog<br />

<strong>prenos</strong>a, kabliranje je jednostavnije, a greške u <strong>prenos</strong>u se lakše otkrivaju. Svaki bit serijskog<br />

niza <strong>podataka</strong> trajanja je određenog vremenskog perioda koji se <strong>na</strong>ziva sig<strong>na</strong>lni eleme<strong>na</strong>t.<br />

Sig<strong>na</strong>li se predstavljaju pozitivnom vrednošdu za logičku jedinicu, a nultom vrednošdu za logičku<br />

nulu.<br />

1.3 Asinhroni i sinhroni režim rada<br />

Bilo koji komunikacioni sistem za <strong>prenos</strong> <strong>podataka</strong> čine, u <strong>na</strong>jopštijem slučaju, predajnik,<br />

prijemnik i neki oblik komunikacionog ka<strong>na</strong>la. Predajnik generiše niz <strong>podataka</strong> pri čemu je<br />

tajming svakog bita pod kontrolom taktnih impulsa.<br />

Asinhroni <strong>prenos</strong><br />

Za sistem kod koga predajnik može u bilo kojem trenutku da generiše bitove kažemo da koristi<br />

asinhroni <strong>prenos</strong>. Ključne karakteristike asinhronog <strong>prenos</strong>a su te da predajnik ne predaje<br />

prijemniku bilo kakvu informaciju o lokalnom taktnom impulsu ili tajming bit. Zadatak<br />

prijemnika je da interpretira dolazede sig<strong>na</strong>le i da korektno interpretira svaki dolazedi bit. U<br />

suštini asinhroni prijemnik ne regeneriše takt <strong>na</strong> osnovu dolazedeg sig<strong>na</strong>la. Naime, predajnik i<br />

prijemnik koriste posebne taktne impulse čije su frekvencije veoma bliske jed<strong>na</strong> drugoj. Sa<br />

ciljem da se odredi korektni početak rada prijema koristi se metod rada poz<strong>na</strong>t kao start-stop<br />

(Slika 1.3.1).<br />

9 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Sl.1.3.1: Start-stop operacija<br />

Kada se podaci ne predaju, linija se <strong>na</strong>lazi u pasivnom (idle) stanju. Podatku prethodi start-bit<br />

koji je trajanje jednog bitskog intervala i suprotnog je polariteta u odnosu <strong>na</strong> pasivno stanje.<br />

Nakon toga slede nekoliko bitova <strong>podataka</strong> (obično je osam). Na kraju se pridružuje stop-bit koji<br />

je istog polariteta kao i pasivno stanje. (Trajanje pasivnog stanja može biti proizvoljno). Stop bit<br />

se uvodi sa ciljem da se jasno razgraniči zadnji bit prenetog z<strong>na</strong>ka. Kada detektuje prednju ivicu<br />

start-bita, prijemnik aktivira generisanje prijemnog takta. Prva pojava taktnog impulsa je tako<br />

podeše<strong>na</strong> da se javi <strong>na</strong> sredini, ili oko sredine, prvog bita <strong>podataka</strong> i koristi se za strobovanje<br />

bita u registar ili leč (latch). Sa <strong>na</strong>rednim taktnim impulsima, za ostale bitove <strong>podataka</strong>, proces<br />

se po<strong>na</strong>vlja. U suštini, ako je takt<strong>na</strong> frekvencija prijemnika i predajnika identič<strong>na</strong>, strobovanje de<br />

se uvek javljati (dešavati) <strong>na</strong> sredini trajanja bitskog intervala. Zbog različitih frekvencija<br />

predajnika i prijemnika ipak dolazi do "klizanja" tako da, ako se broj bitova povedava,<br />

koincidencija taktnih impulsa i princip strobovanja <strong>podataka</strong> <strong>na</strong> sredini bitskog intervala se<br />

<strong>na</strong>rušava. Imajudi ovo u vidu, a iz razloga pouzdane detekcije, obim (trajanje) asinhronog sig<strong>na</strong>la<br />

ograničen je <strong>na</strong> 12 bitova (misli se <strong>na</strong> <strong>prenos</strong> jedinstvenog karaktera (z<strong>na</strong>ka ili simbola), zato što<br />

se sinhronizacija kod ovog <strong>prenos</strong>a ostvaruje <strong>na</strong> nivou jednog z<strong>na</strong>ka).<br />

Sinhroni <strong>prenos</strong><br />

Daleko efikasniji <strong>na</strong>čin za održavanje sinhronizacije kod komunikacione veze je o<strong>na</strong>j koji se<br />

zasniva <strong>na</strong> sinhronom <strong>prenos</strong>u (synchronous transmission). Podaci koji se sinhrono predaju<br />

dolaze do prijemnika kao kontinualni niz u regularnim vremenski definisanim bitskim<br />

intervalima. Predajnik i prijemnik moraju da rade sinhrono, a to se ostvaruje korišdenjem<br />

10 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

sinhronizacionih sig<strong>na</strong>la <strong>na</strong> nivou takta. Predajnik generiše taktni sig<strong>na</strong>l koji mora biti prenet do<br />

prijemnika bilo preko posebnog ka<strong>na</strong>la ili direktno regenerisan od strane prijemnika iz<br />

dolazedeg sig<strong>na</strong>la. Zbog toga u predajnoj poruci mora biti emitova<strong>na</strong> i informacija o<br />

sinhronizaciji. Princip regenerisanja takta kod ovog <strong>na</strong>či<strong>na</strong> <strong>prenos</strong>a prikazan je <strong>na</strong> Slici 1.3.2.<br />

Slika 1.3.2: Sinhroni prijemnik<br />

Uobičajeno se podaci predaju kao okviri, tj. ramovi (frame) fiksnog obima (Slika 1.3.3), pri čemu<br />

svaku informaciju <strong>na</strong> početku i kraju prate specijalni bit oblici <strong>na</strong>zvani preambule (preamble).<br />

Svrha preambule je da ostvari sinhronizaciju predajnog i prijemnog oscilatora pre početka<br />

prijema informacionih bitova.<br />

Sl.1.3.3: Izgled okvira (rama) podatka kod sinhronog <strong>prenos</strong>a<br />

11 Maja Srbulovid 10966 / Marko Nikolid 10911


2. KODIRANJE PODATAKA<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Ako kažemo da pojam podatak definiše <strong>na</strong>jmanju esencijalnu celinu za funkcionisanje<br />

<strong>na</strong>jrazličitijih sistema koji su prisutni u svakodnevnom životu, onda je verodostojnost, sigurnost<br />

i dostupnost tih <strong>podataka</strong> nešto što je neophodno ostvariti kako bi sve to funkcionisalo i davalo<br />

očekivane rezultate. Podatak možemo definisati za veoma različite oblasti društvenog života. U<br />

medicini, recimo, podataci bi bili simptomi bolesnika i <strong>na</strong>kon njihove obrade se postavi<br />

dijagnoza. U muzici bi podaci bile note, kao nosioci informacija. Praktično, podaci su svuda oko<br />

<strong>na</strong>s. Kako su se razvijale tehničke <strong>na</strong>uke, svi ti podaci su <strong>na</strong> neki <strong>na</strong>čin pretočeni u elektronsku<br />

formu. Vremeno, kako su rasle <strong>na</strong>še potrebe za sve vedom upotrebom raču<strong>na</strong>ra u svim sferama,<br />

rasli su i problemi kako sve te potrebe zadovoljiti sa tako ograničenim faktorom, <strong>prenos</strong>nim<br />

medijumom. Plus, bezbednost <strong>podataka</strong> više nije bilo sigurno.<br />

Iz ovih, kao i iz mnogo drugih razloga je <strong>na</strong>stalo <strong>kodiranje</strong>, kao novi vid <strong>prenos</strong>a, kompresije i<br />

zaštite <strong>podataka</strong>. I, <strong>na</strong>ravno, <strong>na</strong>šao veoma široku primenu. Recimo u TV tehnici koristimo<br />

metodu kodovanja kao vid kompresije <strong>podataka</strong> u manje paketa koji de se lakše i brže <strong>prenos</strong>iti.<br />

U audio/video tehnici, kodovanjem se može menjati format <strong>podataka</strong> i lakše manipulisati njime.<br />

Zatim u mobilnim i bežičnim kominikacijama se koristi za zaštitu <strong>podataka</strong> koje se šalju, kao i<br />

neki vid kompresije koji de povedati brzinu <strong>prenos</strong>a. Kodovima je obezbeđe<strong>na</strong> sinhronizacija<br />

između predajnika i prijemnika. Zato je <strong>kodiranje</strong> postalo tako z<strong>na</strong>čaj<strong>na</strong> oblat u savremenim<br />

komunikacijama.<br />

Ako potražimo neku definiciju kodiranja, možemo <strong>na</strong>di da je <strong>kodiranje</strong> <strong>podataka</strong>, ustvari, proces<br />

konvertovanja informacije iz jednog formata u drugi (kodirani) format. Komunikacija sa ovakvim<br />

vrstama <strong>podataka</strong> je moguda jedino ako i predaj<strong>na</strong> i prijem<strong>na</strong> stra<strong>na</strong> razumeju tehniku kodiranja<br />

tj <strong>na</strong>či<strong>na</strong> <strong>na</strong> koji su formirani novi bitovi. Na prijemnoj strani se mora izvršiti de<strong>kodiranje</strong><br />

<strong>podataka</strong> pre nego što se bude manipulisalo sa njima.<br />

12 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Da<strong>na</strong>s je prisutno veoma velik broj <strong>na</strong>či<strong>na</strong> kodiranja. Svaki oblik kodiranja je specifičan za neku<br />

oblast za koju je bio pravljen. Tako <strong>na</strong> primer tzv ka<strong>na</strong>lno <strong>kodiranje</strong>, koje podrazumeva<br />

<strong>kodiranje</strong> <strong>na</strong> taj <strong>na</strong>čin da što više smanji veličinu <strong>podataka</strong>, poveda brzinu <strong>prenos</strong>a i smanji broj<br />

pogrešno prenetih bitova, se razllikuje i zasebno projektuje za različita uslove. Prirodne<br />

prepreke koje utiču <strong>na</strong> ovo se razlikuju kada se radi o satelitskoj komunikaciji (u svemiru je<br />

problem termički šum koji se javlja <strong>na</strong> prijemniku), mobilnoj komunikaciji (učestanost fadinga je<br />

mnogo veda nego i<strong>na</strong>če), zemljanim telefonskim komunikacijama (uskopijasni modemi su<br />

ograničeni bukom koja se javlja u ovoj mreži) itd.<br />

Pojmom kodiranja obuhvadeni su postupci obrade koji se primenjuju pri digitalnom <strong>prenos</strong>u<br />

digitalnih sig<strong>na</strong>la, kada se karakteristike digitalnog sig<strong>na</strong>la prilagođavaju karakteristikama<br />

<strong>prenos</strong>nog puta, kao i pri digitalnom <strong>prenos</strong>u a<strong>na</strong>lognih sig<strong>na</strong>la, kada se vrši pretvaranje<br />

a<strong>na</strong>lognog sig<strong>na</strong>la u digitalni oblik. Saglasno tome, u postupku obrade sig<strong>na</strong>la, razlikuju se dva<br />

tipa kodiranja:<br />

Kodiranje digitalnih sig<strong>na</strong>la u osnovnom opsegu učestanosti i<br />

Kodiranje a<strong>na</strong>lognih sig<strong>na</strong>la, odnosno a<strong>na</strong>logno/digital<strong>na</strong> konverzija.<br />

Kodiranjem se utiče <strong>na</strong>: oblik spektra sig<strong>na</strong>la, sinhronizaciju, otkrivanje grešaka, povedanje<br />

otpornosti <strong>na</strong> uticaj šuma, složenost i ekonomičnost uređaja.<br />

Najjednostavniji postupak kodiranja je o<strong>na</strong>j koji se upotrebljava za opisivanje bi<strong>na</strong>rnih sig<strong>na</strong>la<br />

<strong>na</strong> <strong>na</strong>čin što se dva bi<strong>na</strong>r<strong>na</strong> stanja predstavljaju sa dva <strong>na</strong>ponska nivoa u odgovarajudem<br />

talasnom obliku sig<strong>na</strong>la. Ovakav kod se može realizovati tako što se bi<strong>na</strong>r<strong>na</strong> jedinica predstavi<br />

višim nivoom <strong>na</strong>po<strong>na</strong> (impulsom), a bi<strong>na</strong>r<strong>na</strong> nula nultim <strong>na</strong>ponom (pauzom).<br />

13 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Druga, češda, mogudnost je o<strong>na</strong> u kojoj se negativni <strong>na</strong>pon koristi da predstavi bi<strong>na</strong>rnu nulu, a<br />

pozitivni <strong>na</strong>pon za bi<strong>na</strong>rnu jedinicu, tj. sig<strong>na</strong>l zadržava stanje kod svakog bita u toku bitskog<br />

intervala, pošto se sig<strong>na</strong>l ne vrada <strong>na</strong> nulu posle svakog bita. U tom slučaju se govori o<br />

specifičnom postupku kodiranja bez povratka <strong>na</strong> nulu (NRZ – Non Return to Zero, NRZ-L – Non<br />

Return to Zero Level). Ova tehnika kodiranja se često koristi kod asihronih komunikacija, ali ima<br />

nedostatak što nije samotaktova<strong>na</strong>,tj. iz NRZ-L sig<strong>na</strong>la nije mogude izdvojiti taktnu frekvenciju.<br />

Pored toga NRZ –L sig<strong>na</strong>l može ostati u istom stanju (0 ili 1) nedefinisani period vreme<strong>na</strong>, tako<br />

da je potrebno obezbediti u <strong>prenos</strong>u i DC spregu.<br />

Da bi se obezbedilo više informacija o taktnoj frekvenciji smišljeni su i drugi kodovi.<br />

Najjednostavniji među njima je NRZ-Mark (NRZ-M). Zasnovan je <strong>na</strong> postojanju tranzicije svaki<br />

put kada je poslata 1. Lako se može zaključiti, da ova tehnika kodiranja ima manu kada se<br />

pošalje duga sekvenca uzastopnih nula.<br />

Povratak <strong>na</strong> nulu (RZ – Return to Zero) je linijski kod koji se, takođe, koristi kao jed<strong>na</strong> od<br />

tehnika kodiranja u kojoj sig<strong>na</strong>l opada (vrada se) <strong>na</strong> nulu između svakog impulsa. Ovo se dešava<br />

čak i ako u sig<strong>na</strong>lu postoji uzastopni niz nula ili jedinica. Ova tehnika kodovanja je<br />

samotaktova<strong>na</strong>. To z<strong>na</strong>či da nije potrebno poslati zaseban taktni sig<strong>na</strong>l pored sig<strong>na</strong>la, a<br />

nedostatak je u tome što zauzima duplo vedi propusni opseg kako bi dosegla istu bitsku brzinu u<br />

poređenju sa tehnikom kodiranja bez povratka <strong>na</strong> nulu.<br />

Postoji još jed<strong>na</strong> grupa kodova kojima se <strong>na</strong> sličan <strong>na</strong>čin prevazilaze nedostaci NRZ kodova. To<br />

su bifazni kodovi, od kojih se <strong>na</strong>jviše koristi Manchester kod. Ova tehnika kodiranja zasnova<strong>na</strong><br />

je <strong>na</strong> postojanju tranzicije (prelaza) <strong>na</strong> sredini vremenskog intervala koji pripada pojedi<strong>na</strong>čnom<br />

bi<strong>na</strong>rnom simbolu. Pri tome je bi<strong>na</strong>r<strong>na</strong> 1 predstavlje<strong>na</strong> tranzicijom sa nižeg <strong>na</strong> viši nivo, dok<br />

bi<strong>na</strong>rnu 0 predstavlja tranzicija sa višeg <strong>na</strong>niži <strong>na</strong>ponski nivo.<br />

14 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 2.1: Manchester kod<br />

Bifazni kod je tehnika kodiranja bi<strong>na</strong>rnog niza <strong>podataka</strong>. Kada se bi<strong>na</strong>rni niz <strong>podataka</strong> bez<br />

modulacije šalje kroz ka<strong>na</strong>l, mogu se javiti veliki nizovi bi<strong>na</strong>rnih 0 ili 1 bez i jedne tranzicije tako<br />

da je oteža<strong>na</strong> sinhronizacija i regeneracija takta. Ova tehnika kodiranja omogudava lakšu<br />

sinhronizaciju osiguravajudi pojavljivanje makar jedne tranzicije između svakog bita <strong>podataka</strong> u<br />

ka<strong>na</strong>lu. Kod kodiranja bitska brzi<strong>na</strong> mora da je dvostruko veda od bitske brzine origi<strong>na</strong>lnog<br />

sig<strong>na</strong>la. Svaki bit podatka koji se šalje predstavljen je sa dva logička stanja, koji zajedno čine<br />

jedan bit. Svaka bi<strong>na</strong>r<strong>na</strong> 1 predstavlje<strong>na</strong> je sa dva različita bita (10 ili 01) <strong>na</strong> izlazu. Bi<strong>na</strong>r<strong>na</strong> 0<br />

predstavlje<strong>na</strong> je sa dva jed<strong>na</strong>ka bita (00 ili 11) <strong>na</strong> izlazu. Bi<strong>na</strong>r<strong>na</strong> 1 i 0 su predstavljene istom<br />

amplitudom <strong>na</strong>po<strong>na</strong> ali suprotnog polariteta.<br />

Slika 2.2: Bifazni kod<br />

15 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

3. OPIS PROJEKTOVANOG KOLA ZA PRENOS I KODIRANJE PODATAKA<br />

3.1 Opis Protokola Podataka<br />

Pre nego što opišemo sistem za <strong>kodiranje</strong> i <strong>prenos</strong> <strong>podataka</strong>, neophodno je sagledati kako de<br />

izgledati jedan paket protokola za komunikaciju i <strong>na</strong>čin komunikacije između predajnika i<br />

udaljenog prijemnika. Predviđeno je da generalno postoje dva moda rada: period kada se ne<br />

šalje nikakva inforamcija i period kada se šalje informacija. Tokom neaktivnog perioda šalje se<br />

niz nula i jedinica duplo vede periode od taktnog sig<strong>na</strong>la za predaju, tj. <strong>na</strong> svaki otkucaj takta<br />

pošalje se npr. nula, a <strong>na</strong>redni put jedinica i tako dalje. Ovo je <strong>na</strong> Slici 3.1.1 prikazano kao niz<br />

nula i jedinica pre preambule. Drugi mod rada je kada dođe do slanja poruke udaljenom<br />

predajniku. Tad modul koji želi da šalje uputi zahtev za slanje i <strong>na</strong>še kolo treba da pripremi sve<br />

da bi slanje informacije počelo. Paket je formiran od dva polja i preambule. Jedno polje je<br />

dužine 16 bitova i ono nosi informaciju kolika je duži<strong>na</strong> polja sa podacima. Drugo polje koristi se<br />

za slanje <strong>podataka</strong>. Maksimal<strong>na</strong> duži<strong>na</strong> drugog polja je 64KB, s’obziron da kada svih 16 bitova<br />

prvog polja budu jedinice to je maksimal<strong>na</strong> moguda duži<strong>na</strong> paketa. Dakle drugi mod<br />

podrazumeva slanje preambule, koja iznosi 47 heksadecimalno (01000111), <strong>na</strong>kon čega sledi<br />

slanje <strong>podataka</strong> po ved utvrđenom redosledu.<br />

Izbor preambule od 47 heksadecimanlo je odabrano tako da ukoliko dođe do eventualne greške<br />

pre <strong>prenos</strong>u niza bitova nula i jedinica, to nede remetiti <strong>prenos</strong> preabule tj. automat de modi<br />

razlikovati preambulu od sekvence koja oz<strong>na</strong>čava pasivan rad sistema. Kao što je rečeno, u<br />

modu kada nema <strong>podataka</strong> <strong>na</strong>izmenično se šalju nule i jedinice duplo vede periode od taktnog<br />

sig<strong>na</strong>la za predaju, odnosno 01010101. Preambula je 01000111. Recimo da dodje do greške pri<br />

<strong>prenos</strong>u druge jedinice u neaktivnom modu, odnosno da se registruje niz 010001010. Kao što se<br />

vidi ovaj niz podseda <strong>na</strong> preambulu ali se ipak razlikuje <strong>na</strong> jednom bitu što sistem nede<br />

registrovati kao preambulu i nede greškom predi u mod za slanje <strong>podataka</strong>. A verovatnoda da<br />

dodje do greške pri <strong>prenos</strong>u ovako bliskih bitova(da se pored ovoga i četvrta nula prenese kao<br />

jedinica odnosno 01000111) je izuzetno mala, takoredi zanemarljiva. Na taj <strong>na</strong>čin smo osigurali<br />

da de automat uvek ispravno registrovati preabulu i prebaciti sistem u mod za <strong>prenos</strong> <strong>podataka</strong>.<br />

16 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 3.1.1: Izgled paketa protokola koji se generiše u predajniku<br />

Komunikacija može da se odvija tako što uzastopno mogu da se pošalju jedan ili više paketa<br />

informacije uzastopno. Na Slici 3.1.1a imamo situaciju kada se pošalje više od jednog paketa<br />

(slanje drugog paketa počinje bez ikakve pauze), a <strong>na</strong> Slici 3.1.1b imamo situaciju kada se šalje<br />

samo jedan paket informacije. Treba <strong>na</strong>pomenuti i to da prvo polje od 16 bitova generiše modul<br />

koji inicira komunikaciju, tj. mora <strong>na</strong>m biti poz<strong>na</strong>ta duži<strong>na</strong> polja sa podacima kako bi mogli da<br />

ispravno formiramo frejm kojim se šalje podatak. Tako prva dva bajta koja preuzmemo od<br />

modula koji inicira komunikaciju smeštamo u registar dužine 16 bitova koji de koristiti za<br />

kontrolu rada kola da bi se ispravno formirao paket kojim se <strong>prenos</strong>e podaci. Preostali deo<br />

informacije se samo prosleđuje dalje.<br />

Formiranjem ovakvog protokola rešene su neke od slededih stavki:<br />

Preambula je fiks<strong>na</strong> i šalje se pre slanja svakog paketa sa podacima. Tako de kolo prijemnika<br />

biti u mogudnosti da detektuje niz bitova koji se šalju kao preambula i počede sa prijemom<br />

<strong>podataka</strong>.<br />

Prvo polje je uvedeno iz razloga da protokol bude potpuno određen, tj. može se zamisliti<br />

situacija da se u okviru <strong>podataka</strong> <strong>na</strong>đe sekvenca bitova koja je ista kao preambula. Na ovaj<br />

<strong>na</strong>čin bi prijemnik protumačio to kao slanje novog paketa informacije i došlo bi do greške pri<br />

slanju. Uvođenjem polja sa 16 bitova, koje nosi podatke o dužini polja sa podacima, ova<br />

17 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

nepogodnost se eliminiše. Naime, kolo prijemnika tada z<strong>na</strong> da kada primi informaciju koja<br />

može da predstavlja preambulu, tada se proveri da li primlje<strong>na</strong> informacija ima<br />

odgovarajudu dužinu i, ukoliko to nije slučaj, tada se taj bajt tretira kao bajt podatka koji je<br />

primljen, a ne kao bajt preambule.<br />

Kada se nikakvi podaci ne šalju, šalje se niz nula i jedinica koji se može iskoristiti <strong>na</strong><br />

prijemnoj strani da se frekvencija i faza prijemnog taktnog sig<strong>na</strong>la podese da budu u<br />

sinhronizmu sa fazom i frekvencijom sig<strong>na</strong>la koji nosi podatke.<br />

Na Slici 3.1.1 prikazan je i komentar koji govori o tome gde se formira informacija koja se šalje<br />

<strong>na</strong> komunikacionu liniju.<br />

3.2 Opis šeme i rada kola<br />

Na Slici 3.2.1 prikaza<strong>na</strong> je blok šema kola koje generiše sig<strong>na</strong>le za protokol prikazan <strong>na</strong> slici<br />

3.1.1. Podaci koji se šalju dolaze <strong>na</strong> port koji je oz<strong>na</strong>čen kao data_in. Podaci dolaze u<br />

paralelnom obliku. Sig<strong>na</strong>l sa ovog porta vodi se <strong>na</strong> ulaze dva registra. Prvi je registar<br />

pomeračkog tipa i on se koristi za prevođenje informacije iz paralelne u serijsku formu u okviru<br />

koje se podaci šalju. Drugi registar <strong>na</strong> koji se vodi ovaj sig<strong>na</strong>l je registar duđine 16 bitova. U ovaj<br />

registar vrši se upis dva prva bajta informacije. Vrednost ova dva bajta predstavlja dužinu polja<br />

sa podacima.<br />

18 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 3.2.1: Blok šema kola koje generiše sig<strong>na</strong>le za protokol sa slike 3.1.1<br />

19 Maja Srbulovid 10966 / Marko Nikolid 10911


Sekvenca rada kola je slededa:<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Kolo se <strong>na</strong>lazi u idle stanju i šalje informaciju koja se dobija <strong>na</strong> izlazu T flip flopa. Tada je<br />

multiplekser podešen tako da propušta ovaj sig<strong>na</strong>l <strong>na</strong> ulaz kola kodera. Sve kontrolne i<br />

upravljačke sig<strong>na</strong>le generiše kolo FSM koje predstavlja kolo automata sa ko<strong>na</strong>čnim brojem<br />

stanja. Tako se i sig<strong>na</strong>l za upravljanje radom multipleksera dobija iz ovog kola. To je sig<strong>na</strong>l<br />

MUX_control_sig<strong>na</strong>l, koji se dovodi <strong>na</strong> ulaz registra_2 pa tek onda <strong>na</strong> kontrolni ulaz<br />

multipleksera. Uloga registra_2 de biti kasnije objašnje<strong>na</strong>.<br />

Sa slike se uočavaju i sig<strong>na</strong>li za kontrolu rada kola. To su sig<strong>na</strong>li koji realizuju hand shake<br />

proceduru pri slanju <strong>podataka</strong>. Sig<strong>na</strong>lom send_request, modul koji šalje podatke obaveštava<br />

<strong>na</strong>še kolo o tome da hode da pošalje neki podatak. Tad <strong>na</strong>še kolo prebaci stanje multipleksera<br />

tako da se <strong>na</strong> ulaz kola za <strong>kodiranje</strong> dovede sig<strong>na</strong>l iz registra za preambulu. Istovremeno se<br />

dozvoli pomenutom registru da počne sa pomeranjem upisanog sadržaja. Na slici je prikazano<br />

da se u registar upiše vrednost 47 heksadecimalno, što predstavlja vrednost preambule.<br />

Nakon slanja preambule, <strong>na</strong>še kolo šalje sig<strong>na</strong>l <strong>na</strong> port send_ack i tada modul koji šalje podatke<br />

postavlja vrednost prvog bajta polja od 16 bitova. Ova vrednost se upisuje u dva registra kako je<br />

ved rečeno ranije. U registar 16 se upisuje <strong>na</strong> poziciji višeg bajta. Nakon slanja bajta sig<strong>na</strong>lom<br />

new_byte_req sig<strong>na</strong>lizira se modulu koji šalje podatke da treba da postavi novi bajt informacije<br />

koja se šalje, a modul koji šalje odgovara sig<strong>na</strong>lom new_byte_set kada postavi novi bajt. Drugi<br />

bajt iz polja sa 16 bajtova sada se upisuje <strong>na</strong> mesto donjeg bajta registra sa 16 bitova. Nakon<br />

slanja ovog bajta počinje se sa slanjem <strong>podataka</strong>. Treba pomenuti da se slanje jednog bajta<br />

podatka kontroliše pomodu brojača_8. Ovaj brojač ima moduo brojanja 8 i sam brojač formira<br />

sig<strong>na</strong>l kojim sig<strong>na</strong>lizira kolu FSM da je došlo do slanja poslednjeg bita iz serijskog registra i kolo<br />

FSM može da pređe u <strong>na</strong>redno stanje sekvence slanja informacije.<br />

Došli smo do trenutka kada počinje slanje drugog polja, tj. polja za podatke. Tada počinje sa<br />

radom i drugi brojač, brojač_16. Ovaj brojač koristi se za sinhronizaciju slanja polja sa<br />

podacima. Brojač može da broji do 64K, a stanje brojača poredi se sa stanjem registra_16. Kada<br />

20 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

se ova dva stanja poklope, FSM prima sig<strong>na</strong>l koji sig<strong>na</strong>lizira da je došlo do slanja poslednjeg<br />

bajta drugog polja i slanje <strong>podataka</strong> se završava. FSM saopšti modulu sig<strong>na</strong>lom new_byte_req<br />

da je završio sa slanjem bajta i tada se mogu desiti dve stvari. Prva je da izostane sig<strong>na</strong>l<br />

send_req od strane modula koji šalje informaciju i tada se prelazi u tzv. idle stanje i počinje se<br />

sa slanjem nula i jedinica. Druga stvar koja može da se desi da modul postavi sig<strong>na</strong>l kojim<br />

zahteva slanje novog paketa informacije i tada kolo ponovo šalje preambulu, resetuje<br />

registar_16 koji de pamtiti prvo polje paketa itd..<br />

Nakon upisa, podaci se šalju u koder. Kontrolni ulaz multipleksera 5 u 1, code_select, određuje<br />

<strong>na</strong> ulaz kog kodera de se dovoditi podaci koji se šalju i, samim tim, biti kodovani tim kodom.<br />

Kola kodera, kao i multiplekser 5 u 1 su prikazani <strong>na</strong> Slici 3.2.2.<br />

Slika 3.2.2: Šema kodera<br />

21 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 3.2.3: Realizacija NRZ Level <strong>koda</strong><br />

Slika 3.2.3 prikazuje logiku kojom je realizovan deo kola koji generiše NRZ level kod. Kako se sa<br />

slike vidi to je kolo D flip flopa koji upisanu informaciju čuva između dve ivice taktnog sig<strong>na</strong>la<br />

kada se u flip flop upisuje nova vrednost. Na slededoj slici dat je dijagram simulacije rada kola<br />

kada se <strong>na</strong> ulaz u pomerački registar dovede sig<strong>na</strong>l 10010110. Za NRZ_LEVEL kod stoji da se<br />

jedninica kodira jednim nivoom (kod <strong>na</strong>s 1 se kodira visokim <strong>na</strong>ponom), a nula se kodira drugim<br />

nivoom (nizak <strong>na</strong>ponski nivo). Kako smo mi uveli u <strong>na</strong>š protokol da se informacija upisuje <strong>na</strong><br />

rastudu ivici taktnog sig<strong>na</strong>la, a i D flip flop se taktuje <strong>na</strong> rastudu ivicu, to dovodi do toga da <strong>na</strong><br />

izlazu ovog kodera de biti ista informacija kao i <strong>na</strong> ulazu. Na Slici 3.2.4 je data grafička<br />

interpretacija ovog NRZ Level <strong>koda</strong>.<br />

Slika 3.2.4: Grafička interpretacija NRZ Level <strong>koda</strong><br />

22 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

NRZ Mark kod odlikuje se svojstvom da se stanje <strong>na</strong> izlazu hardvera koji generiše ovaj kod<br />

promeni svaki put kada se javi jedinica ulaznog sig<strong>na</strong>la. Tako ako pogledamo Sliku 3.2.5 tačno se<br />

može zapaziti ova pojava da se stanje sig<strong>na</strong>la NRZ Mark menja svaki put kada <strong>na</strong> ulaz dođe<br />

jedinica. Vidi se da de T flip flop da se taktuje samo onda kada je ulaz postavljen u stanje 1.<br />

Taktovanje T flip flop- a podrazumeva promenu njegovog stanja. Tako ako je prethodno stanje<br />

bilo 0, <strong>na</strong>kon taktovanja se <strong>na</strong> izlazu postavlja 1, i obrnuto.<br />

Slika 3.2.5: Realizacija NRZ Mark kodera<br />

Grafička interpretacija NRZ Mark <strong>koda</strong> je data <strong>na</strong> Slici 3.2.6.<br />

Slika 3.2.6.<br />

23 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

RZ kod je veoma prost kod koji sig<strong>na</strong>l sa ulaza koji ima trajanje stanja 1 tokom celog taktnog<br />

intervala, pretvara u sig<strong>na</strong>l kod kojeg stanje 1 traje polovinu taktnog intervala. Otuda mu i ime<br />

Return to Zero. Na Slici 3.2.7 je prikazano I kolo kojim se generiše RZ kod<br />

Slika 3.2.7: Realizacija RZ <strong>koda</strong><br />

A izgled talasnog oblika sig<strong>na</strong>la kodovanog ovim kodom je dato <strong>na</strong> Slici 3.2.8.<br />

Slika 3.2.8: Talasni oblik sig<strong>na</strong>la <strong>na</strong> izlazu iz RZ <strong>koda</strong><br />

Do sada opisani kodovi pripadaju grupi kodova kod kojih je potreban spoljni takt za ispravnu<br />

detekciju. Manchester i Bifazni kod pripadaju grupi kodova koji se još <strong>na</strong>zivaju i samo-taktovani<br />

kodovi. Na Slici 3.2.2 prikaza<strong>na</strong> je blok šeme kola kodera. Na slici se može uočiti da ulazni sig<strong>na</strong>l<br />

kola koje generiše Manchester i Bifazni kod, dolazi iz kola koje generiše NRZ Level kod. U suštini,<br />

mogude je ulaz uzeti direktno sa ulaza za podatke, ali z<strong>na</strong>mo da se sig<strong>na</strong>l za podatke postavlja<br />

neposredno pre dešavanja rastude ivice taktnog sig<strong>na</strong>la. Na taj <strong>na</strong>čin ne bi bilo mogude direktno<br />

poređenje sig<strong>na</strong>la kodova koji se u ovom projektu realizuju. Zato je za referentni ulazni sig<strong>na</strong>l<br />

kola koja generišu Manchester i Bifazni kod uzet sig<strong>na</strong>l NRZ Level.<br />

24 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Generisanje Manchester <strong>koda</strong> je veoma prosto. Svojstvo Manchester <strong>koda</strong> je da jedinica bude<br />

predstavlje<strong>na</strong> rastudom ivicom sig<strong>na</strong>la <strong>na</strong> sredini trajanja taktnog intervala, a nula bude<br />

predstavlje<strong>na</strong> opadajudom ivicom <strong>na</strong> sredini taktnog intervala. U slučaju da se treba generisati<br />

samo sig<strong>na</strong>l Manchester <strong>koda</strong>, tada se <strong>na</strong> prvi ulaz XOR kola treba dovesti sig<strong>na</strong>l sa serijskog<br />

izlaza pomeračkog registra koji upis i pomeranje informacije obavlja <strong>na</strong> rastudu ivicu taktnog<br />

sig<strong>na</strong>la. Na drugi ulaz XOR kola dovodi se pomenuti taktni sig<strong>na</strong>l. U opisanom kolu ved postoji<br />

sig<strong>na</strong>l koji može poslužiti za generisanje Manchester <strong>koda</strong> tako da bi uvođenje još jednog<br />

registra predstavljalo nepotrebno unošenje redundanse.<br />

Slika 3.2.9: Realizacija Manchester <strong>koda</strong><br />

Izlaz iz Manchester kodera za ulaznu sekvencu datu <strong>na</strong> početku, je prikazan <strong>na</strong> Slici 3.2.10.<br />

Slika 3.2.10: Sig<strong>na</strong>l <strong>na</strong> izlazu Manchester kodera<br />

25 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Bifazni kod je kod čije je generisanje <strong>na</strong>jsloženije. Osobi<strong>na</strong> ovog <strong>koda</strong> je da <strong>na</strong> početku svakog<br />

taktnog intervala postoji prelaz (prelazi se iz jednog u drugo stanje). Za nulu je karakteristično<br />

da nema dodatnih prelaza u toku trajanja taktnog intervala, dok za jedinicu postoji prelaz <strong>na</strong><br />

sredini taktnog intervala. Hardver koji realizuje ovu funkciju dat je <strong>na</strong> Slici 3.2.11. Na slici<br />

vidimo dva T flip flop-a i dodatnu logiku. Flip flop se taktuje rastudom ivicom taktnog sig<strong>na</strong>la. Na<br />

slici vidimo da de gornji flip flop uvek da bude taktovan kada se desi rastuda ivica taktnog<br />

sig<strong>na</strong>la što zapravo predstavlja prvu osobinu Bifaznog <strong>koda</strong>. Drugi flip flop taktuje se samo ako<br />

je podatak koji treba preneti 1. Taktovanje se dešava <strong>na</strong> opadajudu ivicu taktnog sig<strong>na</strong>la za šta<br />

je zaslužan invertor preko kojeg se dovodi taktni sig<strong>na</strong>l <strong>na</strong> I kolo, a I kolo ima ulogu da taktni<br />

sig<strong>na</strong>l propusti samo ako je <strong>na</strong> ulazu za podatke stanje 1. Da bi se <strong>na</strong> izlazu desila prome<strong>na</strong><br />

stanja <strong>na</strong> sredini tatktnog intervala potrebno je postaviti XOR kolo čija je uloga slededa:<br />

Ukoliko se <strong>prenos</strong>i niz nula, stanje donjeg T flip flop-a je fiksno i pretpostavimo da je jed<strong>na</strong>ko 1.<br />

Tada de pri pojavi svake rastude ivice taktnog sig<strong>na</strong>la, gornji T flip flop da promeni stanje. Može<br />

se zaključiti da de pomenute promene da se jave i <strong>na</strong> izlazu (bitno je da se javi prome<strong>na</strong>), dok se<br />

stanje donjeg flip flopa koristi samo da se javi prome<strong>na</strong> <strong>na</strong> sredini taktnog intervala kada se<br />

<strong>prenos</strong>i jedinica. Ukoliko se sada <strong>na</strong> liniju za podatke dovede 1, tada de se osim promene <strong>na</strong><br />

početku trajanja taktnog intervala (rastuda ivica) javiti prome<strong>na</strong> i <strong>na</strong> sredini taktnog intervala<br />

(opadajuda ivica koja taktuje donji T flip flop). Ovakve promene <strong>na</strong>m omogudava XOR kolo koje<br />

de promeniti stanje svaki put kada se jedan ulaz drži u jednom stanju (0 ili 1), a drugi ulaz<br />

promeni svoju vrednost (sa 1 se pređe u 0 ili obratno). Na port sa oz<strong>na</strong>kom ulaz dovodi se sig<strong>na</strong>l<br />

NRZ level <strong>koda</strong> kao što je to slučaj i za Manchester kod.<br />

Za razumevanje principa rada opisanog kola potrebno je sagledati i talasni oblik sig<strong>na</strong>la <strong>koda</strong> i<br />

sagledati stanje kola u diskretnim vremenskim trenucima kako bi se u potpunosti razumeo<br />

princip rada kola.<br />

26 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 3.2.11: Realizacija Bifaznog <strong>koda</strong><br />

Talasni oblik sig<strong>na</strong>la <strong>na</strong> izlazu iz Bifaznog kodera je predstavljen <strong>na</strong> Slici 3.2.12.<br />

Slika 3.2.12: Talasni oblik sig<strong>na</strong>la <strong>na</strong> izlazu iz Bifaznoga kodera<br />

Kako bi celokupan proces bio potpuno automatizovan, za ulazne podatke su uzete vrednosti<br />

brojača modula 255. Na taj <strong>na</strong>čin je, pored hand shake procedure koju pravi kolo automata sa<br />

svojim kontrolnim sig<strong>na</strong>lima new_byte_req, new_byte_set, send_request i send_ack,<br />

postignuto da se i ulazni sig<strong>na</strong>li automatski generišu, osim ako se eksplicitno ne zahteva<br />

manuelno unošenje. Način generisanja ulaznih <strong>podataka</strong>, kao i opcija za ručni unos de biti<br />

kasnije objašnjene.<br />

27 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Ulazni sig<strong>na</strong>li ovog sistema za <strong>prenos</strong> i <strong>kodiranje</strong> su clock, reset, sig<strong>na</strong>l za unos preambula(ovde<br />

je uzeto 47 heksadecimalno ali se može menjati), data_in(gde se unose podaci kao i vrednost<br />

polja od 16 bitova koje određuje veličinu <strong>podataka</strong>). Zatim za rad automata neophodni su ulazni<br />

kontrolni sig<strong>na</strong>li new_byte_req, new_byte_set, send_request i send_ack. Dok je za rad kodera<br />

potreban ulazani sig<strong>na</strong>l code_select kojim se definiše koji tip kodovanja se želi primeniti <strong>na</strong>d<br />

podacima. Kao što se može primetiti, kolo sačinjavaju multiplekseri, registri, flip flopovi, brojači,<br />

kao i kolo FSM-a. Uloga svakog od njih de biti sada objašnje<strong>na</strong>.<br />

Multiplekser 4 u 1 određuje šta se dovodi u kolo kodera. Da li de to biti <strong>na</strong>izmenični niz nula i<br />

jedinica kada je automat u idle stanju, ili preambula ili podatak, zavisi od kontrolnog ulaza koji<br />

kontroliše automat. Izgled multipleksera je dat <strong>na</strong> Slici 3.2.13.<br />

Slika 3.2.13: Multiplekser 4 u 1<br />

28 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Na ulazni sig<strong>na</strong>l ulaz_1 se dovodi niz nula i jedinica koji se generišu u T flip flopu. On je aktivan<br />

kada se ceo sistem <strong>na</strong>lazi u idle stanju, odnosno kada se ne <strong>prenos</strong>e podaci. Na ulaz_2 se dovodi<br />

izlaz pomeračkog registra. U njemu se vrši upis i pomeranje preambule. Kada predajni modul<br />

pošalje zahtev automatu za slanje <strong>podataka</strong>, tada se aktivira ovaj ulaz i počinje sa <strong>prenos</strong>om<br />

vrednosti preambule, odnosno 47 heksadecimalno. Na ulaz_3 se dovodi izlaz pomeračkog<br />

registra u kome se smeštaju i shift-uju podataci koji se generišu <strong>na</strong> ulazu. Ulaz za <strong>prenos</strong><br />

<strong>podataka</strong> iz ovog registra se aktivira odmah <strong>na</strong>kon završetka slanja preambule. Sistem je<br />

zamišljen tako da se kontrolni sig<strong>na</strong>li dovode <strong>na</strong> rastudu ivicu taktnog sig<strong>na</strong>la, dok se prome<strong>na</strong><br />

stanja automata dešava <strong>na</strong> opadajudu ivicu taktnog sig<strong>na</strong>la. Kako bi izlazni sig<strong>na</strong>l iz FSM-a<br />

mogao da kontroliše rad multipleksera i dozvoljavao upis <strong>na</strong> rastudu ivicu, stavljen je registar_2<br />

koji ima ulogu da sinhronizuje izlazni sig<strong>na</strong>l iz automata i clock singal, kako bi se kontrolni ulaz<br />

multipleksera javljao <strong>na</strong> rastudu ivicu taktnog sig<strong>na</strong>la. Ulaz_4 multipleksera je neaktivan.<br />

Sistem koji čine registar_16, komparator i brojač_16 omogudavaju da automat z<strong>na</strong> kada je<br />

došao kraj podacima koje treba poslati i da, u zavisnosti od toga da li stigne send_req sig<strong>na</strong>l,<br />

ponovo krene sa slanjem preambule, ili da se vrati u idle stanje i <strong>prenos</strong>i niz nula i jednica. U<br />

registar_16 se upisuju bitovi koji određuju dužinu <strong>podataka</strong> koje treba preneti(16 bitova <strong>na</strong>kon<br />

preambule). Sadži 2 e<strong>na</strong>ble ulaza. Kada je aktivan prvi upisuju se bitovi nižeg reda, a kada je<br />

aktivan drugi bitovi višeg reda. Brojač_16 broji bajtove(taktuje se izlaznim sig<strong>na</strong>lom brojača 8,<br />

byte_sent_sig<strong>na</strong>l, koji broji bajtove). Kako se podaci upisuju paralelno po 8 bitova, brojač_8 je<br />

uveden da sig<strong>na</strong>lizira kada dodje do <strong>prenos</strong>a poslednjeg bita iz jedne sekvence. Tada automat<br />

zatraži od modula za <strong>prenos</strong> da upiše <strong>na</strong>redno niz od 8 bitova. Izlaz ovog brojača smo iskoristili<br />

da taktujemo brojač koji de brojati bajtove. Sadržaj brojača_16 i registra_16 se upoređuju u<br />

komparatoru. Kada se poklope, odnosno kada brojač dođe do one vrednosti koja oz<strong>na</strong>čava<br />

dužinu <strong>podataka</strong>, aktivira se sig<strong>na</strong>l <strong>na</strong> izlazu komparatora koji sig<strong>na</strong>lizira automatu da nema više<br />

<strong>podataka</strong> i da pređe u neko od <strong>na</strong>rednih stanja.<br />

29 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 3.2.14: Brojač_16, komparator i regisrar_16<br />

Kolo automata sa ko<strong>na</strong>čnim brojem stanja je <strong>na</strong>jz<strong>na</strong>čajniji deo sistema koji obezbeđuje<br />

handshake proceduru. Na osnovu 4 ulaz<strong>na</strong> kontrol<strong>na</strong> sig<strong>na</strong>la (new_byte_set, send_request,<br />

komp_sig<strong>na</strong>l i byte_sent_sig<strong>na</strong>l) automat generiše izlazne sig<strong>na</strong>le koji predstavljaju kontrolne<br />

sig<strong>na</strong>le za ostale delove kola: sig<strong>na</strong>l za dozvolu upisa u registar, pomeranje sadržaja registra,<br />

sig<strong>na</strong>l za početak brojanja brojača, resetovanje brojača, kontrolni sig<strong>na</strong>l za multiplekser itd.<br />

Slika 3.2.15: Automat sa ko<strong>na</strong>čnim brojem stanja<br />

30 Maja Srbulovid 10966 / Marko Nikolid 10911


Spisak izlaznih sig<strong>na</strong>la automata<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

1. brojac_8_reset - sig<strong>na</strong>l kojim se resetuje samozaustavljujudi brojač osnove 8<br />

2. brojac_8_en - sig<strong>na</strong>l za dozvolu brojanja brojača 8<br />

3. data_write_en - dozvola upisa <strong>podataka</strong> u pomerački registar za podatke<br />

4. data_shift_en - dozvola za pomeranje <strong>podataka</strong> u shift registru<br />

5. data_shift_reset - reset shift registra za podatke<br />

6. preamb_write_en - dozvola upisa u registar za preambulu<br />

7. preamb_shift_en - dozvola za pomeranje bitova preambule<br />

8. preamb_reset - reset registra za preambulu<br />

9. brojac_16_count_en - dozvola brojanja brojača 16<br />

10. brojac_16_reset - reset brojača 16<br />

11. registar_16_reset - reset registra 16<br />

12. registar_16_e<strong>na</strong>ble_H - dozvola upisa višeg bajta polja 2<br />

13. registar_16_e<strong>na</strong>ble_L - dozvola upisa nižeg bajta polja 2<br />

14. send_ack - potvrda o završetku predaje <strong>podataka</strong><br />

15. new_byte_req - zahtev za postavljanje novog bajta<br />

16. MUX_control_sig<strong>na</strong>l - sig<strong>na</strong>l kojim se postavlja multiplekser<br />

Spisak ulaznih sig<strong>na</strong>la automata<br />

1. reset - sig<strong>na</strong>l za resetovanja FSM kola<br />

2. clock - taktni sig<strong>na</strong>l FSM kola<br />

3. byte_sent_sig<strong>na</strong>l - sig<strong>na</strong>l iz kola brojača 8 koji <strong>na</strong>m govori da je poslat jedan bajt<br />

4. komp_sig<strong>na</strong>l - sig<strong>na</strong>l iz kola komparatora koji <strong>na</strong>m govori da je završeno sa slanjem<br />

paketa<br />

5. send_request - zahtev za slanje koji dolazi od modula koji šalje podatke<br />

6. new_byte_set - potvrda o postavljanju novog bajta<br />

31 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Automat ima 13 stanja koja definišu svaki trenutak prireme i slanje <strong>podataka</strong>:<br />

S1 - idle stanje. U okviru ovog stanja šalje se niz jedinica i nula<br />

S2 - pripremno stanje za slanje preambule. Ovo stanje koristi se za prebacivanje<br />

multipleksera iz stanja u kojem se šalje niz nula i jedinica u stanje slanja preambule.<br />

S3 - stanje u okviru kojeg se šalje preambula. Traje 7 taktnih intervala.<br />

S4 - stanje byte_req/byte_set_1. Traje 1 taktni interval<br />

S5 - stanje kada se upisuje viši bajt polja dužine paketa u registar 16. Traje jedan taktni<br />

interval.<br />

S6 - stanje u okviru kojeg se šalje viši bajt polja dužine paketa. Traje 6 taktnih intervala.<br />

S7 - stanje byte_req/byte_set_2. Traje 1 taktni interval<br />

S8 - stanje za upis drugog bajta polja dužine u registar 16. Traje jedan taktni interval.<br />

S9 - stanje u okviru kojeg se šalje drugi bajt polja dužine paketa. Traje 6 taktnih<br />

intervala.<br />

S10 - stanje byte_req/byte_set_3. Traje 1 taktni interval<br />

S11 - stanje regularnog upisa u shift registar. Traje jedan taktni interval.<br />

S12 - stanje u okviru kojeg se šalje jedan bajt podatka. Traje 6 taktnih intervala.<br />

S13 - Očekivanje novog zahteva za slanje.<br />

Početno stanje S1 je, kao što se vidi, stanje u kome nema slanje <strong>podataka</strong>. Tada sistem<br />

automatski šalje niz nula i jedinica. Kada predajni modul pošalje zahtev automatu da želi da<br />

pošalje podatke (sig<strong>na</strong>lom send_request), automat prelazi u stanje S2 gde se priprema za slanje<br />

preambule. Nakon jednog taktnog intervala sistem prelazi u stanje S3 u okviru koga šalje<br />

preambulu (47 heksadecimalno). Ovo stanje traje 7 taktnih intervala. Razlog zbog kojeg ovo<br />

stanje ne traje 8 taktnih intervala (kolika je i duži<strong>na</strong> preambule) je ta što pre isteka poslednjeg<br />

bita sistem mora od predajnog modula da zatraži postavljanje novog bajta jer tzv sekvenca rada<br />

kola je 8 bitova, odnosno informacije te dužine sa paralelno upisuju. Pa zato pre isteka osmog<br />

bita se traži zahtev od predajnog modula da postavi novi bit koji de se kasnije <strong>prenos</strong>iti. Zato<br />

<strong>na</strong>kon isteka sedmog taktnog intervala automat prelazi u stanje S4 gde automat sig<strong>na</strong>lizira<br />

modulu koji šalje podatke da treba da postavi novi bajt informacije koja se šalje. Kada dobije<br />

povratnu informaciju da je bit postavljen, automat prelazi u <strong>na</strong>redno stanje, S5. Kao što je<br />

<strong>na</strong>vedeno, u ovom stanju se <strong>na</strong>redni bajt upisuje u gornji deo registra_16, koji određuje dužinu<br />

polja <strong>podataka</strong>. Nakon jednog taktnog intervala, koliko traje ovo stanje, prelazi se u stanje S6<br />

gde se vrši slanje ovog bajta, koje traje 6 taktnih intervala. Pre isteka slanja ovog bajta <strong>podataka</strong><br />

ponovo se šalje zahtev predajnom modulu da postavi novi bajt <strong>podataka</strong>, koji de se sada upisati<br />

32 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

u niži nivi registra_16 (S7). Kada dobije potvrdu da je novi bajt postavljen, (S8) vrši se upis novog<br />

bajta u niži nivo registra_16. Za ovo vreme (2 dodat<strong>na</strong> takta) se i završi <strong>prenos</strong> višeg bajta (6+2<br />

bita) i može se odmah krenuti sa <strong>prenos</strong>om nižeg upisanog bita, što se dešava u stanju S9.<br />

Stanje S10 je identično stanju S7. Stanje S11 je slično stanju S8 ali s’tim što se sada upis u<br />

registar_16 završio pa sledi upis u pomerački registar koji de prosleđivati korisnu informaciju tj<br />

podatke. Oni se prosleđuju i šalju u stanju S12, koji traje takođe 6 taktnih intervala, dok za<br />

preostala 2 intervala šalje zahtev predajnom modulu za postavljanje i upis novih 8 bitova u<br />

pomerački registar. Kada se prenese ceo podatak sistem prelazi u stanje S13 gde očekuje zahtev<br />

za novo slanje <strong>podataka</strong>. Ukoliko dobije zahtev od predajnog modula za ponovnim slanjem<br />

<strong>podataka</strong>, automata prelazi u stanje S3 i krede iznova ceo postupak. Ukoliko ne dođe do zahteva<br />

za slanjem novog <strong>podataka</strong> od predajnog modula, automat prelazi u idle stanje S1 i počinje da<br />

<strong>prenos</strong>i <strong>na</strong>izmenični niz nula i jedinica.<br />

Slika 3.2.16: Graf stanja automata<br />

33 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Na Slici 3.2.17 je prikaza<strong>na</strong> tabela kodiranja sig<strong>na</strong>la automata, gde se može videti koji sig<strong>na</strong>l<br />

automata je aktivan za svako od 13 stanja automata.<br />

Stanje/sig<strong>na</strong>l S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13<br />

brojac_8_reset 1 1 0 1 0 0 1 0 0 1 0 0 1<br />

brojac_8_en 0 0 1 0 1 1 0 1 1 0 1 1 0<br />

data_write_en 0 0 0 0 1 0 0 1 0 0 1 0 0<br />

data_shift_en 0 0 0 0 0 1 0 0 1 1 0 1 0<br />

data_shift_reset 1 1 0 0 0 0 0 0 0 0 0 0 0<br />

preamb_write_en 0 1 0 0 0 0 0 0 0 0 0 0 1<br />

preamb_shift_en 0 0 1 0 0 0 0 0 0 0 0 0 0<br />

preamb_reset 1 0 0 0 1 0 0 0 0 0 0 0 0<br />

brojac_16_count_en 0 0 0 0 0 1 0 0 1 0 1 1 0<br />

brojac_16_reset 1 0 0 1 0 0 0 0 0 0 0 0 0<br />

registar_16_reset 1 0 0 1 0 0 0 0 0 0 0 0 0<br />

registar_16_e<strong>na</strong>ble_H 0 0 0 0 1 0 0 0 0 0 0 0 0<br />

registar_16_e<strong>na</strong>ble_L 0 0 0 0 0 0 0 1 0 0 0 0 0<br />

send_ack 0 0 0 0 0 0 0 0 0 0 0 0 1<br />

new_byte_req 0 0 0 1 0 0 1 0 0 1 0 0 1<br />

MUX_control_sig<strong>na</strong>l 00 00 01 01 10 10 10 10 10 10 10 10 10<br />

Slika 3.2.17: Tabela kodiranja sig<strong>na</strong>la automata<br />

34 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

4. OPIS ENTITETA KOLA U VHDL KODU<br />

U cilju boljeg razumevanja funkcije i strukture svakog bloka kola pojedniačno, <strong>na</strong>redni deo de<br />

biti posveden opisivanju entiteta <strong>na</strong>še šeme za <strong>prenos</strong> i <strong>kodiranje</strong> <strong>podataka</strong>. Obuhvatide<br />

strukturni opis (ulaz, izlaz i osnov<strong>na</strong> funkcija), njegova funkcija u kolu, kao i VHDL kod kojim je<br />

opisan u projektu.<br />

4.1 D Flip Flop<br />

D Flip Flop je standardno logičko kolo čije je uloga da informaciju <strong>na</strong> ulazu prikaže <strong>na</strong> izlaz samo<br />

kada je prisut<strong>na</strong> aktiv<strong>na</strong> ivica taktnog sig<strong>na</strong>la. U <strong>na</strong>šem slučaju je to rastuda ivica. Ima 3 ulaz<strong>na</strong> i<br />

jedan izlazni port. Koristimo ga kada želimo da zakasnimo određeni sig<strong>na</strong>l (D je skradenica od<br />

Delay). Jedan D flip flop je prikazan <strong>na</strong> Slici 4.1.1.<br />

Slika 4.1.1: D flip flop<br />

U <strong>na</strong>šem kolu D flip flop se koristi u realizaciji NRZ Level kodera i u predajnom modulu, gde se<br />

koristi da zakasni kontrolni sig<strong>na</strong>l za slanje odnosno pomeranje vrednosti preambule za jedan<br />

taktni interval. Opis entiteta D flip flopa, kao i njegova arhitektura su date kao:<br />

35 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

U deklaraciji entiteta vidimo da su svi portovi tipa Standard Logic (uzimaju vrednosti 0 ili 1), koji<br />

se <strong>na</strong>laze u biblioteci IEEE. Dok se u arhitekturalnom delu vidi da <strong>na</strong> rastudu ivicu taktnog<br />

sig<strong>na</strong>la vrednost <strong>na</strong> ulazu se dodeljuje fiktivnoj promenljivoj STANJE, čija se vrednost <strong>na</strong>kon<br />

ispitivanja uslova rastude ivice dodeljuje izlaznom portu Q. Ukoliko je aktivan reset sig<strong>na</strong>l,<br />

promenljivoj STANJE se dodeljuje vrednost 0.<br />

36 Maja Srbulovid 10966 / Marko Nikolid 10911


4.2 T Flip Flop<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

T Flip Flop je standardno logičko kolo koje invertuje vrednost <strong>na</strong> izlazu sa svakom pojavom<br />

rastude ivice taktnog sig<strong>na</strong>la <strong>na</strong> ulazu. U <strong>na</strong>šem kolu T flip flop se koristi za generisanje<br />

<strong>na</strong>izmeničnog niza nula i jedinica kada se sistem <strong>na</strong>lazi u idle stanju, kao i kod realizacije NRZ<br />

Mark i Bifatnog kodera. Ima dva ulaz<strong>na</strong> porta (clock i reset) i jedan izlazni.<br />

Slika 4.2.1: T Flip Flop<br />

Opis entiteta T flip flopa u VHDL kodu, kao u njegova arhitektura su date kao:<br />

37 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Kao i kod D flip flopa vidimo da se u opisu arhitekture uvodi fiktiv<strong>na</strong> promenljliva STANJE, koja<br />

ima početnu vrednost 0. Nakon dolaska svake rastude ivice nje<strong>na</strong> vrednost se invertuje.<br />

4.3 Multiplekser<br />

Multiplekser je logičko kolo sa više ulaza, jednim izlazom i jednim kontrolnim ulazom koji<br />

određuje koji ulaz de biti aktivan i samim tim njegova informacija prosleđe<strong>na</strong> <strong>na</strong> izlaz<br />

multipleksera. Broj ulaza predstavlja kombi<strong>na</strong>torsku logiku broja bitova kontrolnog ulaza tj<br />

ukoliko je kontrolni port jednobitni, maksimalni broj ulaza je 2. Ako je kontrolni ulaz dvobitni,<br />

maksimalni broj ulaza je četiri itd. U <strong>na</strong>šem slučaju imamo multipleksera 4 u 1, koji se koristi za<br />

realizaciju predajnog modula, i multiplekser 5 u 1 za realizaciju kodera, odnosno izbora jednog<br />

od kodera.<br />

38 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 4.3.1: Multiplekser a) 4u1 ; b) 5u1<br />

Opisi arhitektura multipleksera 4 u 1, kao i multipleksera 5 u 1 su dati kao:<br />

39 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

S’obzirom da Standard Logic tip <strong>podataka</strong> uzima, pored nule i jedinice, još šest vrednosti, <strong>na</strong><br />

kraju smo stavili da bilo koja druga kombi<strong>na</strong>cija <strong>na</strong> selektivnom ulazu dovodi multiplekser u<br />

stanje visoke impedanse (Z).<br />

40 Maja Srbulovid 10966 / Marko Nikolid 10911


4.4 Pomerački Registar<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Pomerački (shift) registar, kao što mu i samo ime govori, služi za pomeranje <strong>podataka</strong> koji su<br />

upišu u njega. U <strong>na</strong>šem slučaju pomerački registar koristimo za <strong>prenos</strong>, odnosno slanje<br />

preambule i korisne informacije, odnosno <strong>podataka</strong> ka kolu za <strong>kodiranje</strong>. Oba registra imaju po<br />

5 ulaznih portova i po 1 izlazni port. Jedan ulazni port je osmobitni (o<strong>na</strong>j koji viši upis u registar;<br />

jer se vrši paralelni upis od osam bitova), a ostala četiri su jednobitni portovi. To su clock, reset,<br />

write e<strong>na</strong>ble sig<strong>na</strong>l, koji omoguduje upis <strong>podataka</strong> u registar, i shift e<strong>na</strong>ble sig<strong>na</strong>l, koji<br />

omoguduje pomeranje, odnosno slanje <strong>podataka</strong>. Izgled jednog pomeračkog registra je dat <strong>na</strong><br />

Slici 4.4.1.<br />

VHDL kod za pomerački registar je dat kao:<br />

Slika 4.4.1: Pomerački registar<br />

41 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

U deklaraciji entiteta imamo definisanje jednobitnih ulaznih portova <strong>na</strong> isti <strong>na</strong>čin kao i kod flip<br />

flopova. Osmobitni ulazni port (kao i kod multipleksera) je tipa Standard Logic Vector sa<br />

bitovima težine od 0 do 7. U deklaraciji arhitekture se uvodi promenljiva STANJE koje je tipa<br />

Standard Logic Vector i koja de predstavljati novo stanje registra <strong>na</strong>kon pomeranja. Dakle,<br />

ukoliko je aktivan reset sig<strong>na</strong>l, registar se resetuje i STANJE je osam nula. Kada dodje do rastude<br />

ivice taktnog sig<strong>na</strong>la i kada je aktivan sig<strong>na</strong>l za upis u registar, stanje registra je ono što je <strong>na</strong><br />

ulazu. Ukoliko dođe do rastude ivice ivica taktnog sig<strong>na</strong>la a sig<strong>na</strong>l za upis nije aktivan, tada se<br />

aktivira sig<strong>na</strong>l za pomeranje i registar počinje pomeranje sadržaja ulevo. Bit oz<strong>na</strong>čen kao 7 (bit<br />

<strong>na</strong>jvede težine promenljive STANJE) se uvek vodi <strong>na</strong> izlaz registra, ostali deo se pomera ulevo i<br />

dodaje mu se jed<strong>na</strong> nula sa desne strane. I tako sve dok se ne pošalje i poslednji bit, odnosno<br />

dok promenljiva STANJE ponovo ne bude sve nule.<br />

42 Maja Srbulovid 10966 / Marko Nikolid 10911


4.5 Brojač<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Brojač, kao što mu ime govori, je logičko kolo koje se koristi za brojanje. U zavisnosti od<br />

potrebe, može brojati taktove, biitove, bajtove, ili za šta <strong>na</strong>m ved zatreba odnodno kako ga<br />

isprogramiramo. U <strong>na</strong>šem kolu imamo dva tipa brojača. Jedan, brojač_8, koristimo za brojanje<br />

bitova, i on <strong>na</strong>m govori kada treba dozvoliti upis novom nizu od osam bitova informacija. Drugi<br />

brojač je brojač_16, koji broji bajtove i služi <strong>na</strong>m da ukaže automatu kada je došlo do kraja<br />

<strong>prenos</strong>a <strong>podataka</strong> i zatražiti postavljanje novog bajta za upis i <strong>prenos</strong> od strane predajnog<br />

modula. Struktura im je ista. Imaju tri ulaza (reset, clock i count e<strong>na</strong>ble) i jedan izlaz. Razlika (u<br />

<strong>na</strong>šem slučaju) je samo u <strong>na</strong>činu taktovanja. Brojač_8 se taktuje standardnim clock sig<strong>na</strong>lom<br />

kojim se taktuju svi ostali entiteti u koli, dok se brojač_16 taktuje izlaznim sig<strong>na</strong>lom brojača_8.<br />

Dozvolu za brojanje oba brojača, kao i reset sig<strong>na</strong>le kontroliše automat. Na taj <strong>na</strong>čin smo<br />

postigli da brojač_16 dobije jedan taktni sig<strong>na</strong>l kada brojač_8 završi sa brojanjem osam bitova,<br />

odnosno jednog bajta. Oba brojača u sprezi su prikaza<strong>na</strong> <strong>na</strong> Slici 4.5.1.<br />

Slika 4.5.1: Brojač_8 i Brojač_16 u sprezi<br />

43 Maja Srbulovid 10966 / Marko Nikolid 10911


VHDL kodovi ovih brojača su data kao:<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Primedujemo da se za opis brojača koristi datoteka IEEE Numeric, koja se koristi za aritmetičke<br />

operacije (kod brojača, množača, sabirača...). U deklaraciji arhitekture uvodimo fiktivni sig<strong>na</strong>l<br />

STANJE od tri bita, koje de se aktivirati izlazni sig<strong>na</strong>l samo ukoliko stanje sig<strong>na</strong>la STANJE bude<br />

111. Nakon ispitivanja uslova za resetovanje brojača ispitujemo da li je došlo do rastude ivice<br />

taktnog sig<strong>na</strong>la i da li je aktivan sig<strong>na</strong>l za dozvolu brojanja. Ukoliko jeste, ispitujemo da li se<br />

44 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

brojač <strong>na</strong>lazi u poslednjem stanju (111). Ukoliko jeste, on ostaje u tom stanju<br />

(samozaustavljajudi brojač) i aktivira se izlazni sig<strong>na</strong>l. Ukoliko nije, onda se sa svakim taktom<br />

stanje brojača povedava za jedan. Kada dođe do poslednjeg stanja, ponovo se aktivira izlazni<br />

sig<strong>na</strong>l.<br />

45 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Razlika između ova dva brojača je ta što je izlaz brojača_16 16-o bitni sig<strong>na</strong>l koji se uporađuje sa<br />

izlazom registra_16 (kao što je ved objašnjeno). Zato <strong>na</strong> kraju moramo da stanje prebacimo u<br />

format Standard Logic Vector i da ga dodelimo izlazu (jer je definisan kao unsigned da bi svako<br />

sledede stanje moglo da se realizuje kao prethodno uvedano za jedan).<br />

4.6 Registar_16<br />

Registar_16 koristimo za čuvanje informacija o dužini paketa koji šaljemo. Zahvaljujudi njemu<br />

automat z<strong>na</strong> kada je došlo do <strong>prenos</strong>a poslednjeg bita <strong>podataka</strong> i da treba da zatraži novu<br />

informaciju od predajnog modula. Način upisa gornjeg i donjeg bajta u ovaj registar je ved<br />

objašnjeno. Sadrži jedan osmobitni ulaz (<strong>na</strong> koji se dovode informacije), četiri jednobit<strong>na</strong> ulaza<br />

(clock, reset, write e<strong>na</strong>ble 1 koji omogudava upis gornjeg bajta tj bajta vede težine, write e<strong>na</strong>ble<br />

2 koji omogudava upis donjeg bajta tj bajta niže težine). Izlaz registra_16 je šes<strong>na</strong>esto bitni (kao<br />

i izlaz brojača_16).<br />

Slika 4.6.1: Registar_16<br />

46 Maja Srbulovid 10966 / Marko Nikolid 10911


VHDL kod ovog registra je dat kao:<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Vidimo da <strong>na</strong>kon resetovanja ispitujemo uslov rastude ivice taktnog sig<strong>na</strong>la. Ukoliko jeste i<br />

ukoliko je aktivan e<strong>na</strong>ble_1 kontrolni ulaz, tada prvih osam bitova fiktivne promenljive STANJE<br />

ostaje nepromenjeno, a podaci sa ulaza postaju drugih osam bitova ove promenljive. Odnosno,<br />

upisao se donji bajt u ovaj registar. Ukoliko je aktivan ulaz e<strong>na</strong>ble_2, onda se upisuje gornji bajt<br />

u <strong>na</strong>š registar. I <strong>na</strong> kraju izlaz uzima vrednost <strong>na</strong>še fiktivne promenljive STANJE <strong>na</strong>kon njenog<br />

update-ovanje, odnosno <strong>na</strong>kon upisa oba bajta u registar.<br />

47 Maja Srbulovid 10966 / Marko Nikolid 10911


4.7 Komparator<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Komparator služi za upoređivanje dva vrednosti <strong>na</strong> izlazu iz brojača_16 i registra_16. Odnosdno,<br />

kada <strong>na</strong>kon slanje preambule brojač_16 krene da broji bitove i kada se vrednost <strong>na</strong> izlazu<br />

poklopi da vrednošdu <strong>na</strong> izlazu iz registra_16, z<strong>na</strong>mo da je došlo do poslednjeg bita podatka čiju<br />

dužinu određuje registar_16 i tada automat prelazi u novo stanje. Komparator ima, dakle, dva<br />

šes<strong>na</strong>estobit<strong>na</strong> ulaz<strong>na</strong> porta i jedan jednobitni izlazni port. On se aktivira kada se vrednost<br />

ulaznih portova poklopi tj izjedači. Izgled komparatora je dat <strong>na</strong> Slici 4.7.1.<br />

Slika 4.7.1: Komparator<br />

VHDL kod ovog komparatora je jednostavan i dat kao:<br />

Dakle izlaz je aktivan samo ukoliko su ulaz_1 i ulaz_2 komparatora jed<strong>na</strong>ki.<br />

48 Maja Srbulovid 10966 / Marko Nikolid 10911


4.8 Automat<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Automat sa ko<strong>na</strong>čnim brojem stanja je, kao što je ved rečeno, ključni element hand shake<br />

procedure. Kontroliše komunikaciju između svih blokova <strong>na</strong>šeg kola i generiše kontrolne sig<strong>na</strong>le<br />

za njihov rad. Ima ukupno šest ulaza i pet<strong>na</strong>est izlaza. Spisak svih ulaza/izlaza, kao i stanja<br />

automata ved je objašnjeno ranije. VHDL kod automata je dat kao:<br />

49 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

50 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

51 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

52 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

53 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

54 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

55 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

56 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

57 Maja Srbulovid 10966 / Marko Nikolid 10911


5. TESTIRANJE RADA KOLA<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

U cilju verifikacije dizaj<strong>na</strong>, <strong>na</strong>pravljen je Testbench <strong>na</strong> Waves Based principu i izvrše<strong>na</strong> je<br />

simulacija rada kola. Ispravnost rada kodera i predajnog modula bide objašnje<strong>na</strong> <strong>na</strong> talasnim<br />

oblicima bitnijih kontrolnih i izlaznih sig<strong>na</strong>la.<br />

Ulaz je zamišljen kao izlaz iz brojača modula 255, a u određenim vremenskim intervalima (32us,<br />

159us i 167us) se <strong>na</strong> ulaz dovode bitovi koji određuju dužinu paketa. Oni se dovode pomodu<br />

porta koji je nezavistan u odnosu <strong>na</strong> brojač, i samo u tim vremenskim intervalima predajni<br />

modul zanemaruje izlaz iz brojača i upisuje podatke sa tog porta koji se <strong>na</strong>ziva second_field.<br />

Vrednost second_field polja se ne mogu menjati jer je protokolom zamišljeno da duži<strong>na</strong> paketa<br />

bude 2 bajta.<br />

Mogude je menjati samo vrednosti ulaznog sig<strong>na</strong>la (proizvolj<strong>na</strong> sekvenca dužine 16 bajtova),<br />

kao i izbor <strong>koda</strong> u Testbench fajlu.<br />

Na Slici 5.1 je prikazan izgled Testbench fajla za slučaj kada ulazni sig<strong>na</strong>l uzima vrednosti koje se<br />

generišu <strong>na</strong> izlazu brojača modula 255.<br />

Slika 5.1<br />

58 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 5.2 pokazuje izgled Testbench fajla za slučaj kada želimo sami da unesemo sekvencu za<br />

<strong>kodiranje</strong>. Treba <strong>na</strong>pomenuti da sekvenca mora biti dužine dva bajta i to u trenucima kao što je<br />

<strong>na</strong>z<strong>na</strong>čeno <strong>na</strong> slici. Dve crte <strong>na</strong> početku svakog reda u VHDL kodu oz<strong>na</strong>čavaju da je u pitanju<br />

komentar i da nemaju uticaja u izvršenju Testbench fajla.<br />

Slika 5.2<br />

Ukoliko želimo da promenimo kod, to možemo učiniti promenom code_select sig<strong>na</strong>la kao što je<br />

prikazano <strong>na</strong> slici 5.3.<br />

Slika 5.3<br />

Verifikacija rada kola je data <strong>na</strong> Slici 5.4 i Slici 5.5<br />

59 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 5.4<br />

60 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 5.5<br />

61 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Kao što je protokolom opisano, sistem se <strong>na</strong>lazi u idle stanju sve dok ne dobije zahtev od<br />

predajnog modula za slanje <strong>podataka</strong> (sig<strong>na</strong>lom send_reuest). Do tog trenutka se šalje niz nula i<br />

jedinica (15us). Nakon toga automat prelazi u stanje S2 (pripremno stanje za slanje preambule).<br />

U slededem taktnom intervalu prelazi u stanje S3 u kojem se šalje preambula, kao što je<br />

prikazano <strong>na</strong> Slici 5.4 (17us). U stanju S4 se, <strong>na</strong>kon zahteva, postavlja novi bajt, koji se <strong>na</strong>kon<br />

toga upisuje u viši deo registra_16 (stanje S5), a u 32us se postavlja novi bajt za upis u niži deo<br />

registra_16. To se dešava u stanju S8. U 40us se krede sa slanjem <strong>podataka</strong> (stanje S10) i traje<br />

sve dok se ne pošalju dva bajta <strong>podataka</strong>. Tada se pošalje sig<strong>na</strong>l send_ack kojim se potvrđuje da<br />

je poslat poslednji bit <strong>podataka</strong> i očekuje zahtev za novo slanje (stanje S13), kao što je prikazano<br />

<strong>na</strong> Slici 5.5.<br />

62 Maja Srbulovid 10966 / Marko Nikolid 10911


6.LABORATORIJSKA VEŽBA<br />

ZADATAK 1.<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Proveriti ispravnost rada kola koristedi proizvoljan kod kojim de se podaci slati. Posmatrati<br />

dijagram stanja.<br />

Korak 1: Pokrenuti program Active-HDL 6.3 dvostrukim klikom <strong>na</strong> ikonicu<br />

smeštenu <strong>na</strong> desktop-u raču<strong>na</strong>ra.<br />

Korak 2: U prozoru Getting Started izabrati levim klikom miša opciju Open existing workspace,<br />

zatim levim klikom miša selektovati projekat transmit_unit i <strong>na</strong> kraju levim klikom <strong>na</strong> opciju Ok<br />

pozivamo program koji opisuje <strong>na</strong>še kolo.<br />

Slika 6.1: Ilustracija uz Korak 2<br />

63 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Posle Koraka 2 otvara se prozor kao <strong>na</strong> <strong>na</strong>rednoj Slici 6.2.<br />

Slika 6.2: Workspace (radni prostor) ’transmint_unit’<br />

Korak 3: Za prikaz blok šeme kola i kodera u projektnim fajlovima dvostrukim klikom otvorimo<br />

transmit_unit_sema.bde i koder.bde kao što je pokazano <strong>na</strong> Slici 6.3.<br />

Slika 6.3: Ilustracija uz Korak 3<br />

64 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Korak 4: Pokretanje TestBench vrši se tako što se pointerom oz<strong>na</strong>či testbench runtest fajl i<br />

desnim klikom pokrene meni iz kog se odabere opcija Execute. Na Slici 6.4 je prikazano<br />

pokretanje izvršenja fajla za testiranje transmit_unit kola.<br />

Slika 6.4: Ilustracija uz Korak 4<br />

Nakon pokrenutog TestBench-a otvara se prozor kao <strong>na</strong> Slici 6.5.<br />

Slika 6.5: Waveform Editor<br />

65 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Korak 5: Pokretanje simulacije vrši se levim klikom <strong>na</strong> ikonicu obojenu crvenom bojom.<br />

Slika 6.6: Ilustracija uz Korak 5<br />

Korak 6: Pored izlistanih sig<strong>na</strong>la izvlačimo i sig<strong>na</strong>l za stanje automata i sig<strong>na</strong>l za izlazno stanje<br />

brojača_8 kao što je prikazano <strong>na</strong> slici. Prevlačenje se vrši tako što levim klikom izaberemo kolo<br />

čiji sig<strong>na</strong>l želimo da prikažemo. U opadajudem meniju izaberemo sig<strong>na</strong>l i dok držimo levi taster<br />

sig<strong>na</strong>l samo prevučemo u editor.<br />

66 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 6.7: Ilustracije uz Korak 6<br />

Na <strong>na</strong>rednoj slici (Slika 6.8) crvenom bojom je oz<strong>na</strong>čeno da je vrednost code_select 2, što <strong>na</strong>m<br />

kazuje da je izabrani kod RZ. Crvenom bojom je oz<strong>na</strong>čen i izgled data_out.<br />

Slika 6.8: Izgled kodirane sekvence kodom RZ<br />

67 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Korak 7: Prome<strong>na</strong> <strong>koda</strong> kojim de se ulaz<strong>na</strong> sekvenca poslati. Prome<strong>na</strong> <strong>koda</strong> se vrši tako što se<br />

dvostrukim klikom otvori TestBench fajl i promeni vrednost sig<strong>na</strong>la kojim se selektuje kod kojim<br />

se podaci šalju. Posle promene vrednosti, pristupa se kompajliranju levim klikom <strong>na</strong> ikonicu<br />

obojenu crvenom bojom. Postupak je prikazan <strong>na</strong> Slici 6.9.<br />

Slika 6.9: Ilustracija uz Korak 7<br />

Korak 8: Ponovnim pokretanjem simulacije u Waveform Editoru možemo zapaziti da je sada<br />

vrednost code_select polja 3 (<strong>na</strong> slici obojeno crvenom bojom), a da je oblik data_out<br />

promenjen. Izabrani kod je sad Manchester. Promene su prikazane <strong>na</strong> Slici 6.10.<br />

68 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 6.10: Ilustracija uz Korak 8<br />

Napome<strong>na</strong>: Treba izabrati da vreme simulacije bude 200us (kao što može da se vidi <strong>na</strong> slikama),<br />

kao i da je izbor <strong>koda</strong> proizvoljan (kodovi su opisani u poglavlju 3).<br />

69 Maja Srbulovid 10966 / Marko Nikolid 10911


ZADATAK 2.<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Proveriti ispravnost rada kola koristedi proizvoljni ulazni sig<strong>na</strong>l (proizvolj<strong>na</strong> sekvenca dužine dva<br />

bajta). Posmatrati dijagram stanja.<br />

Korak 1: Pokrenuti program Active-HDL 6.3 dvostrukim klikom <strong>na</strong> ikonicu<br />

smeštenu <strong>na</strong> desktop raču<strong>na</strong>ra.<br />

Korak 2: U prozoru Getting Started izabrati levim klikom miša opciju Open existing workspace,<br />

zatim levim klikom miša selektovati projekat transmit_unit i <strong>na</strong> kraju levim klikom <strong>na</strong> opciju Ok<br />

pozivamo program koji opisuje <strong>na</strong>še kolo.<br />

Slika 6.11: Ilustracija uz Korak 2<br />

70 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Posle koraka 2 otvara se prozor kao <strong>na</strong> <strong>na</strong>rednoj slici:<br />

Slika 6.12: Workspace (radni prostor) ’transmint_unit’<br />

Korak 3: Za prikaz blok šeme kola i kodera u projektnim fajlovima dvostrukim klikom otvorimo<br />

transmit_unit_sema.bde i koder.bde kao što je pokazano <strong>na</strong> Slici 6.13:<br />

Slika 6.13: Ilustracija uz Korak 3<br />

71 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Korak 4: Pokretanje TestBench vrši se tako što se pointerom oz<strong>na</strong>či testbench runtest fajl i<br />

desnim klikom pokrene meni iz kog se odabere opcija Execute. Na slici 6.14 je prikazano<br />

pokretanje izvršenja fajla za testiranje transmit_unit kola.<br />

Slika 6.14: Ilustracija uz Korak 4<br />

Nakon pokrenutog TestBench-a otvara se prozor kao <strong>na</strong> <strong>na</strong>rednoj slici:<br />

Slika 6.15: Waveform Editor<br />

72 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Korak 5: Pokretanje simulacije vrši se levim klikom <strong>na</strong> ikonicu obojenu crvenom bojom.<br />

Slika 6.16: Ilustracija uz Korak 5<br />

Korak 6: Pored izlistanih sig<strong>na</strong>la izvlačimo i sig<strong>na</strong>l za stanje automata i sig<strong>na</strong>l za izlazno stanje<br />

brojača_8 kao što je prikazano <strong>na</strong> slici. Prevlačenje se vrši tako što levim klikom izaberemo kolo<br />

čiji sig<strong>na</strong>l želimo da prikažemo. U opadajudem meniju izaberemo sig<strong>na</strong>l i dok držimo levi taster<br />

sig<strong>na</strong>l samo prevučemo u editor.<br />

73 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 6.17: Ilustracije uz Korak 6<br />

Ulaz je zamišljen kao izlaz iz brojača modula 255, a u određenim vremenskim intervalima (32us,<br />

159us i 167us) se <strong>na</strong> ulaz dovode bitovi koji određuju dužinu paketa. Oni se dovode pomodu<br />

porta koji je nezavistan u odnosu <strong>na</strong> brojač, i samo u tim vremenskim intervalima predajni<br />

modul zanemaruje izlaz iz brojača i upisuje podatke sa tog porta koji se <strong>na</strong>ziva second_field.<br />

Vrednost second_field polja se ne mogu menjati jer je protokolom zamišljeno da duži<strong>na</strong> paketa<br />

bude 2 bajta.<br />

74 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Na <strong>na</strong>rednoj slici prikazan (uokviren crvenom bojom) je izgled sig<strong>na</strong>la data_in<br />

Slika 6.18: : Izgled data_in sig<strong>na</strong>la<br />

Korak 7: Prome<strong>na</strong> ulaza u kolo. Prome<strong>na</strong> ulazne sekvence vrši tako što se dvostrukim klikom<br />

otvori TestBench fajl i prati postupak prikazan <strong>na</strong> slikama 1. I 2. Posle promene vrednosti,<br />

pristupa se kompajliranju levim klikom <strong>na</strong> ikonicu obojenu crvenom bojom. Postupci su<br />

prikazani <strong>na</strong> ilustracijama sa Slike 6.19.<br />

75 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Slika 6.19: Ilustracije uz Korak 7<br />

76 Maja Srbulovid 10966 / Marko Nikolid 10911


PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Korak 8: Ponovnim pokretanjem simulacije Waveform Editoru možemo zapaziti da je sada<br />

izgled sig<strong>na</strong>la data_in izmenjen (<strong>na</strong> slici uokvireno crvenom bojom). Promene su prikazane <strong>na</strong><br />

Slici 6.20.<br />

Slika 6.20: Ilustracija uz Korak 8<br />

77 Maja Srbulovid 10966 / Marko Nikolid 10911


8.LITERATURA<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

1) J.Mirkowski, M.Kapustka, Z.Skovronski, A.Biniszkiewicz − “Interactive VHDL Tutorial REV.<br />

2.1”<br />

2) Dennis Derickson, Marcus Műller - “Digital Communications Test and Measurement”<br />

3) www.embedded.com - “Back to the future: Manchester encoding - Part 1” by Robert<br />

Guastella<br />

4) Dr Dejan B. Živkovid, Dr Miodrag V. Popovid - “Impuls<strong>na</strong> i digital<strong>na</strong> elektronika”,<br />

Elektrotehnički fakultet, Nauka, 1997<br />

5) Robert Guastella – “VHDL Programming by Example ”<br />

6) M.Stojčev, B.Petrovid - “Arhitekture i programiranje mikroraču<strong>na</strong>rskih sistema<br />

zasnovanih <strong>na</strong> familiji procesora 80x86”, Elektronski fakultet u <strong>Nišu</strong>, Niš, 1999<br />

7) Internet<br />

78 Maja Srbulovid 10966 / Marko Nikolid 10911


9.BIOGRAFIJE AUTORA<br />

PRENOS I KODIRANJE PODATAKA NA PRIMERU VHDL KODA Novembar<br />

2009.<br />

Ime i Prezime: Maja Srbulovid<br />

Datum i mesto rođenja: 15. Maj 1983. – Negotin<br />

Adresa stanovanja: Pariske Komune 9/21, Niš<br />

Obrazovanje: Negotinska gim<strong>na</strong>zija<br />

Godi<strong>na</strong> upisa fakulteta: 2002.<br />

Smer: Telekomunikacije<br />

Poz<strong>na</strong>vanje jezika: Engleski, Nemački<br />

Interesovanja: Putovanja, Raču<strong>na</strong>ri<br />

Ime i Prezime: Marko Nikolid<br />

Datum i mesto rođenja: 30. Avgust 1983. - Niš<br />

Adresa stanovanja: Starca Vujadi<strong>na</strong> 30, Niš<br />

Obrazovanje: Gim<strong>na</strong>zija „Svetozar Markovid“<br />

Godi<strong>na</strong> upisa fakulteta: 2002.<br />

Smer: Telekomunikacije<br />

Poz<strong>na</strong>vanje jezika: Engleski, Francuski<br />

Interesovanja: Putovanja, Sport, Me<strong>na</strong>džment veštine<br />

79 Maja Srbulovid 10966 / Marko Nikolid 10911

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!