Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.
1/1
ALU je základním prvkem operační části procesoru a je určená pro vykonávání operací nad strojovými kódy. Základem struktury ALU je většinou paralelní kombinační sčítačka, která je přizpůsobena (pomocí řídících povelů) k vykonávání předem definovaných elementárních aritmetických operací.
V mnoha dnešních procesorech je na jednom procesoru více než jedna ALU, obvykle rozdělené na jednotky pro práci s celočíselnými operandy a jednotky pro práci s operandy v plovoucí řádové čárce (ty se někdy neoznačují jako ALU, ale jako FPU, floating-point unit).
Jednotlivé ALU pracují relativně nezávisle, takže procesor může v jednom hodinovém taktu provést více instrukcí ve více jednotkách současně.
A, B — operandy
F — funkce
R — výsledek (Result)
S — stav výsledku
8bit ALU Texas Instruments SN74AS888
Poloviční sčítačka (angl. Half adder) realizuje sčítaní dvou jednomístných binárních čísel. Vstupem jsou dva jednobitové sčítance (A, B). Výstupem je jednobitový součet (S) a jednobitový příznak přenosu do vyššího řádu (C, z angl. Carry flag).
Poloviční sčítačka odevzdává příznak přenosu do dalšího řádu, sama však nedokáže zpracovat přenos z předcházejícího řádu. Nestačí proto na realizaci vícebitového sčítání.
Booleovský zápis:
\begin{eqnarray} S &=& A \oplus B \\ C &=& A \cdot B \end{eqnarray}
pravdivostní tabulka:
vstup | výstup | ||
---|---|---|---|
A | B | C | S |
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 0 |
Úplná sčítačka je složená ze dvou polovičních sčítaček a hradla OR.
Hradlo OR je navíc možné bez vlivu na funkčnost nahradit hradlem XOR, kombinace vstupů (1, 1), při kterých by se jejich výstup lišil nemůže v případě sčítaní nastat (buď nastane přenos jen v první poloviční sčítačce, nebo jen ve druhé). Na vytvoření úplné sčítačky tak stačí jen 2 typy hradel, což je praktické při jejich realizaci.
Úplná sčítačka (angl. Full adder) realizuje sčítání dvou jednomístných binárních čísel s ohledem na přenos s předcházejícího řádu.
Vstupem jsou tři jednobitové sčítance: A, B, Ci . Výstupem je jednobitový součet (S) a jednobitový příznak přenosu do vyššího řádu (Co).
Booleovský zápis:
\begin{eqnarray} S &=& (A \oplus B) \oplus C_i \\ C_o &=& (A \cdot B) + (C_i \cdot (A \oplus B)) \\ &=& (A \cdot B) + (B \cdot C_i) + (C_i \cdot A) \end{eqnarray}
Pravdivostní tabulka úplné sčítačky:
vstup | výstup | |||
---|---|---|---|---|
A | B | Ci | Co | S |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 0 | 1 |
0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 0 |
1 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
Jedná se v zásadě o jednobitovou sčítačku používanou pro sériové sčítání dvou n-bitových čísel připravených ve vstupních registrech. Na výstupu Si se postupně objevují bity součtu počínaje nejnižším bitem 0 a výstup přenosu Ci-1 se zachycuje na dobu jednoho taktu v klopném obvodu D.
Vznikne spojením několika úplných sčítaček vedle sebe. Je velice jednoduchá, ale má zásadní nevýhodu:
Každá sčítačka musí čekat na korektní příznak přenosu od sčítačky realicující součet nižšího řádu. Je li doba průchodu signálu hradlem T, je pak doba průchodu signálu sčítačkou 2T. Při sčítání dvou 32-bitových čísel by pak sčítání trvalo 64T. To je příliš dlouhá doba.
(sčítačka s predikcí přenosu)
Příznak přenosu v každém řádu lze vypočítat pomocí kombinačního obvodu. Všechny přenosy mezi řády se vypočítají současně v obvodu nazývaném jednotka predikce přenosu (angl. Lookahead Carry Unit — LCU).
Součet je definován takto:
$S = A \oplus B \oplus C_i$
Kromě toho je ještě k dispozici vlastní přenos
$G_i = A_i \cdot B_i$
a tranzitní přenos
$P_i = A_i \oplus B_i$
příznak přenosu lze potom vypočítat jako
$C_{i+1} = P_i \cdot C_i + G_i$
Do rovnic dosadíme za $i$ postupně 0, 1, 2, 3 a dostaneme logické rovnice
pro Ci:
\begin{eqnarray}
C_1 &=& C_0 \cdot P_0 + G_0 \\
C_2 &=& C_1 \cdot P_1 + G_1 = C_0 \cdot P_0 \cdot P_1 + G_0 \cdot P_1 + G_1 \\
C_3 &=& C_2 \cdot P_2 + G_2 = C_0 \cdot P_0 \cdot P_1 \cdot P_2 + G_0 \cdot P_1 \cdot P_2 + G_1 \cdot P_2 + G_2 \\
C_4 &=& C_3 \cdot P_3 + G_3 = C_0 \cdot P_0 \cdot P_1 \cdot P_2 \cdot P_3 + G_0 \cdot P_1 \cdot P_2 \cdot P_3 + G_1 \cdot P_2 \cdot P_3 + G_2 \cdot P_3 + G_3
\end{eqnarray}
Vlastní násobení může být prováděno sekvenčně (postupně), nebo kombinačně v jednom kroku. Používají se postupy, která známe z matematiky ze ZŠ. Jako příklad nám poslouží násobení pod sebou.
$3 \cdot 4 = 12$
0011
0110
---------
0000
0011
0011
0000
---------
0010010
Násobení je v tomto případě realizováno pomocí opakovaného sčítání a bitových posunů
Realizují se zásadně jako operace probíhající v jednom taktu, tedy nikdy jako sekvence.
Vzhledem k tomu, že základní operací je zde cyklický posuv, (rotace), pojmenovává se tento operační blok válcovým posouvačem (barrel shifter). Jeho konstrukce je založena na použití multiplexorů s počtem vstupů, který odpovídá šířce bytového slova. Použijeme-li 4-vstupového multiplexoru, potřebujeme k realizaci 4-bitového válcového posouvače 4 multiplexery. Velikost posunutí je 0 až 3. Toto číslo se v dvojkovém tvaru přivádí na adresové vstupy všech 4-řech multiplexorů.
http://www.root.cz/clanky/aritmeticke-operace-s-hodnotami-ve-formatu-plovouci-radove-carky/
Číslo je rozděleno na mantisu a exponent
\begin{eqnarray}
X+Y &=& (M_X \cdot 10^{E_X-E_Y} + M_Y) \cdot 10^{E_Y}
;\ \mathrm{kde}\ E_X \leq E_Y \\
X-Y &=& (M_X \cdot 10^{E_X-E_Y} - M_Y) \cdot 10^{E_Y}
;\ \mathrm{kde}\ E_X \leq E_Y \\
X \cdot Y &=& (M_X \cdot M_Y) \cdot 10^{E_X+E_Y} \\
\frac{X}{Y} &=& \frac{M_X}{M_Y} \cdot 10^{E_X-E_Y} \\
\end{eqnarray}
Dělení čísel s pohyblivou čárkou a celá řada dalších operací se provádějí iteračními algoritmy. Například výpočet exponenciální funkce leze provést pomocí součtu nekonečné řady na základě Taylorova rozvoje.
$$ e^x=1+{x \over 1!}+{x^2 \over 2!}+ \dots +{x^n \over n!} $$
http://cs.wikipedia.org/wiki/Taylorova_řada
http://cs.wikipedia.org/wiki/Metoda_tečen
Newtonova metoda tečen slouží k nalezení řešení rovnice f(x) = 0 za předpokladu, že známe derivaci funkce $f'(x)$, tedy směrnici tečny.
Dalším nezbytným předpokladem je znalost počáteční hodnoty $x_0$, v jejíž blízkosti hledáme řešení. Pokud se funkce $f(x)$ chová rozumně (je spojitá, hladká a monotónní v intervalu, ve kterém hledáme řešení), lze očekávat řešení v místě, kde tečna sestrojená z bodu $f(x0)$ protíná osu x. (Směrnice této tečny je $f'(x0)$.) Tento průsečík označíme $x_1$ a vypočteme jej podle následujícího vztahu.
$$ x_1 = x_0 - \frac{f(x_0)}{f'(x_0)} $$
Další krok iterace — přiblížení se provede stejným postupem. Potom můžeme psát:
$$ x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)} $$
Jako příklad uvedeme výpočet odmocniny:
\begin{eqnarray} x &=& \sqrt{x} \Rightarrow x^2 - 2 = 0 \\ f(x) &=& x^2 - 2 \\ f'(x) &=& 2x \\ x_{k+1} &=& x - \frac{x^2-2}{2x} = \frac{2x^2-x^2+2}{2x} = \frac{x^2+2}{2x} \end{eqnarray}
odhad: $x_0 = 1$
$x_1 = 1 \cdot 1+{2 \over 2} = 2$
$x_2 = (1.5^2+2)/(2 \cdot 1.5) = 1.4166$
$x_3 = (1.41666^2+2)/(2 \cdot 1.41666)= 1.4142$