Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
Bit parzystości umożliwia pewną ochronę transmisji danych przed błędami. Dokładnie opisaliśmy jego zastosowanie w rozdziale o kodach EDC. W tym projekcie naszym zadaniem jest stworzenie sieci logicznej, która generuje bit parzystości dla 8 bitów danych informacyjnych. Sieć będzie posiadała 8 wejść, na które podajemy kolejne bity informacyjne, oraz jedno wyjście, na którym pojawia się bit parzystości. Poniżej przedstawiamy schemat blokowy takiej sieci:
Stworzenie układu cyfrowego generującego bit parzystości na pierwszy rzut oka wydaje się trudne. W rzeczywistości tak nie jest. Przypomnijmy sobie funkcję różnicy symetrycznej realizowaną przez bramkę EX-OR (układ TTL - SN7486, CMOS - CD4070) :
Bramka EX-OR
|
|
Na wyjściu otrzymujemy 1, jeśli na wejściu bramki jest nieparzysta liczba jedynek. Własność tą wykorzystamy w układzie generacji bitu parzystości. Nad każdą parą bitów w zbiorze wejściowym:
{ b1, b2, b3, b4, b5, b6, b7, b8 } |
wykonujemy operację różnicy symetrycznej:
w1 = b1 ⊕ b2 w2 = b3 ⊕ b4 w3 = b5 ⊕ b6 w4 = b7 ⊕ b8 |
W wyniku otrzymujemy nowy zbiór 4-elementowy:
{ w1, w2, w3, w4 } |
Jeśli w zbiorze
Zakładamy, iż zbiór
Zakładamy, iż zbiór
Udowodniliśmy, iż zbiór wynikowy
x1 = w1 ⊕ w2 x2 = w3 ⊕ w4 |
Otrzymujemy kolejny zbiór wynikowy
y = x1 ⊕ x2 |
Wynik y jest równy 1, jeśli zbiór wejściowy zawierał nieparzystą ilość bitów 1, a 0, gdy liczba bitów 1 była parzysta. Zatem y jest poszukiwanym bitem parzystości. Aby otrzymać pełną funkcję zastąpmy kolejne symbole x i w wykonanymi operacjami:
y = x1 ⊕ x2 y = ( w1 ⊕ w2 ) ⊕ ( w3 ⊕ w4 ) y = (( b1 ⊕ b2 ) ⊕ ( b3 ⊕ b4 )) ⊕ (( b5 ⊕ b6 ) ⊕ ( b7 ⊕ b8 )) |
Otrzymaliśmy wzór funkcji generującej bit parzystości:
Gdybyśmy potrzebowali funkcji generującej bit nieparzystości, to wystarczy zanegować naszą funkcję:
Cała sieć logiczna będzie zbudowana z bramek EX-OR. Zaczynamy od sygnałów wejściowych:
Teraz realizujemy kolejne człony wzoru funkcji za pomocą bramek EX-OR:
Teraz realizujemy drugi poziom:
I ostatni, trzeci poziom:
Sieć logiczna jest gotowa. Ponieważ bramki pracują kaskadowo, to stan wyjściowy ustali się po około trzykrotnym czasie propagacji dla pojedynczej bramki EX-OR.
Numerujemy bramki zgodnie z kolejnością przetwarzania sygnałów:
Określamy sieć połączeń:
8 bitów danych daje 2 8 = 256 kombinacji stanów wejściowych. Nasz program symulacyjny tworzy wszystkie 256 stanów wejść b1...b8, po czym wyznacza bit parzystości y na podstawie sieci połączeń. Na koniec program zlicza liczbę bitów 1 w słowie wyjściowym b1...b8 plus bit parzystości. Jeśli liczba bitów jest parzysta, to wyświetla napis OK. Napis ?? obok słowa wyjściowego oznacza błędne działanie sieci.
C++// Symulacja sieci logicznej // generatora bitu parzystości // (C)2020 mgr Jerzy Wałaszek // I LO w Tarnowie #include <iostream> using namespace std; // Funkcje bramek int EXOR(int a, int b) { return (a ^ b); } int main( ) { // Stany wejściowe oraz stan wyjściowy int b1,b2,b3,b4,b5,b6,b7,b8,y; // Stany wyjściowe bramek int YB1,YB2,YB3,YB4,YB5,YB6,YB7; // Licznik bitów o stanie 1 int cnt1; // Licznik słów int wc = 0; // Generujemy kolejne stany wejściowe for(b8 = 0; b8 < 2; b8++) for(b7 = 0; b7 < 2; b7++) for(b6 = 0; b6 < 2; b6++) for(b5 = 0; b5 < 2; b5++) for(b4 = 0; b4 < 2; b4++) for(b3 = 0; b3 < 2; b3++) for(b2 = 0; b2 < 2; b2++) for(b1 = 0; b1 < 2; b1++) { // Symulacja sieci YB1 = EXOR(b1,b2); YB2 = EXOR(b3,b4); YB3 = EXOR(b5,b6); YB4 = EXOR(b7,b8); YB5 = EXOR(YB1,YB2); YB6 = EXOR(YB3,YB4); YB7 = EXOR(YB5,YB6); // Stan wyjściowy y = YB7; // Obliczamy ilość bitów 1 cnt1 = y + b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8; // Wyświetlamy wyniki cout << b8 << b7 << b6 << b5 << b4 << b3 << b2 << b1 << "|" << y << " - "; if(cnt1 % 2) cout << "??"; else cout << "OK"; cout << " "; wc++; if(wc == 4) { wc = 0; cout << endl; } } cout << endl; return 0; } |
Wynik: |
00000000|0 - OK 00000001|1 - OK
00000010|1 - OK 00000011|0 - OK 00000100|1 - OK 00000101|0 - OK 00000110|0 - OK 00000111|1 - OK 00001000|1 - OK 00001001|0 - OK 00001010|0 - OK 00001011|1 - OK 00001100|0 - OK 00001101|1 - OK 00001110|1 - OK 00001111|0 - OK 00010000|1 - OK 00010001|0 - OK 00010010|0 - OK 00010011|1 - OK 00010100|0 - OK 00010101|1 - OK 00010110|1 - OK 00010111|0 - OK 00011000|0 - OK 00011001|1 - OK 00011010|1 - OK 00011011|0 - OK 00011100|1 - OK 00011101|0 - OK 00011110|0 - OK 00011111|1 - OK 00100000|1 - OK 00100001|0 - OK 00100010|0 - OK 00100011|1 - OK 00100100|0 - OK 00100101|1 - OK 00100110|1 - OK 00100111|0 - OK 00101000|0 - OK 00101001|1 - OK 00101010|1 - OK 00101011|0 - OK 00101100|1 - OK 00101101|0 - OK 00101110|0 - OK 00101111|1 - OK 00110000|0 - OK 00110001|1 - OK 00110010|1 - OK 00110011|0 - OK 00110100|1 - OK 00110101|0 - OK 00110110|0 - OK 00110111|1 - OK 00111000|1 - OK 00111001|0 - OK 00111010|0 - OK 00111011|1 - OK 00111100|0 - OK 00111101|1 - OK 00111110|1 - OK 00111111|0 - OK 01000000|1 - OK 01000001|0 - OK 01000010|0 - OK 01000011|1 - OK 01000100|0 - OK 01000101|1 - OK 01000110|1 - OK 01000111|0 - OK 01001000|0 - OK 01001001|1 - OK 01001010|1 - OK 01001011|0 - OK 01001100|1 - OK 01001101|0 - OK 01001110|0 - OK 01001111|1 - OK 01010000|0 - OK 01010001|1 - OK 01010010|1 - OK 01010011|0 - OK 01010100|1 - OK 01010101|0 - OK 01010110|0 - OK 01010111|1 - OK 01011000|1 - OK 01011001|0 - OK 01011010|0 - OK 01011011|1 - OK 01011100|0 - OK 01011101|1 - OK 01011110|1 - OK 01011111|0 - OK 01100000|0 - OK 01100001|1 - OK 01100010|1 - OK 01100011|0 - OK 01100100|1 - OK 01100101|0 - OK 01100110|0 - OK 01100111|1 - OK 01101000|1 - OK 01101001|0 - OK 01101010|0 - OK 01101011|1 - OK 01101100|0 - OK 01101101|1 - OK 01101110|1 - OK 01101111|0 - OK 01110000|1 - OK 01110001|0 - OK 01110010|0 - OK 01110011|1 - OK 01110100|0 - OK 01110101|1 - OK 01110110|1 - OK 01110111|0 - OK 01111000|0 - OK 01111001|1 - OK 01111010|1 - OK 01111011|0 - OK 01111100|1 - OK 01111101|0 - OK 01111110|0 - OK 01111111|1 - OK 10000000|1 - OK 10000001|0 - OK 10000010|0 - OK 10000011|1 - OK 10000100|0 - OK 10000101|1 - OK 10000110|1 - OK 10000111|0 - OK 10001000|0 - OK 10001001|1 - OK 10001010|1 - OK 10001011|0 - OK 10001100|1 - OK 10001101|0 - OK 10001110|0 - OK 10001111|1 - OK 10010000|0 - OK 10010001|1 - OK 10010010|1 - OK 10010011|0 - OK 10010100|1 - OK 10010101|0 - OK 10010110|0 - OK 10010111|1 - OK 10011000|1 - OK 10011001|0 - OK 10011010|0 - OK 10011011|1 - OK 10011100|0 - OK 10011101|1 - OK 10011110|1 - OK 10011111|0 - OK 10100000|0 - OK 10100001|1 - OK 10100010|1 - OK 10100011|0 - OK 10100100|1 - OK 10100101|0 - OK 10100110|0 - OK 10100111|1 - OK 10101000|1 - OK 10101001|0 - OK 10101010|0 - OK 10101011|1 - OK 10101100|0 - OK 10101101|1 - OK 10101110|1 - OK 10101111|0 - OK 10110000|1 - OK 10110001|0 - OK 10110010|0 - OK 10110011|1 - OK 10110100|0 - OK 10110101|1 - OK 10110110|1 - OK 10110111|0 - OK 10111000|0 - OK 10111001|1 - OK 10111010|1 - OK 10111011|0 - OK 10111100|1 - OK 10111101|0 - OK 10111110|0 - OK 10111111|1 - OK 11000000|0 - OK 11000001|1 - OK 11000010|1 - OK 11000011|0 - OK 11000100|1 - OK 11000101|0 - OK 11000110|0 - OK 11000111|1 - OK 11001000|1 - OK 11001001|0 - OK 11001010|0 - OK 11001011|1 - OK 11001100|0 - OK 11001101|1 - OK 11001110|1 - OK 11001111|0 - OK 11010000|1 - OK 11010001|0 - OK 11010010|0 - OK 11010011|1 - OK 11010100|0 - OK 11010101|1 - OK 11010110|1 - OK 11010111|0 - OK 11011000|0 - OK 11011001|1 - OK 11011010|1 - OK 11011011|0 - OK 11011100|1 - OK 11011101|0 - OK 11011110|0 - OK 11011111|1 - OK 11100000|1 - OK 11100001|0 - OK 11100010|0 - OK 11100011|1 - OK 11100100|0 - OK 11100101|1 - OK 11100110|1 - OK 11100111|0 - OK 11101000|0 - OK 11101001|1 - OK 11101010|1 - OK 11101011|0 - OK 11101100|1 - OK 11101101|0 - OK 11101110|0 - OK 11101111|1 - OK 11110000|0 - OK 11110001|1 - OK 11110010|1 - OK 11110011|0 - OK 11110100|1 - OK 11110101|0 - OK 11110110|0 - OK 11110111|1 - OK 11111000|1 - OK 11111001|0 - OK 11111010|0 - OK 11111011|1 - OK 11111100|0 - OK 11111101|1 - OK 11111110|1 - OK 11111111|0 - OK |
Bity danych ustawiasz za pomocą prostokątnych przycisków. Kliknięcie przycisku myszką zmienia jego stan na przeciwny. Kolor czarny oznacza 0, kolor czerwony oznacza 1. Stan bitu parzystości y odczytujesz z okrągłego pola.
Symulator |
Obciążenia wejść:
b1...b8 = 1 |
SN7486
× 2 |
Przemysł elektroniczny produkuje gotowe układy zawierające generator bitu parzystości/nieparzystości, np. SN74180.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.