Budowa komputera w Logisim cz. 1: Podstawowe bramki logiczne

Wstęp

Tym wpisem rozpoczynam cykl artykułów mających za zadanie wytłumaczyć podstawowe działanie komputera i procesora na przykładzie tworzenia wlasnej architektury CPU.

Zaczynam od kompletnych podstaw, czyli tego co to jest bramka logiczna i jak ona działa.

Następne wpisy będą opierały się na poprzednich, by z elementów podstawowych budować coraz bardziej skomplikowane układy aż do zbudowania prostego komputera w symulatorze Logisim.

Współczesne procesory są oczywiście o wiele bardziej skomplikowane.

Wykorzystywane oprogramowanie:

Do tworzenia wirtualnego komputera będę wykorzystał aplikację Logisim.

Logisim jest narzędziem do budowania i symulowania układów cyfrowych.

Do działania wymaga minimalnie Javy 5. Można go pobrać z tej strony:

https://www.cburch.com/logisim/download.html

lub, jeżeli posiadasz Linuxa, zainstalować z repozytorium:

sudo apt-get install logisim

Parametry budowanego komputera:

  • Procesor:
    • Rejestry ogólnego przeznaczenia:
      • cztery 8-bitowe rejesty (R0 … R3)
    • Rejestry specjalnego przeznaczenia:
      • SP (Stack Pointer) – 16-bitowy rejestr wskaźnika stosu
      • PC (Program Counter) – 16-bitowy rejestr licznika programu
    • Rejestry wewnetrzne:
      • IR (Instruction Register) – 8-bitowy rejestr instrukcji
      • OR (Operand Register) – 8-bitowy rejestr operandu
      • MAR (Memory Address Register) – 16-bitowy rejestr adresu
      • MBR (Memory Buffer Register) – 8-bitowy rejestr pośredni wykorzystywany przy odczycie i zapisie z/do pamięci lub urządzeń wejścia-wyjścia
      • AR – 16-bitowy rejestr składający się z dwóch mniejszych:
        • ARH – 8-bitowy rejestr górnych 8-bitów rejestru AR
        • ARL – 8-bitowy rejestr dolnych 8-bitów rejestru AR
      • SR – 4-bitowy rejestr statusu (wynik ostatniej operacji ALU: Negative, Overflow, Carry, Zero)
    • 8-bitowe ALU obsługujące operacje:
      • A
      • NOT A
      • A ADD B
      • A SUB B
      • A AND  B
      • A OR B
      • A MUL B
      • A DIV B
      • A MOD B
  • Magistrale:
    • 16-bitowa szyna adresowa – umożliwiająca zaadresowanie 64kB pamięci
    • 8-bitowa szyna danych – umożliwiająca jednoczesne przesyłanie 8-bitów danych
  • Pamięć:
    • ROM: 32kB – pamięć programu
    • RAM: 32kB – pamięć tymczasowa
  • Urządzenia I/O:
    • Input:
      • Klawiatura z symulatora Logisim:
        • Port 0x20 – odczyt 8-bitowego statusu (ustawiony zerowy bit oznacza oczekujące dane w buforze)
        • Port 0x21 – odczyt 8-bitowego znaku
      • Zegar 24-bitowy:
        • Port 0x80 – odczyt czasu (ilosc godzin)
        • Port 0x81 – odczyt czasu (ilość minut)
        • Port 0x82 – odczyt czasu (ilość sekund)
    • Output:
      • Terminal z symulatora Logisim (8 wierszy po 32 znaki = pojemność: 256 znaków):
        • Port 0x10 – wyswietlenie 8-bitowego znaku ASCII

Bramka logiczna

Bramka logiczna jest układem elektronicznym, złożonym głównie z tranzystorów, realizującym określoną logiczną funkcję.
Może mieć minimalnie jedno wejście i dokładnie jedno wyjście.

Bramka logiczna NAND

Y = NOT (A AND B)

Bramka NAND (czyli NOT AND – “nie i”) posiada dwa wejscia a na swoim wyjściu ma stan niski tylko i wyłącznie wtedy, gdy oba wejscia posiada w stanie wysokim. W Pozostałych przypadkach ma stan wysoki.

Jest to uniwersjalna bramka logiczna, za pomocą, której można zbudować każdą pozostałą bramkę logiczną przedstawioną w tym wpisie, co pokażę w dalszej części.

Rys. 1. Schemat i symulacja bramki NAND

 

Tab. 1. Tabela prawdy bramki NAND

 

Bramka logiczna NOT

Y = NOT A

Działanie bramki NOT (czyli po polsku “Nie”)  polega na tym, że zawsze na wyjściu ma stan przeciwny do stanu wejściowego, czyli np., gdy na wejściu jest stan niski (0) to na wyjściu jest stan wysoki(1).

Rys. 2.1 Schemat i symulacja bramki NOT

 

Tab. 2. Tabela prawdy bramki NOT

 

Bramkę NOT można zbudować używając jedynie jednej bramki NAND:

Rys. 2.2. Bramka NOT zbudowana z bramki NAND

 

Bramka logiczna AND

Y = A AND B

Bramka AND (czyli po polsku “i”) posiada stan wysoki na wyjściu tylko tylko wtedy, gdy jedno “i” drugie wejście jest w stanie wysokim.

Rys. 3.1. Schemat i symulacja bramki AND

 

Tab. 3. Tabela prawdy bramki AND

 

Używając dwóch bramek NAND mozna zbudować bramkę AND:

Rys. 3.2. Bramka AND zbudowana z bramek NAND

 

Bramka logiczna OR

Y = A OR B

Bramka OR (czyli po polsku “lub”) posiada stan wysoki na wyjściu, gdy pierwsze “lub” drugie wejscie (lub oba wejscia) posiada stan wysoki.

 

Rys. 4.1. Schemat i symulacja bramki OR

 

Tab. 4. Tabela prawdy bramki OR

 

Używając trzech bramek NAND mozna zbudować bramkę OR:

Rys. 4.2. Bramka OR zbudowana z bramek NAND

 

Bramka logiczna NOR

Y = NOT (A OR B)

Bramka NOR (czyli NOT OR – “nie lub”) działa podobnie do bramki OR, z tym wyjątkiem, że stan wyjścia tej bramki jest zanegowany (czyli tak jakby do bramki OR do wyjscia dodać bramkę NOT).

Rys. 5.1. Schemat i symulacja bramki NOR

Tab. 5. Tabela prawdy bramki NOR

 

Używając czterech bramek NAND mozna zbudować bramkę NOR:

Rys. 5.2. Bramka NOR zbudowana z bramek NAND

 

Bramka logiczna XOR

Y = A XOR B

Działanie bramki XOR (Exclusive OR / Alternatywa wykluczająca) jest podobne do bramki OR, z tym wyjątkiem, że, gdy dwa wejscia są w stanie wysokim to wyjście jest w stanie niskim.

Stan wyjścia tej bramki będzie wysoki tylko wtedy, gdy albo pierwsze wejścia albo drugie wejscie bedzie w stanie wysokim, nigdy, gdy oba.

Rys. 6.1. Schemat i symulacja bramki XOR

Tab. 6. Tabela prawdy bramki XOR

 

Bramkę XOR można także zbudować z bramek AND, OR, NOT:

Rys. 6.2. Bramka XOR zbudowana z bramek NOT, AND i OR

 

Używając pięciu bramek NAND mozna zbudować bramkę XOR:

Rys. 6.3. Bramka XOR zbudowana z bramek NAND

 

Bramka logiczna XNOR

Y = A XNOR B = NOT(A XOR B)

Podobnie jak w poprzednich przypadkach, bramka XNOR działa tak samo jak bramka XOR, z tym wyjątkiem, że jej wyjście jest zanegowane (czyli tak jakby do bramki XOR dodać na wyjściu bramkę NOT)

Rys. 7.1. Schemat i symulacja bramki XNOR

 

Tab. 7. Tabela prawdy bramki XNOR

 

Używając pięciu bramek NAND mozna zbudować bramkę XNOR:

Rys. 7.2. Bramka XNOR zbudowana z bramek NAND

 

Co będzie dalej?

W nastepnym wpisie, za pomocą bramek logicznych, zbudujemy układ umożliwiający dodawanie (i odejmowanie) do siebie dwóch liczb 8-bitowych.