Projektowanie układów kombinacyjnych



Projekt, rysunki i kod strony: Michał Kubiś
Zawartość merytoryczna: Piotr Kurgan
pod opieką i po modyfikacji Konrada Buzak - genek

| Wstęp | Przykład 1 - prostszy | Przykład 2 - trudniejszy z dokładnym opisem| Minimalizacja funkcji przełączających | Realizacja układów kombinacyjnych z bramek | Realizacja układów kombinacyjnych przy użyciu bloków funkcjonalnych | Bibliografia | (new) Ogródek - przykład 3 |



Wstęp


Układ kombinacyjny jest układem przełączającym (automatem cyfrowym) służącym do przetwarzania sygnałów dwuwartościowych. Sygnały wejściowe układu mogą pochodzić z czujników, wyłączników, przycisków itp. Sygnały wyjściowe mogą sterować np. lampkami sygnalizacyjnymi. Stan wyjść układu kombinacyjnego zależy tylko od aktualnego stanu wejść. Charakteryzuje się brakiem pamięci, która umożliwiłaby zapamiętywanie poprzednich stanów wejść.Zatem: wyjścia układu kombinacyjnego zależą (sa funkcją) tylko od wejść.


Układ przełączający można przedstawić w postaci bloku, mającego wejścia x1, x2, xn i wyjścia y1, y2, yn. Każde wejście może być w jednym z dwóch stanów 0 lub 1. Ciąg sygnałów wejściowych x1 ... xn określa stan wejść. Podobnie ciąg sygnałów wyjściowych y1 ... ymokreśla stan wyjść automatu.

(x1, x2 ... xn)=X
(y1, y2 ... ym)=Y
Y=f(X)



Przykład 1 - łatwiejszy - "na chłopski rozum"

wymyślony przeze mnie, opisany przez uczniów VI L.O w Gdyni po korektach p. J.Śmierzchalskiej


Układ automatyki

Tama na rzece posiada dwie śluzy s1 i s2 do regulacji poziomu wody – jak pokazano na rysunku. W zależności od szybkości napływania wody do tamy, nadmiar wody jest spuszczany przez jedną ze śluz lub dwie śluzy jednocześnie.

O aktualnym poziomie wody w tamie informują trzy czujniki (c1,c1,c3), które działają w momencie zalania ich przez wodę.

Czujniki zwracają wartość 1 gdy znajdują się pod poziomem wody (gdy są zatopione).

1. Zaprojektuj układ automatyki, który będzie sterował otwieraniem i zamykaniem śluz wg następujących zasad:

  • gdy każdy z czujników zwraca wartość 0 (brak sygnału), czyli znajduje się nad poziomem wody, to wyjścia sterujące śluzami (s1 i s2) przybierają wartości 0 “zamknięte” (s1=0, s2=0),
  • gdy zatopiony jest czujnik c1 to: śluza pierwsza jest otwarta (s1=1) natomiast śluza druga jest zamknięta (s2=0)
  • gdy zatopione są czujniki c1 i c2 to: otwarta jest śluza druga (s2=1) natomiast śluza pierwsza jest zamknięta (s1=0),
  • gdy zatopione są czujniki c1, c2 i c3 to otwarte są obie śluzy (s1=1, s2=1)

2. Sporządź zoptymalizowany układ oparty na bramkach NOT i do wyboru NAND lub NOR.

 

 

Rozwiązanie:

1. Tworzymy tabelę sterowania: (opisującą funkcje przełączające)

C1

C2

C3

S1

S2

opis

0

0

0

0

0

niski stan wody - obie sluzy zamkniete

1

0

0

1

0

mała śluza otwarta, duża zamknięta

0

1

0

-

-

0

0

1

-

-

1

1

0

0

1

śreni stan wody - duża otwarta mała zamknięta

0

1

1

-

-

1

0

1

-

-

1

1

1

1

1

wysoki stan wody - obie sluzy zamkniete

Stany niemożliwe takie jak 0 1 0; 0 0 1; 0 1 1; 1 0 1 są pomijane, czyli przyjmują stany dowolne.

 

 

2. Rysujemy tablicę minimalizacji (tablica Karnaugha):

czyli:
  • dzielimy ilość wejść /2 - tu: 3/2 zatem 2 kolumny i 1 wiersz albo 1 kolumna i 2 wiersze -> do wyboru;
  • opisujemy kolumny i wiersze wejściami używamy kodu dwójkowego (Grey'a);
  • zaznaczamy jak najwieksze symetryczne obszary, które obejmą wszystkie jedynki nie obejmując zer (lub odwrotnie);
  • wynik: każdy obszar jedynek to iloczyn wejść, które dla całego obszaru są stałe (jeśli jest to '0' to zmienna jest zanegowana); wszystkie obszary sumujemy logicznie;
  • wynik drugi dla minimalizacji po zerach: każdy obszar to suma stałych wejść (tym razem dla wejścia '1' zmienną negujemy); wszystkie obszary mnożymy logicznie.

    Dla śluzy pierwszej:

    c1,c2\c3

    0

    1

    0 0

    0

    -

    0 1

    -

    -

    1 1

    0

    1

    1 0

    1

    -

    Jak wynika z tabeli funkcja zoptymalizowana ma postać:

    s1=c1 c2 + c3 (negacja c2)

    Tablica dla śluzy drugiej:

    c1,c2\c3

    0

    1

    0 0

    0

    -

    0 1

    -

    -

    1 1

    1

    1

    1 0

    0

    -

    Tutaj minimalna postać funkcji:

    s2=c2.

     

    Cały układ będzie więc miał postać:

    Po optymalizacji wszystkich bramek na NAND i NOT (z wykorzystaniem prawa de’Morgana):


    Przykład 2 - trudniejszy, ale z dokładnym opisem



    Przykładem automatu kombinacyjnego jest układ sterowania temperaturą. Pomiaru dokonujemy termometrem kontaktowym podający cztery sygnały: a, b, c, d, w 0 - jeśli temperatura jest niższa lub 1 - jeśli wyższa.


    Funkcje przełączające
    abcdw1w2w3
    0000110
    1000100
    1100010
    1110010
    111100-



    Ukaład posiada 2 grzejniki ( G1=4kW; G2=2kW ). Grzejnikami można sterować przy użyciu trzech wyłączników oznaczanych literą w (odpowiednio w1, w2 itd.). Zmienne wyjściowe w są funkcjami zmiennych wejściowych a, b, c, d. Funkcje te noszą nazwę funkcji przełączających, gdyż zarówno zmienne jak i funkcje mogą przyjmować tylko dwie wartości: 0 lub 1. Funkcje te nie są w pełni określone, gdyż nie wszystkie ciągi wartości zmiennych mogą się pojawiać na wejściu układu, lub też dla niektórych ciągów wartość zmiennych sygnału wyjściowego jest obojętna ( np.w3 dla abcd=1111).


    w1=F1(a,b,c,d)
    w2=F2(a,b,c,d)
    w3=F3(a,b,c,d)

    Ciąg wartości zmiennych będący ciągiem 0-1-wym może być traktowany jak liczba binarna; możemy też posługiwać się jej odpowiednikiem dziesiętnym (np. dla funkcji opisuj1cej w2).

    F2(1100)=F2(12)=1

    Dla określenia funkcji należy wypisać zbiór ciągów wartości zmiennych, dla których funkcja równa jest jedności oraz zbiór, w którym funkcja przyjmuje wartości 0. Ponadto dla funkcji nie w pełni określonych wypisujemy zbiór wartości zmiennych, dla których wartość funkcji jest nie określona.

    Postacią kanoniczną sumy nazywamy funkcję rozłożoną na sumę iloczynów, w których jako czynniki występują funkcje o liczbie argumentów o jeden mniejszej. Pełny iloczyn n zmiennych, jest to iloczyn zawierający wszystkie n zmiennych w postaci nie zanegowanej lub zanegowanej. Chcąc przedstawić funkcję przełączającą w kanonicznej postaci sumy, dla każdego ciągu ze zbioru F1 piszemy pełny iloczyn, w którym zerom ciągu odpowiadają zmienne zanegowane, a jedynkom - zmienne nie zanegowanej.

    Podobnie, chcąc przedstawić funkcję przełączającą w kanonicznej postaci iloczynu, dla każdego ciągu ze zbioru F0 piszemy pełną sumę, przy czym zerom ciągu odpowiadają zmienne nie zanegowane, a jedynkom - zanegowane. Możemy również dane wyrażenia poddać uproszczeniu stosując prawa algebry Bool'a - taką formę wyrażenia uproszczonego nazywamy wyrażeniem normalnym.


    Minimalizacja funkcji przełączających - cd. przykładu 2


    Tworzymy tablicę dla, przykładowo, przełącznika w2:

    uzyskując funkcję w2=a + b d
    a negacja lub b i d negacja
    Poniżej pełny opis sposobu tworzenia i minimalizacji w takiej tablicy:

    Minimalizacja funkcji przełączającej polega na przedstawieniu jej w postaci normalnej, zawierającej możliwie najmniejszą liczbę zmiennych w celu ograniczenia ilości bramek niezbędnych do stworzenia danego układu. Początkową postacią funkcji jest albo tabelka wartości funkcji przedstawiona w postaci tzw.tablicy Karnaugha, albo zbiory F1, F0, FZ ( 1,0,Z - wykładniki ) ciągów wartości zmiennych, dla których funkcja przyjmuje wartość 1, 0 oraz nie określone.

    Minimalizację funkcji przełączających niewielkiej liczby zmiennych (do 5,6) najdogodniej jest przeprowadzić na tablicy Karnaugha. Tablica ta stanowi specyficzną odmianę tablicy wartości funkcji. Z boku tablicy wpisujemy wszystkie ciągi wartości dwu pierwszych zmiennych a, b - a u góry - wszystkie możliwe ciągi wartości pozostałych zmiennych c, d. Ciągi wartości zmiennych przedstawione są w takiej kolejności, że sąsiednie ciągi różnią się wartością tylko jednej zmiennej (ciągami sąsiednimi są również ciąg pierwszy i ostatni). W klatkach tablicy wpisujemy wartość funkcji przełączającej dla odpowiednich wartości argumentów. Jeżeli funkcja jest nie określona dla pewnych wartości zmiennych, to w tych miejscach tabelki stawiamy kreskę.

    Iloczyn czterech różnych zmiennych lub ich negacji (pełen iloczyn) przyjmuje wartości 1 dokładnie w jednym polu takiej tablicy. Iloczyn trzech zmiennych przyjmuje wartości 1 w dwóch polach, które albo sąsiadują ze sobą, albo leżą przy przeciwległych krańcach tablicy ( w obu przypadkach będziemy takie pola nazywać sąsiednimi). Wynika to z przyjętej kolejności ciągów wartości zmiennych a, b i c, d opisując tablicę. Iloczyn dwu zmiennych przyjmuje wartość 1 zawsze w czterech polach tablicy, zajmujących cały rząd pionowy lub poziomy albo tworząc kwadrat, leżący całkowicie wewnątrz siatki lub przechodzący przez jej klejone brzegi. Iloczynowi jednoczynnikowemu odpowiada osiem pól, leżących w dwu sąsiadujących ze sobą rzędach.



    Przykłady tworzenia grup w tablicach KArnaugha zależności:
    1. dla trzech zmiennych
    2. dla czterech zmiennych
    3. dla pięciu zmiennych

    Realizacja układów kombinacyjnych z bramek - cd. przykładu 2


    W naszym przypadku uzyskujemy bezpośrednio z funkcji w2 (poz.1). Przerabiamy go bez zmiany wartości funkcji by uzyskać postać dogodną do wykorzystania prawa De'Morgana (poz.2) i wykorzystując je uzyskujemy postać oparta na bramkach NAND (poz.3)



    Poniżej opis zasad realizacji funkcji logicznych na bramkach:

    Układy kombinacyjne realizuje się za pomocą elementów logicznych - bramek, bloków funkcjonalnych (tj. multiplekser lub pamięć stała ). Podstawowymi elementami półprzewodnikowymi są w większości technik realizacyjnych elementy NOR lub NAND. Elementy NOR i NAND mają podwójne oznaczenia, gdyż zgodnie z prawem Morgana realizują funkcje zarówno sumy jak i iloczynu - to jest przyczyną ich uniwersalności.


    Element NOR realizuje funkcję negacji sumy oraz iloczynu negacji, a element NAND - funkcje negacji iloczynu oraz sumy negacji. Ponieważ element NAND realizuje zarówno negację iloczynu jak i sumę negacji zmiennych, i ma podwójne oznaczenie, wpisanie funkcji przełączającej realizowanej przez układ NAND jest bardzo proste. W układzie takim należy ponumerować kolejno warstwy (poziomy) elementów poczynając od wyjścia układu, po czym elementy NAND znajdujące się na poziomach nieparzystych należy narysować jako sumy negacji. Wówczas, pamiętając, że negacja na wyjściu elementu znosi się z negacją na dołączonym do niego wejściu, łatwo napisać funkcję realizowaną przez układ.











    Przy syntezie układu złożonego z elementów NAND, realizującego daną funkcję przełączającą, należy narysować realizację danej funkcji na elementach sumy i iloczynu (rys. a), a następnie zastąpić iloczyny przez negacje iloczynów, a sumy przez sumy negacji , dodając jednocześnie negatory lub zanegowując zmienne wyjściowe, tak aby realizowana funkcja nie uległa zmianie (rys.b). Otrzymany układ jest złożony z elementów NAND. Niekiedy dla ujednolicenia schematu wszystkie elementy NAND rysujemy jako negacje iloczynu (rys. c).












    Realizacja układów kombinacyjnych przy użyciu bloków funkcjonalnych


    Dowolny układ kombinacyjny może być zrealizowany przy użyciu pamięci stałej ROM, w której zapisane są tablice funkcji przełączających opisujących ten układ. Na wejścia adresowe pamięci podane są zmienne wejściowe, a wyjścia pamięci są wyjściami układu. Przy użyciu multipleksera z m-bitowym adresem można zrealizować dowolną funkcję przełączającą m zmiennych. Realizacja funkcji m zmiennych nie wymaga dodatkowych elementów. Używając tylko negatorów można zrealizować również dowolną funkcję m+1 zmiennych.

    Chcąc zrealizować wielowyjściowy układ kombinacyjny, opisany zespołem n funkcji przełączających tych samych zmiennych, trzeba użyć multipleksera komutującego słowa n-bitowe ( lub n multiplekserów 1-bitowych).


    Bibliografia


    [1]W. Majewski: Układy logiczne. Warszawa WNT 1974.
    [2]J. Siwiński: Układy przełączające w automatyce. Warszawa WNT 1980.
    [3]W. Traczyk: Układy cyfrowe automatyki. Warszawa WNT 1974.
    [4]F. Wagner: Projektowanie urządzeń cyfrowych. Warszawa WNT 1978.


    Przykład dodatkowy A - Ogódek


    W pewnym ogródku botanicznym zainstalowano grzałkę, zraszacz, 2 czujniki temperatury (T1,T2) oraz 3 czujniki wody (W1,W2,W3). Zależność między czujnikami temperatury jest taka, że gdy T1 jest włączony - jest zimno. Gdy oba są wyłączone - jest letnio. Gdy oba są włączone jest ciepło, a wypadku, gdy T1 jest włączony, a T2 wyłączony - jest bardzo ciepło.

    Grzałka jest włączona, gdy jest zimno lub letnio, a także, gdy jest ciepło i poziom wody znajduje się powyzej czujnika W2.

    Zraszacz jest włączony, gdy poziom wody znajduje się poniżej czujnika W1, gdy poziom wody znajduje się pomiędzy W1 a W2 i jest bardzo ciepło, a także gdy poziom znajduje się między W2 a W3 i jest bardzo ciepło lub ciepło. W sytuacji, kiedy poziom wody znajduje się powyżej czujnika W3, zraszacz jest wyłączony.

    Legenda bramek użytych na stronie:


  • Optymalizacja po jedynkach jest to dążenie do zapisania funkcji w postaci sumy iloczynów.
  • Optymalizacja po zerach jest to dążenie do zapisania funkcji w postaci iloczynu sum.


    Optymalizacja grzejnika (G):

    Wybieramy optymalizację po jedynkach i zamieniamy ją na bramki nand, gdyż wydaje nam się, że będzie praktyczniejsza.
    Zamiana bramek na jednakowe - na nand

    Optymalizacja po 1:

    G(1) = ~T2 + T1W2

    Optymalizacja po 0:

    G(0) = (W2 + ~T2) (T1 + ~T2)


    Optymalizacja zraszacza (Z):

    Wybieramy optymalizację po jedynkach i zamieniamy ją na bramki nand, gdyż wydaje nam się, że będzie praktyczniejsza.
    Zamiana bramek na jednakowe - na nand

    Optymalizacja po 1:

    Z(1) = ~W1 + (~W2)(~T1)T2 + W2(~W3)T2

    Optymalizacja po 0:

    Z(0) = (~W1 +T2)(~W1 + W2 + ~T1)(~W1 + ~W3)