You are on page 1of 35

UNIVERZITET U NIU

ELEKTRONSKI FAKULTET
KATEDRA ZA ELEKTRONIKU

HAMINGOV KODER/DEKODER

Student:
Sran Vujaevi 11424

Ni, jun 2006.

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

Kd moe korektovati do c bitova greke ako je minimalna distanca kda


Dmin 2c + 1
Kodovi parnosti
parna parnost
ukupan broj jedinica u kodnoj rei je paran:
- 0110110 1
- 0001011 0
neparna parnost
ukupan broj jedinica u kodnoj rei je neparan:
- 0110110 0
- 0001011 1

2.2. Pojam sindrom rei


Sindrom re se dobija poreenjem dve K-bitne vrednosti bit po bit uzimanjem
eksluzivne disjunkcije. Sindorm re je neoznaen ceo broj duine K koji ima vrednost K
izmedju 0 i 2K-1.
Vrednost 0 oznaava da nema greaka u zapisu, dok ostalih 2 K-1 vrednosti odreuju
mesto greke, u sluaju da greka postoji. Kako greka moe da se javi na bilo kom od M
bitova podatka i K bitova koji se koriste u proveri, mora da vai 2 K-1 M+K. Na osnovu
ove nejednakosti moemo da odredimo potreban broj bitova kao funkciju duine rei za
koju se vri provera.
elja je da generisana sindrom rec ima sledece karakteristike:
Ako su svi bitovi u njoj 0 tada nije otkrivena nikakva greka.
Ako u rei postoji tano jedna 1, tada greka postoji u jednom od 4 bita za proveru, dok
je zapis podatka u redu i ne zahteva nikavu korekciju.
Ako sindrom sadri vie od jednog bita koji ima vrednost 1, tada vrednost sindrom rei
posmatrane kao ceo neoznaen broj odreuje poziciju na kojoj se nalazi greka. Korekcija
se sastoji u komplementiranju vrednosti odgovarajueg bita podatka.
Da bi ove karakteristike i ostvarili uredimo bitove podatka i bitove za proveru u re
duine 12 bita na nain prikazan u tabeli:

Pozicije bitova podataka i bitova za proveru


C1 = M 1
C2 = M 1
C3 = M 2
C4 = M 5

M2 M4 M5 M7
M3 M4 M6 M7
M3 M4 M8
M6 M7 M8

gde oznaava operaciju ekskluzivne disjunkcije.

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

Tako da vrednosti P1,P2,P4 i P8 raunamo kao:


P1 = XOR nad bitovima (3,5,7,9,11)
P2 = XOR nad bitovima (3,6,7,10,11)
P4 = XOR nad bitovima (5,6,7,12)
P8 = XOR nad bitovima (9,10,11,12)
Koriena ekskluzivna OR operacija ustvari vri neparnu funkciju. Ona je jednaka 1
kada imamo neparan broj jedinica izmeu posmatranih promenjivih, a jednaka 0 kada
imamo paran broj jedinica. To nam obezbeuje da je broj jedinica na proveravanim
pozicijama ukljuujui i bitove parnosti, uvek paran.
Na mestu prijema kompozitna re od 12 bitova se ponovo proverava na greku.
Parnost rei se proverava nad istim grupama bitova u rei ukljuujui i bitove parnosti.
Tako da e mo sad imati etiri bita provere:
C1 = XOR nad bitovima (1,3,5,7,9,11)
C2 = XOR nad bitovima (2,3,6,7,10,11)
C4 = XOR nad bitovima (4,5,6,7,12)
C8 = XOR nad bitovima (8,9,10,11,12)
Dobijena vrednost 0 za proverene bitove ukazuje na parnu parnost, a dobijena vrednost
1 na neparnu parnost. Poto su bitovi zapisani sa parnom parnosti, rezultat
C=C8C4C2C1=0000, ukazuje da nije dolo do greke pri prenosu. Uopteno, za C0, 4bitni binarni broj ukazuje na poziciju bita gde je nastala greka, ako se radi o jednostrukoj

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

nije prisutna greka

- ako je C 0 i P = 1

detektovana je jednostruka greka koja moe biti korigovana

- ako je C 0 i P = 0

detektovana je dvostruka greka koja ne moe biti korigovana

- ako je C = 0 i P=1

greka je nastala u P13 bitu

Realizacija Hamingovog kodera/dekodera


Na slici 1. prikazana je opta blok ema sistema sa Hamingovim kodiranjem ima
sledei izgled:
Ulazna sekvenca
od m bitova

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

Pozicija Flag Dvostruka


greke greke greka

Slika 1. Opta blok ema sistema sa Hamingovim kodiranjem

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.

3. Realizacija Hamingovog koder/dekoder u VHDL-u


3.1. Hamingov koder
U1
d atain(7 :0 )

hamo ut(1 1:0 )

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;

3.2. Hamingov dekoder


U1
hamin(1 1 :0 )

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

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 = "0110" THEN
dataout(0) <= hamin(2);
dataout(1) <= hamin(4);
dataout(2) <= NOT (hamin(5));
dataout(3) <= hamin(6);
dataout(4) <= hamin(8);
dataout(5) <= hamin(9);
dataout(6) <= hamin(10);
dataout(7) <= hamin(11);
ELSIF correct = "0111" THEN
dataout(0) <= hamin(2);
dataout(1) <= hamin(4);
dataout(2) <= hamin(5);
dataout(3) <= NOT (hamin(6));
dataout(4) <= hamin(8);
dataout(5) <= hamin(9);
dataout(6) <= hamin(10);
dataout(7) <= hamin(11);
ELSIF correct = "1001" THEN
dataout(0) <= hamin(2);
dataout(1) <= hamin(4);
dataout(2) <= hamin(5);
dataout(3) <= hamin(6);
dataout(4) <= NOT (hamin(8));
dataout(5) <= hamin(9);
dataout(6) <= hamin(10);
dataout(7) <= hamin(11);
ELSIF correct = "1010" THEN
dataout(0) <= hamin(2);
dataout(1) <= hamin(4);
dataout(2) <= hamin(5);
dataout(3) <= hamin(6);
dataout(4) <= hamin(8);
dataout(5) <= NOT (hamin(9));
dataout(6) <= hamin(10);
dataout(7) <= hamin(11);
ELSIF correct = "1011" THEN
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) <= NOT (hamin(10));

12

dataout(7) <= hamin(11);


ELSE
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) <= NOT (hamin(11));
END IF ;
END IF ;
END process;
END hamdec;

4. VHDL kod test bench-a procesora i prikaz rezultata


simulacije
Najpre e biti dat listing koda testbench-a za Hamingov koder, a potom i dobijeni
rezultati simulacijom.
library ieee;
use ieee.std_logic_1164.all;
entity hamenc_tb is
end hamenc_tb;
architecture TB_ARCHITECTURE of hamenc_tb is
component hamenc
port(
datain : in std_logic_vector(7 downto 0);
hamout : out std_logic_vector(0 to 11) );
end component;
signal datain : std_logic_vector(7 downto 0);
signal hamout : std_logic_vector(0 to 11);
begin
UUT : hamenc
port map (
datain => datain,
hamout => hamout
);
-- Add your stimulus here ...
datain<="00010000";
end TB_ARCHITECTURE;
configuration TESTBENCH_FOR_hamenc of hamenc_tb is
for TB_ARCHITECTURE
for UUT : hamenc
use entity work.hamenc(ver2);
end for;

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.

Listing koda za testbench Hamingovog dekodera:


library ieee;
use ieee.std_logic_arith.all;
use ieee.numeric_std.all;
use ieee.std_logic_1164.all;
entity hamdec_tb is
end hamdec_tb;
architecture TB_ARCHITECTURE of hamdec_tb is
component hamdec
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 component;
signal hamin : std_logic_vector(11 downto 0);
signal dataout : std_logic_vector(7 downto 0);
signal error_pos : std_logic_vector(3 downto 0);
signal p : std_logic;
signal error_flag : std_logic;
-- Add your code here ...
begin
-- Unit Under Test port map
UUT : hamdec
port map (
hamin => hamin,
dataout => dataout,
error_pos => error_pos,
p => p,

14

error_flag => error_flag


);
-- Add your stimulus here ...
hamin<="000000000000","000110010001" after 20ns;
end TB_ARCHITECTURE;
configuration TESTBENCH_FOR_hamdec of hamdec_tb is
for TB_ARCHITECTURE
for UUT : hamdec
use entity work.hamdec(hamdec);
end for;
end for;
end TESTBENCH_FOR_hamdec;
Zatim smo na ulaz dekodera doveli ovu 12-bitnu sekvencu, ali tako to smo na
mesto 5 bita umesto '0' stavili '1', kako bi ustvari simulirali greku tokom prenosa. Na
grafiku se vidi da smo na izlazu dataout dobili korigovanu re koja odgovara 8-bitnoj
ulaznoj sekvenci u predajnik. Ispod se vidi da izlaz error_pos ima vrednost 5, to nam
indicira da je dolo do greke u 5 bitu i da je on korigovan. Fleg bit error_fleg se takoe
postavio na '1' to ukazuje da je dolo do greke. Bit p koji indicira prisustvo greke u dva
bita ostao je na logikoj nuli.

I na kraju kako bi pokazali ta se deava kada se javlja dvostruka greka, osim


modela greke na 5 bitu, isto smo uradili i sa estim bitom, znai umesto '0' stavili '1'
kako bi modelovali greku pri prenosu. Kao rezultat, na grafiku vidimo da je izlaz p
signalizirao prisustvo dvostruke greke (stanje logike jedinice). Izlaz error_pos nam
indicira da je dolo do greke u bitu na poziciji 3, to je greka, jer smo modelirali
greke na 5-tom i
6-tom bitu. To nam pokazuje da je mogue detektovati i korigovati samo prisustvo
jednostruke greke, dok je mogue samo detektovati prisustvo dvostruke greke.

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.

Na donjem grafiku prikazan je dobiveni rezultat na izlazu Hamingovog dekodera.


Moemo videti da je pri prenosu prvog bajta dekoder signalizirao da se radi o greci na
petom bitu i da je ispravio. Kod prenosa drugog bajta nije bilo greke, tako da je sve u
redu, i na kraju pri prenosu treeg bajta, izlaz p nam signalizira da se radi o dvostrukoj
greci, tako da je potrebno ponoviti prenos zadnjeg bajta, jer nismo u mogunosti da ga
korigujemo.

16

5. Rezultati sinteze i implementacije


Za sintezu opisanih kola iskorien je program Synplify Pro firme Synplicity. Kao
rezultat bie date eme sinteze u RTL i Gate formatu. Nakon toga je izvrena
implementacija na FPGA kolima firme XILINX uz pomo njihovog programskog paketa
XILINX ISE verzije 6.3 i prikazani su dobijeni rezultati.

5.1. Sinteza
Najpre je na slikama 2. i 3. prikazan rezultat sintetizovanja kola Hamingov
dekoder u RTL i gate obliku.

Slika 2.ema sinteze Hamingovog enkordera na Gate nivou

17

Slika 3. ema sinteze Hamingovog kodera na RTL nivou

18

Slike 4. i 5. pretstavljaju dobijeni rezultat sinteze kola Hamingov dekoder na RTL i gate
nivou,

Slika 4. ema sinteze Hamingovog dekodera na Gate nivou

19

Slika 5. ema sinteze Hamingovog dekodera na RTL nivou

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

Slika 6. Zauzee logikih blokova

Slika 7. Fiziki raspored veza

22

Slika 8. Raspored pinova


Zatim slede rezultati implementacije Hamingovog dekodera. Ispod je kao i u
prethodnom sluaju, na slici 9. prikazano je zauzee logikih elija kao i raspored netova,
zatim je na slici 10. prikazan stvaran izgled veza izmeu elija i na kraju na slici 11. sam
raspored pinova na kuitu.
Design Summary
-------------Number of errors:
0
Number of warnings: 0
Logic Utilization:
Number of 4 input LUTs:
27 out of 384 7%
Logic Distribution:
Number of occupied Slices:
14 out of 192 7%
Number of Slices containing only related logic: 14 out of 14 100%
Number of Slices containing unrelated logic:
0 out of 14 0%
*See NOTES below for an explanation of the effects of unrelated logic
Total Number of 4 input LUTs:
27 out of 384 7%
Number of bonded IOBs:
26 out of 60 43%
Total equivalent gate count for design: 162
Additional JTAG gate count for IOBs: 1,248
Peak Memory Usage: 54 MB
Podaci vezani za vremenske karakteristike implementacije:
The AVERAGE CONNECTION DELAY for this design is:
0.961
The MAXIMUM PIN DELAY IS:
1.943
The AVERAGE CONNECTION DELAY on the 10 WORST NETS is: 1.348

23

Potronja je slina kao u prethodnom sluaju, deklarisana je na 10.49mW i pri


temperaturi ambijenta od 25oC, temperatura kuita je 25.4oC.

Slika 9. Zauzee logikih blokova

Slika 10. Fiziki raspored veza

24

Slika 11. Raspored pinova

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.

Slika 12. Izgled testbenc-a za Hamingov koder


Na slici 13. prikazani su dobijeni vremenski dijagrami, gde vidimo da smo kao
izlaz iz Hamingovog kodera dobili sekvencu dataout=000110000001.

Slika 13. Vremenski dijagram rada kola


Zatim smo tu sekvencu doveli na ulaz Hamingovog dekodera, pri emu smo na mestu
petog bita umesto nule stavili jedinicu. Time smo simulirali greku u prenosu. Na slici 14.
najpre je prikazan izgled testbench-a, a zatim na slici 15. i izgled dobijenog dijagrama.
U konkretnom primeru na ulaz smo doveli niz hamin=000110010001, koji ustvari
simulira izlazni niz iz Hamingovog kodera stim da se javila greka pri prenosu na 5 bitu
koji je sada 1 umesto 0. Vidimo da na izlazu dobijamo error_flag bit, da se greka javila
na petoj poziciji error_pos=5 i naravno na izlazu dataout=00010000.

26

Slika 14. Izgled testbenc-a za Hamingov dekoder

Slika 15. Vremenski dijagram rada kola

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);

Slika 16. Otvaranje dizajna i upisivanje vrednosti


6. Otvoriti New Waveform (segment 5. na slici 17);
7. Dodati signale (segment 6. na slici 17);
8. Podesiti vreme simulacije na 100 ns ili vie ako je potrebno (segment 7. na slici
17);
9. Pokrenuti simulaciju pritiskom na uokvirenu ikonicu (segment 8. na slici 17);
10. Po zavretku simulacije moe biti potrebno da se vremenski dijagram uvea ili
umanji radi bolje preglednosti. Komande za uveliavanje i umanjivanje su
uokvirene (segment 9. na slici 17);
11. Uporediti dobijeni vremenski dijagram sa ispravnim radom dizajna (vremenski
dijagram na slici 17).

28

Slika 17. Waveform editor


12. Odtampati dobijeni vremenski dijagram.
Grupa 1:
_______________________
ulazni binarni niz

_________________________
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.

Slika 18. Waveform editor

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

You might also like