TC Moduł 9

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Układy asynchroniczne

Struktura sekwencyjnego układu asynchronicznego jest podobna do struktury układu synchronicznego (por. moduł 7 plansza 5). Istotną różnicą jest brak wejścia zegarowego clk. Z tego powodu pamięć układu mogą stanowić przerzutniki (automaty elementarne) nie synchronizowane lub elementy opóźniające. Powstaje zatem pytanie: co – wobec braku sygnału zegarowego – wyznacza kolejne takty pracy układu, powodując zmiany jego stanów wewnętrznych? Czynnikiem powodującym te zmiany może być tylko zmiana stanów wejść. Taka sytuacja jest pokazana na rysunku fragmentu grafu. Pod wpływem litery wejściowej Xi układ znalazł się w stanie Sa. Pozostaje w nim tak długo, aż na wejściu pojawi się inna litera – Xj(ji) . Wówczas układ może przejść do stanu Sb. Przykładowe stany Sa i Sb nazywa się stanami stabilnymi. Należy przyjąć, że w układzie asynchronicznym wszystkie stany są stanami stabilnymi, a zmiana stanu może nastąpić tylko w wyniku zmiany stanu wejść.

Najprostszym asynchronicznym układem sekwencyjnym jest przerzutnik asynchroniczny typu SR. Na planszy podana jest tablica przejść przerzutnika SR. Z tablicy tej wyznaczamy tzw. funkcję charakterystyczną przerzutnika. Funkcja ta podaje zależność stanu następnego Q od stanu bieżącego i sygnałów na wejściach S, R. Wyrażenie boolowskie tej funkcji przekształcamy (wg prawa De Morgana) do postaci zawierającej funktory NAND. Odpowiedni schemat logiczny przerzutnika SR podany jest na rysunku.

Zaprojektujemy układ asynchroniczny, którego działanie jest opisane na planszy. Najpierw wykażemy, że automat działa zgodnie z grafem pokazanym na rysunku. Załóżmy, że na wejściu jest wektor 00; układ jest w stanie stabilnym 1 z wyjściem 0 (pętla z wektorem wejściowym 00). W tym stanie (zgodnie z założeniem) może na wejściu pojawić się wektor 01 – przechodzimy do stanu 2 (wyjście 0) lub wektor 10 – przechodzimy do stanu 3 (wyjście 0). W stanie 2 na wejściu może się pojawić wektor 11 – przechodzimy do stanu 4, a na wyjściu jest stan 1, gdyż ta sytuacja oznacza, że na wejściu kolejno pojawiały się wektory 00,01,11. Jeśli w stanie 2 pojawi się 00 – wracamy do stanu 1. Należy teraz rozpatrzyć sytuację w stanie 3 i 4. W stanie 3 po przyjściu 00 wracamy do stanu 1, a po przyjściu 11 przechodzimy do stanu 5 (z wyjściem 0). W stanie 4 po przyjściu 10 można przejść do już istniejącego stanu 3, zaś po przyjściu 01 trzeba przejść do nowego stanu 6 (nie można przejść do stanu 2, gdyż sekwencja wejściowa ...01,11,01,11,... powodowałaby by wygenerowanie na wyjściu sekwencji 0101... ). Do zamknięcia grafu pozostaje tylko uzupełnienie przejść ze stanów 5 i 6. Bezpośrednio z uzyskanego grafu tworzymy tablicę przejść-wyjść tego automatu. Kółka w tej tablicy oznaczają stany stabilne. Należy zwrócić uwagę, że w powyższym grafie wszystkie stany są stanami stabilnymi.

Następnym etapem syntezy układów asynchronicznych jest minimalizacja liczby stanów automatu, która przebiega tak samo, jak w przypadku układów synchronicznych. Łatwo sprawdzić, że na podstawie uzyskanej tablicy przejść wyjść można wyznaczyć zbiór par zgodnych: {1,2}, {1,3}, {3,5}, {3,6}, {5,6}. Stąd maksymalne klasy zgodne są następujące: Parser nie mógł rozpoznać (błąd składni): {\displaystyle \{1,2\}, \{1,3}, \{4\} \{3,5,6\}} . Warunek pokrycia i zamknięcia spełniają zbiory: {1,2},{4}{3,5,6}. Oznaczając stany wewnętrzne kolejno literami A, B i C, uzyskujemy tablicę przejść wyjść automatu minimalnego.

W realizacji automatu asynchronicznego, podobnie jak w realizacji automatu synchronicznego, występują dwa etapy: kodowanie stanów i synteza strukturalna, czyli wyznaczenie funkcji wzbudzeń przerzutników. Oba te procesy w odniesieniu do układów asynchronicznych mają swoją specyfikę spowodowaną brakiem zewnętrznej synchronizacji.

Aby przeanalizować zjawiska zachodzące w układzie asynchronicznym przeprowadzimy syntezę automatu minimalnego. Stanom A, B, C tego automatu przyporządkujemy wektory kodowe odpowiednio 00,01,10. Otrzymujemy zakodowaną tablicę przejść-wyjść, uwzględniającą nie wykorzystany wektor stanu 11. Na planszy pokazano również graf stanów automatu minimalnego z odpowiednimi wektorami kodowymi dla poszczególnych stanów.


Zaprojektowany układ będzie działał poprawnie, jeżeli czasy działania elementów opóźniających Δ są jednakowe, to znaczy Δ1=Δ2. W rzeczywistości funkcja opóźnienia Δ jest realizowana w układzie kombinacyjnym przez opóźnienia (czas przenoszenia) bramek, realizujących ten układ. Dlatego sygnały Q1,Q2 na wyjściach tego układu nie zmieniają swych wartości jednocześnie. Taka sytuacja może mieć wpływ na poprawność działania układu zwłaszcza w takim przypadku, w którym wektory kodowe sąsiednich stanów różnią się na więcej niż jednej pozycji. Właśnie tak jest w grafie automatu minimalnego przy przejściu ze stanu B (wektor kodowy 01) do stanu C(10)) . Na planszy rozważono tę sytuację. Dla Δ1<Δ2 (Δ1,Δ2 – czasy opóźnienia sygnałów q1,q2) stan 01 pod wpływem wejść 01 zmieni się na stan niestabilny 11, po czym (zgodnie z tablicą przejść) układ przejdzie do stanu stabilnego 10, zgodnego z założeniem. Takie przejście nazywa się wyścigiem niekrytycznym. Jeżeli Δ1>Δ2, to dla wejść 01 układ przejdzie do stanu 00, ale stan ten dla wejść 01 jest stabilny; układ nie przejdzie do stanu 10. Takie przejście nazywa się wyścigiem krytycznym; powoduje ono nieprawidłową pracę układu. Aby zapobiec tej sytuacji, można odpowiednio skorygować graf stanów, zastępując bezpośrednie przejście ze stanu 01 do stanu 10 pod wpływem wejść 01 – przejściem przez stan niestabilny 11.

Dla Δ1<Δ2 stan 01 pod wpływem wejść 10 zmieni się na stan niestabilny 11, po czym (zgodnie z tablicą przejść) układ przejdzie do stanu stabilnego 10, zgodnego z założeniem. Jeżeli Δ1>Δ2, to dla wejść 10 układ przejdzie do stanu 00, po czym do stanu 10, też zgodnego z założeniem. W obu przypadkach – wyścig niekrytyczny.

Aby uniknąć analizy poprawności działania realizacji układu asynchronicznego po jego zaprojektowaniu, można automat (minimalny) odpowiednio zakodować w taki sposób, aby wektory kodowe sąsiednich stanów różniły się tylko na jednej pozycji.

Uwzględniając przeprowadzone rozważania łatwo stwierdzić, że graf automatu należy uzupełnić o stan niestabilny zakodowany 11, co prowadzi do zmodyfikowanej tablicy przejść podanej na planszy.

Zmodyfikowaną tablicę rozpisujemy na poszczególne funkcje wzbudzeń Q1 oraz Q2.

Wyznaczone na podstawie tych tablic funkcje Q1' i Q2' (również y), opisują realizację układu kombinacyjnego, nazywaną realizacją ze sprzężeniem zwrotnym:

y=Q2Q1'=Q1x1+Q1x2+Q2x1+x1x1Q2'=Q1x1x2+Q1Q2x2

gdzie składnik Q1x1 wprowadzono w celu uniknięcia szkodliwego zjawiska, zwanego hazardem. Wprowadzenie tego składnika zapobiegnie pojawieniu się na wyjściu Q1 krótkiego impulsu o wartości logicznej 0, który może powstać przy zmianie sygnału x2 z 1 na 0.


Plansza wyjaśnia powstawanie zjawiska hazardu. W układach asynchronicznych funkcje wzbudzeń muszą być realizowane w taki sposób, aby nie występował hazard statyczny.

W celu likwidacji hazardu wyrażenia boolowskie funkcji wzbudzeń należy uzupełnić o składnik (nadmiarowy), odpowiadający pętli na tablicy Karnaugha, w taki sposób, aby każde dwie sąsiednie jedynki były objęte wspólną pętlą.

Mając świadomość, że w realizowanym automacie zlikwidowaliśmy przyczyny wszystkich szkodliwych zjawisk, możemy przystąpić do narysowania schematu logicznego tego automatu.

Z asynchronicznych przerzutników typu SR (SR) są budowane przerzutniki synchroniczne typu D, T i JK. Istnieją różne mechanizmy synchronizacji przerzutników: od najprostszej – szerokością impulsu (tzw. latch), przez synchronizację dwustopniową (master-slave), aż po synchronizację zboczem przebiegu zegarowego. Synchronizacja zboczem polega na tym, że stan wejść przerzutnika oddziałuje na jego stan wewnętrzny (i tym samym na stan wyjść) tylko w momencie wystąpienia zmiany, np. z 0 na 1, w przebiegu zegarowym.

Przerzutniki tego typu mają prostą budowę, ale mogą służyć tylko do przechowywania (zatrzaskiwania) informacji. Nie mogą służyć do budowy układów sekwencyjnych.


Prawidłowa synchronizacja powinna działać tak, aby w czasie trwania okresu przebiegu zegarowego sygnał wejściowy przerzutnika był odczytywany jeden raz, a stan przerzutnika zmieniał się także jeden raz – niezależnie od zmiany sygnałów wejściowych. Mechanizm ten zostanie dokładnie omówiony na przykładzie, którego celem będzie zaprojektowanie asynchronicznego układu realizującego funkcje przerzutnika typu D synchronizowanego narastającym (dodatnim) zboczem przebiegu zegarowego.

Najczęściej do realizacji takiego przerzutnika przyjmuje się układ o schemacie blokowym zbudowanym z automatu sterującego i asynchronicznego przerzutnika SR. Automat sterujący o wejściach D i clk(c) steruje asynchronicznym przerzutnikiem SR, którego praca jest opisana w tablicy podanej na planszy. Przerzutnik ten może zmienić stan wyjścia Q z 0 na 1, jeśli na wyjściu Y1 automatu sterującego pojawi się 0, lub z 1 na 0, jeśli 0 pojawi się na wyjściu Y2 (jednoczesne pojawienie się sygnału 0 na wyjściu Y1 i Y2 jest niedopuszczalne).

Graf stanów typu Moore’a automatu sterującego pokazano na niniejszej planszy. Stan 1 jest stanem oczekiwania. Jeśli w tym stanie na wejściu D jest 1 (wektor wejściowy 10), to zmiana sygnału zegarowego clk z 0 na 1 powoduje przejście automatu do stanu 2 i pojawienie się na wyjściach Y1, Y2 wektora 01, co spowoduje włączenie przerzutnika SR (jeśli uprzednio był wyłączony). Jeśli w stanie 1 na wejściu D jest 0 (wektor wejściowy 00), to zmiana sygnału zegarowego clk z 0 na 1 powoduje przejście automatu do stanu 3 i pojawienie się na wyjściach Y1, Y2 wektora 10, co spowoduje wyłączenie przerzutnika SR (jeśli uprzednio był włączony). Powrót do stanu 1 ze stanów 2 i 3 następuje po zmianie sygnału clk z 1 na 0.

Na podstawie narysowanego grafu automatu tworzymy tablicę przejść-wyjść automatu sterującego, którą następnie kodujemy w sposób pokazany na planszy.

Zakodowaną tablicę rozpisujemy na dwie tabelki dla poszczególnych funkcji Q1' i Q2'.

Z tabelek tych można wyznaczyć wyrażenia boolowskie dla Q1' i Q2'.


Ostatecznie

Y1=Q1,Y2=Q2

Q1'=c+q1D+q2,Q2'=c+q2D+q1

Na tej podstawie i po zastosowaniu prawa De Morgana uzyskujemy schemat logiczny układu zaprojektowanego na elementach typu NAND.


Cały proces syntezy sekwencyjnego układu asynchronicznego prezentujemy raz jeszcze na innym przykładzie, ale tym razem z oszczędnymi komentarzami. Zadanie to słuchacz wykładu może potraktować jako zadanie treningowe. Plansze 24 do 28 prezentują kluczowe etapy syntezy.

Tworzony jest pierwotny graf automatu, a na jego podstawie pierwotna tablica przejść wyjść.

Pierwotna tablica przejść wyjść poddawana jest procesowi minimalizacji liczby stanów. Efektem minimalizacji jest zredukowanie liczby stanów z 7 do 4.

Kodowanie stanów wewnętrznych w celu zabezpieczenia układu przed szkodliwymi zjawiskami wyścigów krytycznych.

Prawidłowo zakodowana tablica przejść wyjść jest punktem wyjścia do obliczenia funkcji wzbudzeń oraz funkcji wyjściowej.

Obliczone funkcje mogą być bezpośrednio zrealizowane na bramkach logicznych.