Dekodér se součtem adres - Sum-addressed decoder
![]() | tento článek potřebuje další citace pro ověření.Červen 2019) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
v Návrh CPU, použití a dekodér se součtem adres (SAD) nebo dekodér součtu adresované paměti (SAM) je metoda snižování latence Mezipaměť CPU výpočet přístupu a adresy (základ + offset). Toho je dosaženo spojením operace součtu generování adresy s operací dekódování v mezipaměti SRAM.
Přehled
L1 datová mezipaměť by obvykle měl být v nejkritičtějším prostředku CPU, protože jen málo věcí se zlepšuje pokyny na cyklus (IPC) přímo jako větší datová mezipaměť, přístup k větší datové mezipaměti trvá déle a potrubí datová mezipaměť zhoršuje IPC. Jedním ze způsobů, jak snížit latenci přístupu k datové mezipaměti L1, je fúze operace součtu generování adresy s operací dekódování v paměti SRAM mezipaměti.
Stále musí být provedena operace součtu generování adres, protože výslednou virtuální adresu budou používat jiné jednotky v paměťovém kanálu. Tento součet bude proveden paralelně s zde popsaným kondenzovaným přidáním / dekódováním.
Nejziskovějším opakováním pro zrychlení je zatížení, po kterém následuje použití tohoto zatížení v řetězci celočíselných operací vedoucích k dalšímu zatížení. Za předpokladu, že výsledky načítání jsou vynechány se stejnou prioritou jako celočíselné výsledky, je možné shrnout toto opakování jako zatížení následované dalším zatížením - jako by program sledoval propojený seznam.
Zbytek této stránky předpokládá architektura sady instrukcí (ISA) s jediným režimem adresování (registr + offset), virtuálně indexovanou datovou mezipamětí a značkami rozšiřujícími zátěže, které mohou mít proměnnou šířku. Většina RISC ISA odpovídají tomuto popisu. V ISA, jako je Intel x86, se sečtou tři nebo čtyři vstupy pro vygenerování virtuální adresy. Sčítání s více vstupy lze snížit na sčítání se dvěma vstupy pomocí doplňků pro uložení uložení a zbývající problém je popsán níže. Kritická recidiva je tedy zmije, a dekodér, slovní řádek SRAM, bitové řádky SRAM, snímací zesilovače, řízení bajtů muxy a obtokové muxy.
V tomto příkladu přímo mapované 16KB předpokládá se datová mezipaměť, která vrací hodnoty zarovnané na dvojslovo (8 bajtů). Každý řádek SRAM má 8 bajtů a existuje 2048 řádků adresovaných adresářem [13: 3]. Myšlenka SRAM zaměřená na součet platí stejně dobře pro nastavení asociativních mezipamětí.
Součet adresovaných mezipamětí: sbalte sčítač a dekodér
Dekodér SRAM má v tomto příkladu 11bitový vstup, Addr [13: 3] a 2048 výstupů, dekódované řádky slov. Jeden slovní řádek je řízen vysoko v reakci na každou jedinečnou hodnotu Addr [13: 3].
V nejjednodušší formě dekodéru je každá z 2048 linek logicky A brána. Těch 11 bitů (říkejte jim A [13: 3] a jejich doplňky (říkejte jim B [13: 3])) je vedeno nahoru dekodérem. Pro každou linku je 11 bitů nebo doplňků přivedeno do brány AND se 11 vstupy. instance, 1026 decimal is equal to 10000000010 binary. The function for line 1026 would be:
slovní spojení [1026] = A [13] & B [12] & B [11] & B [10] & B [9] & B [8] & B [7] & B [6] & B [5] & A [4] a B [3]
Jak přenosový řetězec sčítače, tak dekodér kombinují informace z celé šířky indexové části adresy. Kombinování informací po celé šířce dvakrát je nadbytečné. Součet adresovaných SRAM kombinuje informace jen jednou implementací sčítače a dekodéru dohromady v jedné struktuře.
Připomeňme, že SRAM je indexován s výsledkem přidání. Zavolejte summandy R (pro registr) a O (pro offset k tomuto registru). Dekodér se součtem adres bude dekódovat R + O. Pro každou linku dekodéru zavolejte na číslo linky L.
Předpokládejme, že náš dekodér řídil R a O přes každou linku dekodéru a každá linka dekodéru byla implementována:
slovní řádka [L] = (R + O) == L
(R + O) == L <=> R + O-L == 0 <=> R + O + ~ L + 1 == 0 <=> R + O + ~ L == - 1 == 11..1.
K redukci R + O + ~ L na S + C lze použít sadu plných doplňků (jedná se o přídavek uložení a uložení). S + C == 11..1 <=> S == ~ C. V závěrečném přidání nebudou žádné přenosy. Vzhledem k tomu, že C je řada nese, je posunuta o jeden bit nahoru, takže R [13: 3] + O [13: 3] + ~ L [13: 3] == {0, S [13: 3] } + {C [14: 4], 0}
S touto formulací je každý řádek v dekodéru sadou plných doplňků, které redukují základní registr, offset a číslo řádku na formát uložení a komparátor. Většina tohoto hardwaru bude níže prokázána jako nadbytečná, ale prozatím je jednodušší myslet na to, že vše existuje v každém řádku.
Ignorování LSB: pozdní výběr při nošení
Výše uvedená formulace kontroluje celý výsledek přidání. V dekodéru mezipaměti CPU je však celý výsledek přidání adresa bytu a mezipaměť je obvykle indexována s větší adresou, v našem příkladu s 8bajtovým blokem. Je lepší ignorovat několik LSB adresy. LSB obou summandů však nelze ignorovat, protože mohou způsobit provedení, které by změnilo adresované dvojité slovo.
Pokud jsou přidány R [13: 3] a O [13: 3], aby se získal nějaký index I [13: 3], pak se skutečná adresa Addr [13: 3] rovná buď I [13: 3], nebo I [13: 3] + 1, v závislosti na tom, zda R [2: 0] + O [2: 0] generuje provedení. I i I + 1 lze načíst, pokud existují dvě banky SRAM, jedna se sudými adresami a druhá se lichými. Sudá banka obsahuje adresy 000xxx, 010xxx, 100xxx, 110xxx atd. A lichá banka obsahuje adresy 001xxx, 011xxx, 101xxx, 111xxx atd. Provedení z R [2: 0] + O [2: 0] pak lze použít k výběru sudého nebo lichého dvojitého slova, které bylo načteno později.
Všimněte si, že načítání ze dvou bank poloviční velikosti SRAM rozptýlí více energie než načítání z jedné banky plné velikosti, protože způsobuje více přepínání ve smyslu zesilovačů a logiky řízení dat.
Generování shody
Já [13: 3] | dokonce banka načte linku | zvláštní banka načte linku |
100 | 100 | 101 |
101 | 110 | 101 |
110 | 110 | 111 |
S odkazem na sousední diagram, sudá banka načte řádek 110, když I [13: 3] == 101 nebo I [13: 3] == 110. Lichá banka načte řádek 101, když I [13: 3] == 100 nebo I [13: 3] == 101.
Obecně by lichá banka SRAM měla načíst řádek Lo == 2N + 1, když buď I [13: 3] == 2N nebo I [13: 3] == 2N + 1. Tyto dvě podmínky lze zapsat jako:
I [13: 3] = Lo-1 => R [13: 3] + O [13: 3] + ~ Lo + 1 = 11..11 => R [13: 3] + O [13: 3] + ~ Lo = 11..10I [13: 3] = Lo => R [13: 3] + O [13: 3] + ~ Lo = 11..11
Ignorujte poslední číslici porovnání: (S + C) [13: 4] == 11..1
Podobně i sudá banka SRAM načte řádek Le == 2N, když buď I [13: 3] == 2N, nebo I [13: 3] == 2N-1. Podmínky jsou zapsány následovně a znovu ignorují poslední číslici porovnání.
I [13: 3] = Le-1 => R [13: 3] + O [13: 3] + ~ Le = 11..10I [13: 3] = Le => R [13: 3] + O [13: 3] + ~ Le = 11..11
Implementace na úrovni brány
R13 ... R.6 R5 R4 R3 Ó13 ... O6 Ó5 Ó4 Ó3 L13 ... L.6 L5 L4 L3-------------------------- S13 ... S.6 S5 S4 S3C14 C13 ... C.6 C5 C4
Před sbalením redundance mezi řádky zkontrolujte:
Každý řádek každého dekodéru pro každou ze dvou bank implementuje sadu plných sčítačů, které redukují tři přidaná čísla (R [13: 3], O [13: 3] a L) na dvě čísla (S [14: 4] a C [13: 3]). LSB (== S [3]) je zahozeno. Provedení (== C [14]) je také zahozeno. Řádek odpovídá, pokud S [13: 4] == ~ C [13: 4], což je & (xor (S [13: 4], C [13: 4])).
Je možné částečně specializovat full adders na 2-vstup AND, OR, XOR a XNOR, protože L vstup je konstantní. Výsledné výrazy jsou společné pro všechny řádky dekodéru a lze je sbírat dole.
S0; i = S (R.i, Oi, 0) = Ri xor OiS1; i = S (R.i, Oi, 1) = Ri xnor O.iC0; i + 1 = C (R.i, Oi, 0) = Ri a O.iC1; i + 1 = C (R.i, Oi, 1) = Ri nebo O.i.
Na každé pozici číslice jsou pouze dvě možná Si, dvě možné Cia čtyři možné XOR mezi nimi:
Li= 0 a Li-1= 0: X0; 0; i = S0; i xor C.0; i = R.i xor Oi xor (R.i-1 a O.i-1) Li= 0 a Li-1= 1: X0; 1; i = S0; i xor C.1; i = R.i xor Oi xor (R.i-1 nebo O.i-1) Li= 1 a Li-1= 0: X1; 0; i = S1; i xor C.0; i = R.i xnor O.i xor (R.i-1 a O.i-1) =! X0; 0; iLi= 1 a Li-1= 1: X1; 1; i = S1; i xor C.1; i = R.i xnor O.i xor (R.i-1 nebo O.i-1) =! X0; 1; i
Jeden možný dekodér pro příklad může vypočítat tyto čtyři výrazy pro každou z bitů 4..13 a řídit všech 40 vodičů nahoru dekodérem. Každý řádek dekodéru by vybral jeden ze čtyř vodičů pro každý bit a sestával by z 10-vstupního AND.
Co bylo uloženo?
Jednodušší cesta mezipaměti dat by měla sčítač následovaný tradičním dekodérem. Pro náš příklad subsystému mezipaměti by kritickou cestou byl 14bitový sčítač, který by produkoval skutečné a doplňkové hodnoty, následovaný 11bitovou branou AND pro každý řádek dekodéru.
V designu se součtem adres zůstává konečná brána AND v dekodéru, i když místo 11 je široká 10 bitů. Sčítačka byla v každém bitu nahrazena čtyřmi vstupními logickými výrazy. Úspora latence pochází z rozdílu rychlostí mezi sčítačem a čtyřmi vstupními výrazy, což je úspora možná tří jednoduchých CMOS brány.
Pokud má čtenář pocit, že se jednalo o nadměrné množství práce na zkroucení mozku pro zlepšení tří bran v kritické cestě s více cykly, pak si čtenář lépe uvědomuje úroveň, na kterou jsou moderní CPU optimalizovány.
Další optimalizace: předekódování
Mnoho návrhů dekodérů se vyhýbá vysokýmfan-in AND brány v dekódovací linii samotné pomocí fáze předkódování. Například 11bitový dekodér může být předem dekódován do tří skupin po 4, 4 a 3 bitech. Každá 3bitová skupina by řídila 8 vodičů nahoru v hlavním dekódovacím poli, každá 4bitová skupina řídila 16 vodičů. Z linky dekodéru se pak stane brána AND se 3 vstupy. Tato reorganizace může ušetřit významnou oblast implementace a trochu energie.
Stejnou reorganizaci lze použít na dekodér součtu adres. Každý bit v předdefinované formulaci výše lze zobrazit jako místní dvoubitový přírůstek. S předekódováním je každá skupina předkódů lokálním přidáním tří, čtyř nebo dokonce pěti bitů, přičemž skupiny předkódů se překrývají o jeden bit.
Předekódování obecně zvyšuje počet vodičů procházejících dekodérem a dekodéry se součtem adres mají obecně asi dvakrát tolik vodičů než ekvivalentní jednoduchý dekodér. Tyto dráty mohou být omezujícím faktorem množství proveditelného předkódování.
Reference
- Paul Demone má vysvětlení souhrnných mezipamětí v realworldtech článek.
- Heald a kol.[1] mít dokument v ISSCC 1998, který vysvětluje, co může být původní součet adresované mezipaměti v Ultrasparc III.
- Paměť se součtem adres je popsána v
Patent USA 5 754 819, 19. května 1998,Metoda a struktura indexování paměti s nízkou latencí.Inventors: Lynch; William L. (Palo Alto, CA), Lauterbach; Gary R. (Los Altos, CA); Nabyvatel: Sun Microsystems, Inc. (Mountain View, CA), podáno: 28. července 1994
- Alespoň jeden z vynálezců uvedených na patentu týkajícím se dekódování adresy bez přenášení připisuje následující publikaci:
Vyhodnocení podmínek A + B = K bez šíření (1992) Jordi Cortadella, Jose M. LlaberiaTransakce IEEE na počítačích,[1] [2]
- Následující patent rozšiřuje tuto práci o použití redundantní formy aritmetiky v celém procesoru, a tak se vyhněte režii šíření přenosu i při operacích ALU nebo při vynechání operace ALU na adresu paměti:
Patent Spojených států 5 619 664,Procesor s architekturou pro vylepšené pipetování aritmetických instrukcí předáváním redundantních mezilehlých datových formulářů, udělena 18. dubna 1997, Vynálezce: Glew; Andrew F. (Hillsboro, OR); Nabyvatel: Intel Corporation (Santa Clara, CA), Appl. Č .: 08/402 322, podáno: 10. března 1995
- ^ Heald, R .; et al. (1998). "64 kB mezipaměti součtu adresovaných pamětí s cyklem 1,6 ns a latencí 2,6 ns". Přehled technických dokumentů ISSCC. 350–351. doi:10.1109 / ISSCC.1998.672519.