Układy cyfrowe - Kody liczbowe


Czynność przypisywana różnym informacjom pewnych symboli jest nazywana kodowaniem, a zestaw symboli przypisanych danej informacji - kodem tej informacji.

Z krótkiej definicji podanej wcześniej wynika, że system dwójkowy zapisu liczb jest naturalnym kodem dwójkowym, a system dziesiętny jest kodem dziesiętnym itp.

Jednak naturalny kod dwójkowy w wielu zastosowaniach nastręcza bardzo dużo problemów technicznych przy realizacji pewnych operacji. Taką trudność stanowi na przykład konwersja na system dziesiętny. Większość systemów cyfrowych komunikuje się z człowiekiem i informacja wyprowadzana przez te urządzenia musi być przedstawiona w systemie dziesiętnym (np. wskaźniki cyfrowe, drukarki). Bezpośrednie przejśie z naturalnego kou dwójkowego na system dziesiętny jest technicznie trudne, gdyż cyfry dziesiętne nie mają żadnego stałego odpowiednika w ciągu symboli binarnych. Realizacje są znacznie prostsze, gdy każdej cyfrze dziesiętnej przyporządkuje się na stałe określoną liczbę binarną. Koduje się po prostu cyfrę oddzielnie, a nie cała liczbę dziesiętną. Takie kody są znane pod nazwą kodów dwójkowo-dziesiętnych (2/10) lub kodów BCD (ang. Binary Coded Decimal).

Przykład:

31710 = 1001111012 =

0011

0001

01112/10

oddzielnie kodowana cyfra

3

1

7

W powyższym przykładzie cyfry 3, 1 i 7 zostały zakodowane 4-bitowym kodem naturalnym. taki kod BCD jest nazywany w związku z tym kodem naturalnym BCD lub kodem BCD 8421. Druga nazwa pochodzi od pierwszych czterech wag w systemie dwójkowym naturalnym.

Z porównania zapisu dwójkowego i dwójkowo-dziesiętnego wynika, że zwiększa się liczba bitów (a tym samym i sygnałow w układzie cyfrowym), lecz prostota przetwarzania całkowicie to rekompensuje.

Kod

I

II

III

IV

V

Nazwa

8421

Aikena

Jahnsona

2 z 5

1 z 10

Bity

D C B A

D C B A

E D C B A

E D C B A

K I H G F E D C B A

Wagi

8 4 2 1

2 4 2 1

- - - - -

- - - - -

9 8 7 6 5 4 3 2 1 0

0

0 0 0 0

0 0 0 0

0 0 0 0 0

0 0 0 1 1

0 0 0 0 0 0 0 0 0 1

1

0 0 0 1

0 0 0 1

0 0 0 0 1

0 0 1 0 1

0 0 0 0 0 0 0 0 1 0

2

0 0 1 0

0 0 1 0

0 0 0 1 1

0 1 0 0 1

0 0 0 0 0 0 0 1 0 0

3

0 0 1 1

0 0 1 1

0 0 1 1 1

1 0 0 0 1

0 0 0 0 0 0 1 0 0 0

4

0 1 0 0

0 1 0 0

0 1 1 1 1

0 0 1 1 0

0 0 0 0 0 1 0 0 0 0

5

0 1 0 1

1 0 1 1

1 1 1 1 1

0 1 0 1 0

0 0 0 0 1 0 0 0 0 0

6

0 1 1 0

1 1 0 0

1 1 1 1 0

1 0 0 1 0

0 0 0 1 0 0 0 0 0 0

7

0 1 1 1

1 1 0 1

1 1 1 0 0

0 1 1 0 0

0 0 1 0 0 0 0 0 0 0

8

1 0 0 0

1 1 1 0

1 1 0 0 0

1 0 1 0 0

0 1 0 0 0 0 0 0 0 0

9

1 0 0 1

1 1 1 1

1 0 0 0 0

1 1 0 0 0

1 0 0 0 0 0 0 0 0 0

Dziesięć cyfr dziesiętnych można zakodować binarnie na wiele różnych sposobów. Liczba możliwych kodów BCD jest olbrzymia. Nie wszystkie oczywiśćie znalazły praktyczne zastosowanie.

Kod I - utworzony poprzez przyporządkowanie kolejnym cyfrom dziesiętnym ich reprezentacji dwójkowych czyli wspomniany wcześniej naturalny kod BCD

Kod II - zwany kodem Aikena - jest kodem wagowym (tzn. każdej pozycji przypisano odpowiednią wagę, podobnie jak w naturalnym kodzie binarnym z tym, żę waga nie jest prostą funkcją pozycji - nie jest to więc kod pozycyjny). Jego szczególną cechą jest oś "antysymetrii". Oś ta przebiega pomiędzy kodem cyfry 4 i cyfry 5. Wyrazy tego kodu leżące w jednakowej odległości od tej osi różnią się negacją wszystkich bitów. Na przykład kod cyfry 3 - 0011 po zanegowaniu wszystkich bitów staje się kodem cyfry 6 - 1100. Kod ten można takżeotrzymać poprzez dodanie liczby 6 (0110) do kodowanej cyfry, poczynając od cyfry 5. Pierwszych pięc wyrazów tego doku jest bowiem identycznycyh jak w kodzie 8421. Ta cecha "antysymetrii" jest szczególnie przydatna rzy realizacji opearacji arytmetycznych.

Kod III - zwany kodem Johnsona (lub inaczej kodem pseudopierścieniowym) - wymaga pięciu bitów do zakodowania każdej cyfry dziesiętnej. Charakteryzuje się specyficznym rozkładem zer i jedynek. Checha ta znacznie upraszcza dekodowanie. Kod ten nie jest kodem wagowym (a tym bardziej pozycyjnym).

Kod IV - jest reprezentantemcałej rodziny kodów ze stałym indeksem, tzn. ze stałą liczbą jedynek w zapisie binarnym. Nazwę kodu 2 z 5 należy więc rozumieć tak, że każdy 5-bitowy wyraz tego kodu ma 2 jedynki i same zera. Kod "2 z 5 z negacją" jest także kodem ze stałym indeksem, ale w tym kodzie każdy 5-bitowy wyraz zawiera 0 zera i same jedynki. Liczba 2 dotyczy tym razem zer, a nie jedynek.

Wśród kodów ze stałym indeksem szczególne znaczenie ma kod 1 z n. Jest on bowiem cęsto kodem pierwotnym, to znaczy kodem wejściowym urządzenia. Wprowadzanie informacji do systemu cyfrowego często jest realizowane za pośrednictwem klawiatury z przyciskami. Jeden z przycisków jest wciśnięty, a pozostałe zwolnione - co odpowiada kodowi 1 z n. Wprowadzanie cyfr z klawiatury polega na wciśnięciu jednego z dziesięciu klawiszy przypisanych kolejnym cyfrom dziesiętnym. Informacja wejściowa ma więc postać "1 klawisz z 10 jest wciśnięty". (Jeżeli klawiatura jest wyposażona w większą liczbę przycisków, to zwykle są stosowane bardziej złożone układy identyfikacji wciśniętego klawisza.)

Innym przykładem może być sterowanie ruchem jakiegoś urządzenia: "w lewo", "w prawo", "stop" - najdogodniej jest zakodować wstępnie jako 100, 010, 001 (trzy przyciski będą służyły do wprowadzania tych poleceń). Dopiero potrzeba dalszego przetwarzania informacji wejściowej powoduje, że warto zamienić ja na krótsze wyrażenie. Kod pierwotny 1 z 10 (dziesięc sygnałów) można więc zamienić np. na kod naturalny BCD (tylko cztery sygnały).

Jak już pisało wcześniej, wprowadzenie zapisu liczb w kodzie BCD (zamiast zapisu naturalnego) wydłuża ten zapis. Użycie kodu BCD 5 bitowego zamiast 4-bitowego (np. kodu 2 z 5) powoduje dalsze wydłużenie tego zapisu. W technicznej realizacji przetwarzanie takiej informacji wymaga zwiększenia liczby sygnałów, a więc komplikuje urządzenie lub wydłuża czas przetwarzania.

Jaki jest cel stosowania np. kodu 2 z 5?

Przyjmijmy, że naszym zadaniem jest przesłanie na pewną odległość informacji zakodowanej w postaci kodu 2 z 5. Zatem wysyłamy słowa 5-bitowe o postaci takiej jak w tabeli powyżej. Wiemy, że proces transmisji jest szczególnie narażony na wpływ czynników zakłócających. mimo, że dwustanowe sygnały są dośc odporne na zakłócenia, to może się zdarzyć, że jakiś nadany bit o wartości 1 zostanie odebrany jako bit o wartości 0 (lub na odwrót). Otrzymane wówczas na wejściu urządzenia, odbierającego przesyłana informacje, słowo binarne będzie miało jedna jedynkę lub trzy jedynki. Jeżeli urządzenie odbiorcze wyposażymy w układ kontrolujacy liczbę jedynek w odbieranym słowie, to każdą taką sytuacje natychmiast zidentyfikuje. Układ sterujący procesem transmisji może w takiej sytuacji ponowić przesyłanie informacji albo zatrzymać przesyłanie i zasygnalizować wystąpipenie błedu (zakłocenia). W pierwszym przypadku (powtórzenie transmicji) użytkownik nawet nie zauważy, że wystąpiło zakłocenie i zinterpretuje to jako "odporność" na zakłucenia.

Można sobie wyobrażić, że w nadanym słowie 5-bitowym w wyniku zakłocenia jeden bit zmieni wartość z 0 na 1, drugi zas z 1 na 0 I TAK "zdeformowana" informacja dotrze do układu odbiorczego. Układ kontrolujący odbieraną informację nic wówczas "nie zauważy". rzeczywiście, tai podwójny bład może w praktyce wystąpić i nie zostać zauważony. Ale prawdopodobieństwo, że dwa impulsy zakłocające (i to o przeciwnych kierunkach oddziaływania) wystąpią w tym samym czasie jest dużo, dużo mniejsze. Próg "odporności" na zakłocenia informacji kodowanej przy użyciu kodu 2 z 5 jest więc bardzo wysoki.

Kod mahący cechę sobie właściwą, która może być identyfikowana, jest nazywany kodem z zabespieczeniem lub kodem detekcyjnym. Kod taki jest kodem o zwiekszonej odporności na zakłocenia. Chociaż, jak już wyjaśniono, "odporność" nie jest tu adekwatnym określeniem, bowiem kod daje się zakłocać jak każdy inny - ale istnieje możliwośc detekcji zakłócenia. Istnieją także kody rzeczywiście odporne na zakłócenia. Konstrukcja takiego kodu pozwala na odtworzenie pierwotnej informacji w urządzeniu odbierającym nawet wówczas, gdy wysąpił bład (zakłócenie), np. kod Hamminga

Odporność na zakłócenia kodu 2 z 5 )czy generalnie kodu ze stałym indeksem) jest cechą "wrodzoną", to znaczy już sama zasada konstrukcji kodu sprawia, ze ma on cechę charakterystyczną, która może być identyfikowana i sprawdzana. Wiele kodów nie ma jednak takiej odporności na zakłocenia. Najprostszą metodą zwiększenia odporności kodu na zakłocenia jest dodanie tak zwanego bitu parzystości. na przykład: kod naturalny BCD uzupełniony o bit parzystości będzie miał następującą postać:

D

C

B

A

P

0

0

0

0

0

0

1

0

0

0

1

1

2

0

0

1

0

1

3

0

0

1

1

0

4

0

1

0

0

1

5

0

1

0

1

0

6

0

1

1

0

0

7

0

1

1

1

1

8

1

0

0

0

1

9

1

0

0

1

0

Zauważymy, że dodatkowy piąty bit ma taka wartość, że liczba jedynek w nowo powstałym słowie 5-bitowym jest liczbą parzystą. Kod więc uzyskuje w ten sposób pewną cechę charakterystyczną i staje się kodem detekcyjnym.

W taki sposób )za pomoca bitu parzystości) można zabespieczyć dowolny kod. Zazwyczaj nie dodaje się bitu parzystości, jeżeli informacja jest przetwarzana wewnotrz urządzenia i przesłania dotyczą modułow znajdujących się w jednej obudowie. Jeżeli jednak transmicja ma być realizowana pomiędzy róznymi urządzeniami, a odległość między nimi jest liczona w metrach, to wówczas nadawana informacja jest uzupełniana o dodatkowy bit - bit parzystości. Urządzenie odbiorcze kontroluje, czy w odbieranych słowach binarnych jest parzysta liczba jedynek czy nieparzysta. Pojedyncze zakłocenie zostanie więc łatwo zidentyfikowane. Zakłocenie podówjne, podobnie jak w przypadku kodu 2 z 5, nie zostanie rozpoznane. Także zakłocenie podwójne jednokierunkowe (tzn. jednoczesna zmiana dwóch bitów z 0 na 1 lub na odwrót) nie zostanie zidentyfikowane. Kod 2 z 5 jest natomiast odporny na takie zakłócenia. Prawdopodobieństwo wystąpienia podwójnego błdu jednokierunkowego jest większe niż prawdopodobieństwo wystąpienia podwójnego błędu dwukierunkowego. Odporność kadów zaopatrzonych w bit parzystości jest więc niższa niż kodów ze stałym indeksem.

Zamist porzystości można także kontrolować nieparzystość. Dodatkowy bit - bit nieparzystości - powinien mieć wówczas taka wartość, aby liczba jedynek w słowie kodowym była liczbą nieparzystą. Nie ma to jednak wpływu na poziom odporności kodu na zakłócenia.

Kod Graya jednobitowy ma oczywiście postać jednoznaczną. Aby rozszerzyć go do dwóch bitów, należy jeszcze raz przepisać ciąg wyrazów kodu jednobotowego, ale w odwrotnej kolejności (znaleźć symetryczne odbicie). Nastepnie do początkowych wyrazów dopisać dodatkowy bit 0, a do dopisanych (lustrzanych) - dodatkowy bit 1

Kod graja n-bitowy tworzy się analogicznie, to znaczy powtarzając (w odwrotnej kolejności) n-1 botowy kod Graya i dopisując dodatkowy bit (0 w pierwotnej częsci i 1 w części dopisanej). Zauważymy, że tenm kod jest kodem cyklicznym - to znaczy, że pierwszy wyraz kodu i ostatni również spełniają zasadę na jakiej skonstrułowano ten kod.

Kod Graja 3-bitowy:

C

B

A

0

0

0

0

0

1

0

1

1

0

1

0

1

0

0

1

0

1

1

1

1

1

1

0


www.piotrsog.prv.pl