Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki ĆWICZENIE Nr 6 (2h) Automaty stanów Instrukcja do zajęć laboratoryjnych z przedmiotu Synteza układów cyfrowych studia niestacjonarne, II stopnia, semestr 2 EZ2B200013 Opracował: dr inż. Łukasz Sajewski Białystok 2012 1
1. Cel i zakres ćwiczenia Celem ćwiczenia jest projektowanie i implementacja prostych automatów stanu w układach programowalnych z użyciem struktur blokowych i języka VHD. Automaty typu Moore a i Mealy ego są podstawowymi konstrukcjami w tej dziedzinie a ich znajomość pozwala na sprawne rozwiązywanie zadań z wykorzystaniem układów sekwencyjnych. 2. Automaty Moore a i Mealy ego Automatem Moore a nazywamy uporządkowaną piątkę (Q, X, Y, δ, λ) gdzie: Q jest skończonym zbiorem niepustym, nazwanym zbiorem stanów automatu, X jest skończonym zbiorem niepustym, nazwanym alfabetem wejściowym, Y jest skończonym zbiorem niepustym, nazwanym alfabetem wyjściowym, δ : Q X Q jest funkcją przejść a λ : Q Y jest funkcją wyjść. Rys. 1. Przykład automatu Moore a (opis algebraiczny, tablica przejść-wyjść, graf) Na rysunku 1 widnieje przykładowy automat Moore a. Automat ten posiada trzy stany wewnętrzne Q = {q1, q2, q3} dwa wejścia X = {x1, x2} oraz dwa wyjścia Y = {y1, y2}. Opis działania tego automatu dany jest tablicą przejść-wyjść oraz grafem, natomiast opis słowny przykładu jest następujący: Jeżeli automat znajduje się w stanie q1 i na wejściu x1 nastąpi zmiana sygnału, automat przechodzi do stanu q3 (δ(q1, x1) = q3). Jeżeli automat znajduje się w stanie q1 i na wejściu x2 nastąpi zmiana sygnału, automat pozostaje w stanie q1 (δ(q1, x2) = q1). Jeżeli automat znajduje się w stanie q2 i na wejściu x1 nastąpi zmiana sygnału, automat pozostaje w stanie q2 (δ(q2, x1) = q2). Jeżeli automat znajduje się w stanie q2 i na wejściu x2 nastąpi zmiana sygnału, automat przechodzi do stanu q3 (δ(q2, x2) = q3). Jeżeli automat znajduje się w stanie q3 i na wejściu x1 nastąpi zmiana sygnału, automat przechodzi do stanu q2 (δ(q3, x1) = q2). Jeżeli automat znajduje się w stanie q3 i na wejściu x2 nastąpi zmiana sygnału, automat przechodzi do stanu q1 (δ(q3, x2) = q1). Jeżeli automat jest w stanie q1 lub q2 to na wyjściu następuje zmiana sygnału y1. Jeżeli automat jest w stanie q3 to na wyjściu następuje zmiana sygnału y2. W automacie Moore a zmiana stanu następuje na podstawie wartości sygnałów wejściowych X na narastającym zboczu sygnału zegarowego CK, sygnał wyjściowy Y zależy tylko od stanu Q a jego zmiana może nastąpić również tylko na zboczu sygnału zegarowego. 2
Kod VHD realizujący powyższe zadanie ma postać: IBRARY ieee; USE ieee.std_logic_1164.all; ENTITY moorea IS PORT(CK : IN STD_OGIC; X : IN STD_OGIC_VECTOR(1 DOWNTO 0); --X={x1,x2} Y : OUT STD_OGIC_VECTOR(1 DOWNTO 0)); --Y={y1,y2} END ENTITY; ARCHITECTURE rtl OF moorea IS TYPE Q IS (q1, q2, q3); --definicja 3 elementowego typu wyliczeniowego - Q={q1,q2,q3} SIGNA stan : Q; -- sygnał pamiętający stan bieżący PROCESS (CK) -- funkcja przejścia aktywowana zmianą sygnału zegarowego IF rising_edge(ck) THEN -- wykrywanie zbocza narastającego CASE stan IS WHEN q1 => IF X = "10" THEN stan <= q3; ESIF X = "01" THEN stan <= q1; WHEN q2=> IF X = "10" THEN stan <= q2; ESIF X = "01" THEN stan <= q3; WHEN q3=> IF X = "10" THEN stan <= q2; ESIF X = "01" THEN stan <= q1; END CASE; END IF; END PROCESS; PROCESS (stan) -- funkcja wyjścia aktywowana zmianą stanu Q CASE stan IS WHEN q1 => Y <= "10"; WHEN q2 => Y <= "10"; WHEN q3 => Y <= "01"; END CASE; END PROCESS; END rtl; ist. 1. Trzy stanowy automat Moore a dany rysunkiem 1 Automatem Mealy ego nazywamy uporządkowaną piątkę (Q, X, Y, δ, λ) gdzie: Q jest skończonym zbiorem niepustym, nazwanym zbiorem stanów automatu, X jest skończonym zbiorem niepustym, nazwanym alfabetem wejściowym, Y jest skończonym zbiorem niepustym, nazwanym alfabetem wyjściowym, δ : Q X Q jest funkcją przejść a λ : Q X Y jest funkcją wyjść. 3
Rys. 2. Przykład automatu Mealy ego (opis algebraiczny, tablica przejść-wyjść, graf) Na rysunku 2 widnieje przykładowy automat Mealy ego. Automat ten posiada trzy stany wewnętrzne Q = {q1, q2, q3} dwa wejścia X = {x1, x2} oraz trzy wyjścia Y = {y1, y2, y3}. Opis działania tego automatu dany jest tablicą przejść-wyjść oraz grafem, natomiast opis słowny przykładu jest następujący: Jeżeli automat znajduje się w stanie q1 i na wejściu x1 nastąpi zmiana sygnału, automat przechodzi do stanu q3 (δ(q1, x1) = q3). Jeżeli automat znajduje się w stanie q1 i na wejściu x2 nastąpi zmiana sygnału, automat pozostaje w stanie q1 (δ(q1, x2) = q1). Jeżeli automat znajduje się w stanie q2 i na wejściu x1 nastąpi zmiana sygnału, automat pozostaje w stanie q2 (δ(q2, x1) = q2). Jeżeli automat znajduje się w stanie q2 i na wejściu x2 nastąpi zmiana sygnału, automat przechodzi do stanu q3 (δ(q2, x2) = q3). Jeżeli automat znajduje się w stanie q3 i na wejściu x1 nastąpi zmiana sygnału, automat przechodzi do stanu q2 (δ(q3, x1) = q2). Jeżeli automat znajduje się w stanie q3 i na wejściu x2 nastąpi zmiana sygnału, automat przechodzi do stanu q1 (δ(q3, x2) = q1). Jeżeli automat znajduje się w stanie q1 i na wejściu x1 nastąpi zmiana sygnału, to na wyjściu następuje zmiana stanu wyjścia y3 (λ(q1, x1) = y3). Jeżeli automat znajduje się w stanie q1 i na wejściu x2 nastąpi zmiana sygnału, to na wyjściu następuje zmiana stanu wyjścia y1 (λ(q1, x2) = y1). Jeżeli automat znajduje się w stanie q2 i na wejściu x1 nastąpi zmiana sygnału, to na wyjściu następuje zmiana stanu wyjścia y2 (λ(q2, x1) = y2). Jeżeli automat znajduje się w stanie q2 i na wejściu x2 nastąpi zmiana sygnału, to na wyjściu następuje zmiana stanu wyjścia y3 (λ(q2, x2) = y3). Jeżeli automat znajduje się w stanie q3 i na wejściu x1 nastąpi zmiana sygnału, to na wyjściu następuje zmiana stanu wyjścia y1 (λ(q3, x1) = y1). Jeżeli automat znajduje się w stanie q3 i na wejściu x2 nastąpi zmiana sygnału, to na wyjściu następuje zmiana stanu wyjścia y2 (λ(q3, x2) = y2). W automacie Mealy ego sygnał wyjściowy Y zależy od sygnału wejściowego X i aktualnego stanu Q, oznacza to możliwość wielokrotnej zmiany wyjścia Y w trakcie jednego okresu sygnału zegarowego CK. Jest to zatem rozwiązanie wrażliwe na zakłócenia sygnału wejściowego. Kod VHD realizujący powyższe zadanie ma postać: IBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mealyego IS PORT (CK : IN STD_OGIC; X : IN STD_OGIC_VECTOR(1 DOWNTO 0);-- X={x1,x2} 4
Y : OUT STD_OGIC_VECTOR(2 DOWNTO 0));-- Y={y1,y2,y3} END ENTITY; ARCHITECTURE rtl OF mealyego IS TYPE Q IS (q1, q2, q3); -- definicja 3 elementowego typu wyliczeniowego - Q={q1,q2,q3} SIGNA stan : Q; -- sygnał pamiętający stan bieżący PROCESS (CK) -- funkcja przejścia aktywowana zmianą sygnału zegarowego IF (rising_edge(ck)) THEN -- wykrywanie zbocza narastającego CASE stan IS WHEN q1 => IF X = "10" THEN stan <= q3; ESIF X = "01" THEN stan <= q1; WHEN q2 => IF X = "10" THEN stan <= q2; ESIF X = "01" THEN stan <= q3; WHEN q3 => IF X = "10" THEN stan <= q2; ESIF X = "01" THEN stan <= q1; END CASE; END IF; END PROCESS; PROCESS (stan, X) -- funkcja wyjścia aktywowana zmianą stanu Q lub wejścia X CASE stan IS WHEN q1 => IF X = "10" THEN Y <= "001"; ESIF X = "01" THEN Y <= "100"; WHEN q2 => IF X = "10" THEN Y <= "010"; ESIF X = "01" THEN Y <= "001"; WHEN q3 => IF X = "10" THEN Y <= "100"; ESIF X = "01" THEN Y <= "010"; END CASE; END PROCESS; END rtl; ist. 2. Trzy stanowy automat Mealy ego dany rysunkiem 2 Po włączeniu układu, jeżeli nie został użyty sygnał reset, automat stanu powinien rozpocząć pracę od pierwszego stanu opisanego w procesie przejścia (pierwszy warunek instrukcji case). Czasami w skutek zakłóceń i niewłaściwego kodowania układ może znaleźć się w przypadkowym, nieokreślonym w procesie przejść stanie, oznacza to jego niekontrolowaną pracę. Niewłaściwe kodowanie wiąże się z potencjalną liczbą stanów w 5
których może znaleźć się układ, przyjętym sposobem kodowania oraz strukturą instrukcji case decydującej o zmianie stanu. W poprzednich przykładach nie narzucano sposobu kodowania stanów, zatem kompilator zastosował kodowanie minimalną liczbą bitów. Ten rodzaj kodowania oznacza użycie najmniejszej niezbędnej liczby n bitów słowa kodującego, z której wynika potencjalna liczba stanów do zakodowania równa 2 n. Jeżeli jest ona większa niż faktyczna liczba stanów w układzie oznacza to, że wystąpią stany nadmiarowe - czyli nieokreślone. W celu zmniejszenia ryzyka związanego z wejściem układu w taki stan stosuje się: - "bezpieczne automaty stanu", - klauzulę when others w instrukcji case zmieniającej stan, - specjalne narzucone przez użytkownika formy kodowania - np. "gorącą jedynką". 3. Kodowanie automatów Jedną z możliwości zakodowania automatu typu Moore a jest użycie licznika w połączeniu z układem kombinacyjnym. Zadanie 1: Przygotować układ który posiada jedno wejście zegarowe clk i siedmiobitowe wyjście. Wejście wyznacza tempo zmian wyświetlanych znaków na wyświetlaczu siedmiosegmentowym. Porządek (kolejność) wyświetlanych znaków jest narzucony. Znaki i ich kolejność przewidziane są następująca tablicą. Tabl. 1. ista znaków konwertera Stan licznika 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 Znak Jedno z rozwiązań tego zadania wskazuje poniższy rysunek H E O Rys. 3. Schemat blokowy układu Zadanie to opiera się na dekoderze z instrukcji nr 2 wzbogaconym o licznik modulo (z ćwiczenia nr 5). W ramach zadania należy przygotować dekoder 7-segmentowy zgodnie z tabelą 1 oraz licznik modulo 5 (tyle stanów licznika ile liter do wyświetlenia). Podłączyć do układu wyświetlacz HEX oraz przycisk KEY i przetestować układ. Następnie wzbogacić układ o dzielnik 6
częstotliwości podłączony w miejsce przycisku KEY. Na wejście dzielnika podłączyć takt zegarowy 50MHz (COCK_50) i dostroić dzielnik by generował przebieg o częstotliwości 1Hz. Przeprowadzić test układu. Zadanie 2: Przebudować układ z zadania 1 w taki sposób by można było sterować kierunkiem zmian wyświetlanych znaków (rewersja). Oznacza to, że globalnie układ posiadać będzie dwa wejścia: zegarowe clk i sterujące dir określające kierunek przesuwania znaków (przód/tył) ponadto jedno wyjście siedmiobitowe do wyświetlacza HEX. Zadanie to można zrealizować na podstawie listingu 1 (automatu typu Moore a). W takim wypadku konieczne będzie zwiększenie liczby stanów Q (z 3 do 5) oraz potraktowanie wejścia X jako jedno bitowe wejście sterujące dir. Wyjście Y zgodnie z zadaniem ma być siedmiobitowe a funkcja wyjścia automatu λ powinna zawierać instrukcje (w wersji sekwencyjnej) wcześniej umiejscowione w bloku dekodera. Przygotować symbol tak napisanego kodu, uzupełnić układ o dzielnik i dokonać kompilacji. Przetestować działanie układu. Zadanie 3: Na bazie automatu Moore a lub Mealy ego zaprojektować układ sterujący przejazdem kolejowym. Należy przyjąć założenia: Przejazd dotyczy linii jednotorowej, Opuszczenie rogatki powinno się odbyć z pewnym wyprzedzeniem, Podniesienie rogatki powinno się odbyć z pewnym opóźnieniem, Wykluczamy jednoczesny przejazd pociągu przez oba punkty kontroli, Wykluczamy przejazd więcej niż jednego pociągu, Pociąg w danej chwili może jechać tylko w jednym kierunku, inia kolejowa jest dwukierunkowa, Pociąg, który dotarł do punktu A lub B nie może się cofać. rogatka Y czujniki, np.: fotokomórka linia kolejowa (jeden tor) A B Rys. 4. Uproszczony schemat przejazdu kolejowego gdzie: A, B punkty kontrolne, Y Rogatka Punkty kontrolne A i B przyjmują wartość 1 (H) podczas przejazdu pociągu (przez te punkty) lub wartość 0 () gdy brak pociągu. Rogatka Y przyjmuje wartość 1 (H) gdy jest opuszczona lub wartość 0 () gdy jest podniesiona. Poniżej przedstawiony jest przebieg czasowy z wyszczególnieniem stanów automatu. 7
A B Y H H H 0 1 2 3 0 4 5 6 0 Rys. 5. Przebiegi czasowe dla wejść (A, B) i wyjść (Y) przejazdu kolejowego Cyframi od 0 do 6 ponumerowano stany w jakich może znajdować się układ. Stan 0 odpowiada takiej chwili czasowej, podczas której pociąg jeszcze nie dojechał do punktów A lub B. Zakładając, że pociąg jedzie od lewej, to najpierw dojedzie do punktu A. W tym momencie (zgodnie z założeniami) wartość wejścia A = H oraz rogatka zostaje opuszczona (Y = 1 ). Pociąg opuszcza punkt A (A = 0 ), ale jeszcze nie dojechał do punktu B. Taka sytuacja odpowiada na wykresie stanowi 2. Pociąg dojeżdża do punktu B. W tym momencie (zgodnie z założeniami) wartość wejścia B = H (stan 3). Gdy pociąg opuszcza punkt B (B = 0 ) rogatka powinna zostać podniesiona Y = 0. Analogiczna sytuacja wystąpi gdy pociąg będzie jechać od prawej do lewej. Układ powinien posiadać dwa wejścia sterujące A oraz B dołączone do przełączników SW oraz jedno wyjście sygnalizacyjne Y dołączone do diody czerwonej EDR. 4. Sprawozdanie Sprawozdanie z zajęć laboratoryjnych powiano zawierać: 1. Opis słowny zadania do realizacji. 2. Założenia realizowanego zadania. 3. Procedurę projektową. 4. istingi gotowych programów. 5. Weryfikację działania układu. 6. Uwagi i wnioski. iteratura: 1. Barski M., Jędruch W.: Układy cyfrowe, podstawy projektowania i opisu w języku VHD, Wydawnictwo Politechniki Gdańskiej, 2007. 2. Łuba T.: Synteza układów cyfrowych, WKiŁ, Warszawa, 2004. 3. Mano M.M., Kime Ch.R.: Podstawy projektowania układów logicznych i komputerów, NT, Warszawa 2007. 4. Skahill K.: Język VHD Projektowanie programowalnych układów logicznych, WNT, Warszawa, 2001. Zamieszczone w instrukcji zrzuty ekranowe oraz zdjęcia pochodzą z materiałów firmowych dostarczonych przez firmę Altera. 8