dr inż. Jarosław Sugier
Zestaw ZL-9572 - „Układy cyfrowe i systemy wbudowane 1”

 

Niniejsze opracowanie opisuje zestawy laboratoryjne ZL-9572. Omówiono w nim zasoby dostępne na płycie oraz sposób ich wykorzystania, a także przedstawiono gotowe moduły, które mogą być użyte w projektach, wraz z przykładami ich użycia.

Schemat logiczny zestawu oraz rozmieszczenie elementów na płycie (PDF):

           

 

SPIS TREŚCI

Elementy składowe zestawu

Plik UCF

Moduły

RotaryEnc

HexTo7Seg

Display4x7S

RS232_TX

RS232_RX

PS2_RX

Przykładowe projekty

Test_HexTo7Seg

Test_RotaryEnc

Test_Displ7Seg

Test_RS232TX

Test_RS232RX

Test_PS2

Test_PS2_RS232TX

Inne projekty

TestAll

RotaryTest

Elementy składowe zestawu

Na płycie obok układu programowalnego CPLD firmy Xilinx XC9572XL znajdują się wymienione niżej elementy.
Uwaga: Podczas planowania wykorzystania portów wejściowych projektu należy unikać konfliktów w pracy urządzeń wykorzystujących sygnały wspólne - sytuacja taka może pojawić się w przypadku klawiszy, przełączników DSW i impulsatora oraz diod LED i wyświetlacza siedmiosegmentowego.

Złącze portu JTAG: służy do przyłączenia kabla programującego LPT obsługiwanego w komputerze przez aplikację iMPACT. Kabel należy łączyć przez przedłużacz LPT (proszę nie wkładać wtyczki bezpośrednio do portu w obudowie komputera). Wyprowadzenie nr 1 jest skrajnym z prawej strony.

Generator kwarcowy sygnału zegarowego Clk_XT: pracuje z częstotliwością 1.84320 MHz (16 x 115200 - częstotliwość portu RS-232) i powinien być używany w projektach jako główny sygnał zegarowy.

Generator 555 niskiej częstotliwości Clk_LF: w zależności od położenia przełącznika SW3 generuje sygnał o częstotliwości ok. 1 Hz (położenie dolne, Freq:Lo) lub ok. 240 Hz (położenie górne, Freq:Hi). Stan sygnału pokazuje czerwona dioda LED zapalana jedynką logiczną. Sygnał 1 Hz może być wykorzystany do pracy krokowej podczas uruchamiania projektu, natomiast częstotliwość 240 Hz przeznaczona jest głównie do sterowania wyświetlaniem dynamicznym na czterocyfrowym wyświetlaczu siedmiosegmentowym (patrz gotowy moduł Display4x7S poniżej), choć może być także używana jako zegar systemowy zamiast Clk_XT.

Klawisze K(7:0) oraz przełączniki DIP-Switch (DSW): osiem sygnałów binarnych będących podstawowymi wejściami zestawu, sterowanych równolegle przez klawisze oraz przełączniki. Naciśnięcie klawisza lub zwarcie przełącznika (położenie górne) oznacza podanie jedynki logicznej. Przyporządkowanie przełączników klawiszom jest zgodne z ich geometrycznym rozkładem i nie odpowiada numerom podanym na obudowie DIP-Switch, tj. DSW(1) = K(7), ... DSW(8) = K(0). Ponieważ elementy te połączone są równolegle należy pamiętać o tym, że przy praca klawisza odpowiadający mu przełącznik musi być rozwarty (w położeniu dolnym).
Wyprowadzenia odpowiadające klawiszom K(5) oraz K(6) są dołączone także do impulsatora - patrz uwaga poniżej nt. unikania konfliktu podczas ich pracy.

Klawisz K(7) dołączony jest do wyprowadzenia Global Set/Reset (GSR) układu XC9572 i powinien być używany jako źródło sygnału inicjalizującego projekt (reset).

Impulsator (ROT_ENC): przełącznik obrotowy zwierający swoje dwa wyprowadzenia w kolejności zależnej od kierunku obrotu (w wyniku powstaje kod Gray’a):

Przy detekcji stanu przełączników należy uwzględnić pojawiające się na nich drgania. Wyprowadzenia A i B są połączone z elementami K(5)/DSW(3) oraz K(6)/DSW(2), zatem przy pracy impulsatora przełączniki te muszą pozostać rozwarte. Z kolei w projektach, w których impulsator nie jest wykorzystywany, należy ustawić jego pokrętło w punkcie stabilnym (nacięcie, dent), tak aby styki A i B pozostały rozwarte i nie blokowały pracy K/DSW.

Diody LED(15:8) oraz LED(7:0): szesnaście podstawowych wyjść binarnych zestawu. Wszystkie diody zapalane są sygnałem zera logicznego. Wyprowadzenia LED(15:8) są używane także do sterowania segmentami wyświetlacza czterocyfrowego - wyboru funkcji dokonuje przełącznik SW1, który dla pracy LED(15:8) musi być ustawiony w pozycji dolnej.

Czterocyfrowy wyświetlacz LED: grupa czterech wyświetlaczy siedmiosegmentowych obsługiwanych sygnałami D7S_D(3:0) - aktywacja cyfr - oraz D7S_S(7:0) - zapalanie segmentów. Zarówno sygnały D7S_D, jak i D7S_S są aktywne zerem logicznym.
Wyprowadzenia D7S_S są współdzielone z LED(15:8) (przy pracy wyświetlacza SW1 musi być ustawiony w pozycji górnej), a ich przyporządkowanie poszczególnym segmentom jest następujące:

Wyświetlacze poszczególnych cyfr mają wspólne anody (wyprowadzenia CAi na schemacie) i aktywacja cyfry polega na ustawieniu D7S_D(i) = 0, co powoduje otwarcie tranzystora Qi oraz dołączenie CAi do +3,3V. Katody odpowiadających sobie segmentów ze wszystkich cyfr są zwarte ze sobą; 8-bitowa maska podana na D7S_S pojawia się na aktywnych w danym momencie cyfrach.

W zestawie możliwe są dwa tryby pracy wyświetlacza:
1) przełącznik SW2 w pozycji lewej: CA3 dołączone do +3,3V, cyfra D3 (najstarsza) stale aktywna i używana do wyświetlania maski D7S_S (tzw. wyświetlanie statyczne), linie D7S_D nieużywane;
2) przełącznik SW2 w pozycji prawej: cyfra D3, podobnie jak pozostałe, sterowana sygnałem D7S_D(), możliwa praca dynamiczna wszystkich czterech cyfr wyświetlacza przy użyciu obu magistral D7S_D oraz D7S_S.

Praca dynamiczna polega na naprzemiennym zapalaniu kolejnych cyfr (krążące zero w wektorze D7S_D) z jednoczesnym multipleksowaniem maski segmentów na magistrali D7S_S z częstotliwością tak wysoką, że bezwładność ludzkiego oka powoduje wrażenie stabilnego i niezależnego obrazu na wszystkich czterech wyświetlaczach (zob. też moduł Display4x7S poniżej). Sygnał Clk_LF ma częstotliwość dobraną specjalnie do tego celu (240Hz / 4 = 60Hz na cyfrę). Częstotliwość Clk_XT jest w tym przypadku za wysoka ze względu na bezwładność diod LED.

Port RS-232: układ sterownika magistrali MAX3232 (przesuwnik napięć 0...+3,3V > -5...+5V) oraz gniazdo DB-9, które razem umożliwiają dwukierunkową komunikację asynchroniczną z portem szeregowym standardu RS-232 np. w komputerze PC. Od strony układu CPLD widoczne dwa sygnały: odbiorczy RS_RX oraz nadawczy RS_TX. Zob. też moduły RS232_RX oraz RS232_TX poniżej.

Port PS/2: gniazdo mini-DIN 6-wyprowadzeniowe, którego dwa odpowiednie sygnały dołączone są do wyprowadzeń układu CPLD jako PS2_Data oraz PS2_Clk, umożliwiając komunikację ze standardowymi klawiaturami oraz myszami PC. Zob. też moduł PS2_RX poniżej oraz pracę przykładu Test_PS2_RS232TX.

Plik UCF

Poniższy plik podaje przypisanie wszystkich sygnałów zestawu do wyprowadzeń układu CPLD. Należy dodać go do projektu oraz usunąć komentarze (znaki #) z linii opisujących sygnały rzeczywiście używane.

[ZL-9752.ucf (zip)]

Moduły

Uwaga!
Przedstawione niżej moduły przygotowałem na potrzeby zajęć z przedmiotu „Układy cyfrowe i systemy wbudowane” i udostępniam je wyłącznie dla prywatnych celów edukacyjnych.

Elementy znajdujące się na płycie ZL-9572 - impulsator, port PS/2 oraz RS-232 - można obsłużyć dodając do projektu gotowy zewnętrzny moduł ngc. W tym celu należy rozpakować pliki z odpowiedniego archiwum ZIP do głównego folderu projektu – od tego momentu będzie można umieszczać jego symbole na schematach. Nie trzeba i nie wolno dodawać plik ngc jako nowy pliku źródłowy projektu w środowisku ISE, będzie on automatycznie odszukany i dołączony podczas implementacji (o ile tylko będzie znajdował się w katalogu głównym projektu).

Poniżej podano opisy poszczególnych modułów. Jeśli nie zaznaczono tego inaczej, wyprowadzenia umieszczone się przy lewej krawędzi symbolu są wejściami, a po prawej – wyjściami modułu.

RotaryEnc

[RotaryEnc ZIP]

Moduł ten interpretuje sygnały impulsatora. Każdy jego ruch (tj. 1 skok) sygnalizowany jest jednotaktowym impulsem na wyjściu RotL (obrót w lewo) lub RotR (obrót w prawo), synchronicznym względem sygnału Clk. Impulsy te należy używać do wyzwalania liczników (jako sygnały CE), maszyn stanów, itp.

Wejście Clk należy dołączyć do sygnału globalnego zegara systemowego, tj. Ckl_XT  (Clk_LF może być zbyt wolny przy szybkich obrotach pokrętła), natomiast wejścia ROT_A oraz ROT_B należy dołączyć wprost do portów zewnętrznych opisanych w pliku UCF.

Przykłady użycia: Test_RotaryEnc.

HexTo7Seg

[HexTo7Seg ZIP]

Moduł ten transkoduje 4-bitową wartość heksadecymalną 0 – F na odpowiednią maskę zapalającą wyświetlacz 7-segmentowy i może być wykorzystany do statycznego sterowania cyfrą D3 wyświetlacza znajdującego się na płycie. Generowany przez niego sygnał powinien być dołączony wprost do wyprowadzeń D7S_S(6:0).

Takie użycie wyświetlacza wymaga przełączenia SW1 do pozycji górnej (Displ.) oraz SW2 do pozycji lewej (D3:Stat.).

Przykłady użycia: Test_HexTo7Seg.

Display4x7S

[Display4x7S ZIP]

Moduł ten realizuje dynamiczne wyświetlanie liczby 16-bitowej jako 4 cyfr na wyświetlaczu heksadecymalnym znajdującym się w zestawie. Wartość do wyświetlenia pobierana jest z wejścia DI, natomiast osobna magistrala DP steruje zapalaniem kropek dziesiętnych (aktywne '1'). Dodatkowo wejście Blank umożliwia wygaszanie nieużywanych cyfr: Blank(i) = '1'  =>  cyfra nr i nie jest wyświetlana. (Uwaga ogólna nt. procesu implementacji w środowisku ISE: pozostawienie WE niedołączonego do  żadnego sygnału domyślnie powoduje podanie zera logicznego, co w przypadku portów DP oraz Blank spowoduje włączenie wszystkich cyfr oraz wygaszenie wszystkich kropek dziesiętnych)

Wejście Clk należy dołączyć do generatora Clk_LF pracującego z częstotliwością 240Hz (SW3 Freq:Hi), natomiast wyjścia D7S_D oraz D7S_S wprost do wyprowadzeń zewnętrznych.

Dla poprawnej konfiguracji wyświetlacza należy ustawić SW1 w pozycji górnej (Displ.) oraz SW2 w pozycji prawej (D3:Dyn.).

Przykłady użycia: Test_Displ7Seg.

RS232_TX

[RS232_TX ZIP]

Moduł ten jest nadajnikiem bajtów portu RS-232. Parametry transmisji podane są obok symbolu: szybkość 115200bps, 8b danych, bez bitu parzystości, 1b stop.

Jednotaktowy impuls TxStart rozpoczyna operację nadawania bajtu pobieranego z DI i ustawia sygnał Busy = ‘1’. Tak długo, jak trwa Busy = ‘1’, impulsy Start są ignorowane. Bajt DI jest zatrzaskiwany w momencie zbocza wczytującego Start= ‘1’ i nie musi pozostać stabilny podczas trwania transmisji.

Sygnał RS_TX należy dołączyć wprost do wyprowadzenia zewnętrznego, natomiast na wejście Clk_XT należy podać wzorcową częstotliwość 1,8432MHz.

Przykład użycia: Test_RS232TX.

RS232_RX

 

[RS232_RX ZIP]

Moduł ten obsługuje odbiór bajtów przychodzących do portu RS-232. Wymagane parametry transmisji są podane obok symbolu i muszą być ustawione po stronie nadajnika.

Pojawienie się jednotaktowego impulsu na Rdy sygnalizuje zakończenie odbioru bajtu, który jest gotowy do odczytu na wyjściu DO. Jego wartość pozostaje niezmienna do początku kolejnej transmisji RS. Sygnał RS_RX należy dołączyć wprost do wyprowadzenia zewnętrznego, natomiast na wejście Clk_XT należy podać wzorcową częstotliwość 1,8432MHz.

Przykład użycia: Test_RS232RX.

PS2_RX

[PS2_RX ZIP]

Moduł ten jest odbiornikiem bajtów odczytywanych z portu PS/2.

Sygnał DO_Rdy = ‘1’ sygnalizuje zakończenie odbioru bajtu (impuls jednotaktowy synchroniczny względem Clk), którego wartość jest podana na DO(7:0). Sygnał DO pozostaje stabilny do czasu następnej transmisji PS/2, w praktyce przez co najmniej kilkadziesiąt milisekund.

Jako sygnał zegarowy należy użyć Clk_XT. Sygnały PS2_Clk oraz PS2_Data należy dołączyć wprost do wyprowadzeń zewnętrznych.

Przykłady użycia: Test_PS2, Test_PS2_RS232TX.

Przykładowe projekty

Poniżej zebrano przykładowe projekty, które pokazują sposób wykorzystania omówionych wyżej modułów. Dla każdego projektu dostępny jest plik PDF ze schematem pokazującym użycie modułu oraz plik JED gotowy do zaprogramowania płyty i natychmiastowego przetestowania efektu jego pracy.

Test_HexTo7Seg

[Plik JED]

[Schemat główny (PDF)]

Najprostszy przykład użycia modułu HexTo7Seg: 4-bitowa wartość wczytana z klawiszy K3-K0 jest wyświetlana statycznie na cyfrze D3 wyświetlacza 7-segmentowego jako jedna cyfra heksadecymalna. Wymagana konfiguracja płyty: przełącznik SW1 w pozycji górnej (Displ.) oraz SW2 w pozycji lewej (D3:Stat.).

Test_RotaryEnc

[Plik JED]

[Schemat główny (PDF)]

W tym przykładzie impulsy RotL oraz RotR wyzwalają dwa niezależne liczniki 8-bitowe (elementy biblioteczne CB8CE), których stan wyświetlają diody LED(7:0) (obroty w prawo) oraz LED(15:8) (obroty w lewo).
Przełącznik SW1 należy ustawić w pozycji dolnej (LED(15:8)).
Klawisz K7 użyty jest do zerowania stanu liczników.

Test_Displ7Seg

[Plik JED]

[Schemat główny (PDF)]

Identyczny układ impulsator + dwa liczniki jak w przykładzie powyżej, teraz ze stanem liczników wyświetlanych jako dwucyfrowe liczby heksadecymalne na wyświetlaczach siedmiosegmentowych. Dwie kropki dziesiętne są zapalone na stałe poprzez dołączenie do jedynek logicznych, ponadto klawisze K3-K0 powodują wyłączanie poszczególnych cyfr.
Wymagana konfiguracja przełączników: SW1 poz. górna (Displ.), SW2 poz. prawa (D3:Dyn.), SW3 poz. górna (Freq:Hi).

Test_RS232TX

[Plik JED]

[Schemat główny (PDF)]

Przez port RS wysyłane są kolejne bajty 00-FF: każdy obrót impulsatora w prawo powoduje wysłanie stanu licznika CB8CE (impuls Start w module RS232_TX) oraz jego natychmiastową inkrementację (impuls CE w liczniku). Stan bieżący licznika wyświetlany na diodach LED(7:0), dioda LED(8) zapalana sygnałem Busy nadajnika (bardzo krótkie, słabo widoczne impulsy).
Dla pracy diody
LED(8) wymagane ustawienie przełącznika SW1 na poz. dolną.

Test_RS232RX

[Plik JED]

[Schemat główny (PDF)]

Odbierane z portu RS-232 bajty są wprowadzane do dwubajtowego rejestru przesuwnego (dwa elementy FD8CE, przesuw wyzwalany impulsami Rdy) i wyświetlane na wyświetlaczu dynamicznym. Dodatkowo na LED(7:0) zliczana jest ilość odebranych bajtów (licznik CB8CE wyzwalany także impulsami Rdy).

Test_PS2

[Plik JED]

[Schemat główny (PDF)]

Identyczny jak w przykładzie powyżej układ do zliczania i wyświetlania bajtów – których źródłem tym razem jest port PS/2.

Test_PS2_RS232TX

[Plik JED]

[Schemat główny (PDF)]

Układ przekazujący bajty odebrane z portu PS/2 do portu RS-232.

Inne projekty

TestAll

[Plik JED]

Test wszystkich elementów zestawu:
- bajty odbierane z portu RS-232 są wyświetlane na cyfrach D(1:0) wyświetlacza
- bajty odbierane z portu PS/2 wyświetlane są na cyfrach D(3:2) wyświetlacza oraz wysyłane do portu RS-232
- impulsy ROT_ENC sterują rejestrem przesuwnym wyświetlanym na LED(7:0)
- klawisze K(7:4) oraz K(3:0) zapalają kropki dziesiętne wyświetlacza dynamicznego
- dodatkowo klawisz K(3) zeruje odbiornik PS/2, K(2) - odbiornik RS-232, K(0) - rejestr przesuwny LED(7:0)
- klawisz K(1) jest sygnałem zezwalającym (CE) rejestru przesuwnego.

Wymagana konfiguracja przełączników jak dla pracy wyświetlacza w trybie dynamicznym: SW1 poz. górna (Displ.), SW2 poz. prawa (D3:Dyn.), SW3 poz. górna (Freq:Hi).

RotaryTest

[Plik JED (wer. A)]    [Plik JED (wer. B)]

Używając pokrętła impulsatora należy sprowadzić 7-bitowy licznik (00-7F) wyświetlany na cyfrach D(1:0) do wartości podanej na cyfrach D(3:2); po osiągnięciu zgodności losowana jest nowa wartość D(3:2). K(7) = zerowanie licznika oraz rejestru.

Wersja A: na diodach LED(7:0) wyświetlany jest rejestr przesuwny, pokazujący dekodowaną pracę impulsatora.

Wersja B: ustawienie K(0) = 1 (DSW) włącza tryb automatyczny.