Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
informatyka:podstawy-dzialania-komputera:jednostka_arytmetyczno-logiczna [2024/05/11 17:37] – kawcix | informatyka:podstawy-dzialania-komputera:jednostka_arytmetyczno-logiczna [2024/05/11 23:21] (current) – kawcix | ||
---|---|---|---|
Line 13: | Line 13: | ||
===== Historia: Architektura von Neumanna ===== | ===== Historia: Architektura von Neumanna ===== | ||
+ | |||
+ | Matematyk John von Neumann zaproponował model ALU w 1945 roku, kiedy to sporządził spis założeń dla nowego komputera EDVAC (z ang. Electronic Discrete Variable Automatic Computer, czyli elektroniczny komputer maszynowy o zmiennych nieciągłych). Później w 1946 r. pracował ze swoimi kolegami nad stworzeniem komputera dla Princeton Institute of Advanced Studies (IAS). Komputer IAS stał się prototypem dla wielu późniejszych komputerów. W swoim projekcie von Neumann nakreślił, | ||
+ | |||
+ | Von Neumann stwierdził, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== Przykład " | ||
+ | |||
+ | (wzięty z https:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Mamy w nim w sumie 8 wejść. | ||
+ | |||
+ | X i Y które są naszymi liczbami. W zależności od implementacji mogą być one np 16 bitowe każda. (ja jeśli zbuduje to w aplikacji logisim zrobię po prostu tak że są 1 bitowe ( co nie ma sensu przy dodawaniu bo 1 + 1 da mi 0, bo odrzucamy carry ale tak dla prostoty) | ||
+ | |||
+ | Mamy 6 bitów sterujących: | ||
+ | |||
+ | **zx** - zero x (zeruje nam x) | ||
+ | |||
+ | **nx** - negate x ( neguje nam x) | ||
+ | |||
+ | **zy** - zero y (zeruje nam y) | ||
+ | |||
+ | **ny** - negate y ( neguje nam y) | ||
+ | |||
+ | **f** - wybiera nam operację dodawania x + y (również odejmowania, | ||
+ | |||
+ | **no** - negate output ( neguje nam wyjście) | ||
+ | |||
+ | Aby zrozumieć implementację, | ||
+ | |||
+ | najpierw wybór możliwośći wyzerowania wejść | ||
+ | |||
+ | input false zawsze ma wartość 0 bo to pomiędzy nią, a jednym inputem wybieramy. Jeśli input to 0 i wyzerujemy go - to dalej zero | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Następnie kolejnym multiplekserem wybieramy czy " | ||
+ | |||
+ | {{: | ||
+ | |||
+ | wykonujemy operacje and i dodawanie half adderem ( [[informatyka: | ||
+ | |||
+ | Multiplekserem z pomocą f znowu wybieramy jaka operacja ma pojawić się na wyjściu | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Następnie możliwość zanegowania wyjścia już po wykonaniu wszystkich operacji | ||
+ | |||
+ | {{: | ||
+ | |||
+ | implementacja tego ALU z 16 bitowymi wejściami W HDL | ||
+ | |||
+ | https:// | ||
+ | |||
+ | < | ||
+ | |||
+ | CHIP ALU { | ||
+ | WEJŚCIE | ||
+ | x[16], y[16], | ||
+ | zx, // Czy wyzerować wejście x? | ||
+ | nx, // Czy zanegować wejście x? | ||
+ | zy, // Czy wyzerować wejście y? | ||
+ | ny, // Czy zanegować wejście y? | ||
+ | f, // Czy wykonać dodawanie (1) czy operację AND (0)? | ||
+ | no; // Czy zanegować wyjście? | ||
+ | |||
+ | WYJŚCIE | ||
+ | out[16], // Wynik operacji, 16 bitów | ||
+ | |||
+ | |||
+ | CZĘŚCI: | ||
+ | // Zerowanie wejścia | ||
+ | Mux16(a=x, b=false, sel=zx, out=x1); | ||
+ | Mux16(a=y, b=false, sel=zy, out=y1); | ||
+ | |||
+ | // Negacja wejścia | ||
+ | Not16(in=x1, | ||
+ | Mux16(a=x1, b=nx1, sel=nx, out=x2); | ||
+ | Not16(in=y1, | ||
+ | Mux16(a=y1, b=ny1, sel=ny, out=y2); | ||
+ | |||
+ | // Wykonywanie funkcji | ||
+ | And16(a=x2, b=y2, out=aAndB); | ||
+ | Add16(a=x2, b=y2, out=aPlusB); | ||
+ | Mux16(a=aAndB, | ||
+ | |||
+ | // Negacja wyjścia | ||
+ | Not16(in=out0, | ||
+ | Mux16(a=out0, | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | </ | ||