Aritmetická logická jednotka - Arithmetic logic unit

Symbolická reprezentace ALU a jejích vstupních a výstupních signálů, označená šipkami směřujícími do nebo z ALU. Každá šipka představuje jeden nebo více signálů. Řídicí signály vstupují zleva a stavové signály vystupují zprava; toky dat shora dolů.

Ve výpočtech je aritmetická logická jednotka (ALU) kombinační digitální obvod, který provádí aritmetické a bitové operace na celočíselných binárních číslech . To je na rozdíl od jednotky s plovoucí desetinnou čárkou (FPU), která pracuje s čísly s plovoucí desetinnou čárkou . Je základním stavebním kamenem mnoha typů výpočetních obvodů, včetně centrální procesorové jednotky (CPU) počítačů, FPU a grafických procesorových jednotek (GPU).

Vstupy do ALU jsou data, která mají být provozována, nazývaná operandy , a kód označující operaci, která má být provedena; výstup ALU je výsledkem provedené operace. V mnoha provedeních má ALU také stavové vstupy nebo výstupy nebo obojí, které přenášejí informace o předchozí operaci, respektive aktuální operaci, mezi ALU a externími stavovými registry .

Signály

ALU má řadu vstupních a výstupních sítí , což jsou elektrické vodiče používané k přenosu digitálních signálů mezi ALU a vnějšími obvody. Když ALU pracuje, externí obvody aplikují signály na vstupy ALU a v reakci na to ALU produkuje a přenáší signály do externích obvodů prostřednictvím svých výstupů.

Data

Základní ALU má tři paralelní datové sběrnice skládající se ze dvou vstupních operandů ( A a B ) a výsledného výstupu ( Y ). Každá datová sběrnice je skupina signálů, které přenášejí jedno binární celé číslo. Typicky jsou šířky sběrnic A, B a Y (počet signálů zahrnujících každou sběrnici) identické a odpovídají velikosti nativního slova externích obvodů (např. Zapouzdřující CPU nebo jiný procesor).

Operační kód

Operační kód vstup je paralelní autobus, který sděluje ALU je i volba kódem operace, což je výčtu hodnota , která určuje požadovanou aritmetické nebo logické operace, které mají být provedeny podle ALU. Velikost operačního kódu (jeho šířka sběrnice) určuje maximální počet různých operací, které může ALU provádět; například čtyřbitový operační kód může specifikovat až šestnáct různých operací ALU. Obecně operační kód ALU není stejný jako operační kód strojového jazyka , i když v některých případech může být přímo kódován jako bitové pole v operačním kódu strojového jazyka.

Postavení

Výstupy

Stavové výstupy jsou různé jednotlivé signály, které přenášejí doplňující informace o výsledku aktuální operace ALU. Univerzální ALU mají obvykle stavové signály, jako například:

  • Provedení , které zprostředkuje přenos , který je výsledkem operace sčítání, výpůjčka, která je výsledkem operace odčítání, nebo bit přetečení, který je výsledkem operace binárního posunu.
  • Nula , která označuje, že všechny bity Y jsou logické nula.
  • Negativní , což znamená, že výsledek aritmetické operace je negativní.
  • Přetečení , které označuje, že výsledek aritmetické operace překročil číselný rozsah Y.
  • Parita , která označuje, zda sudý nebo lichý počet bitů v Y je logický.

Po dokončení každé operace ALU se stavové výstupní signály obvykle ukládají do externích registrů, aby byly k dispozici pro budoucí operace ALU (např. Pro implementaci aritmetiky s více přesnostmi ) nebo pro řízení podmíněného větvení . Kolekce bitových registrů, které ukládají stavové výstupy, se často považuje za jeden vícebitový registr, který se označuje jako „stavový registr“ nebo „registr stavového kódu“.

Vstupy

Stavové vstupy umožňují ALU zpřístupnit další informace při provádění operace. Obvykle se jedná o jeden bit „carry-in“, který je uloženým provedením z předchozí operace ALU.

Obvodový provoz

Kombinační logické obvody na 74.181 integrovaného obvodu, který je jednoduchý čtyři-bit ALU

ALU je kombinační logický obvod, což znamená, že jeho výstupy se budou asynchronně měnit v reakci na změny vstupu. V normálním provozu jsou stabilní signály aplikovány na všechny vstupy ALU a když uplynula dostatečná doba (známá jako „ zpoždění šíření “), aby se signály mohly šířit přes obvody ALU, objeví se na ALU výsledek operace ALU výstupy. Externí obvody připojené k ALU jsou odpovědné za zajištění stability vstupních signálů ALU po celou dobu provozu a za poskytnutí dostatečného času pro šíření signálů přes ALU před vzorkováním výsledku ALU.

Obecně platí, že externí obvody řídí ALU aplikací signálů na jeho vstupy. Externí obvody typicky používají sekvenční logiku pro řízení ALU provozu, který je stimulován hodinovým signálem dostatečně nízké frekvence, aby zajistil dostatek času na to, aby se výstupy ALU usadily za nejhorších podmínek.

Například CPU zahájí operaci přidání ALU směrováním operandů ze svých zdrojů (což jsou obvykle registry) na vstupy operandu ALU, zatímco řídicí jednotka současně aplikuje hodnotu na vstup opcode ALU a nakonfiguruje jej tak, aby provedl přidání. Současně CPU také směruje výstup výsledku ALU do cílového registru, který obdrží součet. Vstupní signály ALU, které jsou udržovány stabilní až do dalších hodin, se mohou šířit přes ALU a do cílového registru, zatímco CPU čeká na další hodiny. Když dorazí další hodiny, cílový registr uloží výsledek ALU a protože operace ALU byla dokončena, vstupy ALU mohou být nastaveny pro další operaci ALU.

Funkce

ALU obvykle podporuje řadu základních aritmetických a bitových logických funkcí. Základní, univerzální ALU obvykle zahrnují tyto operace do svých repertoárů:

Aritmetické operace

  • Přidat : A a B se sečtou a součet se objeví na Y a provedení.
  • Přidat s carry : A, B a carry-in jsou sečteny a součet se objeví na Y a carry-out.
  • Odečíst : B se odečte od A (nebo naopak) a rozdíl se objeví na Y a provedení. U této funkce je provádění ve skutečnosti indikátorem „vypůjčení“. Tuto operaci lze také použít k porovnání velikostí A a B; v takových případech může být výstup Y ignorován procesorem, který se zajímá pouze o stavové bity (zejména nulové a záporné), které jsou výsledkem operace.
  • Odečíst s výpůjčkou : B se odečte od A (nebo naopak) s výpůjčkou (carry-in) a rozdíl se objeví u Y a carry-out (výpůjčka).
  • Dvojkový doplněk (negát) : A (nebo B) se odečte od nuly a rozdíl se objeví na Y.
  • Přírůstek : A (nebo B) se zvýší o jednu a výsledná hodnota se zobrazí na Y.
  • Snížení : A (nebo B) se sníží o jednu a výsledná hodnota se objeví na Y.
  • Projít : všechny bity A (nebo B) se na Y objeví beze změny. Tato operace se obvykle používá k určení parity operandu nebo k tomu, zda je nulový nebo záporný, nebo k načtení operandu do registru procesoru.

Bitové logické operace

  • AND : bitové AND A a B se objeví na Y.
  • NEBO : bitové OR A a B se objeví na Y.
  • Exkluzivní OR : bitové XOR A a B se objeví na Y.
  • Jeden doplněk : všechny bity A (nebo B) jsou obrácené a objevují se na Y.

Operace bitového posunu

Příklady posunu bitů pro osmibitovou ALU
Typ Vlevo, odjet Že jo
Aritmetický posun Logicky otočit doleva.svg Otočit doprava aritmeticky.svg
Logický posun Logicky otočit doleva.svg Logicky otočit doprava.svg
Točit se Otočit doleva.svg Otočit doprava.svg
Otočit přes přenášení Otočit doleva přes carry.svg Otočte doprava skrz carry.svg

Operace posunu ALU způsobí, že se operand A (nebo B) posune doleva nebo doprava (v závislosti na operačním kódu) a posunutý operand se objeví na Y. Jednoduché ALU mohou obvykle operand posunout pouze o jednu bitovou pozici, zatímco složitější ALU používají posunovače barelu, které umožnit jim posunout operand o libovolný počet bitů v jedné operaci. Ve všech jednobitových operacích posunu se bit posunutý z operandu objeví při provedení; hodnota bitu posunutého do operandu závisí na typu posunu.

  • Aritmetický posun : s operandem se zachází jako scelým číslem komplementu dvou , což znamená, že nejvýznamnějším bitem je bit „znaménko“ a je zachován.
  • Logický posun : logická nula je posunuta do operandu. Používá se k posunutí celých čísel bez znaménka.
  • Otočit : s operandem se zachází jako s kruhovou vyrovnávací pamětí bitů, takže jeho nejmenší a nejvýznamnější bity skutečně sousedí.
  • Rotace skrz carry : s carry bitem a operandem se zachází jako s kruhovou vyrovnávací pamětí bitů.

Aplikace

Aritmetika s větší přesností

V celočíselných aritmetických výpočtech je aritmetika s větší přesností algoritmus, který pracuje na celých číslech, která jsou větší než velikost slova ALU. K tomu algoritmus považuje každý operand za uspořádanou kolekci fragmentů velikosti ALU, uspořádaných od nejvýznamnějších (MS) po nejméně významné (LS) nebo naopak. Například v případě 8bitové ALU 0x123456by se 24bitové celé číslo považovalo za kolekci tří 8bitových fragmentů: 0x12(MS) 0x34a 0x56(LS). Vzhledem k tomu, že velikost fragmentu přesně odpovídá velikosti slova ALU, může ALU přímo pracovat s tímto „kusem“ operandu.

Algoritmus používá ALU k přímé operaci na konkrétních fragmentech operandů a tím ke generování odpovídajícího fragmentu („částečného“) výsledku s vysokou přesností. Každá část, je-li vygenerována, je zapsána do přidružené oblasti úložiště, která byla určena pro výsledek vícenásobné přesnosti. Tento proces se opakuje pro všechny fragmenty operandů, aby se vygenerovala úplná sbírka částečných částí, což je výsledek operace vícenásobné přesnosti.

V aritmetických operacích (např. Sčítání, odčítání) začíná algoritmus vyvoláním operace ALU na fragmentech LS operandů, čímž se vytvoří jak LS částečný, tak bit pro provedení. Algoritmus zapisuje dílčí část do určeného úložiště, zatímco stavový stroj procesoru obvykle ukládá prováděcí bit do stavového registru ALU. Algoritmus poté postoupí k dalšímu fragmentu sbírky každého operandu a vyvolá operaci ALU na těchto fragmentech spolu s uloženým bitem carry z předchozí operace ALU, čímž vznikne další (významnější) dílčí a bit carry. Stejně jako dříve je nosný bit uložen do stavového registru a částečný je zapsán do určeného úložiště. Tento proces se opakuje, dokud nebudou zpracovány všechny fragmenty operandů, což má za následek úplnou kolekci částeček v úložišti, které obsahují aritmetický výsledek s vysokou přesností.

V operacích posunu s více přesností závisí pořadí zpracování fragmentu operandu na směru posunu. V operacích levého posunu jsou fragmenty nejprve zpracovány LS, protože bit LS každého dílčího - který je přenášen prostřednictvím uloženého nosného bitu - musí být získán z MS bitu dříve levého posunutého méně významného operandu. Naopak, operandy se zpracovávají MS nejprve v operacích posunu doprava, protože bit MS každé části musí být získán z bitu LS dříve významného operandu posunutého doprava.

V bitových logických operacích (např. Logické AND, logické OR) mohou být fragmenty operandu zpracovány v libovolném pořadí, protože každá část závisí pouze na odpovídajících fragmentech operandu (uložený bit bitů z předchozí operace ALU je ignorován).

Složité operace

Ačkoli lze ALU navrhnout tak, aby vykonávala složité funkce, výsledná vyšší složitost obvodu, cena, spotřeba energie a větší velikost to v mnoha případech činí nepraktickými. V důsledku toho jsou ALU často omezeny na jednoduché funkce, které lze provádět při velmi vysokých rychlostech (tj. Velmi krátká prodleva šíření), a obvody externího procesoru jsou odpovědné za provádění složitých funkcí pomocí orchestrace sekvence jednodušších operací ALU.

Například výpočet druhé odmocniny čísla může být implementován různými způsoby, v závislosti na složitosti ALU:

  • Výpočet za jediné hodiny : velmi složitá ALU, která vypočítá druhou odmocninu v jedné operaci.
  • Výpočetní potrubí : skupina jednoduchých ALU, která vypočítává druhou odmocninu po etapách, přičemž mezivýsledky procházející ALU jsou uspořádány jako tovární výrobní linka . Tento obvod může přijímat nové operandy před dokončením předchozích a produkuje výsledky tak rychle jako velmi složitá ALU, i když výsledky jsou zpožděny o součet zpoždění šíření fází ALU. Další informace najdete v článku o pipeline kanálu instrukcí .
  • Iterativní výpočet : jednoduchá ALU, která vypočítá druhou odmocninu v několika krocích ve směru řídicí jednotky .

Implementace výše přecházejí z nejrychlejších a nejdražších na nejpomalejší a nejméně nákladné. Druhá odmocnina se počítá ve všech případech, ale procesorům s jednoduchými ALU bude výpočet trvat déle, protože musí být provedeno více operací ALU.

Implementace

ALU je obvykle implementována buď jako samostatný integrovaný obvod (IC), jako je 74181 , nebo jako součást složitějšího IC. V druhém případě je ALU obvykle vytvořena instancí syntetizací z popisu napsaného ve VHDL , Verilogu nebo jiném jazyce popisu hardwaru . Například následující kód VHDL popisuje velmi jednoduchou 8bitovou ALU:

entity alu is
port (  -- the alu connections to external circuitry:
  A  : in signed(7 downto 0);   -- operand A
  B  : in signed(7 downto 0);   -- operand B
  OP : in unsigned(2 downto 0); -- opcode
  Y  : out signed(7 downto 0));  -- operation result
end alu;

architecture behavioral of alu is
begin
 case OP is  -- decode the opcode and perform the operation:
 when "000" =>  Y <= A + B;   -- add
 when "001" =>  Y <= A - B;   -- subtract
 when "010" =>  Y <= A - 1;   -- decrement
 when "011" =>  Y <= A + 1;   -- increment
 when "100" =>  Y <= not A;   -- 1's complement
 when "101" =>  Y <= A and B; -- bitwise AND
 when "110" =>  Y <= A or B;  -- bitwise OR
 when "111" =>  Y <= A xor B; -- bitwise XOR
 when others => Y <= (others => 'X');
 end case; 
end behavioral;

Dějiny

Matematik John von Neumann navrhl koncept ALU v roce 1945 ve zprávě o základech nového počítače s názvem EDVAC .

Cena, velikost a spotřeba energie elektronických obvodů byla v počátcích informačního věku relativně vysoká . V důsledku toho všechny sériové počítače a mnoho starších počítačů, jako je PDP-8 , měly jednoduchou ALU, která fungovala na jednom datovém bitu najednou, ačkoli programátorům často představovaly širší velikost slova. Jedním z prvních počítačů, které měly více diskrétních jednobitových obvodů ALU, byl Whirlwind I z roku 1948 , který používal šestnáct takových „matematických jednotek“, které mu umožňovaly pracovat na 16bitových slovech.

V roce 1967 společnost Fairchild představila první ALU implementovanou jako integrovaný obvod, Fairchild 3800, skládající se z osmibitové ALU s akumulátorem. Brzy se objevily další ALU s integrovaným obvodem, včetně čtyřbitových ALU, jako jsou Am2901 a 74181 . Tato zařízení byla typicky schopná „ bitového řezu “, což znamená, že měla signály „carry look ahead“, které usnadnily použití více vzájemně propojených ALU čipů k vytvoření ALU se širší velikostí slova. Tato zařízení se rychle stala populární a byla široce používána v minipočítačích s bitovými řezy.

Mikroprocesory se začaly objevovat na začátku 70. let. I když se tranzistory zmenšily, často nebyl dostatečný prostor pro matrice pro ALU na šířku celého slova a v důsledku toho některé časné mikroprocesory používaly úzkou ALU, která vyžadovala více cyklů na výuku strojového jazyka. Mezi příklady patří populární Zilog Z80 , který provedl osmibitové sčítání se čtyřbitovým ALU. Postupem času se geometrie tranzistorů dále zmenšovaly podle Moorova zákona a bylo možné stavět širší ALU na mikroprocesorech.

Moderní tranzistory s integrovanými obvody (IC) jsou řádově menší než ty z raných mikroprocesorů, takže je možné na IC integrovat vysoce složité ALU. Dnes má mnoho moderních ALU široké šířky slov a architektonická vylepšení, jako jsou posunovače sudů a binární multiplikátory , které jim umožňují provádět v jediném hodinovém cyklu operace, které by vyžadovaly více operací na dřívějších ALU.

ALU mohou být realizovány jako mechanické , elektromechanické nebo elektronické obvody a v posledních letech byl prováděn výzkum biologických ALU (např. Na bázi aktinu ).

Viz také

Reference

Další čtení

externí odkazy