Projekt Koder HDB-3 - Politechnika Warszawska
Transkrypt
Projekt Koder HDB-3 - Politechnika Warszawska
Projekt UCYF „Koder HDB-3” Projekt Koder HDB-3 Wykonali: Agnieszka Sikorska, Łukasz Kokosza EiTI Politechnika Warszawska Warszawa 2005 -1– Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” 1.Wstęp teoretyczny W wielokrotnych systemach o modulacji impulsowo-kodowej PCM sygnały cyfrowe są – przed wysłaniem ich w linię – przekształcane na sygnały trójwartościowe (bipolarne o stanach znamiennych B+, 0, B-) o strukturze zapewniającej najlepsze własności transmisyjne przesyłanego sygnału oraz umożliwiającej właściwą współpracę urządzeń nadawczych i odbiorczych (synchronizacja urządzeń i regeneracja sygnałów). Powszechnie stosowane są dwa kody; AMI i HDB3 (High Density Bipolar). W kodzie AMI każde zero sygnału bipolarnego pozostaje nie zamienione, jedynkom zaś tego sygnału zostają przyporządkowane na zmianę impulsy B+ lub B-. W kodzie HDB-3 jedynkom sygnału binarnego przyporządkowane są na zmianę impulsy B+ i B- sygnału bipolarnego, jeżeli między dwoma jedynkami występuje mniej niż cztery zera. W przeciwnym wypadku każda sekwencja czterech kolejnych zer jest zastępowana ciągiem sygnałów bipolarnych o postaci 000V lub B00V, gdzie poszczególne symbole oznaczają: 0-brak impulsu, B-impuls o polaryzacji przeciwnej do polaryzacji poprzedniego impulsu. V-zakłócenie, czyli impuls o tej samej polaryzacji, co poprzedni impuls B, dodany tak, by każdy impuls V miał polaryzacje przeciwną niż poprzedni. Na rys.1 przedstawiono przykładowe binarnego do kodu AMI oraz HDB-3. kodowanie -2– Agnieszka Sikorska, Łukasz Kokosza sygnału Projekt UCYF „Koder HDB-3” 2. Pomysł Zgodnie z powyższym opisem koder HDB-3 , jest cyfrowym układem synchronicznym, o jednym wejściu binarnym, i dwóch wyjściach B i następujących zależnościach między sygnałami wejściowymi i wyjściowymi: 1. na każdy sygnał 0 w sekwencji zer na wejściu o długości nie większej niż 3 układ odpowiada sygnałem 0, 2. na każdy sygnał 1 układ odpowiada sygnałem B+(B-), jeżeli poprzednim sygnałem wyjściowym (pomijając sygnały 0) był sygnał B-(B+), 3. na każdą sekwencje 0000 na wejściu układ odpowiada: - sekwencją 000B+(000B-) w przypadku, gdy odpowiedzią na impuls poprzedzający bezpośrednio sekwencję 0000 był impuls B+(B-), a sygnał B-(B+) był odpowiedzią na ostatnie zero poprzedniej sekwencji 0000; - sekwencją B+00B+(B-00B-) w przypadku, gdy odpowiedzią na impuls poprzedzający bezpośrednio sekwencję 0000 był impuls B-(B+), a sygnał B-(B+) był odpowiedzią na ostatnie zero poprzedniej sekwencji 0000; Z powyższych reguł działania układu wynika że sensowne jest podzielenie kodera kodu HDB-3 na dwa podukłady: np. B1 i B2 połączone ze sobą w następujący sposób: Y0 We B1 Y1 Z0 B2 -3– Agnieszka Sikorska, Łukasz Kokosza Z1 Projekt UCYF „Koder HDB-3” Gdzie zadaniem bloku B1 jest opóźnienie sygnału wejściowego o 4 takty zegara oraz zastąpienie w każdej sekwencji4 zer ostatniego zera jedynką. Blok B2 zajmuje się już odpowiednim kodowaniem do HDB-3. Blok B1 ma dwa wyjścia Y0 i Y1. Zależności pomiędzy sygnałami na jego wejściu i wyjściach są następujące: - ciąg sygnałów na wyjściu Y0 powstaje w wyniku opóźnienia o 4 takty zegarowe ciągu sygnałów wejściowych, w którym każda sekwencja 0000 została zastąpiona sekwencją 0001 - na wyjściu Y1 pojawia się 1 tylko w odpowiedzi na ostatnie zero sekwencji 4 zer na wejściu, w pozostałych przypadkach jest 0. Układ B2 produkuje sygnał wyjściowy według sygnałów wyjściowych z B1. 3. Realizacja Koder został przede wszystkim wykonany z elementów opisanych w poprzednim punkcie, dodany został moduł mający na celu spowolnienie zegara, moduły obsługujące wyświetlacz 7segm. Moduły 7segm(7segm) są dwa i zostały one zmodyfikowane do potrzeb projektu. Dokładny opis w dalszej części dokumentacji. Na początku opis ogólnej idei wprowadzania danych i ich reprezentacji. Jak wiem z opisu wcześniej układ ma za zadanie kodowanie sygnału składającego się z „zer” i „jedynek” na sygnał trójwartościowy. Zatem na wejście musimy podawać sygnał, odbywa się to za pomocą odpowiedniego przycisku na płytce. Drugi przycisk służy do włączania i resetowania układu. Dane zakodowane pojawiają się na siedmiosegmentowych wyświetlaczach płytki w odpowiedni opisany poniżej sposób reprezentacji. -4– Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” Podsumowujące do wprowadzania danych używamy przycisku z płytki i efekty obserwujemy na wyświetlaczach. Takie rozwiązanie daję możliwość spokojnego i szczegółowego obserwowania działania układu, ma też na celu ukazanie, że układ działa poprawnie. Dlatego też, aby móc wprowadzać dane i obserwować wyniki musieliśmy spowolnić zegar płytki (podpunkt Dzielnik) do wartości która to umożliwi. Głównym zadaniem było stworzenie kodera HDB-3, u nas jest to układ dwóch automatów(automat1 i automat2), reszta elementów jest stworzona tylko w celu ukazania, że koder działa, czyli obserwacji jego pracy dla różnych danych wejściowych. Poniżej znajduje się rysunek płytki oraz schemat naszego układu: 7SEGM 7SEGM2 PRACA ZEGARA PRZYCISK1 PRZYCISK2 -5– Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” Układ kodera HDB-3 -6– Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” Teraz zostanie zamieszczony poszczególnych elementów. szczegółowy opis Przycisk1. Lewy przycisk na płytce służy do resetownia pracy układu tzn., jeśli nie jest wciśnięty to układ pracuje. Natomiast, jeśli go wciśniemy następuje zresetowanie układu (automatów). w momencie gdy przycisk jest wciśnięty układ nie pracuję tak długo dopóki nie puścimy przycisku. Przycisk2. Prawy przycisk na płytce służy do wprowadzania danych, tzn. jeśli nie jest wciśnięty to na wejście podawana jest jedynka, analogicznie jest zostanie wciśnięty w odpowiednim momencie zostanie podane na wejście zero. Zatem przytrzymanie odpowiednio długo wciśniętego przycisku spowoduje podanie na wejście układu odpowiedniej ilości zer. W celu poprawnego wprowadzania danych układ sygnalizuje działanie zegara kropką na wyświetlaczu 7segm(rysunek płytki). Układ przyjmuje zero, jeśli przycisk2 był wciśnięty w momencie zapalania kropki na 7segm. Podsumowując, aby wprowadzić cztery zera należy przytrzymać przycisk2 przez 4 okresy działania zegara, czyli 4 mrugnięcia kropki. Dlatego należało spowolnić zegara, aby móc w kontrolowany sposób wprowadzać dane oraz w wygodny sposób je obserwować Dzielnik. (plik dzielnik.tdf) -7– Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” Jego zadaniem jest spowolnienie zegara płytki odpowiednią ilość razy. Jest to niezbędne przy wybranej metodzie wprowadzania danych (podpunkt Przyciski1 i Przycisk2). Kod: parameters (width=5);--, time=15); subdesign dzielnik (clk :input; clk_out :output; ) variable q[width-1..0] :dff; begin q[].clk=clk; q[]=q[]+1; clk_out=q[width-1]; %if (q[]==time) then q[]=0; else q[]=q[]+1; end if; if q[]==0 then clk_out=vcc; end if;% end; Część kodu jest wyłączona z kompilacji a to ze wzgledu na możliwość korzystania z dwóch wersji dzielnika: -pierwsza włączona w kodzie powyżej powoduje odliczanie do wartości 2^(width-1). Dzielnik w takim układzie spowalnia zegar 2^(width-1) -wersja wyłączona powoduje spowolnienie zegara „time” razy Obydwie wersje działają i mogą być wykorzystane. Automat1. (plik automat1.tdf) -8– Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” Zadanie tego automatu jest takie podukładu B1 z części teoretycznej. samo jak zadanie Kod: TITLE "Kodowanie HDB-3 - podukład B1"; SUBDESIGN AUTOMAT1 ( zegar1, wejscie, ena : INPUT; Y[1..0] : OUTPUT; ) VARIABLE q: MACHINE WITH STATES (S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15); BEGIN q.clk = zegar1; q.ena = ena; q.reset = !ena; TABLE q, wejscie => q, S0, 0 => S2, S0, 1 => S3, S1, 0 => S2, S1, 1 => S3, S2, 0 => S4, S2, 1 => S5, S3, 0 => S6, S3, 1 => S7, S4, 0 => S8, S4, 1 => S9, S5, 0 => S10, S5, 1 => S11, S6, 0 => S12, S6, 1 => S13, S7, 0 => S14, S7, 1 => S15, S8, 0 => S0, S8, 1 => S1, S9, 0 => S2, S9, 1 => S3, Y[1], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, Y[0]; 0; 0; 0; 0; 0; 0; 0; 0; 1; 1; 1; 1; 1; 1; 1; 1; 0; 0; 0; 0; -9– Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” S10, 0 S10, 1 S11, 0 S11, 1 S12, 0 S12, 1 S13, 0 S13, 1 S14, 0 S14, 1 S15, 0 S15, 1 END TABLE; => => => => => => => => => => => => S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 0; 0; 0; 1; 1; 1; 1; 1; 1; 1; 1; END; Działanie automatu przedstawia też graf stanów zamieszczony poniżej, jednak ze względu na dość skomplikowany wygląd schematu, nie umieściliśmy wartości, przy których to zachodzi. Wartości te można odczytać z kodu powyżej, to samo dotyczy wartości na wyjściu automatu. Graf stanów automatu1: - 10 – Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” 0 1/0 1 0/0 0/0 1/0 1/0 2 0/1 3 1/0 1/0 1/0 0/0 0/0 0/0 4 5 0/0 6 7 1/0 1/0 0/0 0/0 9 10 1/0 1/0 1/0 1/0 8 0/0 0/0 0/0 11 12 13 1/0 14 1/0 0/0 0/0 - 11 – Agnieszka Sikorska, Łukasz Kokosza 15 1/0 1/0 0/0 0/0 Projekt UCYF „Koder HDB-3” Automat2. (plik automat2.tdf) Zadanie automatu2 jest takie samo jak zadanie podukładu B2 we wstępie teoretycznym, czyli krótko mówiąc automat ten wykorzystując sygnał otrzymany z automatu1 dokonuje ostatecznego kodowania do kodu HDB-3. Kod: TITLE "Kodowanie HDB-3 - podukład B2"; SUBDESIGN AUTOMAT2 ( zegar2, Y[1..0], ena: INPUT; Z[1..0] : OUTPUT; ) VARIABLE q2: MACHINE WITH STATES (S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15, S16, S17, S18); BEGIN q2.clk = zegar2; q2.ena= ena; q2.reset = !ena; TABLE q2, S1, S1, S1, S2, S3, S4, S5, S5, S5, S6, S7, S8, S9, S9, S9, S10, S10, Y[1], 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, Y[0] => q2, 0 => S10, 1 => S9, 0 => S2, 0 => S3, 0 => S4, 1 => S5, 0 => S16, 1 => S15, 0 => S6, 0 => S7, 0 => S8, 1 => S1, 0 => S13, 1 => S14, 0 => S11, 0 => S10, 1 => S9, Z[1], 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, Z[0]; 0; 1; 1; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 1; - 12 – Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” S11, 0, S12, 0, S12, 0, S12, 1, S13, 0, S13, 0, S14, 0, S14, 0, S14, 1, S15, 0, S15, 0, S15, 1, S16, 0, S16, 0, S17, 0, S18, 0, S18, 0, END TABLE; 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 => => => => => => => => => => => => => => => => => S3, S16, S15, S6, S13, S14, S10, S9, S2, S18, S12, S17, S16, S15, S7, S18, S12, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0; 0; 0; 0; 0; 0; 0; 1; 1; 0; 1; 0; 0; 0; 0; 0; 1; END; Działanie tego automatu przedstawia także graf stanów poniżej. - 13 – Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” 01/B- 10/B+ 1 00/0 2 01/B+ 00/0 3 4 01/B+ 5 11 10/0 00/0 6 01/B- 00/0 9 10/B- 00/0 7 00/0 15 10/0 17 01/B+ 01/B- 00/0 01/B+ 10/B+ 01/B- 01/B+ 13 01/B- 00/0 01/B- 14 00/0 00/0 00/0 10 00/0 16 00/0 - 14 – Agnieszka Sikorska, Łukasz Kokosza 10/B- 18 01/B+ 00/0 12 8 Projekt UCYF „Koder HDB-3” 7SEGM. (plik 7segm.tdf) Zadaniem tego elementu jest prezentacja wyników kodowania układu na pierwszym wyświetlaczu siedmiosegmentowym w następujący sposób: - jeśli na wyjściu jest B+ to zapalona jest dioda „a” - jeśli na wyjściu jest 0 to zapalona jest dioda „g”, - jeśli na wyjściu jest B- to zapalona jest dioda „d”. Kod: SUBDESIGN 7segm ( i[1..0] : INPUT; a,b,c,d,e,f,g : OUTPUT; ) BEGIN TABLE i[1..0] => H"0" H"1" H"2" END TABLE; => => => a, b, c, d, e, f, g; 1, 1, 1, 1, 1, 1, 0; 0, 1, 1, 1, 1, 1, 1; 1, 1, 1, 0, 1, 1, 1; END; 7SEGM2. (plik 7segm2.tdf) - 15 – Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” Zadaniem tego elementu jest prezentacja wyników kodowania układu na drugim wyświetlaczu siedmiosegmentowym w następujący sposób: - jeśli na wyjściu jest B+ to zapalona są diody „b,c” - jeśli na wyjściu jest 0 to zapalona są diody „a,b,c,d,e,f”, - jeśli na wyjściu jest B- to zapalone są diody „b,c,g”. SUBDESIGN 7segm2 ( i[1..0] : INPUT; a,b,c,d,e,f,g : OUTPUT; ) BEGIN TABLE i[1..0] => H"0" H"1" H"2" END TABLE; => => => a, b, c, d, e, f, g; 0, 0, 0, 0, 0, 0, 1; 1, 0, 0, 1, 1, 1, 1; 1, 0, 0, 1, 1, 1, 0; END; HDB3. (plik hdb3.tdf) W ty pliku połączone są ze sobą wszystkie dotychczas wymienione elementy. Układ ten dokonuje odpowiedzialny jest za wprowadzanie danych, kodowanie ich oraz reprezentacje wyników na wyświetlaczach płytki. Na wejściu mamy: wej – przycisk2 zegar – zegar płytki ena - przycisk1 - 16 – Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” Na wyjściu: a,b,c,d,e,f,g,dot – 1 wyświetlacz siedmiosegmentowy a2,b2,c2,d2,e2,f2,g2,dot2 – 2 wyświetlacz siedmiosegmentowy Kod: include include include include include "automat1"; "automat2"; "dzielnik"; "7segm"; "7segm2"; subdesign hdb3 (wej,zegar,ena :input; a,b,c,d,e,f,g,dot,a2,b2,c2,d2,e2,f2,g2,dot2 :output; ) variable aut1 aut2 dziel wysw wysw2 :automat1; :automat2; :dzielnik with (width=25);--, time=8017500); :7segm; :7segm2; begin - 17 – Agnieszka Sikorska, Łukasz Kokosza Projekt UCYF „Koder HDB-3” dziel.clk=zegar; (aut2.zegar2 , aut1.zegar1)=dziel.clk_out; (aut1,aut2).ena = ena; aut1.wejscie=wej; aut2.Y[]=aut1.Y[]; wysw.i[1..0]=aut2.Z[]; wysw2.i[1..0]=aut2.Z[]; dot = !dziel.clk_out; dot2 = VCC; a=wysw.a; b=wysw.b; c=wysw.c; d=wysw.d; e=wysw.e; f=wysw.f; g=wysw.g; a2=wysw2.a; b2=wysw2.b; c2=wysw2.c; d2=wysw2.d; e2=wysw2.e; f2=wysw2.f; g2=wysw2.g; end; 4. Podsumowanie Układ przez nas stworzony w prosty sposób ukazuje kodowanie HDB-3. Układ działa w pełni poprawnie, co potwierdzają testy w Max+plus II, oraz testy przeprowadzone na płytce laboratoryjnej. W skład projektu wchodzą - pliki źródłowe stworzone w MAX+plusII - dokumentacja w postaci .doc (Microsoft Word XP) - dokumentacja w postaci .pdf - strona internetowa opisująca projekt www.monotonia.net/ucyf - 18 – Agnieszka Sikorska, Łukasz Kokosza