26
Elektronski fakultet Niš Katedra za Računarstvo Algoritmi i arhitekture specijalizovanih računarskih sistema SEMI NARSKI RAD TEMA: Opis i implementacija CRC generatora ZADATAK: Projektovati i na VHDL-u opisati 32-bitni paralelni visoko protočni “Cyclic Redudancy Code” - CRC generator.Potrebno je da generator bude kompatibilan sa 32-bitnim Ethernet standardom.Kolo opisati korišćenjem Galoa-ovih polja. Ispravnost kola opisati odgovarajućim simulacijama. Izvršiti sintezu i implementaciju na Xilinx Virtex4 FPAGA čipu i odgovarajućim simulacijama potvrditi ispravnost kola. Dati rezultate implementacije. Student Bratislav Antansijević 11097 UVO D Datum predaje Datum odbrane Seminarski rad, ocena Usmeni, ocena Ukupno, ocena Napomena:

CRC Generator

Embed Size (px)

Citation preview

Page 1: CRC Generator

Elektronski fakultet Niš Katedra za Računarstvo Algoritmi i arhitekture specijalizovanih računarskih sistema

S E M I N A R S K I

R A D

TEMA: Opis i implementacija CRC generatora

ZADATAK: Projektovati i na VHDL-u opisati 32-bitni paralelni visoko protočni “Cyclic Redudancy Code” - CRC generator.Potrebno je da generator bude kompatibilan sa 32-bitnim Ethernet standardom.Kolo opisati korišćenjem Galoa-ovih polja. Ispravnost kola opisati odgovarajućim simulacijama. Izvršiti sintezu i implementaciju na Xilinx Virtex4 FPAGA čipu i odgovarajućim simulacijama potvrditi ispravnost kola. Dati rezultate implementacije. Student Bratislav Antansijević 11097 UVO

D

Datum predaje

Datum odbrane

Seminarski rad, ocena

Usmeni, ocena

Ukupno, ocena

Napomena:

Page 2: CRC Generator

1

SADRŽAJ

1. Uvod Strana 2

1.1. Šta je CRC Strana 2 1.2. Šta su Galoa-ova polja Strana 3 1.3. Opis domena problema Strana 3

2. Rešenje Strana 5

2.1.Funkcionalni zahtevi Strana 5 2.2.Algoritam za projektovanje korišćenjem Galoa-ovih polja Strana 5 2.3.Hardverska ograničenja Strana 7 2.4. Struktura Strana 10

2.5. Dvo-fazna logika Strana 10 2.6. Način obeležavanj Strana 12

2.7. Graf VHDL fajlova Strana 14

2.8. VHDL opisi Strana 14

3. Implementacija Strana 21 3.1. Rezultati behavioralne simulacije rada kola Strana 21 3.2. Rezultati post – route simulacije rada kola Strana 21

4. Zaključak Strana 23

5. Literatura Strana 24

6. Tabela za pregled i ocenu rada Strana 25

Page 3: CRC Generator

2

UVOD

1. Uvod

Danas se svet digitalne elektronike menja veoma brzo. Najnovija istraživanja napreduju u smeru da se sve složenija elektronska kola dizajniraju ne na nivou tranzistora već pomocu CAD alata i alata viseg nivoa u cilju da se olaksa ispunjavanje zahteva klijenata. Novi SoC (“Systems on Chip” – sistemi na čipu) zahtevaju na drugoj strani od projektanta kola da projektuje na većem nivou apstrakcije, i koriste elemente sa složenijom funkcionalnošću. Tako se ovi elementi koeriste i kombinuju u jos složenije elemente. Ovde se uklapaju i CRC-generatori jer imaju smisla samo ako se implementiraju u neke složenije sisteme kao sto su ATM predajnici i OC-XXX brze veze. Prenos podataka preko interneta ili nekih drugih medijuma je nemoguce izvršiti bez gresaka. Različiti materijali koji se koriste za izradu uređaja kao i mnogi drugi izvori mogu da dovedu do pojave grešaka u podacima koji se prenose.Zato se projektuju sistemi za detekciju i ispravljanje tih grešaka.Veoma je poželjno da se provera podataka vrsi brzo i tacno, pa su zbog toga razvijeni razliciti pristupi promene podataka radi ocuvanja tačnosti. Većina od njih je zasnovana na primeni nekih matematičkih operacija nad podacima. Tako je razvijen CRC koji je širokorasprostranjen kao pouzdan način za proveru podataka.Primenjuje se operacija nda podacima koje treba poslati,rezultat se nadovezuje na kraj podatka i tako se formira stvarni paket koji se šalje.Na prijemnoj strain se radi isti postupak. Ako su u rezultatu svi bitovi jednaki “0”, u našem slučaju, nije bilo grešaka. U suprotnom, došlo je do greške i nešto treba preduzeti (npr. poslati zahtev za ponovno slanje podatka).

1.1 Šta je CRC? „Cyclic redudancy check“ (CRC- kružna rdudantna provera) ili polynomial code checksum (kontrolni kod polinom) je heš funkcija projektovana da detektuje slucajne promene podataka, i koristi se uobicajneno u digitalnim mreyama i memorijskim medijumima kao sto su hard diskovi. Uređaj sa CRC-om izračunava krataku binarnu sekvencu fiksne dužine (CRC kod ili samo CRC) za svaki blok podataka i šalje ih ili memoriše zajedno. Kada se blok čita ili prima, uređaj primenjuje istu operaciju i ako se CRC ne poklapa sa prethodno izračunatim došlo je do greške. Izračunavanje CRC-a liči na potpuno deljenje gde se količnik odbacuje a ostatak je ustvari rezultat, sa važnim izuzetkom da se koeficijenti polinoma račanaju po deljenju po modulu 2. Dužina ostatka je uvek manja od dužine delioca(generatorskog polinoma) sto određuje i dužinu krajnjeg rezultata. Definisanje konkretnog CRC-a obuhvata, između ostalog i dužinu deliteoca. Iako se CRC moze projektovati pomoću bilo kog konačnog polja, najviše se koristi konačno polje GF(2) (Galoa-ovo polje sa 2 elementa). Polje ima dva elementa, 0 i 1,i dve definisane operacije, + i *.

Page 4: CRC Generator

3

+ 0 1 * 0 1 0 0 1 0 0 0 1 1 0 1 0 1

Primer 1: računaje CRC-a na osnovu zadatog podatka

11010011101100 ß ulaz 1011 ß delioc 01100011101100 1011 00111011101100 1011 00010111101100 1011 00000001101100 1011 00000000110100 1011 00000000011000 1011 00000000001110 1011 00000000000101 à 3-bitni ostatak

1.2. Šta su Galoa- ova polja?

U abstraktnoj matematici, konačno polje ili Galoa-ovo polje je polje koje sadrži

konačno mnogo elemenata.Ova polja su značajna u teoriji brojača, algebarskoj geometriji, Galoa-ovoj teoriji, kriptografiji i teoriji kodovanja. Konačna polja se klasifikuju po veličini:postoji samo jedno polje sa izomorfizmom veličine pk za svaku osnovu p i pozitivan ceo broj k.Svako konačno polje veličine q je deo polja polinoma xq-x.Ova polja se koriste u istraživanjima.

Konačno polje s q elemenata označava se sa Fq. Neka je p karakteristika polja Fq. Tada Fq sadrži prosto polje Fp = Zp, i stoga je Fq vektorski prostor nad Fp. Dimenziju od Fq kao vektorskog prostora nad Fp označimo s k. Tada Fq ima pk elemenata, tj. q = pk. Nadalje, za svaku potenciju prostog broja q = pk postoji jedinstveno (do na izomorfizam) polje s q elemenata. Jedna od realizacija tog polja je Zp [x] / (f(x)), gdje je f(x) neki ireducubilni polinom stupnja k nad Zp. Elementi ovog polja su polinomi nad Zp stepena manjeg ili jednakog k - 1 (očito je da takvih polinoma ima točno pk), dok su operacije zbrajanje i množenje polinoma u Zp [x], s time da se nakon množenja računa ostatak pri djeljenju s polinomom f(x).

Page 5: CRC Generator

4

1.3.Opis domena problema

Zadatak se sastoji u projektovanju CRC generatora, koji će podržati velike brzine. Hardverska rešenja su u ovom slučaju povoljnija. Koristis se standardni Ethernet polinom za generisanje 32-bitnog CRC-a. Ima nekoliko metoda implementiranja CRC generatora. Nabrojaćemo najznačajnije i odabrati jedanu.

1. Direktna implementcija CRC generatora bi bila ista kao obični pomerački registar, čiji se dolazeći bitovi pomeraju i XOR-uju sa deliocem sto generiše kod. Ova metoda nije povoljna jer se operacije vrše nad bitovima, gde se ne mogu postići velike brzine izračunavanja,pa je poželjno da se operacije vrše nad bajtovima ili rečima.

2. Drugi pristup je koristiti implementaciju koja se zasniva na tabelama.Sastoji se u tome da se tabela indeksira rezultatom i da se taj rezultat XOR-uje sa rezultatom pretrage.Ovako projektovan sistem zahteva veliku memoriju za pamćenje tabele.

3. Treći pristup je primena “Galoa-ovih polja” koja svodi ceo problem na nekoliko logičkih elemenata. Potrebno je samo da se modifikuje arhitektura da bi se ceo generator ubrzao.U projektu je korišćen ovaj pristup.

Page 6: CRC Generator

5

REŠENJE

2. Rešenje 2.1 Funkcionalni zahtevi

• Projektovati 32-bitni paralelni i visokoprotočni CRC generator • Generisani CRC treba da bude kompatibilan sa Ethernet standardima • Implementacija se vrši korišćenjem VHDL

2.2 Algoritam za projektovanje korišćenjem Galoa-ovih polja Polinom koji sek koristi u projektu, isti je kao onaj koji se koristi u ATM i Ethernet uređajima. x = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x +1 Ovaj polinom ima nekoiko prednosti. Jedna od njih je što se ne može uprostiti, tj. može se uzeti ya osnovni polinom. Pored toga, ako uzmemo glavnu osobinu Galoa-ovih polja:

)12mod(i 32 −+=⊗ jij ααα imacemo da, pošto je naš polinom elemenat konačnog polja, je pomeranje ustvari množenje sa αn , gde je n dužina reči koju koristimo (mora da bude manja od 32 bita). Najpogodnije je uzeti 16 što nam dozvoljava da smanjimo brzinu kloka na primer na 10GHz/16=625MHz. To je dobra dužina registra, s’ obzirom da nam obezbeđuje smanjenje kloka. Prihvatanjem n=16, imaćemo da je: CRC(T+1)=CRC(T) ⊗ α16 ⊕ UlaznaReč(T+1) gde je CRC(T) izlaz generatora u određenom trenutku, α16 je vektor Galoa-ovog polja GF(232), a UlaznaReč je ulazni podatak od 16-bitova. ⊗ označava množenje u Galoa-ovom polju. Praktično, prethodna operacija odgovara sledećoj šemi:

Page 7: CRC Generator

6

Slika 1. Direktna šema CRC-generatora

Glavni problem je projektovati podelemenat “množač Galoa-ovog polja” koji bi trebalo da implementira deo CRC(T) ⊗ α16.Za to se koristi takozvana H-matrica koja vrši množenje sa α16. Kreiranje matrice nije složeno,ali je iscrpno. Ova matrica predstavlja matematičku osnovu GF množača, ujedno i glavni deo generatora.

Slika 2. H-matrica za 16-bitni ulaz i Etehernet polinom

Page 8: CRC Generator

7

Sada je potrebno potrebno projektovati logiku koja će implementirati ovu matricu. Kako je sabiranje ustvari XOR operacija u aritmetici Galoa'ovih polja, potrebno je ʼ1ʼ prebaciti u XOR kola. Tako je CRC(T+1)[31]= CRC(T)[31] ⊕ CRC(T)[27] ⊕ CRC(T)[25] CRC(T)[24] ⊕ CRC(T)[21] ⊕ CRC(T)[15]. Lako možemo proširiti celu matricu u ovu formulu i implementirati hardver direktno. Za ovo izračunavanje će nam biti potrebno maksimalno 10-XOR kašnjenja, što je manje od vremena koje bi smo dobili ako CRC generator projektujemo koristeci shift- registar, čime je ispunjen zahtev u pogledu brzine rada generatora. Poslednji zahtev koji se mora ispoštovati je da generator bude kompatibilan sa Ethernet standardom što se postiže postavljanjem inicijalnog CRC-a na vrednost Hʼ46AF6449. Ovaj elemenat kada se pomnoži sa α31 odgovara obrascu. 2.3 Hardverska ograničenja

Kada smo prosli kroz okvirno planiranje projetkovanja kola, potrebno je da vidimo šta imamo na raspolaganju od prostijih elemenata i koliko je zahtevan problem koji rešavamo.Zato moramo da uskladimo trenutno dobijeno rešenje sa zahtevima. Ovde ćemo razmotriti kašnjenja u kolima i provodnicima dizajniranog rešenja. Kao što smo napomenuli, ako pogledamo matricu neće nam biti potrebno više od 10 XOR kašnjenja. Međutim to je nemoguće, ako želimo svako kolo pokrenuti brzinom od nekoliko stotina MHz, javlja se veliki kritični put na ulazu kola.Tako moraju biti formirane particije što podrazumeva uvođenje protočnosti i dvo fazne logike u projekat. Ovim se kritičan put podataka smanjuje i na ulazu kola i kroz provodnike. Čip će biti opisan VHDL jeikom. Takođe moramo obezbediti da se dolazni podaci na “Veliko XOR” kolo stižu u isto vreme kad i prethodno pomnoženi podaci. To implicira da moramo uvesti protočnost i u ulazni deo. Registri u ovom delu će samo obezbediti kašnjenje do trenutka kada signal stigne na “Veliko XOR”, što će sinhornizovati podatke sa podacima koji stižu iz množača.Konačna šema je data na slici 3.

Slika 3. Konačna šema CRC-generatora

Page 9: CRC Generator

8

Što se tiče množača, nećemo moći samo da uključimo registre u protočni sistem izlaza XOR kola, nego još neke koji će nositi originalni podatak. Strukturna šema Gaoloa-ovog množača je prikazana na slici 4. Ostatak generatora (“Veliko XOR” kolo i krajnji registar) nisu suviše zahtevni što se dizajna tiče, ali takođe moraju biti protočni da bi se zadržala struktura sa jednim ulaznim kolom(slika 5).

Slika 4. Strukturna šema registara Galoa-ovog množača

Slika 5. Izlazni elemenat

Najsloženiji deo dizajna je uvesti u projekat protočnost i povratna sprega. Uvodjenje istih dovodi do gubitka performansi,tačnije protok se smanjuje na jednu petinu. Tačni rezultati množenja se dobijaju tek nakon 5 prolaza (potrebno je četvrtom klok perioda da se dobije proizvod a u petom može da se koristi). Ovaj problem može biti rešen na nekoliko načina, povećanje brzine kloka, uvođenje paralelizma, ali ovom tehnologijom je to nemoguće uraditi. Stoga, u našem slučaju, ulaz će imati jednu reč svakih 5 klok ciklusa, što je prikazano na slici 6. Izlaz takođe treba da bude sinhronizovan da bi smo dobijali paralelno podatke svakih 5 klok ciklusa.

Page 10: CRC Generator

9

Slika 6. Tok ulaznih podataka

2.4. Struktura Ako pogledamo strukturnu šemu na slici 7 primetićemo da je arhitektura već poznata. Četiri glavna bloka su elementi CRC-generatora, Galoa-ov množač (gf_multiplier), koji je najveći i najzahtevniji za projektovanje, ulazni blok (input_wait), i dva manja bloka, jedno se sastoji iz 16 XOR kola sa po 2 ulaza i izlaz koji se sastoji od jednog registra. Poslednja dva su objedinjena u „Veliko XOR“ (big_xor) kolo. Širine magistrala su takođe prikazane na slici.

Slika 7. Blok struktura generatora

2.5. Dvo-fazna logika U projektu koristimo takozvanu dvo-faznu logiku. Imamo dva kvadratna klok signala sa ne preklapajućim fazama (Slika 8). Globalna šema φ1 i φ2 je prikazana na slici 9. Da bi postigli sinhronizaciju (da bi signali do “Velikog XOR” kola stigli u isto vreme) moramo da projektujemo čip kao na slici 10.Ovakav dizajn dozvoljava kontrolu potrošnje. Takođe

Page 11: CRC Generator

10

protočni sistem registara je prikazan na slici kako u množaču tako i u ulaznom bloku.

Slika 8.Dve nepreklapajuće faze kloka

Slika 9. Globalna šema dve faze

Page 12: CRC Generator

11

Slika 10. Detaljna šema dizajna

2.6. Način obeležavanja Obeležavanje priljučaka i elemenata samih kola nije možda najbolje moguće, ali imajući u vidu da je glavni cilj opisati hardver sa alatom visokog nivoa a ne konačni izgled opisa, sasvim je zadovoljavajuće. Obeležavanje se radi malim blokovima, sa značajnim brojem signala. Pažnja je posvećena i tome da imena signala budu skrećenice od pravih naziva, tako da mogu sami sebe da objasne. Naredne slike pokazuju načine obeležavanja korišćene u kodu.

Page 13: CRC Generator

12

Slika 11. Detaljni blok dijagram ulaznog bloka

Slika 12. Detaljni blok dijagram izlaznog bloka

Page 14: CRC Generator

13

Slika 13. Detaljni blok dijagram Galoa-ovog množača

Page 15: CRC Generator

14

2.7. Graf VHDL fajlova

Radi lakšeg pregleda funkcionalnosti, korišćeno je više fajlova za opis VHDL-om. Struktura je data na slici 13.

Slika 14. Hijararhija VHDL fajlova

2.8. VHDL opisi U daljem tekstu dati su entiteti komponenata.

-- Prvo opisujemo registre koje koristimo u protočnom sistemu, ima ih 2 tipa entity input_phi1_register is port ( reset : in std_logic; phi1 : in std_logic; input : in std_logic_vector(15 downto 0); output : out std_logic_vector(15 downto 0)); end input_phi1_register; entity input_phi2_register is port ( reset : in std_logic; phi2 : in std_logic; input : in std_logic_vector(15 downto 0); output : out std_logic_vector(15 downto 0)); end input_phi2_register; entity input_wait is port ( phi1 : in std_logic; -- Dvo-fazno ponašanje phi2 : in std_logic;

Page 16: CRC Generator

15

reset : in std_logic; -- #RESET input : in std_logic_vector(15 downto 0); -- Serijsko/paralelna konverzija se obavlja negde drugde output : out std_logic_vector(15 downto 0)); end input_wait; component input_phi1_register port ( reset : in std_logic; -- #RESET phi1 : in std_logic; -- klok input : in std_logic_vector(15 downto 0); output : out std_logic_vector(15 downto 0)); end component; component input_phi2_register port ( reset : in std_logic; -- #RESET phi2 : in std_logic; -- klok input : in std_logic_vector(15 downto 0); output : out std_logic_vector(15 downto 0)); end component; signal btw1and2 : std_logic_vector(15 downto 0); signal btw2and3 : std_logic_vector(15 downto 0); signal btw3and4 : std_logic_vector(15 downto 0); signal btw4and5 : std_logic_vector(15 downto 0); signal btw5and6 : std_logic_vector(15 downto 0); signal btw6and7 : std_logic_vector(15 downto 0); signal btw7and8 : std_logic_vector(15 downto 0); -- signal btw8and9 : std_logic_vector(15 downto 0); -- signal btw9and10 : std_logic_vector(15 downto 0); -- signal btw10and11 : std_logic_vector(15 downto 0); -- signal btw11and12 : std_logic_vector(15 downto 0); entity gf_phi1_register_out is port ( reset : in std_logic; -- #RESET phi1 : in std_logic; --klok input_wip : in std_logic_vector(31 downto 0); output_final : out std_logic_vector(31 downto 0)); end gf_phi1_register_out; architecture behavior of gf_phi1_register_out is entity gf_phi1_register_2 is port ( reset : in std_logic; -- #RESET phi1 : in std_logic; -- klok input_wip : in std_logic_vector(31 downto 0); -- Dolazeći radni registar input_fcs : in std_logic_vector(31 downto 0); -- Originalni podatak u tom koraku. S’ obzirom da koristimo protočnost moramo da -- garantujemo da imamo i originalne podatke na raspolaganju

Page 17: CRC Generator

16

output_wip : out std_logic_vector(31 downto 0); -- modifikovani podatak u trenutku output_fcs : out std_logic_vector(31 downto 0)); -- Originalni podatak koji se čuva end gf_phi1_register_2; entity gf_phi2_register_3 is port ( reset : in std_logic; -- #RESET phi2 : in std_logic; -- klok input_wip : in std_logic_vector(31 downto 0); -- Dolazeći radni registar input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0); output_fcs : out std_logic_vector(31 downto 0)); end gf_phi2_register_3; entity gf_phi1_register_4 is port ( reset : in std_logic; -- #RESET phi1 : in std_logic; -- klok input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); -- The original data for that step. Since we are using pipelining -- we have to grant that we will have the original FCS data -- available. output_wip : out std_logic_vector(31 downto 0); output_fcs : out std_logic_vector(31 downto 0)); end gf_phi1_register_4; entity gf_phi2_register_5 is port ( reset : in std_logic; -- #RESET phi2 : in std_logic; -- klok input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0); output_fcs : out std_logic_vector(31 downto 0)); end gf_phi2_register_5;

Page 18: CRC Generator

17

entity gf_phi1_register_6 is port ( reset : in std_logic; -- #RESET phi1 : in std_logic; -- klok input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0); output_fcs : out std_logic_vector(31 downto 0)); end gf_phi1_register_6; entity gf_phi2_register_7 is port ( reset : in std_logic; -- #RESET phi2 : in std_logic; --klok input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0); output_fcs : out std_logic_vector(31 downto 0)); end gf_phi2_register_7; entity gf_phi1_register_8 is port ( reset : in std_logic; -- #RESET phi1 : in std_logic; -- klok input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0); output_fcs : out std_logic_vector(31 downto 0)); end gf_phi1_register_8; entity gf_phi2_register_9 is port ( reset : in std_logic; -- #RESET phi2 : in std_logic; -- klok input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0); -- The modified data -our "WIP"-

Page 19: CRC Generator

18

output_fcs : out std_logic_vector(31 downto 0)); -- The original data is kept untouched end gf_phi2_regentity gf_xor_input is port ( input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0)); end gf_xor_input; entity gf_xor_2x is port ( input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0)); end gf_xor_2x; entity gf_xor_3x is port ( input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0)); end gf_xor_3x; entity gf_xor_4x is port ( input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0)); end gf_xor_4x; entity gf_xor_5x is port ( input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0)); end gf_xor_5x; entity gf_xor_6x is port ( input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0));

Page 20: CRC Generator

19

end gf_xor_6x; entity gf_xor_7x is port ( input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0)); end gf_xor_7x; entity gf_xor_8x is port ( input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0)); end gf_xor_8x; entity gf_xor_9x is port ( input_wip : in std_logic_vector(31 downto 0); input_fcs : in std_logic_vector(31 downto 0); output_wip : out std_logic_vector(31 downto 0)); end gf_xor_9x; entity gf_multiplier is port ( reset : in std_logic; -- #RESET phi1 : in std_logic; phi2 : in std_logic; input : in std_logic_vector(31 downto 0); -- Ulaz Galoa-ovog množača output_fcs : out std_logic_vector(15 downto 0); -- LS reč output_xor : out std_logic_vector(15 downto 0)); -- MS reč end gf_multiplier; entity big_xor is port ( reset : in std_logic; phi2 : in std_logic; input_input : in std_logic_vector(15 downto 0); fcs_input : in std_logic_vector(15 downto 0); -- LS reč gf_input : in std_logic_vector(15 downto 0); -- MS reč output : out std_logic_vector(31 downto 0)); end big_xor

Page 21: CRC Generator

20

entity CRC_top is port ( phi1 : in std_logic; phi2 : in std_logic; reset : in std_logic; -- #RESET input : in std_logic_vector(15 downto 0); fcs_out : out std_logic_vector(31 downto 0)); -- "inout" zato što moramo da čitamo podatak end CRC_top;

Page 22: CRC Generator

21

IMPLEMENTACIJA

3. Implementacija Za implementaciju su korišćeni nasumični ulazni podaci. Naveden je prikaz rezultata samo za neke od njih. Korišćeni podatak za implementaciju je: MSB 0000000000000000000000000000000000000010101100010000001010110001 0000001010110001000000101011000100000111100100001101110101100111 11100011100011100011100011100011 LSB

3.1. Rezultati behavioralne simulacije rada kola Na slici 15. prikazana je post-route simulacija kola.

slika 15. Rezultati post-route simulacije

3.3. Rezultati post – route simulacije rada kola

Na slici 16. prikazan je entitet opisanog kola sa svim njegovim portovima. Spisak

portova je: input: port kojim se dovodi podatak phi1 : port taktnog signala phi1 phi2 : port taktnog signala phi1 reset : port taktnog signala reset za resetovanje kola fcs_out : izlaz kola

Tabela 1. sadrži podatke o iskorišćenju resursa Virtex 4 čipa na kojem se implementira kolo.

Page 23: CRC Generator

22

Slika 16. Entitet opisanog kola

Izveštaj iskorišćenosti resursa

odnos korišćeni/dostupni iskorišćenje Number of BUFGs 2 out of 32 6% Number of ILOGICs 17 out of 448 3% Number of External IOBs 51 out of 448 11% Number of LOCed IOBs 0 out of 51 0% Number of OLOGICs 32 out of 448 7% Number of Slices 269 out of 10752 2% Number of SLICEMs 0 out of 5376 0%

tabela 1. Iskorišćenost resursa

Page 24: CRC Generator

23

ZAKLJUČAK

4. Zaključak

Iako ovo kolo ne može biti testirano zbog nedostatka opreme koja može podržati toliko visok U/I protok podataka, kolo je dizajnirano da bude deo elektronskog uređaja koji može podržati ove brzine alu unutar čipa.

Promene u dizajnu korišćenjem novijih tehnologija su moguće. Značajna poboljšanja se mogu postići u pogledu smanjenja površine čipa kao i brzine. Korišćenje Leč kola umesto flip-flopova, na primer.Takođe bi bilo moguće koristiti 32-bitne ulaze umesto korišćenih 16-bitnih. Primenom ove tehnologije, naravno, potrebne su promene u dizajnu,ali koncept ostaje isti.

Napomena: Veliki deo rešenja problema, blok šeme, funkcionalni dijagrami, uzeti su

iz literature 1.

Page 25: CRC Generator

24

LITERATURA

5. Literatura 1. Jose Maria Nadal Serrano “ Gbps CRC generator in 0.35 µm CMOS technology implemented standard cells”, Lund Institute of Technologz , June 2002. 2. Prof. Dr. W. Kowalk “CRC Cyclic Redundancy Check Analysing and Correcting Errors” Universität Oldenburg , Fachbereich Informatik, August 2006. 3. Geir Drange “Ultimate CRC Specification” May, 2005.

Page 26: CRC Generator

TABELA ZA PREGLED I OCENU SEMINARSKOG RADA

Ime teme Ime i prezime, broj indeksa

Lista – podsetnik za ocenjivanje

A Kod komentari u zaglavljima fajlova komentari kroz kod naming convenctions korisnički tipovi podataka priloženi rezultati simulacije konstrukcije netipične za VHDL B Dokumentacija prisutna dokumentacija u

elektronskom obliku

priložen plan rada i plan testiranja

doslednost korespondencije dokumentacije i koda

testiranje, proverljivost rezultata poštovanje uputstava iz

templejta

C Proces rada poštovanje rokova samostalnost u radu originalnost primenjenog rešenja

Finalna evaluacija

kategorija max ocena napomena Funkcionalnost 50 Primenjene tehnike 20 Analiza rešenja 15 Prezentacija rešenja 15 Poštovanje rokova 10 Ukupno 100