univerzitet u ni Šu elektronski fakultet katedra za …es.elfak.ni.ac.rs/papers/lrcivrc.pdf ·...

55
UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET KATEDRA ZA ELEKTRONIKU LRC I VRC KODER/DEKODER Studenti: Miloš Milosević 10278 Miljan Nikolić 12046 Niš, februar 2007.

Upload: others

Post on 06-Jan-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET KATEDRA ZA ELEKTRONIKU

LRC I VRC KODER/DEKODER

Studenti: Miloš Milosević 10278 Miljan Nikolić 12046

Niš, februar 2007.

2

Sadržaj:

1. Uvod 3

2. VRC i LRC kodiranje 6 2.1. Princip rada USART­a 8251 7 2.2. Programiranje USART­a 8251 10 2.3. Standardni metodi za detekciju i korekciju gresaka kod serijskog prenosa 13 2.4. 2D Parnost – VRC i LRC parnost 14

3. Realizacija VRC i LRC koder/dekoder­a u VHDL­u 17 3.1. Kreiranje VHDL­a za VRC i LRC 18

3.1.1. Kolo za selekciju cipa 20 3.1.2. Control logic 21 3.1.3. Data buffer 22 3.1.4. Transmit buffer 23 3.1.5. Receive buffer 28 3.1.6. Sastavne komponente receive i transmit buffer­a 36

3.2. Prikaz rezultata simulacije 41 3.3. Sinteza i implementacija 42

4. Zadatak 47

5. Laboratorijska vežba 49

6. Literatura 55

3

1.UVOD

Pojam prenos podataka, ili komuniciranja podacima odnosi se na prenos informacije sa jednog mesta na drugo u kodiranoj formi pomocu informacionih sistema. Pre svega podaci se prenose izmedju komponenti samih racunara, racunara i perifernih uredjaja, racunara i udaljenih terminala (prenos na daljinu) itd. Prenos se ostvaruje kao serijski ili paralelni. Serijski prenos se koristi kada se vrsi prenos podataka na veca rastojanja i koristi se jedinstvena veza prko koje se u datom trenutku prenosi jedan bit podatka. Paralelni prenos se vrsi preko paralelnih magistrala koje sadrze jednu zicu po bitu n­to bitnog podatka, ali veliki broj potrebnih veza ogranicava njihovu primenu na relativno kratka rastojanja. Prilikom realizacije komunikacionih sistema uocavaju se pojedini blokovi koji se mogu svrstati u tri razlicite grupe : DTE (Data Terminal Equipment), DCE (Data Comunication Equipment) i kanal.

DTE je integrisana celina koju cine tastatura, CRT displej, memorija i upravljacka logika, tj. mikroracunarski sistem. DTE obezbedjuje: formatiranje alfanumerickih simbola, kontrolu gresaka, podrsku rada protokola i upravljanje tokom podataka. DCE (modulator/demodulator tj. modem) vrsi neophodnu konverziju izmedju DTE­a i kanala. DCE kontrolise vreme trajanja signala, definise propusni opseg predajnog/prijemnog signala, odredjuje nivo snage na predajnoj i prijemnoj strani sa ciljem da prenos bude efikasan i pouzdan. Kanal moze da se ostvari kablovskom ili radio vezom.

Terminali (DTE) predstavlaju izvoriste, odrediste, ili izvoriste i odrediste podatka. Mogu biti jednostavni (dumb terminal), pametni (smart terminal) i inteligentni (inteligent terminal), podeljeni prema mogucnosti obrade signala i funkcijama kojima raspolazu. Osnovna uloga terminala je kodiranje i slanje podatka kao i njegovo prihvatanje i dekodiranje. Savremene konstrukcije poseduju i deo za detekciju i korekciju gresaka nastalih u toku prenosa (pametni terminali). Prilikom prenosa podataka javljaju se izvesne poteskoce u odnosu na to kako prijemnik odredjuje kada pocinje i kada prestaje prenos podataka, kako se odredjuje trenutak u toku koga se uzorkuje stanje na liniji sa ciljem da se detektuje nailazak ‘0’ i ‘1’, kakve su slozenosti kola za komunikacioni interfejs i drugo. Ovo se resava koriscenjem definisanih pravila koji se nazivaju protokoli. Za postovanje ovih pravila neophodno je da predajnik modifikuje i prosiri blok podataka koji

4

salje, odnosno da izvrsi njegovo kodiranje, a od prijemnika se zahteva pravilno prihvatanje i dekodiranje prihvacenog bloka podataka. Hardverske komponente koje se koriste u ovu svrhu su koderi i dekoderi, koji cine osnovni deo komunikacionih interfejsa. Predajnik po pravilu ima relativno jednostavan zahtev, da blok podataka obradi i posalje prijemniku ali ovaj zakljucak ne vazi za prijemnik. Za asinhroni prenos prijemnik mora odrediti pocetak i kraj prenosa kao i trajanje takta, osim toga prilikom prenosa moze se javiti greska koja dovodi do nekorektnog prenosa. Otklanjanje ovih nedostataka se vrsi stvaranjem slozenijih protokola koji kao rezultat imaju slozeniju strukturu komunikacionih interfejsa. Ovo zahteva konstrukciju elektricnih komponenata koje podrzavaju rad sa vise razlicitih vrsta protokola. Jedna od mogucih realizacija je konstruisanje programibilnih komunikacionih interfejsa ciji ceo princip rada prouciti na INTEL­ ovom cipu 8251. Ovaj cip se moze koristiti za realizaciju inteligentnih terminala koji imaju ugradjene dodatne mogucnosti obrade i korisnicko­programibilne funkcije. Na osnovu principa rada USART­a 8251 konstruisali smo nas dizajn u VHDL­u koji simulira rad ovog cipa. Prilikom rada smo prosirili strukturu kola i omogucili da vrsi proveru LRC i VRC bita parnosti sto nije bilo moguce kod USART­a 8251. On je vrsio proveru samo za LRC. Kako kolo 8251 ima slozenu strukturu izvrsili smo uproscavanje ovog kola izbacivsi neke od mogucnosti za programiranje rada ovog cipa.

Zadatak se odnosi na kreiranje VHDL koda kola za serijski prenos podataka izmedju dva racunara. U cilju detekcije greske implementirana je tehnika VRC i LRC koja omogucava detekciju greske parnosti u bloku podataka. Zbog toga sto racunar istovremeno ucestvuje u prenosu, proces prijema i predaje dat je u jedinstvenom kolu VRC­LRC koder/dekoder.

Ukupna materija izlozena je u sledecem: U poglavlju 1.Uvod smo se upoznali sa pojmom prenos podataka, nacinima

njegove realizacije, opisali rad terminala i ukratko opisali predmet postavljenog zadatka.

U poglavlju 2.VRC i LRC kodiranje je opisan nacin rada kola USART 8251, nacin njegove upotrebe i njegovog programiranja, metodi za detekciju i korekciju gresaka kod serijskog prenosa.

U poglavlju 3.Realizacija VRC i LRC koder/dekoder­a u VHDL­u je opisan VHDL kod za konstruisanje cipa VRC­LRC koder/dekoder. Opisan je nacin projektovanja svake komponente koriscene za realizaciju ovog kola i njena uloga. Dati su rezultati izvrsene sinteze i implementacije.

U poglavlju 4.Zadatak je dat nacin za proveru ispravnosti rada LRC i VRC koder\dekoder­a.Opisan je nacin predaje podataka od magistrale ka serijskom izlazu i prijema serijskih podataka sa ulaza i njihovog postavljanja na magistralu u paralelnom obliku.

5

U poglavlju 5.Laboratorijska vežba je omoguceno da se studenti bolje upoznaju sa radom ovog kola u nekoliko razlicitih primera.

U poglavlju 6. je literatura.

6

2. VRC I LRC KODIRANJE

Kao tipican primer kola za serijski prenos podataka koristi se USART 8251 proizvod firme INTEL. Kod ovog kola je implementirana samo VRC tehnika, dok se LRC treba obaviti softverski. Iz ovog razloga koncepciju rada USART­a 8251 koristicemo kao model za implementaciju VRC i LRC koder/dekoder­a. U konkretnom slucaju VRC se formira u toku predaje svakog bajta podataka kao deveti (parity bit) a LRC se formira akumulativnim sabiranjem po modulu 2 sadrzaja celokupne poruke i salje kao poslednji bajt sa bitovima parnosti. Na prijemnoj strani obavlja se suprotna akcija, na nivou svakog bajta detektuje se greska parnosti primljenog, a na nivou celog bloka LRC parnosti. Signalizacija greske na prijemnoj strani vrsi se postavljanjem markera GRESKA u stanje ‘1’ ako je greska detektovana ili u stanje ‘0’ kada nema greske. U daljem tekstu, radi boljeg razumevanja problematike za serijski prenos, bice dat opis principa i strukture cipa USART 8251.

7

2.1. PRINCIP RADA USART 8251

Cip 8251 je univerzalni sinhrono­asinhroni prijemno­predajni cip dizajniran za prenos podataka u mikro kompjuterskim sistemima (USART). Izgled cipa je dat na slici:

D3

D2 D1

D0

D4

D5

D6

D7

RxD

GND

TxC WR CS C/ D RD

RxRDY TxRDY SYNDET CTS

TxEMPTY TxD CLK RESET DSR RTS DTR

RxC V CC

8251

1 2

12

4 5 6

3

7

14

9 8

10

13

11

15 16

18 19 20

17

21

22 23 24

26 27 28

25

0 7 D D

RESET

C/ D RD WR CS CLK

TxC TxD

RxD RxC

RxRDY TxRDY

Pin Name Pin Function Data Bus (8­b it s)

Control or Data is to be Writ ten or Read

Read Data Command Write Data or Control Command Chip Enable Clock Pulse (TTL)

Reset

Transmit ter Clock Transmit ter Data

Receiver Data Receiver Clock

Receiver Ready (has caracter 8080) Transmit ter Ready (ready for char from 8080)

Pin Name Pin Function

Data Set Ready Data Term inal Ready Sync Detect Request to Sent Data

Clear to Send Data Transmit ter is Empty

+5 Volt Supply Ground

DSR DTR SYNDET RTS CTS TxE V CC GND

Uloga cipa je da sa ulazno­izlazne magistrale D7 – D0 prihvata podatke iz CPU u paralelnom obliku i prosledjuje ih preko izlaza TxD u serijskom obliku, ili da serijske podatke primljene sa ulaza RxD prosledi preko ulazno­izlazne magistrale D7 – D0 na izlaz cipa u paralelnom obliku. Pored ovoga magistrala se koristi i za programiranje rada cipa. Ovakva realizacija cipa je kompatibilna sa mikrokompjuterskim sistemom INTEL 8080 i omogucava maksimalnu fleksibilnost. Celine od kojih se sastoji kolo su: upis­ispis, kontrolna logika,

8

modem kontrola, prihvatna i predajna kontrola koji sluze za kontrolu i korektno funkcionisanje cipa. Ulazni i izlazni signali ovih delova kola imaju upravljacku ulogu. Njima se upravlja radom kola i obezbedjuje pravilno proticanje signala kroz kolo. Primer je na slici 2

Bafer za podatke propusta podatke sa ulaza na internu magistralu ili obrnuto, dok TRANSMIT I RECEIVE bafer konvertuju paralelne podatke u serijske i serijske u paralelne u zavisnosti da li se podaci prihvataju ili salju iz kola. Ovakva realizacija omogucava vise razlicitih mogucnosti za prenosenje podataka.

Vidimo da ovo kolo omogucava velike mogucnosi za njegovu primenu jer ima razlicite mogucnosti za prenos podataka. Neki od primera gde se ovo kolo upotrebljava dati su na slici gde vidimo da ga je moguce koristiti u povezivanju CPU sa terminalima, uz pomoc modema sa telefonskim linijama i perifernim uredjajima.

9

10

2.2. PROGRAMIRANJE USART­A 8251

Nacin prenosenja podataka se odredjuje nacinom programiranja kola. Izgled bloka podataka izgleda kao na slici

Vidimo da osim podataka se na ulazu dovode i instrukcije koje odredjuju nacin rada kola. Odredjuju da li se podaci prenose sinhrono ili asinhrono, velicinu recu koje se prenose, da li se prenosi bit parnosti, broj STOP bitova i dr. Statusne reci osim sto definisu nacin rada kola daju i povratnu informaciju o stanju u kome se nalazi kolo. Ovom informacijom se javlja i da li je doslo do neke greske prilikom prenosa podataka.Nacin programiranja rada kola je sledeci: spoljni kontrolni pinovi se podesavaju u zavisnosti od smera prenosenja podataka ili se vrsi programiranje kola. Podesavanje spoljnih pinova dato je na slici.

Zatim se postavljanjem vrednosti ulazne magistrale vrsi programiranje cipa. Prvo se definisu instrukcije moda koje odredjuju da li je prenos sinhroni ili asinhroni, velicinu reci u podatku koji se prenosi, nacin provere bita parnosti itd. Izgled instrukcije moda dat je slikama u zavisnosti da li je prenos sinhroni ili asinhroni.

11

za asinhroni prenos za sinhroni prenos

Komandne instrukcije definisu smer prenosenja podataka, pauze prilikom prenosa, ponasanje izlaznih pinova prilikom pauza ili ako nisu aktivni tokom prenosa, nacin detektovanja greske itd. Izgled komandne naredbe i nacin odredjivanja njene vrednosti dat je na slici. Ovom naredbom je moguce programirati smer prenosenja podataka za svaki blok posebno.

12

Povratne informacije o radu kola i eventualnim greskama se dobijaju iscitavanjem statusne informacije. Njenu vrednost odredjuje USART 8251 na nacin prikazan na slici, a postavlja se na izlaznu magistralu za odredjenu vrednost kontrolnih pinova. Ovako se obezbedjuje da kontrolni uredjaji uvek imaju informaciju o stanju u kome se kolo nalazi.

13

2.3. STANDARDNI METODI ZA DETEKCIJU I KOREKCIJU GRESAKA KOD SERIJSKOG PRENOSA

Kao sto smo vec napomenuli, sistemi za prenos podataka koriste digitalno kodirane signale podlozni su uticaju razlicitih oblika sumova, izoblicenja i interferencija. Zbog uticaja ovih faktora izlaz kanala se razlikuje od ulaza i nepostoji uparenost podataka na ulaznoj i prijemnoj strani. Posebnu paznju posveticemo nacinu kodovanja signala koji omogucavaju da se ove greske detektuju i njihovu manipulaciju u cilju ispravljanja gresaka. Tehnike za detekciju i korekciju gresaka ticu se zastite digitalne informacije od gresaka i ocuvanja integriteta podataka. Realizacija ovh tehnika je usko povezana sa protokolom za prenos podataka, a samim tim i sa nacinom kodiranja podataka za prenos. Postoje tri osnovna nacina pristupa za detekciju gresaka:

a. provera kod udaljene povratene petlje. Princip provere ispravnosti prenetog podatka se odvija na sledeci nacin. Prijemnik svaki primljeni podatak vraca predajniku radi provere (kaze se da postoji eho). Princip ovog rada prikazan je na slici 5. ovaj pristup je neatraktivan jer se za proveru koristi isti medijum. U glavnom se ovaj metod koristi za direktno povezivanje racunara i terminala kod kojih postoji mala verovatnoca greske.

b. EDAC (error detection and correction) koristi tehniku redudoncije na osnovu koje se vrsi detekcija gresaka. Na pojavu greske na prijemniku se zahteva novo slanje bloka podataka (retransmisiju poruke). Tri standardne seme za detekciju greske su VRC (vertical redudoncy check), LRC (longitudal redudoncy check), CRC (cyclic redudoncy check). Za razliku od prethodnog metoda ovde se blok podataka prosiruje bitovima parnosti pa je potrebno uvesti slozenije kodiranje bloka podataka.

c. FCS (forward error correction) – detekciju i korekciju gresaka prijemnik vrsi na osnovu redudontnosti pa zbog toga u slucaju da se javi greska u prenostu ne postoji potreba za retransmisijom poruke vec se vrsi njena

d. detekcija i korekcija. Ovde se detekcija vrsi pomocu hamingovog rastojanja. Ovom metodom se postize najveca pouzdanost u prenosu podataka ali je zato najslozeniji I zahteva veliku slozenost komunikacionog softvera.

14

2.4. 2D PARNOST – VRC I LRC PARNOST

Seme za detekciju gresaka koje koriste parnost imaju veliku primenu. Provera parnosti nad znakom (karakterom) se zove vertikalna parnost, dok provera odgovarajucih bitova svakog znaka u poruci (blok podataka) se naziva longitudalna parnost. Na slici 6 prikazan je princip formiranja longitudalne i vertikalne parnosti kod poruke koju cine N bajtova. VRC se formira shodno relaziji:

7 VRC = Vi + ∑ αij gde je VRC=0.1

J=0

u zavisnosti od toga da li se koristi parna ili neparna parnost respektivno.

Kodovi parnosti su

parna parnost

ukupan broj jedinica u kodnoj reči je paran: ­ 0110110 1 ­ 0001011 0

neparna parnost

ukupan broj jedinica u kodnoj reči je neparan:

­ 0110110 0 ­ 0001011 1

Jednostruke i neparan broj gresaka se moze detektovati na osnovu provere parnosti, dok se paran broj gresaka ne detektuje. Prilikom slanja podataka se generise vid parnosti izracunavanjem sume po modulu 2 i pridruzuje ga povorci impulsa. Prijemno kolo radi na sledeci nacin: izracunava, sumu po modulu 2 od primljenih bitova i proverava da li se poklapa sa bitom parnosti. Ako ne postoji greska imamo korektan prenos osim ako ne postoji paran broj gresaka.

15

Serisko paralelni konver tor

Paralelno seriski

konver tor

Racunar Seriska veza

terminal

Rx

Rx

Tx

Tx

Slika 9.47 Koriscenje eho signala kod povezivanja terminal­racunar

LRC se formira kao:

7 LRC = Lj + ∑ αij gde je LRC = 0.1

i=1

u zavisnosti od parne ili neparne parnosti. Moguca je kombinacija ovih dveju metoda. Primetimo da svaka od njih vrsi jednodimenzionu promenu parnosti (1D). upotrebom ove dve metoda zajedno dobijamo dvodimenzionu proveru bita parnosti (2D). Ako poruku cine n znakova a svaki znak se sastoji od 7 bitova podataka I jedan bit parnosti tada je odnos brojeva bita parnosti I bitova podataka (n+8)/7*n sto za veliko n daje priblizno 1/7. Ovde vidimo da je ekonomicnost veoma losa ali ukoliko se koristi za nepouzdane sisteme ovaj metod ima znacajne prednosti. Kod nepouzdanih sistema je velika verovatnoca pojave parnog broja gresaka. Ako koristimo 2D parnost ove greske se mogu otkriti. Neparan broj gresaka otkriva svaka od ovih tehnika, dok je njihovom kombinacijom moguce otkriti odredjeni paran broj gresaka. Pored toga ovaj metod se moze iskoristiti i za korekciju ako se u prenosu javi jedna greska, ali se metod za korekciju koristi kod visoko pouzdanih

16

sistema gde je verovatnoca pojave vise od jedne greske u bloku veoma mala. Greska se koriguje na sledeci nacin: bice detektovana i u bit parnosti VRC­a i u bitu parnosti LRC­a. Na osnovu VRC­a znace se tacan znak u nizu znakova koji se prenosi, dok ce greska u LRC­u odrediti tacan bit u znaku koji je nekorektno prenesen. Invertovanjem ovog bita imacemo korektne vrednosti bita parnosti. Ovo se moze iskoristiti za konstruisanje komunikacionih interfejsa sa visokom pouzdanoscu cija slozenost nije velika jer se svodi na konstruisanje hardvera za izracunavanje VRC­a I LRC­a.

17

3. REALIZACIJA LRC I VRC KODER/DEKODER­A U VHDL­U

Na osnovu razmatrane arhitekture cipa 8251, i poznavanja nacina kodiranja bitom parnosti, moguce je realizovati terminal koji ce osim prenosa podataka vrsiti i funkciju detekcije i korekcije gresaka (smart terminal). Realizacijom ovakve strukture koja bi zadovoljavala pravila nekog odredjenog protokola stvorili bi hardver koji bi omogucavao prenos podataka sa visokom pouzdanoscu, ali bi ekonomicnost bila umanjena zbog velikog broja bitova parnosti. Prednosti konstrukcije ovakvog uredjaja su u tome sto omogucava i korekciju jedne greske. Prikazana je realizacija jednog smart terminala pomocu VHDL­a i njegov nacin upotrebe. Ovakva realizacija vrsice VRC i LRC proveru bita parnosti za razliku od USART­a 8251 koji vrsi samo LRC proveru. Zbog slozenosti samog cipa 8251 ogranicili smo se samo na sinhroni prenos podataka. Unapred smo definisali i velicinu reci u bloku podataka koji se prenosi na 8 bitova, kao i velicinu bloka podataka odredjenu generic konstantom N. Ovim smo znatno smanjili mogucnosti za programiranje rada realizovanog kola, ali nam ovo omogucava da realizujemo kompaktnu strukturu zgodnu za prezentaciju i dalju nadogradnju.

18

3.1. KREIRANJE VHDL­A ZA VRC I LRC

Na osnovu dosadasnjeg razmatranja moguce je realizovati kolo koje moze da se koristi za prenos podataka u komunikacionom sistemu. Kolo moze da se koristi za komunikacione nacine rada simpleks i potpuni dupleks dok je za polu dupleks potrebno povezivanje pomocu modema. Zbog jednostavnosti koriscen je sinhroni prenos podataka. Provera bita parnosti je hardverski realizovana sto znatno olaksava koriscenje ovog kola. Ovo bi bio primer jednog smart terminala i njegova osnovna sema je prikazana na slici:

CE

D(7:0)

Clk

Greska RxD TxD

Start WR

Funkcije pinova date su sledecom tabelom:

Pin Funkcija pina Tip Clk Takt in CE Chip enabled in Start Dozvoljava pocetak rada kola in WR Odredjuje smer toka podataka, podaci sa magistrale salju se na

izlaz TxD ili se sa ulaza RxD prenose na magistralu in

D(7:0) Ulazno­izlazna magistrala za podatke inout TxD Linija za slanje podataka out RxD Linija za primanje podataka in Greska Izlazni signal koji javlja gresku prilikom prenosa out

19

Kolo radi na sledeci nacin.Prvo se na ulaz CE dovede ‘1’ da bi se dozvolio aktivni rezim rada kola. Dovodjenjem signala ‘1’ na ulaz Start kolo pocinje sa radom i u zavisnosti od ulaza WR vrsi se prenos sa magistrale podataka D na izlaz TxD (slanje podataka) ili se sa ulaza RxD primaju podaci i postavljaju na magistralu D (primanje podataka). Prilikom slanja podataka osmobitni podatak sa magistrale se prevodi u serijski oblik, prosiruje bitom parnosti koristeci 2D parnost i salje preko izlaza TxD. Prilikom primanja podataka serijski podaci sa ulaza RxD se konvertuju u paralelni oblik i vrsi se provera njegovog bita parnosti. Ukoliko se bitovi parnosti poklapaju prenos je korektan i izlaz Greska se drzi u stanju ‘0’, ako se pojavi greska to se signalizira promenom stanja na ‘1’ i izlaz zadrzava to stanje do novog ciklusa. Velicinu bloka podataka koji se prenosi odredjuje generic konstanta N. Nakon N prenetih bitova prenose se V­bitovi parnosti. Blok dijagram ovako realizovanog kola dat je na slici:

Start WR

Clk

RxD

TxD D(7:0)

Start In_out

WR Out_in

ControlLogic1

ControlLogic

clk1

TxD

enable

inMag(7:0)

TransmitBuf1

TransmitBuf

enable

in1(7:0)

in_Mag

inMag(7:0)

DataBuf1

databuf

N : integer := 3

Generic_1 Clk1

Greska Enable

outMag(7:0) RxD

ReceiveBuf1

ReceiveBuf

Greska

interna_mag(7:0)

CE CE

Greskain Greskaout

Startout Startin

WRout WRin

KoloZaSelekcijuCipa1

KoloZaSelekcijuCipa

20

3.1.1. KOLO ZA SELEKCIJU CIPA

Kolo za selekciju cipa obezbedjuje da je kolo aktivno samo kada je na ulazu CE postavljena ‘1’.U slucaju kada kolo nije aktivno,kada je na CE postavljena ‘0’, obezbedjuje se da su izlazi koji su vezani za magistralu postavljeni u stanje visoke impedanse, kako dato kolo(za selekciju cipa) ne bi smetalo pri komunikaciji sa drugim perifernim uredjajima.Njegov kod je:

library IEEE; use IEEE.std_logic_1164.all;

entity KoloZaSelekcijuCipa is generic(

N : integer := 3 ); port(

CE : in STD_LOGIC; Startin : in STD_LOGIC; Startout : out STD_LOGIC; WRin : in STD_LOGIC;

WRout : out STD_LOGIC; Greskain : out STD_LOGIC; Greskaout : in STD_LOGIC

); end KoloZaSelekcijuCipa;

architecture KoloZaSelekcijuCipa_arch of KoloZaSelekcijuCipa is begin

Startout <= Startin when CE = '1' else '0'; WRout <= WRin when CE = '1' else '0';

Greskain <= Greskaout when CE = '1' else 'Z'; end;

21

3.1.2. CONTROL LOGIC

Control Logic kola koje ima upravljacku i kontrolnu funkciju. U zavisnosti od ulaza Start i WR kao i stanja na izlazu Greska kolo odredjuje stanje u kome se kolo nalazi kao i smer prenosa podataka. Signalima In_out i Out_in se vrsi upravljanje ostalim elementima u kolu i vrsi se aktiviranje odgovarajucih blokova. Kod ove komponente je:

library IEEE; use IEEE.std_logic_1164.all; entity ControlLogic is port (

Start : in std_logic; WR : in std_logic; In_out : out std_logic; Out_in : out std_logic

); end entity; architecture CL_arch of ControlLogic is begin

process (Start , WR) begin if Start = '1' then

if WR = '1' then In_out <= '0'; Out_in<= '1';

else In_out <= '1'; Out_in<= '0';

end if; else

In_out <= '0'; Out_in <= '0';

end if; end process;

end;

22

3.1.3. DATA BUFFER

Data Buf je deo kola koje obezbedjuje pravilan smer prenosenja podataka izmedju ulazne i interne magistrale. U zavisnosti od stanja kontrolnog ulaza In_mag podaci se prenose sa interne na ulaznu magistralu ili obrnuto. Kada kolo nije aktivno Enable ulaz je u stanju ‘0’ i prikljucci bafera sa magistralama su u stanju visoke impedanse da ne bi opterecivali magistrale. Njegov kod je:

library IEEE; use IEEE.std_logic_1164.all;

entity DataBuf is port (

in1 : inout std_logic_vector(7 downto 0); inMag : inout std_logic_vector(7 downto 0);

enable : in std_logic; in_Mag : in std_logic

); end entity; architecture DataBuf_arch of DataBuf is signal pom : std_logic_vector(7 downto 0); begin process (in_Mag , enable , in1 , inMag) begin if enable = '1' then

if in_Mag = '1' then in1 <= inMag;

end if; if in_Mag = '0' then

inMag <= in1; end if;

else inMag <= "ZZZZZZZZ"; in1 <= "ZZZZZZZZ";

end if; end process;

end;

23

3.1.4. TRANSMIT BUFFER

Transmit Buf je deo kola koje obezbedjuje pravilno slanje podataka. Paralelne podatke sa interne magistrale prevodi u serijski oblik, prosiruje ih odgovarajucim bitovima parnosti i prosledjuje ih na izlaz TxD. Sema transmit bafera je:

.

I0 O

I1S

Multiplexer

mux

Start

Clk1

clk

Clk2

Load1

Load2

Reset S

Upravljanje

UpravljanjeTransmit

I(7:0) O

XorH

xorkolo

I1(8:0) O(8:0)

I2(8:0)

XorV

XorKolo9

CLK

O

CLR

O1(8:0) DATA(8:0)

LOAD

SI

shift_reg1

shft_reg

enable clk1

TxD

inMag(7:0)

N : integer

Generic_1

pom(7:0)

pom(7:0)

pom(8:0)

pom(8:0)

pom(8)

pomClk1

pomClk2

pomLoad1

pomLoad2

pomReset

pomS

T1

T2

CLK

O

CLR

O1(8:0) DATA(8:0)

LOAD

SI

shift_reg2

shft_reg Nula

Ulazni podatak se dovodi sa interne magistrale. On se prosiruje bitom parnosti koji se izracunava u kolu XorH. Ovako prosiren podatak se prosledjuje do shift_reg1 registra koji u narednih 9 taktova salje bit po bit ovog podatka na izlaz. Prosiren podatak se dovodi i na ulaz XorV kola koji vrsi sabiranje po modulu 2 sa vec postojecim VRC bitom parnosti. Ovako se dobije novi bit parnosti koji je rezultat sabiranja po modulu 2 ovog i svih prethodno unetih podataka. Posle poslednjeg podatka u bloku u registru shift_reg2 se nalazi VRC celog bloka koji se zatim salje na izlaz preko multipleksera. Upravljanje obezbedjuje da se slanje VRC vrsi posle poslednjeg prenetog podatka.Njegov kod je:

24

library IEEE; use IEEE.std_logic_1164.all;

entity TransmitBuf is generic(

N : integer ); port(

Nula : in STD_LOGIC := '0'; clk1 : in STD_LOGIC; enable : in STD_LOGIC; inMag : in STD_LOGIC_VECTOR(7 downto 0); TxD : out STD_LOGIC

); end TransmitBuf;

architecture TransmitBuf of TransmitBuf is

­­­­ Component declarations ­­­­­ component mux port (

I0 : in STD_LOGIC; I1 : in STD_LOGIC; S : in STD_LOGIC; O : out STD_LOGIC

); end component; component shft_reg port (

CLK : in STD_LOGIC; CLR : in STD_LOGIC; DATA : in STD_LOGIC_VECTOR(8 downto 0); LOAD : in STD_LOGIC; SI : in STD_LOGIC; O : out STD_LOGIC; O1 : out STD_LOGIC_VECTOR(8 downto 0)

); end component; component UpravljanjeTransmit

25

generic( N : INTEGER

); port (

Start : in STD_LOGIC; clk : in STD_LOGIC; Clk1 : out STD_LOGIC; Clk2 : out STD_LOGIC; Load1 : out STD_LOGIC; Load2 : out STD_LOGIC; Reset : out STD_LOGIC; S : out STD_LOGIC

); end component; component xorkolo port (

I : in STD_LOGIC_VECTOR(7 downto 0); O : out STD_LOGIC

); end component; component XorKolo9 port (

I1 : in STD_LOGIC_VECTOR(8 downto 0); I2 : in STD_LOGIC_VECTOR(8 downto 0); O : out STD_LOGIC_VECTOR(8 downto 0)

); end component; ­­­­ Signal declarations used on the diagram ­­­­ signal pomClk1 : STD_LOGIC; signal pomClk2 : STD_LOGIC; signal pomLoad1 : STD_LOGIC; signal pomLoad2 : STD_LOGIC; signal pomReset : STD_LOGIC; signal pomS : STD_LOGIC; signal T1 : STD_LOGIC; signal T2 : STD_LOGIC; signal BUS215 : STD_LOGIC_VECTOR (8 downto 0); signal BUS227 : STD_LOGIC_VECTOR (8 downto 0); signal pom : STD_LOGIC_VECTOR (8 downto 0); begin

26

­­­­ Component instantiations ­­­­ Multiplexer : mux port map(

I0 => T1, I1 => T2, O => TxD, S => pomS

); Upravljanje : UpravljanjeTransmit generic map (

N => N ) port map(

Clk1 => pomClk1, Clk2 => pomClk2, Load1 => pomLoad1, Load2 => pomLoad2, Reset => pomReset, S => pomS, Start => enable, clk => clk1

); XorH : xorkolo port map(

I(0) => pom(0), I(1) => pom(1), I(2) => pom(2), I(3) => pom(3), I(4) => pom(4), I(5) => pom(5), I(6) => pom(6), I(7) => pom(7), O => pom(8)

); XorV : XorKolo9 port map(

I1 => pom, I2 => BUS215, O => BUS227

);

27

shift_reg1 : shft_reg port map(

CLK => pomClk1, CLR => pomReset, DATA => pom, LOAD => pomLoad1, O => T1, SI => Nula

); shift_reg2 : shft_reg port map(

CLK => pomClk2, CLR => pomReset, DATA => BUS227, LOAD => pomLoad2, O => T2, O1 => BUS215, SI => Nula

); ­­­­ Terminal assignment ­­­­ ­­ Inputs terminals pom(0) <= inMag(0); pom(1) <= inMag(1); pom(2) <= inMag(2); pom(3) <= inMag(3); pom(4) <= inMag(4); pom(5) <= inMag(5); pom(6) <= inMag(6); pom(7) <= inMag(7);

end TransmitBuf;

Transmit bafer se sastoji od XorH kola koje izracunava L­bit parnosti i njime prosiruje podatak, Shift_reg1 koji konvertuje podatak iz poralelnog u serijski oblik, XorV kola koje izracunava V­bit parnosti, Shift_reg2 za cuvanje V­bitova parnosti i njihovo serijsko slanje na kraju bloka podataka preko multipleksera Mux i kolo za upravljanje Transmit baferom.

28

3.1.5. RECEIVE BUFFER

Receive Buf je deo kola koji obezbedjuje pravilno prihvatanje podataka, prevodjene iz serijskog u paralelni oblik i proveru 2D bita parnosti da bi se utvrdilo da nije doslo do greske prilikom prenosa. Podatke prosledjuje na internu magistralu odakle se prenose na ulazno­izlaznu magistralu za podatke. Sema receive bafera prikazana je na slici:

CLK

O

CLR

O1(8:0) DATA(8:0)

LOAD

SI

U1

shft_reg

I(7:0) O

U2

xorkolo I1 O

I2

U3

komparator

I1(8:0) O(8:0)

I2(8:0)

U4

XorKolo9

CLK

O

CLR

O1(8:0) DATA(8:0)

LOAD

SI

U5

shft_reg

I1(8:0) O

I2(8:0)

U6

Komparator9

I0 O

I1S

U7

mux

Nula

RxD

Start

Clk1

clk

Clk2

Load1

Load2

Reset S

U8

UpravljanjeTransmit

Enable Clk1

Greska

outMag(7:0)

pom(8:0)

pom(7:0) pom(8)

pom(7:0)

N : integer :=3

Generic_1

Receive buffer na ulazu prima serijske podatke koji se unose u shift registar. Nakon 9 taktova se na izlazu registra dobije podatak sa LRC bitom parnosti. Xorkolo U2 izracunava LRC bit parnosti podatka koji se u komparatoru U3 uporedjuje sa prenetim bitom parnosti. Ako su isti na izlazu za gresku se postavlja ‘0’ a ako su razliciti ‘1’ i tako se vrsi detekcija greske. Xorkolo U4 i shift_reg U5 vrse racunanje svih 9 bitova VRC parnosti. Poslednji preneti podatak iz bloka podataka je VRC parnost koja se uporedjuje sa izracunatom parnoscu i u slucaju greske javlja jedinicu na izlazu za gresku. Upravljanje obezbedjuje da se ova provera vrsi za poslednji preneti podatak iz bloka koji predstavlja bit parnosti.Njegov kod je:

29

library IEEE; use IEEE.std_logic_1164.all; entity ReceiveBuf is generic(

N : integer ); port(

Clk1 : in STD_LOGIC; Enable : in STD_LOGIC; Nula : in STD_LOGIC := '0'; RxD : in STD_LOGIC; Greska : out STD_LOGIC; outMag : out STD_LOGIC_VECTOR(7 downto 0)

); end ReceiveBuf;

architecture ReceiveBuf of ReceiveBuf is

­­­­ Component declarations ­­­­­

component komparator port (

I1 : in STD_LOGIC; I2 : in STD_LOGIC; O : out STD_LOGIC

); end component; component Komparator9 port (

I1 : in STD_LOGIC_VECTOR(8 downto 0); I2 : in STD_LOGIC_VECTOR(8 downto 0); O : out STD_LOGIC

); end component; component mux port (

I0 : in STD_LOGIC; I1 : in STD_LOGIC; S : in STD_LOGIC;

30

O : out STD_LOGIC ); end component; component shft_reg port (

CLK : in STD_LOGIC; CLR : in STD_LOGIC; DATA : in STD_LOGIC_VECTOR(8 downto 0); LOAD : in STD_LOGIC; SI : in STD_LOGIC; O : out STD_LOGIC; O1 : out STD_LOGIC_VECTOR(8 downto 0)

); end component; component UpravljanjeTransmit generic(

N : INTEGER ); port (

Start : in STD_LOGIC; clk : in STD_LOGIC; Clk1 : out STD_LOGIC; Clk2 : out STD_LOGIC; Load1 : out STD_LOGIC; Load2 : out STD_LOGIC; Reset : out STD_LOGIC; S : out STD_LOGIC

); end component; component xorkolo port (

I : in STD_LOGIC_VECTOR(7 downto 0); O : out STD_LOGIC

); end component; component XorKolo9 port (

I1 : in STD_LOGIC_VECTOR(8 downto 0); I2 : in STD_LOGIC_VECTOR(8 downto 0); O : out STD_LOGIC_VECTOR(8 downto 0)

31

); end component;

­­­­ Constants ­­­­­ constant DANGLING_INPUT_CONSTANT : STD_LOGIC := 'Z';

­­­­ Signal declarations used on the diagram ­­­­

signal NET105,pomclk1,notpomclk1,pomClk2 : STD_LOGIC; signal NET1729, greska1 : STD_LOGIC; signal NET362 : STD_LOGIC; signal NET457 : STD_LOGIC; signal NET467 : STD_LOGIC; signal NET490 : STD_LOGIC; signal NET496 : STD_LOGIC; signal NET704 : STD_LOGIC; signal NET708 : STD_LOGIC; signal NET74 : STD_LOGIC; signal BUS138 : STD_LOGIC_VECTOR (8 downto 0); signal BUS151 : STD_LOGIC_VECTOR (8 downto 0); signal pom : STD_LOGIC_VECTOR (8 downto 0); signal pomoutMag,pomoutMag1 : STD_LOGIC_VECTOR(7 downto 0); signal i,j:integer:=0; ­­­­ Declaration for Dangling input ­­­­ signal Dangling_Input_Signal : STD_LOGIC;

begin

­­­­ Component instantiations ­­­­

U1 : shft_reg port map(

CLK => NET457, CLR => NET467, DATA(0) => Dangling_Input_Signal, DATA(1) => Dangling_Input_Signal, DATA(2) => Dangling_Input_Signal, DATA(3) => Dangling_Input_Signal, DATA(4) => Dangling_Input_Signal, DATA(5) => Dangling_Input_Signal,

32

DATA(6) => Dangling_Input_Signal, DATA(7) => Dangling_Input_Signal, DATA(8) => Dangling_Input_Signal, LOAD => Nula, O1 => pom, SI => RxD

);

U2 : xorkolo port map(

I(0) => pom(0), I(1) => pom(1), I(2) => pom(2), I(3) => pom(3), I(4) => pom(4), I(5) => pom(5), I(6) => pom(6), I(7) => pom(7), O => NET74

);

U3 : komparator port map(

I1 => NET74, I2 => pom(8), O => NET105

);

U4 : XorKolo9 port map(

I1 => pom, I2 => BUS138, O => BUS151

);

U5 : shft_reg port map(

CLK => notpomclk1, CLR => NET467, DATA => BUS151,

33

LOAD => NET1729, O => NET704, O1 => BUS138, SI => Nula

);

U6 : Komparator9 port map(

I1 => pom, I2 => BUS138, O => NET362

);

U7 : mux port map(

I0 => NET105, I1 => NET362, O => greska1, S => NET496

);

U8 : UpravljanjeTransmit generic map (

N => N ) port map(

Clk1 => NET457, Clk2 => NET490, Load1 => NET708, Load2 => NET1729, Reset => NET467, S => NET496, Start => Enable, clk => Clk1

);

­­­­ Terminal assignment ­­­­

­­ Output\buffer terminals

34

pomoutMag(0) <= pom(0); pomoutMag(1) <= pom(1); pomoutMag(2) <= pom(2); pomoutMag(3) <= pom(3); pomoutMag(4) <= pom(4); pomoutMag(5) <= pom(5); pomoutMag(6) <= pom(6); pomoutMag(7) <= pom(7);

­­­­ Dangling input signal assignment ­­­­ process (enable , clk1) begin if enable = '1' then if rising_edge(CLK1) then

if j <= N­1 then if i <= 7 then

­­if i = 0 then

pomClk1 <= '0'; pomClk2 <= '0'; ­­else

­­

­­end if; i<=i+1;

else pomClk1 <= '1'; pomClk2 <= '1';

i<=0; j<=j+1;

end if; else if i <= 7 then

pomClk1 <= '0'; pomClk2 <= '0'; i<=i+1;

35

else

pomClk1 <= '0'; pomClk2 <= '1';

i<=0; j<=0;

end if; end if;

end if; else

i<=0; j<=0; pomClk1 <= '1'; pomClk2 <= '0';

end if; end process;

Dangling_Input_Signal <= DANGLING_INPUT_CONSTANT; pomoutMag1 <= pomoutMag when pomclk1 = '1' else "00000000"; outMag <= pomoutMag1 when enable = '1' else "ZZZZZZZZ"; notpomclk1 <= pomclk1 and (not clk1) ; Greska <= greska1 when pomclk2 = '1' else '0';

end ReceiveBuf;

Receive bafer se sastoji od shift_reg U1 koji konvertuje podatke iz serijskog u paralelni oblik, Xor kola U2 koje racuna L­bit parnosti prenetog podatka i uz pomoc komparatora U3 proverava ispravnost koju salje ka izlazu Greska, Xor kolo 0 koje sa shift_reg U5 racuna V­bitove parnosti, komparatorom U6 ih uporedjuje sa odgovarajucim prenetim podacima parnosti i informaciju prenosi na izlaz Greska, kolo za upravljanje obezbedjuje ispravan rad kola. Paralelni podaci se preko interne magistrale salju na izlaz , a podaci o eventualnoj greski se prosledjuju preko izlaza Greska.

36

3.1.6. SASTAVNE KOMPONENTE RECEIVE I TRANSMIT BUFFER­A

Ostala kola koja su koriscena u receive i transmit baferima su: shift_reg, komparatori, mux, Xorkolo i Xorkolo9, upravljanje. Njihovi kodovi su:

Xor kolo

library IEEE; use IEEE.std_logic_1164.all; entity XorKolo is port ( I:in std_logic_vector(7 downto 0); O : out std_logic );

end entity;

architecture XorKolo_arch of XorKolo is begin O <= I(0) xor I(1) xor I(2) xor I(3) xor

I(4) xor I(5) xor I(6) xor I(7); end XorKolo_arch;

Xor kolo 9

library IEEE; use IEEE.std_logic_1164.all;

entity XorKolo9 is port (

I1 : in std_logic_vector(8 downto 0); I2 : in std_logic_vector(8 downto 0); O : out std_logic_vector(8 downto 0) );

37

end entity;

architecture XorKolo9_arch of XorKolo9 is signal i : integer ; begin process ( I1 , I2 ) begin

LAB1 : for i in 0 to 8 loop O(i) <= I1(i) xor I2(i);

end loop; end process;

end XorKolo9_arch;

Shift registar

library IEEE; use IEEE.std_logic_1164.all;

entity shft_reg is port (

CLK : in std_logic; CLR : in std_logic; LOAD : in std_logic; DATA : in std_logic_vector(8 downto 0); SI : in std_logic ; O1 : out std_logic_vector(8 downto 0); O : out std_logic );

end entity; architecture shft_reg_arch of shft_reg is signal TEMP_O : std_logic_vector(8 downto 0);

begin process(CLK, CLR) begin

if CLR = '1' then TEMP_O <= (others => '0'); else

if rising_edge(CLK) and CLK ='1' then

38

if LOAD = '1' then TEMP_O <= DATA; else

TEMP_O <= SI & TEMP_O(8 downto 1); end if; end if;

end if; end process; O <= TEMP_O(0); O1 <= TEMP_O;

end architecture;

Komparator

library IEEE; use IEEE.std_logic_1164.all; entity Komparator is port (

I1 : in std_logic; I2 : in std_logic; O : out std_logic

); end entity;

architecture Komparator_arch of Komparator is begin O <= '0' when ( I1 /= I2 ) else '1';

end Komparator_arch;

Multiplekser

library IEEE; use IEEE.std_logic_1164.all; entity mux is port (

I0 : in std_logic;

39

I1 : in std_logic; S : in std_logic; O : out std_logic

); end entity; library IEEE; use IEEE.std_logic_unsigned.all; architecture mux_arch of mux is begin process (S, I0, I1) begin

if S = '0' then O <= I0;

else O <= I1;

end if; end process;

end architecture;

Upravljanje

library IEEE; use IEEE.std_logic_1164.all; entity Transmit is generic ( N : integer ); port (

Start : in std_logic; Reset : out std_logic; Load1 : out std_logic; Clk1 : out std_logic; Load2 : out std_logic; Clk2 : out std_logic; S : out std_logic; clk : in std_logic

); end entity;

architecture Upravljanje_arch of Upravljanje is signal i , j : integer := 0; signal pomClk1 , pomClk2 : std_logic;

40

begin process (Start , clk) begin if Start = '1' then if rising_edge(CLK) then

Reset <= '0'; if j <= N­1 then if i <= 7 then

if i = 0 then Load1 <= '1'; Load2 <= '1'; pomClk1 <= '1'; pomClk2 <= '1'; S <= '0'; else

Load1 <= '0'; Load2 <= '1'; pomClk1 <= '1'; pomClk2 <= '0'; S <= '0'; end if;

i<=i+1; else

i<=0; j<=j+1;

end if; end if;

end if; else

Reset <= '1'; Load1 <= '0';

Load2 <= '0'; pomClk1 <= '0'; pomClk2 <= '0';

S <= '0'; end if; end process;

Clk1 <= clk when pomClk1 = '1' else '0'; Clk2 <= clk when pomClk2 = '1' else '0';

end;

41

3.2. PRIKAZ REZULTATA SIMULACIJE

Radi lakseg testiranja koristiceno je polje podataka koje se sastoji od tri bajta. Njhova velicina definisana je generic konstantom N. Koriscen je primer dat tabelom:

1.bit 2.bit 3.bit 4.bit 5.bit 6.bit 7.bit 8.bit L­parnost 1.podatak 0 0 0 0 1 1 0 0 0 2.podatak 0 0 1 1 1 0 0 0 1 3.podatak 0 0 0 1 1 1 1 0 0 V­parnost 0 0 1 0 1 0 1 0 1

Unosenjem ovih vrednosti dobili smo sledeci rezultat za slanje podataka:

Clk

CE

Start

WR

RxD

TxD

Greska

D

ns 200 400 600 800 1000 1200 1400 1600 1800 2000 2200 2400 2600 2800 3000 3200 3400 3600

ZZ 0C 38 1E ZZ

0 0 1 0 0 1 0 0 0 0 0 0 1 1 1 0 0 1 0 1 1 1 1 0 0 0 0 0 1 0 1 0 1 0 0 1

Za unite odgovarajuce vrednosti na magistrali D dobili smo na izlazu TxD sledeci seriski izlaz:

00110000 0 00011100 1 01111000 0 00101010 1 1.broj sa L bitom parnosti, 2. 3. V bitovi parnosti

Radi provere uneta je ista ova sekvenca na ulaz RxD, pri cemu bi ocekivani rezultat na magistrali podataka ostao isti. Dobijen je sledeci waveform:

Clk

CE

Start

WR

RxD

Greska

TxD

D

ns 200 400 600 800 1000 1200 1400 1600 1800 2000 2200 2400 2600 2800 3000 3200 3400 3600

ZZ 00 0C 00 38 00 1E 00

Odavde se vidi da su podaci preneti korektno i nije se javila greska.

42

3.3. SINTEZA I IMPLEMENTACIJA

Sintezu smo izvrsili na cipu v100fg256 iz familije Xilinx6x VIRTEXE. Sinteza je vrsena sa optimizacijom po brzini. Rezultat je sema kola na RTL nivou data na slici:

Izvrsena implementacija na FPGA cipu dala je sledece rezultate:

Design Information ­­­­­­­­­­­­­­­­­­ Command Line : c:\Xilinx\bin\nt\map.exe ­p V100BG256­6 ­o map.ncd ­cm area ­c 100 ­tx off receivebuf.ngd receivebuf.pcf Target Device : v100 Target Package : bg256 Target Speed : ­6

43

Design Summary ­­­­­­­­­­­­­­ Number of errors: 0 Number of warnings: 3 Logic Utilization: Number of Slice Flip Flops: 152 out of 1,536 9% Number of 4 input LUTs: 206 out of 1,536 13% Logic Distribution: Number of occupied Slices: 174 out of 768 22% Number of Slices containing only related logic: 174 out of 174 100% Number of Slices containing unrelated logic: 0 out of 174 0% *See NOTES below for an explanation of the effects of unrelated logic

Total Number 4 input LUTs: 334 out of 1,536 21% Number used as logic: 206 Number used as a route­thru: 128

Number of bonded IOBs: 12 out of 180 6% Number of GCLKs: 1 out of 4 25% Number of GCLKIOBs: 1 out of 4 25%

Total equivalent gate count for design: 3,343 Additional JTAG gate count for IOBs: 624 Peak Memory Usage: 59 MB +­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­+­­­­­­­­+­­­­­­­­­­­­+­­­­­­­­­­­­­+ | Clock Net | Resour | Fanout | Ske(ns) | Delay(ns) | +­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­+­­­­­­­­+­­­­­­­­­­­­+­­­­­­­­­­­­­+ | Clk1_BUFGP | Global| 72 | 0.058 | 0.359 | +­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­+­­­­­­­­+­­­­­­­­­­­­+­­­­­­­­­­­­­+ | notpomclk1 | Local | 5 | 1.644 | 2.671 | +­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­+­­­­­­­­+­­­­­­­­­­­­+­­­­­­­­­­­­­+ | NET457 | Local | 5 | 0.042 | 2.678 | +­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­+­­­­­­­­+­­­­­­­­­­­­+­­­­­­­­­­­­­+ The Delay Summary Report

The SCORE FOR THIS DESIGN is: 198 The AVERAGE CONNECTION DELAY for this design is: 1.352 The MAXIMUM PIN DELAY IS: 5.615 The AVERAGE CONNECTION DELAY on the 10 WORST NETS is:

3.148

44

Odavde vidimo da je zauzece resursa na cipu 22% a propagaciono kasnjenje 5.615 ns. Izgled strukture cipa zauzetost celija i veze izmedju njih date su na sledecim semama:

45

Raspored zauzetih ulazno­izlaznih ponova prikazan je na slici:

46

Izgled samog implementiranog resenja je data na slici. Ovako implementirano kolo na FPGA cipu je spremno za upotrebu, ali treba voditi recuna da je zauzetost cipa 22% sto ostavlja dovoljno prostora za dalju nadogradnju i usavrsavanje ovog kola.

47

4. ZADATAK

Proveriti ispravnost rada LRC i VRC koder\dekoder­a. Proveru cemo vrsiti za blok podataka dat tabelom. Vrsicemo pernos sa

magistrale ka seriskom izlazu TxD i sa seriskog ulaza RxD ka magistrali.

1.bit 2.bit 3.bit 4.bit 5.bit 6.bit 7.bit 8.bit L­parnost 1.podatak 0 0 1 1 0 1 0 0 1 2.podatak 0 0 0 1 1 0 1 1 0 3.podatak 0 0 0 0 1 1 1 0 1 V­parnost 0 0 1 0 0 0 0 1 0

• Prvo cemo prikazati nacin predaje podataka od magistrale ka serijskom izlazu TxD.

Prlikom prenosa sa magistrale ka seriskom izlazu TxD na ulaznu magistralu D postavljacemo vrednosti 00110100 (34 heksadecimalno), 00011011 (1B heksadecimalno) i 00001110 (0D heksadecimalno), naizmenicno, a na izlazu TxD ocekivacemo niz podataka 00101100 1 11011000 0 01110000 1 100001000 koji predstavlja serisku informaciju ovih brojeva prosirenu bitovima parnosti.

48

• Drugi prikaz se odnosi na prijem serijskih podataka sa ulaza RxD i njihovog postavlanja na magistralu u paralelnom obliku.

Prilikom prenosa sa seriskog ulaza RxD ka magistrali unosicemo isti ovaj seriski niz 00101100 1 11011000 0 01110000 1 100001000 a na magistrali cemo ocekivati vrednosti podataka 34 , 1B, 0D heksadecimalno, vodeci racuna da nije doslo do greske.

49

5. LABORATORIJSKA VEŽBA

Zadatak1

Proveriti ispravnost rada LRC i VRC koder­a .

1. Pokrenuti program Active­HDL čija se ikonica nalazi na Desktop­u; 2. Otvoriti dizajn pci8251; 3. Otvoriti New Waveform; 4. Dodati signale: clk, CE, start, RxD, TxD, greska, WR i D; 5. Podesiti vrednosti ulaznih signala na sledece vrednosti:

Clk na Clock, CE na ’0’ start na ’0’, WR na ’0’ 6. Startom prozora 1 pokrecemo simulaciju; 7. Vrednost ulaza CE promenimo na ’1’ i D na vrednost „00“ 8. Nakon jednog takta vrednost ulaza start promenimo na ’1’ , a D na „34“; 9. U narednih 9 taktova, koriscenjem prozora 1 ocitavamo vrednosti na izlazu

TxD; 10.Unosimo sledecu vrednost za D, „1B“; 11.U narednih 9 taktova, koriscenjem prozora 1 ocitavamo vrednosti na izlazu

TxD; 12.Unosimo sledecu vrednost za D, „0D“; 13.U narednih 9 taktova, koriscenjem prozora 1 ocitavamo vrednosti na izlazu

TxD; 14.U sledecih 9 taktova, koriscenjem prozora 1 ocitavamo vrednosti VRC

bitova parnosti i time zavrsavamo prenos podataka od magistrale ka TxD;

50

51

Zadatak2

Proveriti ispravnost rada LRC i VRC dekoder­a.

1. Pokrenuti program Active­HDL čija se ikonica nalazi na Desktop­u; 2. Otvoriti dizajn pci8251; 3. Otvoriti New Waveform; 4. Dodati signale: clk, CE, start, RxD, TxD, greska, WR i D; 5. Podesiti vrednosti ulaznih signala na sledece vrednosti:

Clk na Clock, CE na ’0’, start na ’0’, WR na ’1’, D je iskljucena, a vrednost RxD se odredjuje hotkey (nula ili jedan);

6. Startom prozora 1 pokrecemo simulaciju; 7. Vrednost ulaza CE promenimo na ’1’ 8. Vrednost ulaza start promenimo na ’1’; 9. U narednih 9 taktova, koriscenjem prozora 1 unosimo niz vrednosti

00101100 1 na ulaz RxD pomocu hotkey ; 10.Ocitamo vrednost na D ; 11.U narednih 9 taktova, koriscenjem prozora 1 unosimo niz vrednosti

11011000 0 na ulaz RxD pomocu hotkey ; 12.Ocitamo vrednost na D ; 13.U narednih 9 taktova, koriscenjem prozora 1 unosimo niz vrednosti

01110000 1 na ulaz RxD pomocu hotkey ; 14.Ocitamo vrednost na D ; 15.U narednih 9 taktova, koriscenjem prozora 1 unosimo niz vrednosti

100001000 na ulaz RxD pomocu hotkey za VRC bitove parnosti ; 16.Tokom celog unosa serijskih podataka proveravamo vrednost na izlazu

greska, da li je jednaka nuli, sto znaci da nije doslo do greske;

52

53

Vezba1

Grupa 1:

_________________________ izlazni binarni niz

Grupa 2:

_________________________ izlazni binarni niz

Grupa 3:

_________________________ izlazni binarni niz

Grupa 4:

_________________________ izlazni binarni niz

Grupa 5:

_________________________ izlazni binarni niz

Grupa 6:

_________________________ izlazni binarni niz

Grupa 7:

_________________________ izlazni binarni niz

Grupa 8:

54

_________________________ izlazni binarni niz

Vezba2

Grupa 1:

_______________________ __DA_________________NE______ izlazne vrednosti na magistrali D da li je doslo do greske tokom prenosa podataka

Grupa 2:

_______________________ __DA_________________NE______ izlazne vrednosti na magistrali D da li je doslo do greske tokom prenosa podataka

Grupa 3:

_______________________ __DA_________________NE______ izlazne vrednosti na magistrali D da li je doslo do greske tokom prenosa podataka

Grupa 4:

_______________________ __DA_________________NE______ izlazne vrednosti na magistrali D da li je doslo do greske tokom prenosa podataka

Grupa 5:

_______________________ __DA_________________NE______ izlazne vrednosti na magistrali D da li je doslo do greske tokom prenosa podataka

Grupa 6:

_______________________ __DA_________________NE______ izlazne vrednosti na magistrali D da li je doslo do greske tokom prenosa podataka

Grupa 7:

_______________________ __DA_________________NE______ izlazne vrednosti na magistrali D da li je doslo do greske tokom prenosa podataka

Grupa 8:

_______________________ __DA_________________NE______ izlazne vrednosti na magistrali D da li je doslo do greske tokom prenosa podataka

55

6. LITERATURA

1. M.Stojcev, B.Petrovic , Arhitektura i programiranje mikroracunarskih sistema zasnovanih na familiji procesora 80x86

2. K.C.Chang , Digital design and modeling with VHDL and synthesis , IEEE Computer Society Press 2003

3. H. Kobayashi, Universal Asynchronous Receiver Transmitter (UART 8251), Project Specification for EECE 611, Fall 1997.

4. Patrick H. Garrett, Advanced instrumenetation and computer I/O desing: real­time computer interactive engineering