TC Moduł 9: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Daniel-PW (dyskusja | edycje)
Nie podano opisu zmian
Daniel-PW (dyskusja | edycje)
Nie podano opisu zmian
 
(Nie pokazano 3 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 14: Linia 14:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd3.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd3.png|thumb|500px]]
|valign="top"|
|valign="top"|Najprostszym asynchronicznym układem sekwencyjnym jest przerzutnik asynchroniczny typu <math>SR\,</math>.  Na planszy podana jest tablica przejść przerzutnika <math>SR\,</math>. Z tablicy tej wyznaczamy tzw. funkcję charakterystyczną przerzutnika. Funkcja ta podaje zależność stanu następnego <math>Q\,</math> od stanu bieżącego i sygnałów na wejściach <math>S\,</math>, <math>R\,</math>. Wyrażenie boolowskie tej funkcji przekształcamy (wg prawa De Morgana) do postaci zawierającej funktory <math>NAND\,</math>. Odpowiedni schemat logiczny przerzutnika <math>SR\,</math> podany jest na rysunku.


|}
|}
Linia 21: Linia 21:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd4.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd4.png|thumb|500px]]
|valign="top"|
|valign="top"|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 <math>00\,</math>; układ jest w stanie stabilnym <math>1\,</math> z wyjściem <math>0\,</math> (pętla z wektorem wejściowym <math>00\,</math>). W tym stanie (zgodnie z założeniem) może na wejściu pojawić się wektor <math>01\,</math> – przechodzimy do stanu <math>2\,</math> (wyjście <math>0\,</math>) lub wektor <math>10\,</math> – przechodzimy do stanu <math>3\,</math> (wyjście <math>0\,</math>). W stanie <math>2\,</math> na wejściu może się pojawić wektor <math>11\,</math> – przechodzimy do stanu <math>4\,</math>, a na wyjściu jest stan <math>1\,</math>, gdyż ta sytuacja oznacza, że na wejściu kolejno pojawiały się wektory <math>00, 01, 11\,</math>. Jeśli w stanie <math>2\,</math> pojawi się <math>00\,</math> – wracamy do stanu <math>1\,</math>. Należy teraz rozpatrzyć sytuację w stanie <math>3\,</math> i <math>4\,</math>. W stanie <math>3\,</math> po przyjściu <math>00\,</math> wracamy do stanu <math>1\,</math>, a po przyjściu <math>11\,</math> przechodzimy do stanu <math>5\,</math> (z wyjściem <math>0\,</math>). W stanie <math>4\,</math> po przyjściu <math>10\,</math> można przejść do już istniejącego stanu <math>3\,</math>, zaś po przyjściu <math>01\,</math> trzeba przejść do nowego stanu <math>6\,</math> (nie można przejść do stanu <math>2\,</math>, gdyż sekwencja wejściowa <math>...01,11,01,11,...\,</math> powodowałaby by wygenerowanie na wyjściu sekwencji <math>0101...\,</math> ). Do zamknięcia grafu pozostaje tylko uzupełnienie przejść ze stanów <math>5\,</math> i <math>6\,</math>. 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.


|}
|}
Linia 28: Linia 28:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd5.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd5.png|thumb|500px]]
|valign="top"|
|valign="top"|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: <math>\{1,2\}</math>, <math>\{1,3\}</math>, <math>\{3,5\}</math>, <math>\{3,6\}</math>, <math>\{5,6\}</math>. Stąd maksymalne klasy zgodne są następujące: <math>\{1,2\}, \{1,3}, \{4\} \{3,5,6\}</math>. Warunek pokrycia i zamknięcia spełniają zbiory: <math>\{1,2\}, \{4\} \{3,5,6\}</math>. Oznaczając stany wewnętrzne kolejno literami <math>A\,</math>, <math>B\,</math> i <math>C\,</math>, uzyskujemy tablicę przejść wyjść automatu minimalnego.


|}
|}
Linia 35: Linia 35:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd6.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd6.png|thumb|500px]]
|valign="top"|
|valign="top"|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 <math>A\,</math>, <math>B\,</math>, <math>C\,</math> tego automatu przyporządkujemy wektory kodowe odpowiednio <math>00, 01, 10\,</math>. Otrzymujemy zakodowaną tablicę przejść-wyjść, uwzględniającą nie wykorzystany wektor stanu <math>11\,</math>. Na planszy pokazano również graf stanów automatu minimalnego z odpowiednimi wektorami kodowymi dla poszczególnych stanów.


|}
|}
Linia 42: Linia 43:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd7.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd7.png|thumb|500px]]
|valign="top"|
|valign="top"|Zaprojektowany układ będzie działał poprawnie, jeżeli czasy działania elementów opóźniających <math>\Delta\,</math> są jednakowe, to znaczy <math>\Delta_1=\Delta_2</math>. W rzeczywistości funkcja opóźnienia <math>\Delta\,</math> jest realizowana w układzie kombinacyjnym przez opóźnienia (czas przenoszenia) bramek, realizujących ten układ. Dlatego sygnały <math>Q1, Q2\,</math> 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 <math>B\,</math> (wektor kodowy <math>01\,</math>) do stanu <math>C (10)\,</math>) . Na planszy rozważono tę sytuację. Dla <math>\Delta_1<\Delta_2</math> (<math>\Delta_1, \Delta_2</math> – czasy opóźnienia sygnałów <math>q_1, q_2\,</math>) stan <math>01\,</math> pod wpływem wejść <math>01\,</math> zmieni się na stan niestabilny <math>11\,</math>, po czym (zgodnie z tablicą przejść) układ przejdzie do stanu stabilnego <math>10\,</math>, zgodnego z założeniem. Takie przejście nazywa się wyścigiem niekrytycznym. Jeżeli <math>\Delta_1>\Delta_2</math>, to dla wejść <math>01\,</math> układ przejdzie do stanu <math>00\,</math>, ale stan ten dla wejść <math>01\,</math> jest stabilny; układ nie przejdzie do stanu <math>10\,</math>. 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 <math>01\,</math> do stanu <math>10\,</math> pod wpływem wejść <math>01\,</math> – przejściem przez stan niestabilny <math>11\,</math>.


|}
|}
Linia 49: Linia 50:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd8.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd8.png|thumb|500px]]
|valign="top"|
|valign="top"|Dla <math>\Delta_1<\Delta_2</math> stan <math>01\,</math> pod wpływem wejść <math>10\,</math> zmieni się na stan niestabilny <math>11\,</math>, po czym (zgodnie z tablicą przejść) układ przejdzie do stanu stabilnego <math>10\,</math>, zgodnego z założeniem. Jeżeli <math>\Delta_1>\Delta_2</math>, to dla wejść <math>10\,</math> układ przejdzie do stanu <math>00\,</math>, po czym do stanu <math>10\,</math>, też zgodnego z założeniem. W obu przypadkach – wyścig niekrytyczny.


|}
|}
Linia 56: Linia 57:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd9.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd9.png|thumb|500px]]
|valign="top"|
|valign="top"|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.


|}
|}
Linia 63: Linia 64:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd10.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd10.png|thumb|500px]]
|valign="top"|
|valign="top"|Uwzględniając przeprowadzone rozważania łatwo stwierdzić, że graf automatu należy uzupełnić o stan niestabilny zakodowany <math>11\,</math>, co prowadzi do zmodyfikowanej tablicy przejść podanej na planszy.


|}
|}
Linia 70: Linia 71:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd11.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd11.png|thumb|500px]]
|valign="top"|
|valign="top"|Zmodyfikowaną tablicę rozpisujemy na poszczególne funkcje wzbudzeń <math>Q1'\,</math> oraz <math>Q2'\,</math>.


|}
|}
Linia 77: Linia 78:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd12.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd12.png|thumb|500px]]
|valign="top"|
|valign="top"|Wyznaczone na podstawie tych tablic funkcje <math>Q_1^{'}\,</math> i <math>Q_2^{'}\,</math> (również <math>y\,</math>), opisują realizację układu kombinacyjnego, nazywaną realizacją ze sprzężeniem zwrotnym:


<math>\begin{matrix} y=Q_2 & Q_1^{'}=Q_1x_1+Q_1x_2+Q_2\overline{x}_1+x_1\overline{x}_2 & Q_2^{'}=\overline{Q}_1x_1x_2+\overline{Q}_1Q_2x_2 \end{matrix}</math>
gdzie składnik <math>Q_1x_1\,</math> wprowadzono w celu uniknięcia szkodliwego zjawiska, zwanego hazardem. Wprowadzenie tego składnika zapobiegnie pojawieniu się na wyjściu <math>Q_1\,</math> krótkiego impulsu o wartości logicznej <math>0\,</math>, który może powstać przy zmianie sygnału <math>x_2\,</math> z <math>1\,</math> na <math>0\,</math>.
|}
|}
<hr width="100%">
<hr width="100%">
Linia 84: Linia 88:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd13.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd13.png|thumb|500px]]
|valign="top"|
|valign="top"|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.


|}
|}
Linia 91: Linia 95:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd14.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd14.png|thumb|500px]]
|valign="top"|
|valign="top"|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ą.


|}
|}
Linia 98: Linia 102:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd15.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd15.png|thumb|500px]]
|valign="top"|
|valign="top"|Mając świadomość, że w realizowanym automacie zlikwidowaliśmy przyczyny wszystkich szkodliwych zjawisk, możemy przystąpić do narysowania schematu logicznego tego automatu.


|}
|}
Linia 105: Linia 109:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd16.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd16.png|thumb|500px]]
|valign="top"|
|valign="top"|Z asynchronicznych przerzutników typu <math>SR\,</math> (<math>\overline{S}\,\overline{R}</math>) są budowane przerzutniki synchroniczne typu <math>D\,</math>, <math>T\,</math> i <math>JK\,</math>. 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 <math>0\,</math> na <math>1\,</math>, 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.
|}
|}
<hr width="100%">
<hr width="100%">
Linia 112: Linia 117:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd17.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd17.png|thumb|500px]]
|valign="top"|
|valign="top"|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 <math>D\,</math> synchronizowanego narastającym (dodatnim) zboczem przebiegu zegarowego.


|}
|}
Linia 119: Linia 124:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd18.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd18.png|thumb|500px]]
|valign="top"|
|valign="top"|Najczęściej do realizacji takiego przerzutnika przyjmuje się układ o schemacie blokowym zbudowanym z automatu sterującego i asynchronicznego przerzutnika <math>\overline{S}\, \overline{R}</math>. Automat sterujący o wejściach <math>D\,</math> i <math>clk\, (c)\,</math> steruje asynchronicznym przerzutnikiem <math>\overline{S}\, \overline{R}</math>, którego praca jest opisana w tablicy podanej na planszy. Przerzutnik ten może zmienić stan wyjścia <math>Q\,</math> z <math>0\,</math> na <math>1\,</math>, jeśli na wyjściu <math>Y_1\,</math> automatu sterującego pojawi się <math>0\,</math>, lub z <math>1\,</math> na <math>0\,</math>, jeśli <math>0\,</math> pojawi się na wyjściu <math>Y_2\,</math> (jednoczesne pojawienie się sygnału <math>0\,</math> na wyjściu <math>Y_1\,</math> i <math>Y_2\,</math> jest niedopuszczalne).


|}
|}
Linia 126: Linia 131:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd19.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd19.png|thumb|500px]]
|valign="top"|
|valign="top"|Graf stanów typu Moore’a automatu sterującego pokazano na niniejszej planszy. Stan <math>1\,</math> jest stanem oczekiwania. Jeśli w tym stanie na wejściu <math>D\,</math> jest <math>1\,</math> (wektor wejściowy <math>10\,</math>), to zmiana sygnału zegarowego <math>clk\,</math> z <math>0\,</math> na <math>1\,</math> powoduje przejście automatu do stanu <math>2\,</math> i pojawienie się na wyjściach <math>Y_1\,</math>, <math>Y_2\,</math> wektora <math>01\,</math>, co spowoduje włączenie przerzutnika <math>\overline{S}\, \overline{R}</math> (jeśli uprzednio był wyłączony).  Jeśli w stanie <math>1\,</math> na wejściu <math>D\,</math> jest <math>0\,</math> (wektor wejściowy <math>00\,</math>), to zmiana sygnału zegarowego <math>clk\,</math> z <math>0\,</math> na <math>1\,</math> powoduje przejście automatu do stanu <math>3\,</math> i pojawienie się na wyjściach <math>Y_1\,</math>, <math>Y_2\,</math> wektora <math>10\,</math>, co spowoduje wyłączenie przerzutnika <math>\overline{S}\, \overline{R}</math> (jeśli uprzednio był włączony).  Powrót do stanu <math>1\,</math> ze stanów <math>2\,</math> i <math>3\,</math> następuje po zmianie sygnału <math>clk\,</math> z <math>1\,</math> na <math>0\,</math>.


|}
|}
Linia 133: Linia 138:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd20.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd20.png|thumb|500px]]
|valign="top"|
|valign="top"|Na podstawie narysowanego grafu automatu tworzymy tablicę przejść-wyjść automatu sterującego, którą następnie kodujemy w sposób pokazany na planszy.


|}
|}
Linia 140: Linia 145:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd21.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd21.png|thumb|500px]]
|valign="top"|
|valign="top"|Zakodowaną tablicę rozpisujemy na dwie tabelki dla poszczególnych funkcji <math>Q_1^{'}\,</math> i <math>Q_2^{'}\,</math>.
 
Z tabelek tych  można wyznaczyć wyrażenia boolowskie dla <math>Q_1^{'}\,</math> i <math>Q_2^{'}\,</math>.


|}
|}
Linia 147: Linia 154:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd22.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd22.png|thumb|500px]]
|valign="top"|
|valign="top"|Ostatecznie
 
<math>\begin{matrix} Y_1=Q_1, & Y_2=Q_2  \end{matrix}</math>
 
<math>\begin{matrix} Q_1^{'}=\overline{c}+q_1\overline{D}+\overline{q}_2, & Q_2^{'}=\overline{c}+q_2 D+\overline{q}_1  \end{matrix}</math>


Na tej podstawie i po zastosowaniu prawa De Morgana uzyskujemy schemat logiczny układu zaprojektowanego na elementach typu <math>NAND\,</math>.
|}
|}
<hr width="100%">
<hr width="100%">
Linia 154: Linia 166:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd23.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd23.png|thumb|500px]]
|valign="top"|
|valign="top"|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.


|}
|}
Linia 161: Linia 173:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd24.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd24.png|thumb|500px]]
|valign="top"|
|valign="top"|Tworzony jest pierwotny graf automatu, a na jego podstawie pierwotna tablica przejść wyjść.


|}
|}
Linia 168: Linia 180:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd25.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd25.png|thumb|500px]]
|valign="top"|
|valign="top"|Pierwotna tablica przejść wyjść poddawana jest procesowi minimalizacji liczby stanów. Efektem minimalizacji jest zredukowanie liczby stanów z <math>7\,</math> do <math>4\,</math>.


|}
|}
Linia 175: Linia 187:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd26.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd26.png|thumb|500px]]
|valign="top"|
|valign="top"|Kodowanie stanów wewnętrznych w celu zabezpieczenia układu przed szkodliwymi zjawiskami wyścigów krytycznych.


|}
|}
Linia 182: Linia 194:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd27.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd27.png|thumb|500px]]
|valign="top"|
|valign="top"|Prawidłowo zakodowana tablica przejść wyjść jest punktem wyjścia do obliczenia funkcji wzbudzeń oraz funkcji wyjściowej.


|}
|}
Linia 189: Linia 201:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd28.png|thumb|500px]]
|width="500px" valign="top"|[[Grafika:TC_M9_Slajd28.png|thumb|500px]]
|valign="top"|
|valign="top"|Obliczone funkcje mogą być bezpośrednio zrealizowane na bramkach logicznych.


|}
|}
<hr width="100%">
<hr width="100%">

Aktualna wersja na dzień 07:58, 8 wrz 2006

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+x1x2Q2'=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.