Podstawy Techniki Cyfrowej Teoria automatów
Uwaga Niniejsza prezentacja stanowi uzupełnienie materiału wykładowego i zawiera jedynie wybrane wiadomości teoretyczne dotyczące metod syntezy układów asynchronicznych.
Układy asynchroniczne są podgrupą układów sekwencyjnych, czyli takich, których stan wejść nie określa w sposób jednoznaczny stanu wyjść. Słowo wyjściowe zależy także od poprzednich stanów wejściowych oraz ich kolejności występowania (sekwencji słów wejściowych stąd ich nazwa). Często układu sekwencyjne nazywa się układami kombinacyjnymi z pamięcią. W odróżnieniu od automatów synchronicznych, w układach asynchronicznych żadne z wejść nie jest wyróżnione i zmiana dowolnego sygnału wejściowego, może wywołać prawie natychmiastową zmianę stanu automatu. Działanie automatu, podobnie jak w przypadku automatów synchronicznych, opisuje się przy pomocy ich programu (tablic przejścia wyjścia). To ważne: Stan wyjściowy automatu zależy od jego stanu wewnętrznego w przypadku automatu Moore a lub od stanu wewnętrznego i stanu wejść w przypadku automatu Mealy ego.
W przykładowej tablicy przejść-wyjść zaznacza się w kółkach tzw. stany stabilne przy danym stanie wejść. Należy to rozumieć w taki sposób, że jest to stan w którym automat pozostaje aż do zmiany stanu sygnałów wejściowych.` Stany nie oznaczone kółkami to tzw. stany niestabilne, w których to automat znajduje się przez krótką chwilę pomiędzy stanami stabilnymi. Stany niestabilne służą do opisu przejścia automatu do określonego stanu. Stan 1 jest stabilny dla kombinacji wejść 00. Jeśli automat znajdzie się w tym stanie i stan wejść zmieni się na 01, to automat przez krótką chwilę znajdzie się w stanie 4 w wierszu odpowiadającym stanowi 1, by potem przejść do stanu 4, który jest stanem stabilnym dla kombinacji wejść 01. Zmiana wejść w stanie 1 z 00 na 10 spowoduje przejście, poprzez stan niestabilny, do stanu stabilnego 2. Zmiana wejść na 11 jest zabroniona, ponieważ równoczesna zmiana stanu obu wejść nie jest możliwa.
Realizacja automatu asynchronicznego opiera się na budowie układu kombinacyjnego wraz z pętlami sprzężenia zwrotnego. Możliwe jest zbudowanie go z zastosowanie przerzutników, jednak metoda ta jest bardziej złożona. Podobnie jak w przypadku automatów synchronicznych, proces syntezy automatu asynchronicznego podzielić można na kilka etapów. Są to: Synteza abstrakcyjna (tworzenie grafu oraz tablicy przejść-wyjść na podstawie jego opisu) Minimalizacja (redukcja) liczby stanów wewnętrznych Kodowanie stanów, liter wejściowych i wyjściowych Realizacja układowa automatu synteza kombinacyjna
Krok 1. Synteza abstrakcyjna tworzenie tablicy przejść-wyjść Jest bardzo ważnym etapem syntezy automatu i polega na tworzeniu tzw. pierwotnej tablicy przejść-wyjść. Buduje się ją na podstawie samego opisu działania automatu np. wykresu czasowego, grafu skierowanego lub opisu słownego. Wskazówka: W przypadku opisu układu za pomocą wykresu czasowego należy pamiętać, że zazwyczaj wykresy takie nie uwzględniają wszystkich możliwych sekwencji stanów automatu. Należy wówczas przeanalizować i uzupełnić te klatki tablicy, nie zostały wypełnione w pierwszym etapie. Tworzenie tablicy przejść polega na przypisaniu różnych symboli różnym stanom wewnętrznym automatu, następnie określenie ich następstwa i odpowiadających im stanów wyjść. W przypadku automatów asynchronicznych zmiany stanów wyznaczone są przez wszelkie momenty zmian sygnałów wejściowych. Po oznaczeniu stanów i określeniu ich następstwa, tworzymy tzw. pierwotną tablicę przejść-wyjść. Charakteryzuje się ona tym, że każdy stan jest stabilny tylko przy jednym stanie wejść.
Przykład 1. Z bramek NAND zbudować generator pojedynczego impulsu o długości, gdzie T jest okresem zegara G o wypełnieniu ½. Odstępy między kolejnymi zmianami stanu impulsów wejściowych są wielokrotnie dłuże od okresu zegara G Jak wynika z wykresu, generacja sygnału wyjściowego y jest wyzwalana tylnym zboczem sygnału wejściowego x, natomiast zakończenie generacji musi być wywołane odpowiednim zboczem zegara G, tak aby spełnione były warunki określone w zadaniu W zależności od sygnału G w momencie rozpoczęcia generacji impulsu, sygnał y jest wyłączany pierwszym lub drugim narastającym zboczem sygnału zegarowego (w jeśli rozpoczął się przy wysokim lub niskim stanie sygnału G).
Proces oznaczania (nazywania) stanów W procesie nazywania stanów na wykresie często niełatwo jest odpowiedzieć na pytanie, czy aktualnie analizowany stan jest stanem nowym. W tym celu opracowano kilka reguł:
Proces oznaczania (nazywania) stanów 1. Stany różniące się kombinacją stanów wejść i wyjść są różnymi stanami (np. pierwsze cztery stany automatu) 2. Stany dla których wejścia i wyjścia są identyczne nie zawsze są stanami równoważnymi często stany te pełnią różną funkcją w działaniu automatu, np. pamiętają pewne sekwencje stanów lub przejście do analizowanego stanu jest realizowane w innych warunkach (wyjątek). Przykład: stan 5 i 7. Stan 5 pojawia się w sytuacji, gdy sygnał wyjściowy rozpoczął się w stanie niskim sygnału G, a zatem po stanie 5 należy podtrzymać generację jeszcze przez pełny takt poprzez przejście do stanów 6 i 7 Stan 7 jest identyczny pod względem kombinacji sygnałów G, x, y, ale układ wie, że powinien zakończyć generację sygnału przy pierwszym narastającym zboczu. 3. W razie trudnych do rozstrzygnięcia wątpliwości co do równoważności dwóch stanów o identycznych wejściach i wyjściach należy im przypisać różne symbole. Przy prawidłowo stworzonej tablicy pierwotnej równoważność zostanie wykryta w procesie minimalizacji.
Tworzenie tablicy przejść i wyjść Wypełnianie tablicy najwygodniej jest zrealizować w kilku etapach: 1. Wpisujemy stany stabilne automatu 2. Wpisujemy kreski w tych klatkach, dla których sygnał wejściowy różni się od sygnału odpowiadającemu stanowi stabilnemu w danym wierszu na więcej niż jednej pozycji. 3. Wpisujemy wszystkie przejścia występujące na wykresie czasowym 4. Analizujemy i uzupełniamy te klatki tablicy, które nie zostały wypełnione w poprzednim etapie.
Tworzenie tablicy przejść i wyjść Wypełnianie tablicy najwygodniej jest zrealizować w kilku etapach: 1. Wpisujemy stany stabilne automatu 2. Wpisujemy kreski w tych klatkach, dla których sygnał wejściowy różni się od sygnału odpowiadającemu stanowi stabilnemu w danym wierszu na więcej niż jednej pozycji. 3. Wpisujemy wszystkie przejścia występujące na wykresie czasowym 4. Analizujemy i uzupełniamy te klatki tablicy, które nie zostały wypełnione w poprzednim etapie.
Tworzenie tablicy przejść i wyjść
Tworzenie tablicy przejść i wyjść Wypełnianie tablicy najwygodniej jest zrealizować w kilku etapach: Wpisujemy kreski w tych klatkach, dla których sygnał wejściowy różni się od sygnału odpowiadającemu stanowi stabilnemu w danym wierszu na więcej niż jednej pozycji.
Tworzenie tablicy przejść i wyjść Wpisujemy wszystkie przejścia występujące na wykresie czasowym Analizujemy i uzupełniamy te klatki tablicy, które nie zostały wypełnione w poprzednim etapie.
Przykład 2. Z elementów NAND zbudować zamek szyfrowy otwierany przy pomocy dwóch przycisków A i B, naciskanych w kolejności ABB (przycisk A zostaje zwolniony przed naciśnięciem B), przy czym sposób w jaki przyciski były naciskane poprzednio nie jest istotny. Zakładamy, że użytkownik może nacisnąć oba przyciski jednocześnie. W tego typu zadaniach wygodnie jest użyć, jako etapu przejściowego pomiędzy opisem słownym, a tablicą przejść grafu przejść automatu. Przejścia w grafie warto oznaczyć zgodnie z przyciskami A oraz B. Przy czym wartość 1 oznacza klawisz wciśnięty. Przy każdym stanie zaznaczono, małą pętlą wracającą do tego samego stanu, warunki wejściowe, przy których dany stan jest stabilny nie zmienia się stan automatu dopóki, dopóty nie zmieni się stan sygnałów wejściowych (pętla while) Prawidłową sekwencją otwierającą zamek jest sekwencja A, B, B, a właściwie A, N, B, N, B, gdzie N oznacza stan, w którym żaden przycisk nie jest wciśnięty (AB = 00). Odpowiada to sekwencji 00 -> 10 -> 00 -> 01 -> 00 -> 01 wówczas taka sekwencja powoduje przejście automatu, gdzie stan wyjścia zmieni się na 1
Przykład 2. Prawidłową sekwencją otwierającą zamek jest sekwencja A, B, B, a właściwie A, N, B, N, B, gdzie N oznacza stan, w którym żaden przycisk nie jest wciśnięty (AB = 00). Odpowiada to sekwencji 00 -> 10 -> 00 -> 01 -> 00 -> 01 wówczas taka sekwencja powoduje przejście automatu, gdzie stan wyjścia zmieni się na 1
Uzupełniamy stany stabilne Uzupełniamy stany zabronione Uzupełniamy stany błędnego wpisania hasła
Krok 2. Minimalizacja tablicy przejść-wyjść Minimalizacja rozpoczyna się od poszukiwania i łączenia stanów pseudorównoważnych, spełniających trzy warunki: 1. Stany stabilne stanów pseudorównoważnych muszą występować w tej samej kolumnie 2. Wyjścia odpowiadające obu stanom są niesprzeczne (są jednakowe lub jedno z nich jest nieokreślone) 3. Dla dowolnej zmiany stanu wejść układ przechodzi z obu rozważanych stanów do stanów jednakowych lub pseudorównoważnych
Stanów równoważnych poszukujemy tylko pośród tych, których stany stabilne występują w jednej kolumnie, czyli badamy pseudorównoważność par: 3-8, 3-9 8-9 1-5 1-6 i 2-4 dla A\Gx = 00 Porównujemy 3-8 3-9 8-9 dla A\Gx = 01 Porównujemy 1-5 i 1-6 dla A\Gx = 11 Porównujemy 2-4 Stany 3-9 8-9 6-5 mają sprzeczne wyjścia więc nie są pseudorównoważne
Do analizy pozostają pary 3-8 1-5 i 2-4 2-4 - 1 [2] 7-6 [4] 7 OK x/ok OK OK Sprawdzamy czy 1-6 jest równoważne, ale jest sprzeczne więc 2-4 nie jest równoważne 1-5 8 [1] 2-8 [5] 2 - OK OK OK OK równoważne bezwarunkowo 3-8 [3] 5-7 [8] 1-7 OK x/ok OK OK Sprawdzamy czy 5-1 jest równoważne, jest więc 3-8 jest równoważne
Tablica pierwotna i tablica po usunięciu stanów pseudorównoważnych
Łączenie stanów zgodnych Stanami zgodnymi są wyłącznie takie, których stany następne są jednakowe lub co najmniej jeden z nich jest nieokreślony W przypadku automatu Moore a grupujemy wyłącznie stany o niesprzecznych wyjściach. Tworzenie automatu Moore a jest prostsze między innymi ze względu na sposób określania stanów wyjścia ukladu. W przypadku tego automatu dla każdego stanu w nowo utworzonej tablicy minimalnej przypisujemy określony stan wyjściowy, który wynika z wyjść łączonych stanów. Ważne: W przypadku łączenia stanów, z których jeden ma wyjście nieokreślone, a drugiokreślone, o stanie wyjścia stanu wynikowego decyduje wyjście określone.
Przykład Analiza stanu 1 i 2 Spełniają warunek zgodności 3 -> - = 3 [1] -> 1 = [1] 2 -> [2] = [2] - -> 7 = 7 Analiza stanu 1 i 3 Ale mają sprzeczne stany łączymy je linią przerywaną Są zgodne i mają niesprzeczne wyjścia łączymy je linią ciągłą Analiza stanu 1 i 4 Nie są zgodne niezgodność występuje dla X=01 i dla X=11 nie łączymy ich linią
Automat Moore a przewiduje łączenie w grupy wyłączenie stanów połączonych liniami ciągłymi. W analizowanym przypadku nie można podzielić ich na mniej niż 5 grup, ale możliwe są dwa takie podziały: {1} {2,3} {4,7} {6} {9} {1,3} {2} {4,7} {6} {9}
Krok 3. Kodowanie tablicy przejść-wyjść i eliminacja zjawiska wyścigów Kodowanie tablicy przejść polega na jednoznacznym przyporządkowaniu stanom wewnętrznym S automatu kodów binarnych Q 1, Q 2,..., Q k. Do zakodowania tablicy przejść automatu o K stanach wewnętrznych potrzeba k sygnałów 2-stanowych (binarnych). Uwaga: Kodowanie jest bardzo ważnym i krytycznym etapem syntezy, gdyż wybór niewłaściwego kodu może prowadzić do występowania zjawiska tzw. wyścigów, który wynika z różnic opóźnień w elementach pamięciowych. Na ogół zjawisko to występuje przy przejściach między stanami, których kody różnią się więcej jednym bitem. Przykładowo ze stanu o kodzie 00 do stanu 11 automat będzie przechodził jedną z dwóch możliwych dróg: 00 à 01 à 11 lub 00 à 10 à 11 Ważne: Stan pośredni może być stanem stabilnym lub stanem niestabilnym prowadzącym do niewłaściwego stanu stabilnego, przez co układ zadziała nieprawidłowo. Takie zjawisko nazywamy wyścigiem krytycznym Jeśli w kolumnie X stan docelowy jest jedynym stanem stabilnym, mamy do czynienia z tzw. wyścigiem niekrytycznym, Ponieważ teoretycznie układ po przejściu stanów nieustalonych powinien trafić do pożądanego stanu stabilnego. W rzeczywistości istnieje ryzyko, że jeśli w kolumnie istnieją stany niestabilne to w procesie realizacji w ich miejscach mogą pojawić się stany stabilne.
W tablic przejść automatu występują tylko dwa przejścia, dla których kod stanu zmienia się na dwóch pozycjach: Przejście ze stanu 3 (kod 11) do stanu 1 (kod 00) kolumna 01 Przejście ze stanu 4 (kod 10) do stanu 2 (kod 01) kolumna 00
Przejście ze stanu 4 (kod 10) do stanu 2 (kod 01) kolumna 00 Przejście 4 à 2 dla X = 00 niesie ryzyko wyścigu krytycznego, gdyż w kolumnie tej występują dwa stany stabilne: 2 i 3. Przejście ze stanu 4 à 2 może przebiegać jedną z dwóch dróg: 10 à 00 à 01 lub 10 à 11 à 01 W tym stanie automat się zatrzyma, bo jest to stan stabilny
Wymuszamy przejście drogą 10 à 00 à 01 poprzez wpisanie 1 w stanie 4 (10) dla A\Gx = 00
Przejście ze stanu 3 (kod 11) do stanu 1 (kod 00) kolumna 01 Przejście ze stanu 3 à 1 może przebiegać jedną z dwóch dróg: 11 à 01 à 00 lub 11 à 10 à 00 Automat podczas wyboru drogi przez 11à10à00 może nie dotrzeć do stabilnej jedynki ponieważ w stanie 4 dla A\Gx = 01 występuje stan nieokreślony
Wymuszamy przejście drogą 11 à 10 à 00 poprzez: wpisanie 4 w stanie 3 (11) dla A\Gx = 01 oraz wpisanie 1 w stanie 4 (10) dla A\Gx = 01
W analizowanym przykładzie możliwe było usunięcie wyścigu krytycznego przy przejściu ze stany 4 do stanu 2 poprzez wprowadzenie przejścia cyklicznego przez stan 1. Często jednak wprowadzenie przejść cyklicznych nie jest możliwe w obrębie istniejących stanów automatu i wymaga wprowadzenia stanu lub stanów dodatkowych. Dołączenie dodatkowych stanów ułatwia przeprowadzenie procesu przekształcania grafu przejść, jednak na ogół cały układ jest bardziej skomplikowany. Przekształcanie grafu przejść Aby uniknąć wyścigów, należy przede wszystkim wybrać odpowiednie kody stanów automatu, takie by w automacie nie występowały przejścia o jednoczesnej zmianie dwóch lub więcej sygnałów Q i. Najbardziej efektywną metodą jest metoda przekształcania grafu przejść. Opiera się ona na zastosowaniu modelu geometrycznego przestrzeni stanów automatu. Model ten ma postać zbioru punktów odpowiadających poszczególnym stanom wew. położonych w wierzchołkach k-wymiarowego hipersześcianu, którego sąsiednimi wierzchołkom przyporządkowano kolejne liczby w kodzie Gray a. W ten sposób punkty połączone krawędziami hipersześcianu przypisane mają kody różniące się zawsze tylko jednym bitem.
Kodowanie polega na przypisaniu stanów automatu wierzchołkom hipersześcianu w taki sposób, aby wszystkie strzałki grafu przejść leżały na jego krawędziach. W większości przypadków nie daje się uniknąć przejść po przekątnych hipersześcianów, ale metoda ta pozwala zmniejszyć ich liczbę. Po każdej próbie zakodowania należy przeanalizować wszystkie przejścia po przekątnych, badając czy tworzą wyścigi krytyczne czy niekrytyczne. Jeśli istnieją wyścigi krytyczne, należy spróbować innego kodu, aż do wyczerpania możliwości. Jeśli nie istnieje możliwość uniknięcia wyścigów krytycznych, model geometryczny jest pomocny w projektowaniu przejść cyklicznych.
Wyścigi krytyczne zaznaczone są grubszą linią. Jak widać kody odpowiadające grafom b i c dają w wyniku kodowania odpowiednio: trzy oraz dwa wyścigi krytyczne, natomiast kodowanie zgodnie z grafem d pozbawione jest wyścigów krytycznych istnieje w nim tylko jedne wyścigniekrytyczny.
Krok4. Realizacja tablic przejść W przypadku realizacji automatu asynchronicznego w postaci układu kombinacyjnego objętymi pętlami sprzężenia zwrotnego, jego funkcje: Q = f((q1, Q2,..., Qk, X) można stworzyć wprost na podstawie zakodowanych tablic przejść, zgodnie z regułami dotyczącymi minimalizacji zespołów funkcji przełączających, ale dbając o to, by wszystkie funkcje były wolne od hazardów. Zjawisko hazardów jest bardzo groźne w układach asynchronicznych, gdyż każde pojawienie się fałszywego stanu Q może zostać podtrzymane przez pętle sprzężenia zwrotnego i spowodować błędne działanie układu.