UNIVERZITET U NI ŠU ELEKTRONSKI FAKULTET KATEDRA ZA …es.elfak.ni.ac.rs/Papers/LRCiVRC.pdf ·...
Transcript of UNIVERZITET U NI ŠU ELEKTRONSKI FAKULTET KATEDRA ZA …es.elfak.ni.ac.rs/Papers/LRCiVRC.pdf ·...
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 USARTa 8251 7 2.2. Programiranje USARTa 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/dekodera u VHDLu 17 3.1. Kreiranje VHDLa 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 buffera 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 nto 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 DTEa 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 korisnickoprogramibilne funkcije. Na osnovu principa rada USARTa 8251 konstruisali smo nas dizajn u VHDLu 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 USARTa 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 VRCLRC 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/dekodera u VHDLu je opisan VHDL kod za konstruisanje cipa VRCLRC 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\dekodera.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 USARTa 8251 koristicemo kao model za implementaciju VRC i LRC koder/dekodera. 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 sinhronoasinhroni prijemnopredajni 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 (8b 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 ulaznoizlazne 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 ulaznoizlazne 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: upisispis, 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.
10
2.2. PROGRAMIRANJE USARTA 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 terminalracunar
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 VRCa i u bitu parnosti LRCa. Na osnovu VRCa znace se tacan znak u nizu znakova koji se prenosi, dok ce greska u LRCu 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 VRCa I LRCa.
17
3. REALIZACIJA LRC I VRC KODER/DEKODERA U VHDLU
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 VHDLa i njegov nacin upotrebe. Ovakva realizacija vrsice VRC i LRC proveru bita parnosti za razliku od USARTa 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 VHDLA 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) Ulaznoizlazna 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 Vbitovi 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 Lbit parnosti i njime prosiruje podatak, Shift_reg1 koji konvertuje podatak iz poralelnog u serijski oblik, XorV kola koje izracunava Vbit parnosti, Shift_reg2 za cuvanje Vbitova 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 ulaznoizlaznu 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 <= N1 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 Lbit parnosti prenetog podatka i uz pomoc komparatora U3 proverava ispravnost koju salje ka izlazu Greska, Xor kolo 0 koje sa shift_reg U5 racuna Vbitove 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 BUFFERA
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 <= N1 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 Lparnost 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 Vparnost 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 V100BG2566 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 routethru: 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:
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\dekodera. 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 Lparnost 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 Vparnost 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 kodera .
1. Pokrenuti program ActiveHDL čija se ikonica nalazi na Desktopu; 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;
51
Zadatak2
Proveriti ispravnost rada LRC i VRC dekodera.
1. Pokrenuti program ActiveHDL čija se ikonica nalazi na Desktopu; 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;
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: realtime computer interactive engineering