ALU - Úvod
Obsah této stránky slouží jako úvod k principu ALU, má pouze informační povahu a není součástí zadání ALU!
Každé CPU vyžaduje ALU neboli Arithmetic Logic Unit. Jedná se o "krabičku", která dokáže různé operace jako například sčítání, odčítání, bitwise operace, atd... V této kapitole se dozvíte, co je vše potřeba v ALU obsáhnout.
ALU musíte postavit do samostatného modulu, který se musí jmenovat přesně ALU
. Jinak nebude možné ALU ohodnotit!
Vstupy ALU
- vstup
A
aB
- n-bitový vstup, záleží kolika bitové děláte ALU CIN
- Carry IN, 1 bitová dodatečná hodnotaSEL
- Nebo takyOpcode
, typicky 4 bitový, rozhoduje kolik vaše ALU umí operací
Výstupy ALU
OUTP
- n-bitový výstup, záleží kolika bitové děláte ALUHOUT
- použito pro násobení, využito pro vyšší polovinu výsledkuZERO
- 1 bitová hodnota, rozhoduje jestli jsou na výstupu samé nulyCOUT
- Carry OUT z operací, 1 bitová hodnotaSIGN
- Znaménko hodnoty výstupu (totožné s nejvyšším bitem hodnoty)GT
,LT
,EQ
- Nepovinně můžeme přidat operace z komparátoru, jde nahradit pomocí odčítání aZERO
aSIGN
výstupy
Aby bylo možné vaše ALU ohodnotit, je potřeba pro tyto dráty dodržet přesně výše uvedené názvy!
UI (uživatelské rozhraní)
Pro uživatelské rozhraní můžete použít například tyhle logisim komponenty.
Komponenty vstupů
Wiring/Pin
- pro 1 bitové hodnotyMemory/Register
- pro n bitové hodnotyInput/Output/Button
- tlačítko pro například operace
Komponenty výstypů
Input/Output/LED
- pro 1 bitové hodnotyWiring/Pin
- pro n bitové hodnotyInput/Output/Hex Digit Display
- pro 4 bitové hodnoty, doporučuji dost přehledné pro výstup
Příkladný main
v projektu ALU může vypadat následovně.
Operace ALU (SEL
)
Bitwise operace
Jednoduché logické gaty pro n-bitové vstupy
NOT
OR
AND
XOR
Shifty
Posune nám hodnotu buď doleva SHL
, nebo doprava SHR
. Pokud by hodnota utekla, tedy například na hodnotu 1000 0000
budeme chtít použít operaci SHL
, tak rozsvítíme COUT
na 1
a OUT
bude 0000 0000
.
SHL
- Shift leftSHR
- Shift right
Příklad SHL
A | OUT | COUT |
---|---|---|
0000 0001 | 0000 0010 | 0 |
1000 0000 | 0000 0000 | 1 |
1011 0111 | 0110 1110 | 1 |
0101 1101 | 1011 1010 | 0 |
Příklad SHR
A | OUT | COUT |
---|---|---|
0000 0001 | 0000 0000 | 1 |
1000 0000 | 0100 0000 | 0 |
1011 0111 | 0101 1011 | 1 |
0101 1101 | 0010 1110 | 1 |
Rotace
Stejné jako shifty, ale při přetečení nastavíme nejmenší hodnotu na 1
. Například máme hodnotu 0000 0001
a použijeme operaci ROTR
, tak nastavíme OUT
na 1000 0000
a označíme COUT
na 1
ROTL
- Rotate leftROTR
- Rotate right
Příklad ROTL
A | OUT | COUT |
---|---|---|
0000 0001 | 0000 0010 | 0 |
1000 0000 | 0000 0001 | 1 |
1011 0111 | 0110 1111 | 1 |
0101 1101 | 1011 1010 | 0 |
Příklad ROTR
A | OUT | COUT |
---|---|---|
0000 0001 | 1000 0000 | 1 |
1000 0000 | 0100 0000 | 0 |
1011 0111 | 1101 1011 | 1 |
0101 1101 | 1010 1110 | 1 |
Sčítačka
Sčítačka by měla být schopna provést více operací, jedná se o následující.
ADD
- sčítáníSUB
- odčítáníINC
- inkrement (A + 1
)DEC
- dekrement (A - 1
)
Násobení
Bonusově můžete dodělat násobení neboli MUL
. Zde se výsledek rozděluje na dva výstupy a to horní část HOUT
a dolní část OUT
.
MUL
- násobení