Technika cyfrowa, robotyka - bramka programowana, jednostka arytmetyczno-logiczna procesora

Na tych zajęciach dowiemy się jak projektować i testować proste sieci logiczne. Jako ćwiczenie zaprojektujemy tzw. bramkę programowaną. Będzie to sieć logiczna, która realizuje funkcję AND lub OR w zależności od sygnału sterującego:

obrazek

Jeśli sygnał X ma stan logiczny 0, to na wyjściu Y pojawia się wartość funkcji A OR B. Gdy sygnał X przyjmie wartość 1, to na wyjściu Y pojawi się wartość funkcji A AND B. Wejście X służy zatem do programowania funkcji spełnianej przez bramkę.

Projektowanie bramki zaczniemy od określenia funkcji logicznej wyjścia Y w zależności od stanu wejść A, B i X. W tym celu posłużymy się metodą tablic Karnaugha. Metodę tę dobrze jest opanować, ponieważ jest prosta i uniwersalna.

 

Mamy trzy sygnały wejściowe: A, B i X. Mamy jeden sygnał wyjściowy Y, który jest funkcją logiczną tych trzech sygnałów wejściowych. Układamy tablicę Karnaugha, która jest jakby mapą funkcji Y dla współrzędnych A, B i X. Współrzędne A i B będą po lewej stronie w pionie tabelki. Współrzędna X będzie u góry w poziomie tabelki:

obrazek

Tablica ma cztery wiersze, ponieważ para współrzędnych A i B przyjmuje 4 różne kombinacje wartości. Kombinacje te zapisujemy na początku każdego wiersza w kodzie Gray'a, który przerabialiśmy na zajęciach koła. Ma on tę cechę, że każdy kolejny wyraz różni się od poprzedniego tylko jednym bitem. Jest to prawdziwe również dla pierwszego i ostatniego wiersza.

Kolumn jest tylko dwie, ponieważ sygnał X może przyjmować tylko dwie wartości.

W kolejnych kratkach wpisujemy pożądaną wartość logiczną wyjścia Y dla sygnałów wejściowych, które są współrzędnymi kratki. I tak otrzymujemy:

obrazek

Zauważ, że w pierwszej kolumnie tablicy mamy wartości funkcji A OR B (dla X = 0), a w drugiej kolumnie mamy wartości funkcji A AND B (dla X = 1). Teraz łączymy ze sobą komórki tablicy o wartościach 1, tak aby otrzymać jak największe obszary o wymiarach będących potęgami liczby 2 (1,2,4,8...). W naszym przypadku są takie trzy obszary:

obrazek

Przyjrzyjmy się tym obszarom:

Obszar żółty.

obrazek

Zależy od współrzędnej B oraz X. Współrzędna A nie wpływa na wartość funkcji Y w tym obszarze, ponieważ zmienia swoją wartość (nie jest w obszarze stała). Pozostają nam zatem współrzędne B i X. Jednakże współrzędna X ma wartość 0, dlatego bierzemy jej negację i wykonujemy iloczyn logiczny ze współrzędną B. Otrzymamy funkcję dla obszaru żółtego:

obrazek

Obszar czerwony.

obrazek

Tutaj obszar czerwony nie zależy od wartości X (ponieważ się zmienia), lecz tylko od A i B.

obrazek

Obszar niebieski.

obrazek

Obszar zależy od X i A.

obrazek

Cała funkcja logiczna Y jest sumą logiczną funkcji poszczególnych obszarów:

obrazek

Taka postać funkcji, chociaż zupełnie poprawna, nie jest dla nas jeszcze dobra. Sieć logiczną chcielibyśmy zbudować z bramek standardowych NAND oraz NOT. Musimy zatem przekształcić ten wzór za pomocą rachunku algebry Boole'a. W tym celu dokonujemy podwójnego zaprzeczenia całej funkcji Y (podwójne zaprzeczenie nie zmienia wartości logicznej).

obrazek

Teraz wykorzystujemy prawa de Morgana, które mówią, że zaprzeczenie sumy logicznej jest równoważne iloczynowi zaprzeczeń:

obrazek

 

Zwróć uwagę, że otrzymaliśmy same funkcje NAND oraz NOT. Zanim zabierzemy się do konstruowania tej sieci, napiszmy prosty program w języku C++, który zasymuluje nam funkcję Y i pozwoli sprawdzić poprawność jej wyprowadzenia.

// Test sieci logicznej
// Koło informatyczne w I LO w Tarnowie
// (C)2014 mgr Jerzy Wałaszek
// 04.04.2014
//-------------------------------------

#include <iostream>

using namespace std;

int gray[][2] = {{0,0},{0,1},{1,1},{1,0}};  // Tablica kodu Graya

int NAND2(int a, int b)
{
    return (a & b) ^ 1;
}

int NAND3(int a, int b, int c)
{
    return (a & b & c) ^ 1;
}

int main()
{
    int A,B,X,i;
    for(i = 0; i < 4; i++)
    {
      A = gray[i][0];
      B = gray[i][1];
      for(X = 0; X <= 1; X++)
        cout << NAND3(NAND2(B,!X), NAND2(A,B), NAND2(A,!X)) << " ";
      cout << endl;
    }
    return 0;
}
0 0
1 0
1 1
1 0

 

Otrzymaliśmy wynik zgodny z zawartością tablicy Karnaugha, czyli funkcja jest wyprowadzona dobrze. Teraz zaprojektujemy sieć logiczną. Będzie się ona składała z 1 bramki NOT do odwrócenia sygnału X, trzech bramek NAND 2 wejściowych oraz jednej bramki NAND 3 wejściowej:

obrazek

W każdym mikroprocesorze znajduje się tzw. jednostka arytmetyczno-logiczna (ang. ALU – Arithmetic Logic Unit), której zadanie polega na wykonywaniu różnych operacji logicznych i arytmetycznych. Nasza bramka programowana jest prymitywną kuzynką takiej jednostki. Działanie obu jest bardzo podobne. Na wejścia ALU mikroprocesor przesyła dane (u nas są to wejścia A i B), następnie odpowiednio programuje operację ALU (u nas do tego celu służy sygnał X) i odczytuje z jej wyjścia wyniki (u nas jest to wyjście Y). Dzięki temu może on wykonywać różne operacje logiczne i arytmetyczne. Jak widzisz, wszystko opiera się na odpowiednio zaprojektowanych sieciach logicznych (ta w mikroprocesorze składa się nie z pięciu, lecz z tysięcy bramek).

Ćwiczenie

Zbudujemy bramkę programowaną. Układ aplikacyjny będzie następujący:
obrazek SN7400
obrazek
 

SN7404

obrazek
 

SN7410

obrazek

 

Inwertery na wejściu mają za zadanie odwrócić funkcje logiczne przycisków, tak aby przy ich naciśnięciu na wejścia bramki programowanej były podawane stany wysokie (odpowiednie diody A, B i X będą się zapalały).

 

Spis elementów:

 

Element Ilość Opis
zasilacz 5V 1 do zasilania elementów elektronicznych
płytka stykowa + kable 1 do montażu elementów elektronicznych
SN7400 1 4 bramki NAND
SN7404 1 6 bramek NOT (inwerterów)
SN7410 1 3 bramki NAND trójwejściowe
opornik 1kΩ/0,125W 3 –(                )–  do podłączania wejść bramek do +5V
opornik 120Ω/0,125W 4 –(                )–  do ograniczania napięcia i prądu diody LED
czerwona dioda LED 4 do sygnalizacji stanu wysokiego na wyjściu Q przerzutnika
mikroprzełącznik 3 do zmiany stanu logicznego wejść A, B i X

 

obrazek

 

Jeśli przycisk X (po lewej stronie u dołu) nie jest naciśnięty, to bramka pełni funkcję OR. Naciśnięcie dowolnego z przycisków A/B powoduje zaświecenie diody Y. Gdy przycisk X jest naciśnięty, to bramka pełni funkcję AND. Teraz zapalenie diody Y wymaga jednoczesnego naciśnięcia obu przycisków A i B.

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2024 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe