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:

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:

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:

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:

Przyjrzyjmy się tym obszarom:

Obszar żółty.

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:

Obszar czerwony.

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

Obszar niebieski.

Obszar zależy od X i A.

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

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).

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

 

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:

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:
SN7400

 

SN7404


 

SN7410

 

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

 

 

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.

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



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

©2017 mgr Jerzy Wałaszek

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