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 18:20] – kawcix | informatyka:podstawy-dzialania-komputera:jednostka_arytmetyczno-logiczna [2024/05/11 23:21] (current) – kawcix | ||
---|---|---|---|
Line 46: | Line 46: | ||
Aby zrozumieć implementację, | 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, | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | </ | ||