ALU - Sčítačka/odčítačka

Sčítačka je podstatná část ALU. Po určitých úpravách z ní můžeme udělat dokonce i odčítačku. Začneme jednoduše, a to s jedno bitovou verzí.

Half-adder (1 bit adder)

Pravdivostní tabulka pro half-adder vypadá následovně.

ABOUTCOUT
0000
0110
1010
1101

Pomocí karnaughovy mapy nebo i logiky (odkoukání) můžeme zjistit, že sčítání (OUT) je vlastně XOR a COUT je jenom AND. Takže half-adder vypadá následovně.

Full-adder

Full-adder využívá half adder a pomocí něj přijímá další argument a to CIN, neboli carry in.

Pravdivostní tabulka pro full-adder vypadá následovně.

CINABOUTCOUT
00000
00110
01010
01101
10010
10101
11001
11111

Jediné, co tedy uděláme je, že přidáme half-adder 2 krát, jeden na A+B a druhý na výsledek z prvního X a CIN, neboli X+CIN.

COUT half-adderů by se měly sčítat, ale jelikož nemůže nastat případ, kdy jsou oba dva COUT 1, tak nám stačí OR. Taky se nemusíme bát přetečení, jelikož při sčítání 3 bitů se hodnota vždy vejde do 2 bitů (maximální hodnota je 3).

Odčítačka

Pro pochopení odčítačky si musíme říct, co jsou to záporná čísla. Záporná čísla můžeme v binárce vyjadřovat mnoho způsoby, ale nejčastější je dvojkový doplněk.

Dvojkový doplněk (two's complement)

Když pracujeme s n-bitovými čísly, tak pracujeme s tělesem \(Z_{2^n}^+\). Chceme vytvořit taková pravidla, že budeme moct pomocí sčítání odčítat.

  • Pro každé kladné \(b^+\) musí existovat takové \(b^-\), aby platitlo \(a-b^+ = a + (-b^+) = a + b^-\).
  • Taky musí platit \(b^+ + b^- = 0\)

Potřebujeme tedy najít aditivní inverzi

\(b^- = 2^n - b^+ = (2^n - 1) - b^+ + 1\)

\((2^n - 1)\) je řetězec samých jedniček a odečtením od takové hodnoty nikdy nenastane žádný přenos a odečtená hodnota se touto operací jednoduše zneguje. Dostáváme tedy pravidlo pro výpočet opačného čísla a to: \(b^- = \overline{b^+} + 1\)

Rozdělíme tak těleso na dvě poloviny na zápornou a nezápornou. Viz. obrázek

Zkráceně dvojkový doplněk spočívá ve vyhrazení prvního bitu pro znaménko. 1 znamená - a 0 znamená + s tím, že jsou u negativních čísel znegované bity a poté přičtena 1. Pochopíte z následného příkladu.

Dvojková soustavaDecimální soustava
0000
0011
0102
0113
100-4
101-3
110-2
111-1

Jeho hlavní výhoda spočívá v odčítání, jelikož pomocí tohoto znázornění platí následující: \(A-B = A + \overline{B} + 1\)

Tuto funkcionalitu tedy neimplementujeme nějak zvlášť, ale pomocí sčítačky, kde nastavíme CIN na 1 a znegujeme vstup B.