Aritmetická logická jednotka - Arithmetic logic unit


z Wikipedie, otevřené encyklopedie
Symbolické znázornění ALU a její vstupní a výstupní signály, je naznačeno šipkami směřujícími do nebo ven z ALU, v tomto pořadí. Každá šipka představuje jeden nebo více signálů. Řídicí signály vstoupit od výjezdu vlevo a stavové signály na pravé straně; data procházejí ze shora dolů.

Aritmetickou logickou jednotku ( ALU ), je kombinační digitální elektronický obvod , který provádí aritmetické a bitové operace na celé číslo binární čísla . To je v kontrastu s plovoucí desetinnou čárkou jednotku (FPU), která působí na pohyblivou řádovou čárkou čísla. ALU je základním stavebním kamenem mnoha druhů počítačových obvodů, včetně centrální procesorové jednotky (CPU) počítačů, FPUs a grafické zpracování jednotky (GPU). Jediný CPU, FPU a GPU může obsahovat více ALUs.

Vstupy do ALU jsou data, která mají být provozována na nazývané operandy , a kód udávající operaci, která se být provedena; Výstup ALU je výsledkem provedené operace. V mnoha provedeních, ALU má také digitální vstupy a výstupy, nebo obojí, které přenášejí informace o předchozí operace nebo aktuální operaci, respektive mezi ALU a vnějších stavových registrů .

signály

ALU má řadu vstupních a výstupních sítí , což jsou elektrické vodiče používaných k přepravě digitálních signálů mezi ALU a vnějších obvodů. V případě, že je v provozu ALU, externí obvody použít signály na vstupy ALU, a v reakci na to ALU vytváří a přenáší signály do externích obvodů přes svými výstupy.

Data

Základní ALU má tři paralelní datové sběrnice sestávající ze dvou vstupních operandů ( A a B ), a výsledný výstup ( Y ). Každá datová sběrnice je skupina signálů, které vede jednu binární celé číslo. Typicky šířka sběrnice A, B a Y (počet signálů, které obsahují každý autobus) jsou identické a odpovídají nativní velikost slova vnějšího obvodu (např, zapouzdřovací CPU nebo jiný procesor).

opcode

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

Postavení

výstupy

Tyto stavové výstupy jsou různé jednotlivé signály, které přenášejí doplňující informace o výsledku běžného provozu ALU. Všestranně použitelné ALUs obyčejně mají stavové signály, jako jsou:

  • Provede-out , které dopravuje přenášení výsledkem operaci sčítání je půjčit výsledkem operace odčítání, nebo přetečení bitové vyplývající z binární operace posunu.
  • Nula , což znamená, všechny bity Y jsou logická nula.
  • Negativní , který označuje výsledek početní operace, je negativní.
  • Přepad , který označuje výsledek početní operace překročil číselnou řadu Y.
  • Parity , který indikuje, zda sudé nebo liché počet bitů v Y je logická jednička.

Na konci každé operace ALU, stav výstupní signály jsou obvykle uloženy v externích registrů, aby byly k dispozici pro budoucí operace ALU (např realizovat více precizní aritmetiku ), nebo pro řízení podmíněné větvení . Sbírka bitových registrů, které uchovávají stavových výstupů je často považován za jeden, multi-bitového registru, který je označován jako „stavového registru“ nebo „Registr kódů stavu“.

vstupy

Digitální vstupy umožňují dodatečné informace, které mají být dány k dispozici ALU při provádění operací. Obvykle se jedná o jeden „carry-in“ bit, který je uložený příruční z předchozí operace ALU.

provoz Circuit

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 její výstupy budou asynchronně měnit v závislosti na vstupních změn. V normálním provozu, stabilní signály jsou vedeny na všechny vstupy ALU, a když dost času (známý jako „ zpoždění šíření “) procházely pro signály množit přes obvody ALU, se zobrazí výsledek operace ALU na ALU výstupy. Vnější obvod připojený k ALU je zodpovědný za zajištění stability vstupních signálů ALU po celou dobu provozu, a pro umožnění dostatek času pro signály šíří ALU před vzorkování výsledek ALU.

Obecně platí, že vnější obvod ovládá ALU se signály na jeho vstupy. Typicky je vnější obvod používá sekvenční logiku pro řízení provozu ALU, který je tempu pomocí hodinového signálu dostatečně nízké frekvenci, aby zajistily dostatek času pro výstupy ALU se pod usadit nejhorší možné podmínky.

Například, procesor zahájí operaci sčítání ALU směrováním operandů z jejich zdrojů (které jsou obvykle registruje) do operandových vstupů ALU, zatímco řídicí jednotka aplikuje současně hodnotu do operačního kódu vstupu ALU, konfiguraci ji provádět sčítání. Ve stejné době, CPU také směruje ALU výsledek výstup do cílového registru, který obdrží částku. Vstupní signály ALU, které jsou drženy stabilní až do příští hodiny, se mohou množit přes ALU a do cílového registru, zatímco CPU čeká na další hodiny. Když příští hodiny dorazí, cílový registr uloží výsledek ALU a protože operace ALU dokončení, mohou být vstupy ALU nastaven pro příští operaci ALU.

funkce

Řada základních aritmetických a logických funkcí bitové jsou běžně podporovány ALU. Basic, univerzální ALUs obvykle zahrnují tyto operace v jejich repertoáru:

aritmetické operace

  • Přidejte : A a B jsou shrnuty a objeví se částka na Y a nesou-out.
  • Přidejte se přenášení : A, B a nesou-in se sčítají a objeví se částka na Y a nesou-out.
  • Odečtení : B je odečten od A (nebo naopak) a zobrazí se na rozdíl Y a nesou-out. Pro tuto funkci provádět-out je účinně „půjčit“ indikátor. Tato operace může být také použita pro srovnání veličiny A a B; V takových případech může být výstup Y ignorován procesoru, který je zajímá pouze bity stavu (zejména nula a negativní), které jsou výsledkem operace.
  • Odečte se půjčit : B je odečten od A (nebo naopak) s půjčit (carry-in) a zobrazí se na rozdíl Y a nesou-out (půjčit ven).
  • Dvě části (negovat) : A (nebo B) se odečte od nuly a zobrazí se na rozdíl Y.
  • Přírůstek : A (nebo B), se zvýší o jednu, a objeví se výsledná hodnota na Y.
  • Úbytek : A (nebo B) se sníží o jednu a objeví se výsledná hodnota na Y.
  • Procházejí : všechny bity (A nebo B), se objeví na nemodifikované Y. Tato operace se obvykle používá k určení paritu operandu, nebo zda je nulová nebo záporná, nebo načíst operandu do registru procesoru.

Bitové logické operace

  • A : bitové AND A a B se objeví na Y.
  • OR : bitový součet A a B se objeví na Y.
  • Exclusive-OR : bitové XOR A a B se objeví na Y.
  • Jedničkový doplněk : všechny bity z A (nebo B) se převrátí a zobrazí v Y.

Operace bit shift

Příklady trochu posun pro osmibitového ALU
Typ Vlevo, odjet Že jo
aritmetický posun Otáčet levou logically.svg Otočit pravou arithmetically.svg
logický posun Otáčet levou logically.svg Otočit pravou logically.svg
Točit se otočit left.svg Otočit right.svg
Otáčet přes carry Otočit doleva přes carry.svg Otáčet přímo přes carry.svg

Operace ALU posun způsobí operandu A (nebo B), k posunu doleva nebo doprava (v závislosti na operační kód) a Y. Simple Alus objeví posunuty operand typicky může posunout operandu pouze jedna bitové pozici, zatímco složitějších ALU zaměstnávat barel řazení , které jim umožní posunout operandu libovolným počtem bitů v jedné operaci. Ve všech single-bitové operace posunu, přičemž bit posunutý ven na místně vykonávat objeví operand; hodnota bitu přesunula do operand závisí na typu směny.

  • Aritmetický posun : operand je považován za doplňkovém číslo, což znamená, že nejvýznamnější bit je „znamením“ bit a je zachována.
  • Logický posun : logická nula je posunuta do operandu. To se používá k posunu nepodepsané celá čísla.
  • Otáčením : operand je považován za kruhové vyrovnávací paměti bitů tak jeho nejméně a nejvýznamnější bity jsou v podstatě vedle sebe.
  • Otočení prostřednictvím přenášení : carry bit a operandů jsou společně považovány za kruhové vyrovnávací paměti bitů.

Aplikace

Více přesné aritmetický

V celočíselných aritmetických výpočtů, více přesné aritmetický je algoritmus, který pracuje na celá čísla, která jsou větší než velikost ALU slovo. K tomu, algoritmus zachází každý operand jako uspořádaná sbírka fragmentů ALU velikosti, uspořádané od nejvýznamnějšího (MS) do nejméně významný (LS), nebo naopak. Například v případě 8-bitového ALU, 24-bitové celé číslo 0x123456bude zacházeno jako soubor tří 8-bitových fragmenty: 0x12(MS), 0x34a 0x56(LS). Vzhledem k tomu, velikost fragmentu přesně odpovídá velikosti ALU slovo, ALU mohou přímo působit na tomto „kousku“ operandu.

Algoritmus využívá ALU přímo působit na jednotlivých fragmentů operandů, a tím vytvářet odpovídající fragmentu (o „částečné“) na více přesného výsledku. Každý dílčí, při generování, je zapsána do přidružené oblasti ukládání, který byl určen pro vícenásobné přesného výsledku. Tento proces je opakován pro všechny fragmenty operandů tak, aby generování kompletní sbírku partials, která je výsledkem více přesné operace.

V aritmetické operace (např, sčítání, odčítání), algoritmus začíná vyvolání operace ALU na fragmenty operandy LS, čímž se vyrobí jak LS částečný a provádět bit. Algoritmus píše částečné do určeného skladu, zatímco státní stroj procesoru obvykle ukládá provést kousek do stavového registru ALU. Algoritmus pak postoupí k dalšímu fragmentu sbírky každý operand a vyvolá operaci ALU na tyto fragmenty spolu s uloženým carry bitu z předchozí operace ALU, tak produkovat další (významnější) částečné a se provádět bit. Stejně jako dříve, carry bit je uložen do stavového registru a částečné je zapsán do určeného úložiště. Tento proces se opakuje, dokud nejsou zpracovány všechny fragmenty operand, což má za následek kompletní kolekci partials na skladování, které obsahují výsledek více přesné aritmetické.

Při operacích více přesné posunu, přičemž pořadí zpracování operand fragmentu závisí na směru posunu. Při operacích levé stupňů, fragmenty jsou zpracovány LS jako první, protože LS bit každé dílčí, které se dopravuje přes uložené přenesených bitů musí být získán z bitového MS z dříve doleva posunuté, méně významné operand. Naopak, operandy jsou zpracovány MS první operace pravé posunu, protože MS trochu každé dílčí musí být získán z bitu LS dříve přímo posunuté, více-významný operand.

V bitové, mohou být operand fragmenty zpracovány logické operace (např, logické a logické OR) v libovolném pořadí, protože každý dílčí závisí jen na odpovídajících operandových fragmentů (uložené nést bit z předchozí operace ALU se ignoruje).

složité operace

Přestože ALU mohou být navrženy tak, aby provádět složité funkce, výsledný vyšší složitosti obvodu, náklady, spotřebu energie a větší velikost dělá to nepraktické v mnoha případech. V důsledku toho, ALU jsou často omezena na jednoduché funkce, které lze provádět při velmi vysokých rychlostech (tj velmi krátké zpoždění šíření), a vnější procesorových obvodů, je zodpovědný za provádění složitých funkcí podle orchestrating sekvence jednodušších operací ALU.

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

  • Výpočet v jediné hodiny : velmi složitý ALU, který počítá druhou odmocninu v rámci jedné operace.
  • Výpočet potrubí : skupina jednoduchou ALU, které počítá odmocninu ve stupních, s mezivýsledky procházejícími Alus uspořádány jako tovární výrobní linky . Tento obvod může přijímat nové operandy před dokončením ty předchozí a přináší výsledky tak rychle, jak velmi složitý ALU, když výsledky jsou zpožděné o součet šíření zpoždění etap ALU. Více informací naleznete v článku na proudové zpracování instrukcí .
  • Iterativní výpočet : jednoduchý ALU, který vypočítá odmocninu přes několik kroků pod vedením řídící jednotky .

Implementace uvedené přechodu z nejrychlejší a nejdražší nejpomalejší a nejméně nákladný. Odmocnina se počítá ve všech případech, ale procesory s jednoduchým Alus bude trvat déle, než provést výpočet, protože se musí provádět více operací ALU.

Implementace

ALU se obvykle provádí buď jako samostatný integrovaný obvod (IC), jako je například 74181 , nebo jako součást složitějšího IC. V posledně jmenovaném případě je ALU se typicky instance by to syntézou z popisu napsaný v VHDL , Verilog nebo nějakého jiného programovacího jazyka . Například následující kód VHDL popisuje velmi jednoduchý 8-bitové 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 pro nové počítače, volal EDVAC .

Náklady, velikost a příkon elektronických obvodů byla poměrně vysoká v celé dětství na informačním věku . V důsledku toho všechny sériové počítače a mnoho časných počítačů, jako je PDP-8 , měl jednoduchou ALU, který operoval na jeden datový bit v době, i když často prezentována širší velikost slova pro programátory. Jeden z prvních počítačů mít více diskrétní single-bitové ALU obvodů byla v roce 1948 Whirlwind I , který zaměstnával šestnáct takových „matematických jednotek“, aby mohl působit na 16bitových slov.

V roce 1967, Fairchild zaveden první ALU realizován jako integrovaný obvod, na Fairchild 3800, který se skládá z osmibitového ALU s akumulátorem. Ostatní integrovaného obvodu ALUs brzy objevily, včetně čtyři-bitové ALU jako je Am2901 a 74181 . Tyto přístroje byly typicky „ bit slice “ schopný, což znamená, že se „nesou dívat dopředu“ signály, které usnadnilo použití několika propojených ALU čipů pro vytvoření ALU s širším velikost slova. Tato zařízení se rychle stal se populární a byl široce používán v bit-plátek minipočítačů.

Mikroprocesory začaly objevovat na začátku roku 1970. I přesto, že tranzistory se stala menší, tam byl často nedostatečné die prostor pro plné slovo šířky ALU, a jako výsledek, některé časné mikroprocesory zaměstnán úzký ALU, která vyžadovala více cyklů za instrukce strojového jazyka. Příklady tohoto zahrnují populární Z80 , který provedl osmibitové dodatky s čtyřbitové ALU. V průběhu doby, tranzistorové geometrie zmenšil dále po Moorův zákon , a to se stalo možné stavět širší ALUs na mikroprocesorech.

Moderní integrovaný obvod (IC) tranzistory jsou o několik řádů menší než u časných mikroprocesorů, což umožňuje, aby se vešly velmi složité ALUs na integrovaných obvodů. Dnes, mnoho moderních ALUs mají široké šířky slovo a architektonických vylepšení, například barel posunovače a binárních veřejného mínění , které jim umožní provádět v jediném taktu, operace, které by si vyžádaly více operací na dřívější ALU.

viz též

Reference

Další čtení

externí odkazy