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

Podobne dokumenty