Professional Documents
Culture Documents
ELEKTRONSKI FAKULTET
KATEDRA ZA ELEKTRONIKU
HAMINGOV KODER/DEKODER
Student:
Sran Vujaevi 11424
Sadraj:
1. Uvod .......................................................................................................... 3
2. Hamingovo kodiranje................................................................................. 4
2.1. Pojam Hamingove distance............................................................... 4
2.2. Pojam sindrom rei............................................................................ 5
2.3. Hamingov kd................................................................................... 6
3. Realizacija Hamingovog koder/dekoder u VHDL-u ............................. 9
3.1. Hamingov koder ......................................................................... 10
3.2. Hamingov dekoder ......................................................................... 11
4. VHDL kod test bench-a procesora i prikaz rezultata simulacije ..............13
5. Sinteza i implementacija .......................................................................... 17
5.1. Sinteza ........................................................................................... 17
5.2. Implementacija .............................................................................. 21
6. Zadatak .................................................................................................... 26
7. Laboratorijska veba ................................................................................ 28
8. Literatura....... ........................................................................................... 35
1. UVOD
Svaki put kada se informacija prenosi kroz neki kanal, moe doi do greke u
prenosu usled uma. Ustvari, ak i kada je informacija smetena u nekoj komponenti za
skladitenje podataka (memoriji), moe se otetiti, jer ni jedan hardver nije apsolutno
siguran. Ovo se naravno ne odnosi samo na kompjuterske informacije. Glas kada se
prenosi kroz vazduh moe se iskvariti usled vetra, uma, visoke temperature...Zato vrlo je
znaajna mogunost otkrivanja i korekcije greaka unutar jednog sistema.
U optem sluaju postoje dva pristupa:
1. Kontrola greke unapred, u kome svaki karakter ili blok podataka koji se alje sadri
dodatne (redundatne) informacije. Na osnovu ovih informacija primalac moe ne samo da
otkrije postojanje greke, ve i da odredi koji su bitovi u primljenom podatku pogreni i
da greku ukloni negacijom pogrenih bitova.
2. Kontrola greke unazad, odnosno kontrola sa povratnom spregom. U ovom sluaju
svaki karakter ili blok podataka koji se alje sadri samo neophodne dodatne informacije
koje omogucuju primaocu da otkrije prisustvo greke, ali ne i mesto na kome se ona
nalazi. U tom slucaju jedini nacin za dobijanje korektnih podataka je ponavljanje prenosa
svih karaktera ili blokova podataka koji imaju greku.
U praksi, broj dodatnih bitova brzo raste sa porastom duine podataka koji se prenose.
Posledica toga je:
1. Metod sa kontrolom greke unazad je najce koristi u telekomunikaconom prenosu
podataka.
2. Metod sa kontrolom greke unapred se ee koristi pri uvanju podataka na
memorijskim medijumima u raunarskom sistemu.
to se tie metoda za otkrivanje greaka, faktori od kojih zavisi izbor metode:
1. Broja bitova sa grekom (eng. bit error rate, BER) na komunikacionoj liniji. BER
predstavlja verovatnou u definisanom vremenskom intervalu da jedan bit ima greku.
Tako BER=10-4 znai da, u proseku, 1 od 10000 bita ima greku u definisanom
vremenskom intervalu. Za najvei broj mrea BER je oko 10-4 , dok je unutar
raunarskog sistema obino vrednost za BER 10-4ili manje.
2. Tipa greke, tj. da li se greka javila na pojedinanom bitu ili na grupi uzastopnih
bitova. U poslednjem sluaju re je o proirenoj (eksplozivnoj) greci (eng. burst error).
2. Hamingovo kodiranje
2.1. Pojam Hamingove distance
Hamingova distanca (HD)
- broj bitova u kojima se dve digitalne rei razlikuju
HD( 101, 100 ) = 1
HD( 111, 000 ) = 3
Kdna distanca (Dmin)
- minimalna Hamingova distanca izmeu dve bilo koje rei
Ilustracija kdne distance:
101
001
100
111
000
011
110
010
Detekcija greke
Kd moe detektovati do d bitova greke ako je minimalna distanca kda
Dmin d + 1
Korekcija greke
4
M2 M4 M5 M7
M3 M4 M6 M7
M3 M4 M8
M6 M7 M8
2.3. Hamingov kd
Kodovi za korekciju greaka koriste viestruke parity bitove koji su smeteni sa
bitovima podataka. Svaki bit provere je parity bit grupe bitova u poruci. Prilikom itanja
primnjene poruke proveravaju se svi parity bitovi i ako su svi uredu, znai da nije dolo
do greke u prenetoj poruci. Meutim ako je jedan ili vie parity bitova neispravno, moe
se utvrditi koji je od bitova pogrean. Jednostruka greka nastaje kada je vrednost jednog
bita u poruci promenjena sa 1 na 0 ili sa 0 na 1. Ako je utvren pogrean bit, moe biti
lako korigovan komplementiranjem njegove vrednosti. Jedan od najee korienih
kodova sa korekcijom greke u RAM memorijama je Hamingov kod. Glavne odlike
Hamingovog koda su:
- Detekcija greke je jednostavna (dodavanjem parity bitova)
- Korekcija greke je kompleksna i zahteva Hamingov kd sa vie parity bitova
U Hamingovom kodu, p - parity bitova je dodato na m - bitova u poruci, tako da
imamo novonastalu kodnu re on m+p - bitova. Bitske pozicije su numerisane u sekvenci
od 1 do m+p. Sve pozicije u rei, iji je broj stepena 2 (pozicije 1,2,4,8,...) koriste se za
parity bitove. Ostale pozicije su namenjene za bitove originalne poruke. Izgled kodovane
poruke, za originalnu poruku od 8-bitova:
d7
d6
d5
d4
p3
d3
d2
d1
p2
d0
p1
p0
pozicije:
12
Vidimo da je originalnoj 8-bitnoj poruci dodato 4 parity bita tako da sad sekvenca ima 12
bitova.
Prilikom izbora broja parity bitova mora biti zadovoljena sledea relacija:
2m m+p+1
na primer: za 8-bitnu poruku poruka potrebna su nam 4 parity bita, tako da e podatak
koji prenosimo sadrati ukupno 12 bitova.
- parity bitovi su 1,2,4,8, ... (P1,P2,P3,P4)
3 = 1+2
5 = 1+4
6 = 2+4
7 = 1+2+4
9 = 1+8
10 =2+8
11 = 1+2+8
12 = 4+8
P1 proverava bitove 3, 5, 7, 9, 11
P2 proverava bitove 3,6,7,10,11
P4 proverava bitove 5,6,7,12
P8 proverava bitove 9,10,11,12
greci. Tako recimo ako dobijemo da je C=0101, znai da je dolo do greke u petom bitu
i taj bit treba komplementirati.
Hamingov kod se moe koristiti za kodnu re proizvoljne duine. Generalno za p parity bitova i originalnu re od m - bitova imamo ukupno p+m bitova koji mogu biti
kodovani sa 2k-1 bitova. Grupe bitova za generisanje parity bitova i bitova provere na
prijemu odreuju se iz liste binarnih brojeva iz liste od 1 do 2 k-1. Svaka grupa bitova
poinje sa brojem koji je stepena 2, na primer 1,2,4,8,16 itd. Ovi brojevi su takoe i
pozicije parity bitova.
Osnovni Haming kod moe detektovati i korigovati greke u samo jednom bitu.
Upotrebom dodatnih parity bitova mogu se korigovati jednostruke greke i detektovati
dvostruke. ako posmatramo kodiranu 12-bitnu re i dodamo jo jedan parity bit. Ako
recimo imamo re 001110010100P13, gde je P13 rezultat ekskluzivne OR operacije nad
ostalih 12 bitova. Ovako nastaje 13-bitna kodna re 0011100101001 (parna parnost). Na
prijemu se nalaze bitovi provere i parity bit P za svih 13 bitova kodne rei. Ako je P=0
znai da je parnost korektna (parna parnost), ali ako je P=1, parnost nad svih 13 bitova je
nekorektna (neparna parnost). Iz ovoga proizilaze sledee etiri situacije:
- ako je C = 0 i P = 0
- ako je C 0 i P = 1
- ako je C 0 i P = 0
- ako je C = 0 i P=1
Prenosni
kanal
Hammingov enkoder
Latch
m Generator m+p
koda
Pobudni
generator
Latch
m+p
Paralelni
u
serijski
Izlazna sekvenca
od m bitova
Hammingov dekoder
Serijski
u
paralelni
m+p
Latch
m+p
Korektor
m+p
Blok za
proveru
Latch
2p
p
Pobudni
generator
Dekoder
U kolu Hamingovog kodera nalazi se blok generator koda koji na kodnu re od m bitova dodaje p - parity bitova i kao produkt na njegovom izlazu imamo kodovanu kodnu
re duine m+p - bitova. U prijemniku se u bloku za proveru vri provera primljene
kodne rei, tako to se nalaze odgovarajui bitovi provere prema ve opisanom postupku.
Ukoliko je prisutna greka u dekoderu se utvruje pozicija na kojoj je dolo do greke. Na
kraju se u korektoru vri ispravka bita gde je nastala greka tako to se vri njegovo
komplementiranje. Kolo moe samo detektovati i korigovati greku nastalu u jednom
bitu. Ako doe do greke u dva bita, izlaz dvostruka greka prelazi u visoko stanje.
Prenos podataka kroz prenosni kanal najee se vri serijski, tako da poto na izlazu
Hamingovog kodera imamo paralelnu re, a isto tako i na ulaz Hamingovog dekodera
dovodimo paralelnu re. Potrebno je zato na izlazu iskonvertovati paralelnu informaciju u
serijsku i kao takvu je preneti do Hamingovog dekodera i opet je vratiti u paralelni oblik.
U naem radu prenosni kanal nije bio predmet realizacije.
hamenc
Blok hamenc ima jedan 8-bitni ulazni port datain(7:0) koji predstavlja ulazne podatke
koje treba kodirati Hammgovim kodom, i jedan 12-bitni izlaz hamout(11:0) koji
predstavalja kodovanu ulaznu kodnu re (8 bitova poruke i 4 parity bita). Listing
programa:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
ENTITY hamenc IS
PORT(datain : IN std_logic_vector(7 downto 0); --d7 d6 d5 d4 d3 d2 d1 d0
hamout : OUT std_logic_vector(11 downto 0)); --d7 d6 d5 d4 p3 d3 d2 d1 p2 d0 p1
p0
END hamenc;
ARCHITECTURE ver2 OF hamenc IS
SIGNAL p1, p2, p4, p8 : std_logic;
BEGIN
p1 <= (((datain(6) XOR datain(4)) XOR datain(3)) XOR datain(1)) XOR datain(0);
p2 <= (((datain(6) XOR datain(5)) XOR datain(3)) XOR datain(2)) XOR datain(0);
p4 <= ((datain(7) XOR datain(3)) XOR datain(2)) XOR datain(1);
p8 <= ((datain(7) XOR datain(6)) XOR datain(5)) XOR datain(4);
hamout(11 downto 0 ) <= datain(7 downto 4) & p8 & datain(3 downto 1) & p4 &
datain(0) & p2 & p1;
d ataout(7:0 )
e rro r_flag
e rror_ p os(3:0 )
p
hamdec
Blok Hamingovog dekodera ima 12-bitni port hamin(11:0) koji predstavlja ulazne
podatke kodovane Hamingovim kodom, 8-bitni izlaz dataout(7:0) koji predstavlja 8-bitnu
originalnu informaciju, 4-bitni izlaz error_pos(3:0) koji pokazuje na kojem bitu se javila
greka, izlazni pin error_flag koji nam signalizira da li je dolo do greke ( '1' - nastala
greka, '0' - nema greke ) i izlazni pin p koji nam signalizira da je dolo do dvostruke
greke u kodu ( '1' - nastala greka, '0' - nema greke ). Listing koda:
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.numeric_std.all;
USE IEEE.std_logic_arith.all;
ENTITY hamdec IS
PORT (
hamin : IN std_logic_vector(11 DOWNTO 0) ;
dataout : OUT std_logic_vector(7 DOWNTO 0) ;
error_pos : OUT std_logic_vector(3 DOWNTO 0) ;
p: OUT std_logic;
error_flag : OUT std_logic);
END hamdec ;
ARCHITECTURE hamdec OF hamdec IS
SIGNAL correct : std_logic_vector(3 DOWNTO 0);
SIGNAL ham_temp : std_logic_vector (11 downto 0);
SIGNAL error_0 : std_logic;
10
BEGIN
process(hamin,correct)
BEGIN
ham_temp<=hamin;
correct(0) <= (((((hamin(0) xor hamin(2)) xor hamin(4)) xor hamin(6)) xor hamin(8)) xor
hamin(10));
correct(1) <= (((((hamin(1) xor hamin(2)) xor hamin(5)) xor hamin(6)) xor hamin(9)) xor
hamin(10));
correct(2) <= ((((hamin(3) xor hamin(4)) xor hamin(5)) xor hamin(6)) xor hamin(11));
correct(3) <= ((((hamin(7) xor hamin(8)) xor hamin(9)) xor hamin(10)) xor hamin(11));
p<= hamin(0) xor hamin(1) xor hamin(2) xor hamin(3) xor hamin(4) xor hamin(5) xor,
hamin(6) xor hamin(7) xor hamin(8) xor hamin(10) xor hamin(11) xor correct(0) xor,
correct(1) xor correct(2) xor correct(3);
p<= hamin(0) xor hamin(1) xor hamin(2) xor hamin(3) xor hamin(4) xor hamin(5) xor
hamin(6) xor hamin(7) xor hamin(8) xor hamin(10) xor hamin(11) xor correct(0) xor
correct(1) xor correct(2) xor correct(3);
IF correct = "0000" THEN
error_pos <= "0000";
dataout(0) <= hamin(2);
dataout(1) <= hamin(4);
dataout(2) <= hamin(5);
dataout(3) <= hamin(6);
dataout(4) <= hamin(8);
dataout(5) <= hamin(9);
dataout(6) <= hamin(10);
dataout(7) <= hamin(11);
error_flag <= '0';
ELSIF correct /= "0000" THEN
error_pos <= correct;
error_flag <= '1';
IF correct = "0011" THEN
dataout(0) <= NOT hamin(2);
dataout(1) <= hamin(4);
dataout(2) <= hamin(5);
dataout(3) <= hamin(6);
dataout(4) <= hamin(8);
dataout(5) <= hamin(9);
dataout(6) <= hamin(10);
dataout(7) <= hamin(11);
ELSIF correct = "0101" THEN
dataout(0) <= hamin(2);
dataout(1) <= NOT hamin(4);
11
12
13
end for;
end TESTBENCH_FOR_hamenc;
Da bi smo testirali kako sistem radi doveli smo na ulaz kodera 8-bitnu sekvencu
"00010000". Na grafiku vidimo da smo na izlazu dobili 12-bitnu sekvencu
"000110000001" koja predstavlja kodiranu ulaznu re.
14
Kao jo jedan primer, bie ilustrovan prenos sekvence podataka. Najpre je na slici
prikazana sekvenca od tri bajta koji se prenose, gde vidimo ulazne vrednosti, kao i izlazne
vrednosti iz Hamingovog kodera. Zatim smo simulirali da je pri prenosu prvog bajta
15
dolo do greke u prenosu 5 bita, kod drugog baja da nije bilo greke pri prenosu i da je
kod treeg bajta dolo do pojave dvostruke greke na prvom i treem bitu.
16
5.1. Sinteza
Najpre je na slikama 2. i 3. prikazan rezultat sintetizovanja kola Hamingov
dekoder u RTL i gate obliku.
17
18
Slike 4. i 5. pretstavljaju dobijeni rezultat sinteze kola Hamingov dekoder na RTL i gate
nivou,
19
20
5.2. Implementacija
Najpre emo predoiti rezultate sinteze Hamingovog kodera. Sintezu i kodera i
dekodera vrili smo na FPGA ipovima serije SPARTAN2 pod oznakom xc2s15 vq100.
Design Summary
-------------Number of errors:
0
Number of warnings: 0
Logic Utilization:
Number of 4 input LUTs:
5 out of 384 1%
Logic Distribution:
Number of occupied Slices:
3 out of 192 1%
Number of Slices containing only related logic:
3 out of
3 100%
Number of Slices containing unrelated logic:
0 out of
3 0%
*See NOTES below for an explanation of the effects of unrelated logic
Total Number of 4 input LUTs:
5 out of 384 1%
Number of bonded IOBs:
20 out of 60 33%
Total equivalent gate count for design: 30
Additional JTAG gate count for IOBs: 960
Peak Memory Usage: 54 MB
Podaci vezani za vremenske karakteristike implementacije:
The AVERAGE CONNECTION DELAY for this design is:
1.095
The MAXIMUM PIN DELAY IS:
1.953
The AVERAGE CONNECTION DELAY on the 10 WORST NETS is: 1.496
to se tie potronje samog kola ona je deklarisana na 9.29mW i pri temperaturi
ambijenta od 25oC, temperatura kuita je 25.3oC.
Na slici 6. prikazano je zauzee logikih elija kao i raspored netova, zatim je na slici 7.
prikazan stvaran izgled veza izmeu elija i na kraju na slici 8. sam raspored pinova na
kuitu.
21
22
23
24
25
6. Zadatak
Proveriti ispravnost rada Hamingovog kodera i dekodera.
Za ulazni kod u Hamingov koder uzeli smo ulaznu sekvencu bitova datain=00010000.
Na slici 12. prikazan je izgled konkretnog testbench-a.
26
27
7. Laboratorijska veba
Zadatak 1.
Proveriti ispravnost rada Hamingovog kodera.
1. Pokrenuti program Active-HDL ija se ikonica nalazi na Desktop-u;
2. Otvoriti dizajn Haming;
3. Otvoriti listing TestBench-a, hamenc_TB.vhd, koji se nalazi u folder-u TestBench
(segment 1. na slici 16);
4. Promeniti vrednosti ulaza datain koji je dat u dizajnu, umesto postojee vrednosti
(segment 2. na slici 16). Izvriti kompajliranje pritiskom na uokvirenu ikonicu
(segment 3. na slici 16);
5. Podesiti Top level entitet na hamenc_TB.vhd (segment 4. na slici 16);
28
_________________________
izlazni binarni niz
Grupa 2:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Grupa 3:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Grupa 4:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Grupa 5:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
29
Grupa 6:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Grupa 7:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Grupa 8:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Grupa 9:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Grupa 10:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Grupa 11:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Grupa 12:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Grupa 13:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Grupa 14:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Grupa 15:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
30
Grupa 16:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
Zadatak 2.
Proveriti ispravnost rada Hamingovog dekodera.
1. Ponoviti sve korake za listing Testbench-a, hamdec_TB.vhd.
Grupa 1:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
Grupa 2:
_______________________
ulazni binarni niz
_________________________
izlazni binarni niz
31
_________________
pozicija greke
___________________
p-dvostruka greka
__________________
error flag
Grupa 3:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
Grupa 4:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
Grupa 5:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
Grupa 6:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
Grupa 7:
_______________________
ulazni binarni niz
_________________
_________________________
izlazni binarni niz
___________________
__________________
32
pozicija greke
p-dvostruka greka
error flag
Grupa 8:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
Grupa 9:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
Grupa 10:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
Grupa 11:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
Grupa 12:
_______________________
ulazni binarni niz
_________________
_________________________
izlazni binarni niz
___________________
__________________
33
pozicija greke
p-dvostruka greka
error flag
Grupa 13:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
Grupa 14:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
Grupa 15:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
Grupa 16:
_______________________
ulazni binarni niz
_________________
pozicija greke
_________________________
izlazni binarni niz
___________________
p-dvostruka greka
__________________
error flag
34
8. Literatura:
1. Charles B. Cameron, Hamming Codes, Lessons 37, Spring 2005.
2. Jaime Montenegro, Subbarao Wunnava, 12-bit VHDL Based Hamming Code Error
Detector/Corrector, Florida International University, 2005.
3. Allen D. Holliday, Hamming Error-Correction Codes, 1994.
4. Hamming, R. W., Error Detecting and Error Correcting Codes, Bell System
Tech. Jour., 1950.
5. P. Danziger, Linear Codes, 1990.
6. Lin, Shu, An Introduction to Error Correcting Codes, Englewood, 1970.
35