Hlavní navigace

Procesory s architekturou RISC v pracovních stanicích a serverech

31. 5. 2011
Doba čtení: 19 minut

Sdílet

V dnešní části seriálu o architekturách počítačů si popíšeme vybrané mikroprocesory s architekturou RISC, které byly použity v některých známých i méně známých pracovních stanicích a serverech. Podívám se na mikroprocesory řady MIPS R2000 a R3000, SPARC a PA-RISC a později na Alpha, POWER, PowerPC a Cell.

Obsah

1. Procesory s architekturou RISC v pracovních stanicích a serverech

2. Mikroprocesory MIPS R2000

3. Instrukční pipeline

4. Pracovní registry mikroprocesorů MIPS R2000

5. Formát instrukcí mikroprocesorů MIPS R2000

6. Instrukční sada mikroprocesorů MIPS R2000

7. Seznam instrukcí mikroprocesoru MIPS R2000

8. Porovnání obsazení registrů u procesorů MIPS a SPARC

9. Odkazy na Internetu

1. Procesory s architekturou RISC v pracovních stanicích a serverech

V předchozích dvou částech seriálu o architekturách počítačů jsme si řekli základní informace o principech, na nichž je založena architektura mikroprocesorů RISC. Taktéž jsme se zmínili o dvou důležitých projektech, které měly značný vliv na vývoj moderních mikroprocesorů RISC. Jedná se o projekt MIPS, který byl zahájen již v roce 1981 Johnem L. Hennessym na univerzitě ve Stanfordu. O necelý rok dříve byl na jiné univerzitě, konkrétně na univerzitě v Berkeley, zahájen Davidem Pattersonem a Carlem H. Sequinem konkurenční projekt mikroprocesorů RISC I. Velmi zajímavé je, že i přes původ na akademické půdě byly oba výsledné návrhy mikroprocesorů úspěšné, a to jak z praktického hlediska (vysoký výpočetní výkon v porovnání s tehdy existujícími mikroprocesory s architekturou CISC), tak i o několik let později z hlediska komerčního, protože vylepšené verze mikroprocesorů odvozených od původních návrhů MIPS a RISC I se začaly nasazovat v těch situacích, kdy čipy takových slavných firem, jakými jsou Intel či Motorola, nepodávaly dostatečný výkon.

Obrázek 1: Osobní počítač firmy Acorn, který byl vybavený mikroprocesorem s architekturou­ RISC.

Jedním z důsledků úspěchu mikroprocesorů s architekturou RISC bylo to, že se tyto čipy začaly používat jak ve výkonných grafických stanicích, tak i v některých typech serverů. Mikroprocesory založené na původním projektu MIPS byly například použity v pracovních stanicích firmy SGI i výkonných strojích určených pro 3D rendering, například v počítačích Onyx 2 vybavených systémem Infinite Reality a později Infinite Reality 2. Naproti tomu se na základě poznatků z projektu procesoru RISC I o sedm let později vyvinula architektura SPARC (Scalable Processor ARChitecture), použitá poprvé u pracovní stanice Sun-4. Mikroprocesory s touto architekturou byly na základě licenčního ujednání vyráběny mnoha společnostmi a používány byly zejména v serverech firem Fujitsu či Sun Microsystems, v nichž mohlo být využito větší množství těchto čipů (jednalo se o počítače využívající technologii SMP). Ovšem procesory s architekturou RISC byly použity i ve velmi zajímavém počítači Acorn Archimedes se systémem RISC S, o němž se ještě v tomto seriálu zmíníme.

Obrázek 2: Hra Zarch od známého programátora Davida Brabena (který je spoluautorem slavné hry Elite) pro počítač Acorn Archimedes.

2. Mikroprocesory MIPS R2000

Prvním komerčně vyráběným mikroprocesorem využívajícím technologie vyvinuté v rámci projektu MIPS byl mikroprocesor pojmenovaný R2000, jehož návrh byl ve společnosti MIPS Computer Systems vedené Johnem L. Hennesym dokončen již počátkem roku 1985 a ještě v témže roce začala jeho výroba zajišťovaná zpočátku firmami Integrated Device Technology (IDT), LSI Logic, NEC Corporation a Performance Semiconductor. Jednalo se o čip s pětistupňovou „RISCovou“ instrukční pipeline popsanou v následující kapitole, 32 pracovními registry s 32bitovou šířkou a adresním rozsahem 232 bajtů. U adresování se na chvíli zastavíme, protože je z pohledu některých dalších mikroprocesorů s architekturou RISC poněkud zvláštní. Konstruktéři mikroprocesoru R2000 totiž analyzovali mnoho v té době existujících programů a zjistili, že se v nich poměrně často pracuje s jednotlivými bajty (například znaky).

Obrázek 3: Grafické uživatelské rozhraní operačního systému RISC OS.

Z tohoto důvodu konstruktéři čipu R2000 implementovali práci se třemi datovými typy: 32bitovými slovy, 16bitovými „poloslovy“ a 8bitovými bajty. Šířka datové sběrnice byla 32bitová, což znamenalo, že se vždy načítalo či ukládalo celé 32bitové slovo. Ovšem samotný mikroprocesor obsahoval obvody, které dokázaly z tohoto slova extrahovat šestnáctibitovou či osmibitovou část. Muselo se pouze dodržet zarovnání zpracovávaných údajů, tj. 32bitová slova musela být zarovnána na násobky čtyř, šestnáctibitová slova na násobky dvou a bajty mohly být umístěny na libovolné adrese. Nedodržení zarovnání bylo procesorem detekováno a došlo k zastavení programu. Navíc bylo možné změnit konfiguraci rozhraní externí sběrnice takovým způsobem, že se mohlo pracovat buď se slovy, v nichž byly bajty uloženy způsobem little endian nebo big endian. Nicméně umožnění práce s bajty a poloslovy mělo za důsledek to, že se adresový rozsah čtyřikrát zmenšil na zmíněných 232 bajtů.

Obrázek 4: Další ukázka grafického uživatelského rozhraní operačního systému RISC OS.
Zdroj: Wikipedia

3. Instrukční pipeline

Mikroprocesory postavené na architektuře MIPS využívaly dnes již klasickou „RISCovou“ pipeline, v níž byla každá strojová instrukce rozložena do pěti operací označovaných dvouznakovými zkratkami (každá z těchto operací trvala přesně jeden strojový takt):

Zkratka Celý název Význam
IF Instruction Fetch načtení instrukčního kódu z operační paměti a současné zvýšení hodnoty čítače instrukcí
ID Instruction Decode dekódování instrukce a výběr registrů pro provedení operace
EX Execute vlastní operace provedená většinou v ALU, popř. vyhodnocení podmínky skoku
MA Memory Access načtení či uložení hodnot do operační paměti
WB Write Back uložení vypočtené hodnoty nebo hodnoty načtené z operační paměti zpět do vybraného pracovního registru
pc9903

Obrázek 5: Výkonná a na dobu svého vzniku revoluční grafická stanice Onyx 2 vybavená systémem Infinite Reality. Tato grafická stanice je postavena na bázi mikroprocesorů R10000 vycházejících z původní architektury MIPS.

Čistě teoreticky je tedy možné, aby se v mikroprocesoru současně zpracovávalo pět instrukcí (každá v jiné fázi – operaci), jak je to naznačeno na následujícím schématu:

IF -- -- -- --
ID IF -- -- --
EX ID IF -- --
MA EX ID IF --
WB MA EX ID IF
-- WB MA EX ID
-- -- WB MA EX
-- -- -- WB MA
-- -- -- -- WB

Ve skutečnosti však může docházet ke konfliktům, například při přístupu k datům a kódům instrukcí uložených v operační paměti, popř. při zápisu výsledku nějaké aritmeticko-logické operace do registru, který se používá v následující instrukci. V případě R2000 se tyto závislosti netestovaly přímo v hardware procesoru, ale musel je vyřešit již samotný překladač (nebo programátor v assembleru, který měl v tomto případě nelehkou práci), například přeorganizováním instrukcí. Právě snaha o to, aby ke konfliktům docházelo s co nejmenší frekvencí, vedla k tomu, že procesory s architekturou RISC mají velký počet pracovních registrů, čímž se omezí jak počet přístupů do operační paměti, tak i konflikty při pokusu o současný přístup ke stejnému registru.

pc9906

Obrázek 6: Laboratoř specializovaná na simulace a vizualizace, jejíž nezbytnou součástí jsou stroje Onyx 2 Infinite Reality, což znamená, že se jedná o další způsob využití mikroprocesorů s architekturou­ RISC.

4. Pracovní registry mikroprocesorů MIPS R2000

Již v předchozím textu jsme si řekli, že mikroprocesory R2000 používající instrukční sadu MIPS nabízely programátorům 32 pracovních registrů, z nichž každý měl šířku 32 bitů. Navíc se při načítání instrukcí z operační paměti používal čítač instrukcí (PC – Program Counter), jehož obsah však nebyl programátorům přímo přístupný; měnil se nepřímo operacemi skoku a volání subrutiny. První z pracovních registrů, který byl označovaný jménem r0 nebo též přezdívkou (aliasem) $zero, měl speciální význam, protože obsahoval vždy nulovou hodnotu, nezávisle na tom, jaká hodnota byla do registru zapisována (zápis však nebyl zakázán). Existence registru obsahujícího nulovou konstantu umožnila zmenšit počet instrukcí v instrukční sadě. Dalším 31 pracovním registrům sice nebyla při konstrukci mikroprocesoru přiřazena žádná určitá funkce, ale vývojáři operačních systémů i překladačů vyšších programovacích jazyků začali některým registrům přiřazovat zvláštní význam, čemuž taktéž odpovídají aliasy těchto registrů popsané v následujících odstavcích.

pc9907

Obrázek 7: Počítače firmy SGI vybavené procesory řady Rxxxx (založené na MIPS) se v minulosti velmi často používaly k různým experimentům s prostorovou (3D) počítačovou grafikou. Zde je ukázán výsledek simulace, při jejíž vizualizaci jsou vykreslovány pouze úsečky, nikoli trojúhelníky či další polygony. Pro vykreslení úseček se využíval zobrazovací subsystém počítačů SGI, ovšem přeprogramovaný tak, aby se texturovací jednotka používala pro velmi rychlé výpočty osvětlovacího modelu. Tento snímek byl vytvořen pomocí postupu upraveného tak, aby ho bylo možné použít na grafických kartách nVidia GForce. Původní postup však více než dobře fungoval, jak již bylo řečeno, na grafických stanicích firmy SGI.

Pracovní registry s indexy 2 a 3 se používaly pro předání návratových hodnot programovému kódu, který volal subrutinu. Aliasy těchto registrů byly $v0 a $v1 (v – value). Pracovní registry s indexy 4 až 7 se používaly pro předání prvních čtyř argumentů volaným funkcím; z tohoto důvodu byla pro jejich aliasy zvolena jména $a0$a3 (a – argument). Pokud se do volané funkce předávalo větší množství parametrů, mohly se použít i další pracovní registry, nebo taktéž programově vytvořený zásobníkový rámec (stack frame), k jehož adresaci se používaly pracovní registry číslo 29 (alias $sp – stack pointer) a 30 (alias $fp – frame pointer). Dalších osm pracovních registrů s aliasy $s0$s7 (s – saved) bylo vyhrazeno pro hodnoty, jejichž hodnota by při návratu z volané subrutiny neměla být změněna. V subrutině se tyto registry samozřejmě mohly používat, ovšem jejich původní hodnoty se většinou v tomto případě ukládaly do aktivačního záznamu subrutiny.

pc9909

Obrázek 8: Server s architekturou Onyx 4, která je pokračovatelem architektury Onyx 2. Rychlost renderingu je až 40× vyšší, než u původní architektury Onyx 2.

Deset pracovních registrů s aliasy $t0$t9 mohla volaná subrutina využívat pro své vlastní účely, typicky pro provádění aritmetických a logických operací. Hodnoty těchto registrů tedy nemusely být zachovány při návratu ze subrutiny (t – temporary). Zbylých šest pracovních registrů mělo následující význam: $zero – nulová konstanta v registru s indexem 0, registr $at používal assembler při provádění pseudoinstrukcí (assembler temporary), $k0 a $k1 jsou registry používané při volání funkcí jádra (kernel), popř. při zpracování přerušení, v registru s aliasem $gp byl uložen ukazatel na globální data (global pointer) a konečně v registru $ra byla uložena adresa zajišťující návrat ze subrutiny (return address), protože mikroprocesory MIPS neobsahovaly klasický zásobník s návratovými adresami.

pc9910

Obrázek 9: Server s architekturou Onyx 3000.

5. Formát instrukcí mikroprocesorů MIPS R2000

Všechny instrukce mikroprocesorů R2000 měly konstantní šířku 32bitů, což mj. taktéž znamenalo, že instrukce byly v operační paměti vždy zarovnány na násobek čtyř bajtů, takže každá instrukce byla načtena v jediném strojovém taktu. Podle způsobu rozdělení bitových polí v 32bitovém slovu se instrukce dělily pouze do třech kategorií – I-type (Immediate), J-type (Jump) a R-Type (register). U prvního typu instrukcí (I-type) je přímo v instrukčním slovu uložena šestnáctibitová konstanta chápaná podle konkrétní instrukce buď jako šestnáctibitové slovo bez znaménka (0..65535) či šestnáctibitové slovo se znaménkem (-32768..32767). Ve zbývajících šestnácti bitech byl uložen šestibitový operační kód, pětibitový index zdrojového registru a taktéž pětibitový index registru cílového:

  I-Type (immediate)
  ------------------------------------------------------------
  | 31  26     | 25  21 | 20  16 | 15                      0 |
  ------------------------------------------------------------
  | opcode (6) | rs (5) | rt (5) | offset/konstanta (16)     |
  ------------------------------------------------------------

Formát instrukcí typu J (Jump) je ještě jednodušší než formát předchozí, protože za šestibitovým operačním kódem následuje pouze 26 bitů tvořících adresu skoku (skutečná adresa se získá vynásobením konstanty čtyřmi, resp. bitovým posuvem o dva bity doleva):

  J-Type (jump)
  ------------------------------------------------------------
  | 31  26     | 25                                        0 |
  ------------------------------------------------------------
  | opcode (6) | adresa (26)                                 |
  ------------------------------------------------------------

Poslední instrukční formát je využíván u aritmetických a logických instrukcí, které používají takzvaný tříadresový kód, tj. instrukce je provedena se dvěma operandy (zdrojovými registry) a do třetího registru je uložen výsledek operace. Kromě operačního kódu jsou v instrukčním slovu uloženy pětibitové indexy obou zdrojových registrů (rs, rt) i registru cílového (rd), šestibitový kód operace a taktéž pětibitová hodnota posunu (shift) použitá u bitových posunů a rotací:

  R-Type (register)
  ------------------------------------------------------------
  | 31  26     | 25  21 | 20  16 | 15  11 | 10  6 | 5      0 |
  ------------------------------------------------------------
  | opcode (6) | rs (5) | rt (5) | rd (5) | shift | operace  |
  ------------------------------------------------------------
pc9911

Obrázek 10: Server s architekturou Onyx 350.

6. Instrukční sada mikroprocesorů MIPS R2000

Vlastní instrukční sada mikroprocesorů R2000 se vyznačuje dvěma zvláštnostmi. První z nich je absence registru příznaků (flags), protože konstruktéři tohoto mikroprocesoru (správně) usoudili, že by používání příznaků typu zero, carry, overflow atd. mohlo vést ke vzniku konfliktů, kdy by na výsledek jedné instrukce čekala instrukce další. Kvůli absenci příznaků jsou v instrukční sadě pouze dva podmíněné skoky beq (branch on equal) a bne (branch on not equal), při nichž se skok provede/neprovede na základě porovnání obsahu dvou pracovních registrů, jejichž indexy jsou přímo součástí instrukčního slova – jedná se tedy o instrukce I-type. Povšimněte si, že díky existenci registru $zero se vlastně zadarmo instrukční sada rozšiřuje o pseudoinstrukce bz (branch on zero) a bnz (branch on non zero). Dále se použití příznaků nahradilo logickými instrukcemi slt (set on less than) a slti (set on less than immediate).

Obrázek 11: Přebal knihy o architektuře mikroprocesorů R2000.

V instrukční sadě se taktéž nenachází instrukce typu move, protože je zhola zbytečná. Stejného efektu, který by byl proveden pomocí neexistující instrukce:

move dest, src

lze dosáhnout použitím nulového registru:

add dest, src, $0

Popř. taktéž následovně:

or  dest, src, $0

nebo:

xor dest, src, $0

Obrázek 12: Přebal knihy o programování mikroprocesorů MIPS v assembleru.

Assembler dostupný pro procesory R2000 obsahoval velkou řadu takzvaných pseudoinstrukcí, tj. příkazů, které se rozkládaly na jednu či větší množství skutečných strojových instrukcí. Pro tuto činnost byl vyhrazen registr s indexem 1 a aliasem $at (assembler temporary). Díky existenci pseudoinstrukcí mohli programátoři používat například celou škálu podmíněných skoků – kromě zmíněných „nativních“ skoků beq a bne to byly pseudoinstrukce bge (test relace ≥), bgt (test relace >), ble (test relace ≤) a blt (test relace <); dále bylo možné použít pseudoinstrukci pro načtení 32bitové konstanty do zvoleného registru, výše zmíněnou pseudoinstrukci move atd. V případě potřeby se assembler mohl pomocí volby -bare přepnout do režimu, v němž bylo možné zapisovat pouze skutečné „nativní“ instrukce.

Obrázek 13: Mikroskopický pohled na část čipu R2000.

7. Seznam instrukcí mikroprocesoru MIPS R2000

Instrukce Operandy Provedená operace Význam
add $d,$s,$t $d = $s + $t součet dvou registrů
addu $d,$s,$t $d = $s + $t součet dvou registrů unsigned
sub $d,$s,$t $d = $s – $t rozdíl dvou registrů
subu $d,$s,$t $d = $s – $t rozdíl dvou registrů unsigned
addi $t,$s,C $t = $s + C přičtení konstanty
addiu $t,$s,C $t = $s + C přičtení konstanty unsigned
and $d,$s,$t $d = $s & $t bitová operace AND
andi $d,$s,C $d = $s & C bitová operace AND s 16bitovou konstantou
or $d,$s,$t $d = $s | $t bitová operace OR
ori $t,$s,C $t = $s | C bitová operace OR s 16bitovou konstantou
xor $d,$s,$t $d = $s ^ $t bitová operace XOR
nor $d,$s,$t $d = ~ ($s | $t) bitová operace NOR
slt $d,$s,$t $d = ($s < $t) výsledek 1/0 podle vyhodnocení relace <
slti $t,$s,C $t = ($s < C) dtto ale pro 16bitovou konstantu
sll $t,$s,C $t = $s << C bitový posun doleva
srl $t,$s,C $t = $s >> C bitový posun doprava
sra $t,$s,C $t = $s >>> C aritmetický posun doprava
beq $s,$t,C if ($s == $t) jump skok při rovnosti dvou registrů
bne $s,$t,C if ($s != $t) jump skok při nerovnosti dvou registrů
j C jump C*4 nepodmíněný skok
jr $s jump $s skok na adresu umístěnou v registru
jal C call C*4 zavolání procedury, uložení návratové adresy do $r31
lw $t,C($s) $t = mem[$s + C] načtení 32bitového slova z paměti
lh $t,C($s) $t = mem[$s + C] načtení 16bitového slova z paměti, rozšíření znaménka na 32 bitů
lhu $t,C($s) $t = mem[$s + C] načtení 16bitového slova z paměti, horních 16 bitů = 0
lb $t,C($s) $t = mem[$s + C] načtení 8bitového slova z paměti, rozšíření znaménka na 32 bitů
lbu $t,C($s) $t = mem[$s + C] načtení 8bitového slova z paměti, horních 24 bitů = 0
lui $t,C $t = C << 16 naplnění horních 16 bitů registru (podobná operace neexistuje pro spodních 16 bitů, lze nahradit addi)
sw $t,C($s) mem[$s + C] = $t uložení 32bitového slova do paměti
sh $t,C($s) mem[$s + C] = $t uložení 16bitového slova do paměti (jen spodních 16 bitů registru)
sb $t,C($s) mem[$s + C] = $t uložení 8bitového slova do paměti (jen spodních 8 bitů registru)
mfcZ $t, $s přesun čtyř bajtů z koprocesoru specifikovaného konstantou Z
mtcZ $t, $s přesun čtyř bajtů do koprocesoru specifikovaného konstantou Z

Obrázek 14: Mikroprocesor R3000.

8. Porovnání obsazení registrů u procesorů MIPS a SPARC

V předchozích kapitolách jsme si řekli, že mikroprocesory s architekturou MIPS nabízely programátorům v jeden okamžik 32 pracovních registrů. Taktéž již víme, že kromě prvního registru s indexem 0, v němž byla skutečně uložena nulová hodnota (viz též druhou a třetí kapitolu), mohly být ostatní pracovní registry teoreticky využívány libovolným způsobem. Ovšem ve skutečnosti se tvůrci assemblerů, překladačů vyšších programovacích jazyků i programátoři operačních systémů poměrně brzy shodli na tom, že registry budou rozděleny do několika skupin podle svého významu, čemuž taktéž odpovídá přezdívka (alias) registrů používaná jak v assemblerech, tak i v debugerech. V příštím dílu seriálu o architekturách počítačů se budeme zabývat mikroprocesory SPARC, které taktéž programátorům v jeden okamžik nabízely 32 pracovních registrů. Pro zajímavost jsou v následující tabulce vypsány přezdívky všech 32 pracovních registrů na obou architekturách (prefixový znak uvedený před názvy a aliasy registrů se u obou architektur, resp. u jejich assemblerů, odlišuje).

Obrázek 15: Spodní strana mikroprocesoru R3000.

Za povšimnutí stojí například fakt, že některé pracovní registry se stejným indexem mají na obou typech mikroprocesorů taktéž shodnou funkci. Naproti tomu například na architektuře MIPS neexistují registry globální (to je zapříčiněno zejména neexistencí registrových oken) a i počet registrů používaných pro ukládání návratových hodnot subrutin je u obou typů architektur odlišný (2 resp. 6 registrů):

Číslo registru Alias na MIPS Funkce registru na MIPS Alias na SPARC Funkce registru na SPARC
0 $zero konstanta 0 %g0 konstanta 0
1 $at rezervováno pro assembler %g1 globální hodnota #1
2 $v0 návratová hodnota #1 %g2 globální hodnota #2
3 $v1 návratová hodnota #2 %g3 globální hodnota #3
4 $a0 první argument funkce %g4 globální hodnota #4
5 $a1 druhý argument funkce %g5 globální hodnota #5
6 $a2 třetí argument funkce %g6 globální hodnota #6
7 $a3 čtvrtý argument funkce %g7 globální hodnota #7
8 $t0 ALU operace #1 %o0 návratová hodnota #0
9 $t1 ALU operace #2 %o1 návratová hodnota #1
10 $t2 ALU operace #3 %o2 návratová hodnota #2
11 $t3 ALU operace #4 %o3 návratová hodnota #3
12 $t4 ALU operace #5 %o4 návratová hodnota #4
13 $t5 ALU operace #6 %o5 návratová hodnota #5
14 $t6 ALU operace #7 %sp ukazatel na vrchol zásobníku
15 $t7 ALU operace #8 %o7 návratová adresa ze subrutiny
16 $s0 hodnota se nezmění při call %l0 lokální data, ALU operace #0
17 $s1 hodnota se nezmění při call %l1 lokální data, ALU operace #1
18 $s2 hodnota se nezmění při call %l2 lokální data, ALU operace #2
19 $s3 hodnota se nezmění při call %l3 lokální data, ALU operace #3
20 $s4 hodnota se nezmění při call %l4 lokální data, ALU operace #4
21 $s5 hodnota se nezmění při call %l5 lokální data, ALU operace #5
22 $s6 hodnota se nezmění při call %l6 lokální data, ALU operace #6
23 $s7 hodnota se nezmění při call %l7 lokální data, ALU operace #7
24 $t8 ALU operace #9 %i0 první argument funkce
25 $t9 ALU operace #10 %i1 druhý argument funkce
26 $k0 OS Kernel 1, měněn při přerušení %i2 třetí argument funkce
27 $k1 OS Kernel 2, měněn při přerušení %i3 čtvrtý argument funkce
28 $gp ukazatel na globální data %i4 pátý argument funkce
29 $sp ukazatel na vrchol zásobníku %i5 šestý argument funkce
30 $fp ukazatel na začátek rámce %fp ukazatel na začátek rámce
31 $ra návratová adresa %i7 návratová adresa

Obrázek 16: Matematický koprocesor R3010, který dokázal spolupracovat s mikroprocesory R3000. Podobně byl i pro původní řadu mikroprocesorů R2000 zkonstruován matematický koprocesor R2010.

9. Odkazy na Internetu

  1. SPARC Instruction Set
    http://www.aca­demic.marist.e­du/~jzbv/archi­tecture/Projec­ts/S2002/SPAR­C/inst_set.html
  2. MIPS Architecture Overview
    http://tams-www.informatik.uni-hamburg.de/ap­plets/hades/web­demos/mips.html
  3. MIPS Technologies R3000
    http://www.cpu-world.com/CPUs/R3­000/
  4. CPU-collection: IDT R3010 FPU
    http://www.cpu-collection.de/?tn=0&l0­=co&l1=IDT&l2=R3010+F­PU
  5. The MIPS R2000 Instruction Set
    http://suraj.lum­s.edu.pk/~cs423a0­5/Reference/MIP­SCodeTable.pdf
  6. Maska mikroprocesoru RISC 1
    http://www.cs­.berkeley.edu/~pat­trsn/Arch/RIS­C1.jpg
  7. Maska mikroprocesoru RISC 2
    http://www.cs­.berkeley.edu/~pat­trsn/Arch/RIS­C2.jpg
  8. The MIPS Register Usage Conventions
    http://pages.cs­.wisc.edu/~cs354–2/beyond354/con­ventions.html
  9. C.E. Sequin and D.A.Patterson: Design and Implementation of RISC I
    http://www.eec­s.berkeley.edu/Pub­s/TechRpts/1982/CSD-82–106.pdf
  10. Berkeley RISC
    http://en.wiki­pedia.org/wiki/Ber­keley_RISC
  11. Great moments in microprocessor history
    http://www.ib­m.com/developer­works/library/pa-microhist.html
  12. Microprogram-Based Processors
    http://resear­ch.microsoft.com/en-us/um/people/gbe­ll/Computer_Struc­tures_Principles_an­d_Examples/csp0167­.htm
  13. Great Microprocessors of the Past and Present
    http://www.cpushac­k.com/CPU/cpu­1.html
  14. A Brief History of Microprogramming
    http://www.cs­.clemson.edu/~mar­k/uprog.html
  15. Architecture of the WISC CPU/16
    http://www.ece­.cmu.edu/~koop­man/stack_com­puters/sec4_2­.html
  16. Zásobníkový procesor WISC CPU/16 (Root.CZ)
    http://www.ro­ot.cz/clanky/pro­gramovaci-jazyk-forth-a-zasobnikove-procesory-16/#k03
  17. Writable instruction set, stack oriented computers: The WISC Concept
    http://www.ece­.cmu.edu/~koop­man/forth/roches­ter87.pdf
  18. The Great CPU List: Part X: Hitachi 6301 – Small and microcoded (1983)
    http://jbayko­.sasktelwebsi­te.net/cpu2.html#Sec2Par­t10
  19. What is RISC?
    http://www-cs-faculty.stanfor­d.edu/~erober­ts/courses/so­co/projects/2000–01/risc/whatis/
  20. RISC vs. CISC
    http://www-cs-faculty.stanfor­d.edu/~erober­ts/courses/so­co/projects/2000–01/risc/risccisc/
  21. RISC and CISC definitions:
    http://www.cpushac­k.com/CPU/cpu­AppendA.html
  22. The Evolution of RISC
    http://www.ib­m.com/developer­works/library/pa-microhist.html#si­debar1
  23. SPARC Processor Family Photo
    http://thenet­workisthecompu­ter.com/site/?p=243
  24. SPARC: Decades of Continuous Technical Innovation
    http://blogs.o­racle.com/onthe­record/entry/spar­c_decades_of_con­tinuous_techni­cal
  25. The SPARC processors
    http://www.top500­.org/2007_over­view_recent_su­percomputers/spar­c_processors
  26. Maurice V. Wilkes Home Page
    http://www.cl­.cam.ac.uk/ar­chive/mvw1/
  27. Papers by M. V. Wilkes (důležitá je především jeho práce číslo 35)
    http://www.cl­.cam.ac.uk/ar­chive/mvw1/list-of-papers.txt
  28. Microprogram Memory
    http://free-books-online.org/com­puters/advanced-computer-architecture/mi­croprogram-memory/
  29. First Draft of a report on the EDVAC
    http://qss.stan­ford.edu/~god­frey/vonNeuman­n/vnedvac.pdf
  30. Introduction to Microcontrollers
    http://www.pic24mi­cro.com/cisc_vs_ris­c.html
  31. Reduced instruction set computing (Wikipedia)
    http://en.wiki­pedia.org/wiki/Re­duced_instruc­tion_set_compu­ter
  32. MIPS architecture (Wikipedia)
    http://en.wiki­pedia.org/wiki/MIP­S_architecture
  33. Very long instruction word (Wikipedia)
    http://en.wiki­pedia.org/wiki/Ve­ry_long_instruc­tion_word
  34. Classic RISC pipeline (Wikipedia)
    http://en.wiki­pedia.org/wiki/Clas­sic_RISC_pipe­line
  35. R2000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R2000_(mi­croprocessor)
  36. R3000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R3000
  37. R4400 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R4400
  38. R8000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R8000
  39. R10000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R10000
  40. SPARC (Wikipedia)
    http://en.wiki­pedia.org/wiki/Sparc
  41. CPU design (Wikipedia)
    http://en.wiki­pedia.org/wiki/CPU_de­sign
  42. Control unit (Wikipedia)
    http://en.wiki­pedia.org/wiki/Con­trol_unit
  43. Microcode (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mi­crocode
  44. Microsequencer (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mi­crosequencer
  45. Maurice Wilkes (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mau­rice_Wilkes
  46. Micro-operation (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mi­cro-operation

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.