Hlavní navigace

RISCová architektura PowerPC: matematický koprocesor

23. 8. 2016
Doba čtení: 16 minut

Sdílet

Třetí a současně i poslední část článku o mikroprocesorech s architekturou PowerPC je věnována popisu instrukcí používaných při práci s numerickými hodnotami s plovoucí řádovou čárkou (floating point).

Obsah

1. RISCová architektura PowerPC: matematický koprocesor

2. Podporované formáty numerických hodnot s plovoucí řádovou čárkou

3. Pracovní registry používané matematickým koprocesorem

4. Zaokrouhlovací režimy vybírané při práci s plovoucí řádovou čárkou

5. Výjimky, které mohou při výpočtech nastat

6. Instrukce typu LOAD a STORE s FP registry

7. Základní aritmetické instrukce s FP registry

8. Přesuny dat mezi pracovními registry s provedením vybrané operace

9. Instrukce typu Multiply-Add a Multiply-Subtract

10. Porovnání operandů a nastavení příznakových bitů

11. Konverze dat

12. Odkazy na Internetu

1. RISCová architektura PowerPC: matematický koprocesor

V dnešní části článku o mikroprocesorech s architekturou PowerPC si popíšeme základní vlastnosti třetího (a současně i posledního) modulu CPU, který je určen pro provádění operací s numerickými hodnotami s plovoucí řádovou čárkou (první modul se staral o provádění skoků a modul druhý o operace s celočíselnými hodnotami). Mikroprocesory s architekturou PowerPC podporují práci s formáty singledouble definované ve známé normě IEEE 754, která je mimochodem v platnosti již od roku 1985 a teprve relativně nedávno se dočkala svého doplnění a upřesnění. V normě IEEE 754 jsou specifikovány nejenom vlastní formáty uložení numerických hodnot v systému pohyblivé/plovoucí řádové čárky (FP formátu), ale i pravidla pro implementaci aritmetických operací s těmito hodnotami, včetně některých konverzí a zaokrouhlování. Konkrétně je v této normě popsáno:

  1. Základní (basic) a rozšířený (extended) formát uložení numerických hodnot.
  2. Způsob provádění základních matematických operací:
    • součet
    • rozdíl
    • součin
    • podíl
    • zbytek po dělení
    • druhá odmocnina
    • porovnání
  3. Pravidla pro konverze prováděné mezi celočíselnými formáty (integer) a formáty s plovoucí řádovou čárkou.
  4. Způsob konverze mezi různými formáty s plovoucí řádovou čárkou (singledouble atd.).
  5. Způsob konverze základního formátu s plovoucí řádovou čárkou na řetězec číslic (včetně nekonečen a nečíselných hodnot).
  6. Práce s hodnotami NaN (Not a Number) a výjimkami. Viz též další kapitoly, kde se těmito vlastnostmi budeme zabývat z pohledu procesorů PowerPC.

2. Podporované formáty numerických hodnot s plovoucí řádovou čárkou

Vybraná podmnožina racionálních čísel může být vyjádřena vztahem:

XFP=(-1)s × 2exp-bias × m

kde:

  • XFP značí reprezentovanou numerickou hodnotu z podmnožiny racionálních čísel (ta je zase podmnožinou čísel reálných). Díky vyhrazeným (speciálním) hodnotám je možné rozlišit kladnou a zápornou nulu a dokonce i kladné a záporné nekonečno. Také se může reprezentovat nečíselná hodnota: NaN – (Not a Number), která je výsledkem některých matematicky nedefinovaných operací, například 0/0 nebo 00 (opět viz navazující kapitoly).
  • 2 je báze, někdy také nazývaná radix, u IEEE 754 je to vždy dvojka, protože výpočty s bází dvě jsou pro číslicové obvody nejjednodušší. V minulosti se používaly i jiné báze, například 8, 16 nebo i 10.
  • exp je vždy kladná hodnota exponentu posunutého o hodnotu bias
  • bias je hodnota, díky které je uložený exponent vždy kladný. Tato hodnota se většinou volí dle vztahu: bias=2eb-1-1, kde eb je počet bitů vyhrazených pro exponent. Pro specifické účely je však možné zvolit i jinou hodnotu.
  • m je mantisa, která je u formátů IEEE 754 vždy kladná
  • s je znaménkový bit nabývající hodnoty 0 nebo 1. Pokud je tento bit nulový, je reprezentovaná hodnota XFP kladná, v opačném případě se jedná o zápornou hodnotu. Vzhledem k tomu, že je jeden bit vyhrazen na uložení znaménka, je možné rozlišit kladnou a zápornou nulu.

Podle bitové šířky čísel exp, bias a m se rozlišují základní a rozšířené formáty FP čísel; norma IEEE 754 přitom explicitně zmiňuje dva základní formáty: jednoduchá přesnost (single, též jen float) a dvojitá přesnost (double).

Formát single používá pro uložení numerických hodnot 32 bitová slova, přičemž oněch 32 bitů je rozděleno do třech částí. V první části (představované nejvyšším bitem) je uloženo znaménko, následuje osm bitů pro uložení posunutého exponentu a za nimi je zbývajících 23 bitů, které slouží pro uložení mantisy. Celé třiceti dvou bitové slovo s FP hodnotou tedy vypadá následovně:

bit 31 30   29 … 24   23 22   21 … 3   2   1   0
význam s exponent (8 bitů) mantisa (23 bitů)

FP formát dvojité přesnosti (double), jež je definovaný taktéž normou IEEE 754, se v mnohém podobá formátu s jednoduchou přesností (single), pouze se zdvojnásobil celkový počet bitů, ve kterých je hodnota uložena, tj. místo 32 bitů se používá 64 bitů. Právě to je příčinou, proč se tento formát nazývá double, ve skutečnosti je přesnost více než dvojnásobná. 64 bitů alokovaných pro FP hodnotu je v tomto případě rozděleno následujícím způsobem:

  1. 1 bit pro znaménko
  2. 11 bitů pro exponent
  3. 52 bitů pro mantisu

Bitově vypadá rozdělení následovně:

bit 63 62 … 52 51 … 0
význam s exponent (11 bitů) mantisa 52( bitů)

Povšimněte si, že díky tomu, že nejvyšší bit přímo udává znaménko uložené hodnoty, je provedení operace typu -x, abs(x) či -abs(x) velmi snadné. Právě tyto operace jsou na architektuře PowerPC dostupné „zadarmo“ při přenosech dat. Podrobnosti si řekneme v osmé kapitole.

3. Pracovní registry používané matematickým koprocesorem

Podobně, jako je tomu u mnoha (přesněji řečeno u převážné většiny) dalších RISCových architektur, například u architektury SPARC, PA-RISC, RISC-V a samozřejmě i ARM, se i v PowerPC všechny aritmetické operace s numerickými hodnotami s plovoucí řádovou čárkou provádí nad obsahem pracovních registrů a nikoli (například) nad položkami uloženými v zásobníku operandů, jak se to provádělo například u originálního matematického koprocesoru Intel 8087. Pokud se tedy má aplikovat jakákoli FP operace, je nejdříve nutné načíst příslušné operandy do vybraných pracovních registrů, aplikovat požadované operace a popř. provést zpětný zápis do operační paměti.

Pro FP operace se používá sada třiceti dvou pracovních registrů nazvaných FPR0FPR31, přičemž každý z těchto registrů má šířku 64 bitů a umožňuje tedy nativně provádět veškeré operace s dvojnásobnou přesností (double). Interně se většina operací (až na vybrané operace aritmetické) provádí právě s hodnotami typu double, přičemž některé instrukce typu LOAD a STORE dokážou při načítání či naopak ukládání numerických dat automaticky provést konverzi single→double či double→single. Vzhledem k počtu pracovních registrů je v instrukčních slovech pro uložení indexu registru popř. registrů, s nimiž se má provést nějaká operace, rezervováno pět bitů.

4. Zaokrouhlovací režimy vybírané při práci s plovoucí řádovou čárkou

U mnoha aritmetických operací je nutné provést zaokrouhlení výsledku před jeho uložením zpět do vybraného pracovního registru. Vzhledem k tomu, že zaokrouhlování může poměrně zásadním způsobem ovlivnit výsledky některých výpočtů (iterativní součet mnoha členů nějaké řady atd.), lze na architektuře PowerPC zvolit, jakým způsobem se má zaokrouhlování provádět. Samozřejmě se nejedná o zaokrouhlování na celá čísla, ale – poněkud zjednodušeně řečeno – o volbu hodnoty posledního bitu mantisy. Ve stavovém a řídicím registru FPSCR je zaokrouhlovací režim určen dvěma bity, jejichž kombinací lze vybrat tyto režimy:

# Bitová kombinace Význam
1 00 zaokrouhlení k nejbližší reprezentovatelné hodnotě
2 01 zaokrouhlení směrem k nule
3 10 zaokrouhlení směrem k +∞
4 11 zaokrouhlení směrem k -∞

V případě prvního režimu může nastat situace, kdy jsou obě „nejbližší“ reprezentovatelné hodnoty od výsledku vzdáleny stejně. Potom se vybere ta hodnota, jejíž nejnižší bit je nulový.

5. Výjimky, které mohou při výpočtech nastat

Při výpočtech s FP hodnotami může nastat hned několik výjimek, které se na procesorech s architekturou PowerPC budou korektně detekovat a nastaví se příslušné bity v řídicím a příznakovém registru FPSCR. Jedná se o následující typy výjimek:

# Operace, která vyvolá výjimku
1 Operace s hodnotou SNaN (Signalling Nan), která vznikla v důsledku nějaké předchozí nepovolené operace
2 Operace ∞-∞ (rozdíl dvou nekonečen)
3 Operace ∞/∞ (podíl dvou nekonečen)
4 Operace 0/0 (podíl dvou nul)
5 Operace ∞×0
6 Porovnání libovolné hodnoty s NaN
7 Druhá odmocnina ze záporné hodnoty
8 Konverze příliš velké hodnoty (vznikne NaN nebo nekonečno)

Poznámka: kladné i záporné nekonečno je výsledkem mnoha přesně definovaných operací (například dělení libovolné nenulové hodnoty nulou) a kromě zmíněných speciálních případů se nekonečno může v aritmetických operacích bez větších problémů použít. To znamená, že následující operace lze aplikovat bez vzniku výjimky:

# Operace, která nevyvolá výjimku
1 Operace ∞+∞ (součet dvou nekonečen)
2 Operace ∞*∞ (součin dvou nekonečen)
3 Operace x/0 (x!=0)
4 Operace ∞×x (x!=0)

Poznámka: pokud x>0, pak je výsledkem operace x/0 hodnota ∞, pokud x<0, pak je výsledkem podle očekávání hodnota -∞. Totéž platí i pro operaci ∞×x.

6. Instrukce typu LOAD a STORE s FP registry

Instrukce, které slouží pro přenos numerických hodnot reprezentovaných v systému plovoucí řádové čárky mezi registry a operační pamětí, lze rozdělit podle směru přenosu (LOAD a STORE), typu operandů uložených v operační paměti (single, double), adresového režimu (Rx+offset, Rx+Ry) a taktéž podle toho, zda se registr určený pro adresování naplní novou hodnotou či nikoli (autoinkrementace, autodekrementace). Nejprve si uveďme tabulku s instrukcemi určenými pro načtení hodnot z operační paměti:

# Instrukce Význam
1 lfs načtení a konverze hodnoty typu single z adresy Rx+offset
2 lfsx načtení a konverze hodnoty typu single z adresy Rx+Ry
3 lfsu jako instrukce lfs, ovšem dojde k úpravě registru Rx (Rx=Rx+D)
4 lfsux jako instrukce lfsx, ovšem dojde k úpravě registru Rx (Rx=Rx+Ry)
     
5 lfd načtení hodnoty typu double z adresy Rx+offset
6 lfdx načtení hodnoty typu double z adresy Rx+Ry
7 lfdu jako instrukce lfd, ovšem dojde k úpravě registru Rx (Rx=Rx+D)
8 lfdux jako instrukce lfdx, ovšem dojde k úpravě registru Rx (Rx=Rx+Ry)

Offset je šestnáctibitová konstanta uložená přímo v instrukčním slovu a lze ji použít pro autoinkrementaci či autodekrementaci registru Rx, například při průchodu polem (D=4 nebo 8).

Následují instrukce určené pro uložení operandů do operační paměti:

# Instrukce Význam
1 stfs konverze na single a uložení hodnoty na adresu Rx+offset
2 stfsx konverze na single a uložení hodnoty na adresu Rx+Ry
3 stfsu jako instrukce stfs, ovšem dojde k úpravě registru Rx (Rx=Rx+D)
4 stfsux jako instrukce stfsx, ovšem dojde k úpravě registru Rx (Rx=Rx+Ry)
     
5 stfd odpovídá stfs, ovšem pro typ double
6 stfdx odpovídá stfsx, ovšem pro typ double
7 stfdu odpovídá stfsu, ovšem pro typ double
8 stfdux odpovídá stfsux, ovšem pro typ double

I u těchto instrukcí můžeme vidět použití offsetu společně s operací „update“ (instrukce, které obsahují znak u ve svém názvu.

7. Základní aritmetické instrukce s FP registry

Nabídka základních aritmetických operací pravděpodobně nebude příliš překvapivá, protože na architektuře PowerPC nalezneme všechny čtyři základní operace: součet, rozdíl, součet i podíl. Povšimněte si, že je možné si vybrat, zda bude výsledek reprezentován typem single či double (a to i když pracovní registry mají konstantní šířku 64 bitů). Všechny základní aritmetické operace používají tři pracovní registry – dva registry zdrojové a jeden registr cílový:

# Instrukce Význam
1 fadd provedení operace FPRt=FPRa+FPRb
2 fadds provedení operace FPRt=FPRa+FPRb (single)
3 fsub provedení operace FPRt=FPRa-FPRb
4 fsubs provedení operace FPRt=FPRa-FPRb (single)
     
5 fmul provedení operace FPRt=FPRa*FPRb
6 fmuls provedení operace FPRt=FPRa*FPRb (single)
7 fdiv provedení operace FPRt=FPRa/FPRb
8 fdivs provedení operace FPRt=FPRa/FPRb (single)

Následuje seznam volitelných instrukcí, které můžeme (ale taktéž nemusíme) na procesorech PowerPC nalézt. Zajímavé jsou instrukce, které rychle odhadnou výsledek operace se zaručenou minimální přesností:

# Instrukce Význam
1 fsqrt výpočet druhé odmocniny (double)
2 fsqrts výpočet druhé odmocniny (single)
     
3 fre odhad operace FPRt=1/FPRa se známou přesností
4 fres odhad operace FPRt=1/FPRa (single)
     
5 frsqrte odhad operace výpočtu druhé odmocniny se známou přesností
6 frsqrtes odhad operace výpočtu druhé odmocniny se známou přesnosti (single)

8. Přesuny dat mezi pracovními registry s provedením vybrané operace

Zajímavé jsou instrukce, které jsou určené pro přesuny dat mezi pracovními registry FPRx. V instrukčních slovech těchto instrukcí je uložen index zdrojového registru a index registru cílového. Ovšem kromě toho je v případě potřeby možné při přesunu dat na hodnotu aplikovat jednu ze tří jednoduchých a tudíž i rychlých operací:

# Instrukce Význam
1 fmr provedení operace FPRt=FPRx
2 fneg provedení operace FPRt=-FPRx
3 fabs provedení operace FPRt=abs(FPRx)
4 fnabs provedení operace FPRt=-abs(FPRx)

Povšimněte si, že všechny prováděné operace pouze manipulují se znaménkem (nejvyšším bitem):

# Instrukce Bit s
1 fmr kopie
2 fneg negace
3 fabs vynulování
4 fnabs nastavení (na 1)

9. Instrukce typu Multiply-Add a Multiply-Subtract

Na mikroprocesorech s architekturou PowerPC nalezneme i v mnoha případech velmi užitečné instrukce, v nichž se provádí operace násobení společně s operací součtu či rozdílu. Tyto instrukce je možné využít v několika aplikačních oblastech, například při implementaci různých číslicových filtrů atd. Zajímavé je, že všechny instrukce tohoto typu mají v instrukčním slově zakódovány indexy hned čtyř pracovních registrů – tří registrů zdrojových a jednoho registru cílového. Bližší informace jsou uvedeny v následující tabulce:

# Instrukce Prováděný výpočet
1 fmadd FPRt = FPRa×FPRc + FPRb
2 fmadds dtto pro single
3 fmsub FPRt = FPRa×FPRc – FPRb
4 fmsubs dtto pro single
     
1 fnmadd FPRt = -(FPRa×FPRc + FPRb)
2 fnmadds dtto pro single
3 fnmsub FPRt = -(FPRa×FPRc – FPRb)
4 fnmsubs dtto pro single

Číslicový filtr lze tedy realizovat například kombinací instrukcí lfdu, fmadd a stfdu.

10. Porovnání operandů a nastavení příznakových bitů

V instrukční sadě nalezneme i dvojici instrukcí určených pro porovnání obsahu dvou pracovních registrů a nastavení příslušných příznaků v příznakovém registru FPCC. Jedná se o následující dvě instrukce:

# Instrukce Význam
1 fcmpu porovnání obsahu dvou pracovních registrů
2 fcmpo porovnání obsahu dvou pracovních registrů, odlišné zpracování NaN

Nastavované příznaky (porovnání dvou hodnot odlišných od NaN):

Bit v FPCC.CR Jméno Význam
0 FL FPRa < FPRb
1 FG FPRa > FPRb
2 FE FPRa == FPRb
3 FU nelze porovnat (unordered)

Poznámka 1: za všech okolností je vždy nastaven pouze jeden z těchto příznaků, ostatní tři příznaky jsou vynulovány.

Poznámka 2: bit FU se nastaví ve chvíli, kdy je alespoň jedna z porovnávaných hodnot NaN. To platí i ve chvíli, kdy se porovnávají dvě hodnoty NaN (jinými slovy platí NaN != NaN).

CS24 tip temata

11. Konverze dat

Poslední skupinou instrukcí jsou instrukce sloužící pro konverzi dat. Těchto instrukcí existuje celá řada a jsou vypsány v následující tabulce. Každá instrukce obsahuje specifikaci zdrojového a cílového registru (konverzi tedy není nutné provádět „in situ“):

# Instrukce Význam
1 frsp konverze double→single
     
2 fctid konverze double→integer (64bit integer)
3 fctidz dtto, ale vždy se provede zaokrouhlení směrem k nule
     
4 fctiw konverze double→integer (32bit integer)
5 fctidz dtto, ale vždy se provede zaokrouhlení směrem k nule
     
6 fcfid konverze integer→double (64bit integer)

U instrukcí fctid a fctiw je použit zaokrouhlovací režim nastavený globálně.

12. Odkazy na Internetu

  1. Procesory RISC v pracovních stanicích a serverech – architektura SPARC V8 a
    http://www.root.cz/clanky/procesory-risc-v-pracovnich-stanicich-a-serverech-architektura-sparc-v8-a-v9/
  2. Procesory RISC v pracovních stanicích a serverech – architektura PA-RISC
    http://www.root.cz/clanky/procesory-risc-v-pracovnich-stanicich-a-serverech-architektura-pa-risc/
  3. Rozšíření instrukční sady procesorových jader s otevřenou architekturou RISC-V
    http://www.root.cz/clanky/rozsireni-instrukcni-sady-procesorovych-jader-s-otevrenou-architekturou-risc-v/
  4. Práce s hodnotami s plovoucí řádovou čárkou na mikroprocesorech ARM
    http://www.root.cz/clanky/prace-s-hodnotami-s-plovouci-radovou-carkou-na-mikroprocesorech-arm/
  5. Simplified PowerPC Instruction Set
    http://www.ds.ewi.tudelft­.nl/vakken/in101/labcourse/in­struction-set/
  6. Assembly language for Power Architecture, Part 1: Programming concepts and beginning PowerPC instructions
    http://www.ibm.com/develo­perworks/linux/library/l-powasm1/index.html
  7. Assembly language for Power Architecture, Part 2: The art of loading and storing on PowerPC
    http://www.ibm.com/develo­perworks/linux/library/l-powasm2/index.html
  8. Assembly language for Power Architecture, Part 3: Programming with the PowerPC branch processor
    http://www.ibm.com/develo­perworks/library/l-powasm3/index.html
  9. Assembly language for Power Architecture, Part 4: Function calls and the PowerPC 64-bit ABI
    http://www.ibm.com/develo­perworks/linux/library/l-powasm4/index.html
  10. PowerPC overview (poněkud starší materiály z roku 2006)
    http://titancity.com/arti­cles/ppc.html
  11. PowerPC (Wikipedia)
    https://en.wikipedia.org/wiki/PowerPC
  12. Status Register
    https://en.wikipedia.org/wi­ki/Status_register
  13. Why Learn Assembly Language?
    http://www.codeproject.com/Ar­ticles/89460/Why-Learn-Assembly-Language
  14. Is Assembly still relevant?
    http://programmers.stackex­change.com/questions/95836/is-assembly-still-relevant
  15. Why Learning Assembly Language Is Still a Good Idea
    http://www.onlamp.com/pub/a/on­lamp/2004/05/06/writegreat­code.html
  16. Assembly language today
    http://beust.com/weblog/2004/06/23/as­sembly-language-today/
  17. RISC-V Draft Sompressed ISA Version 1.9 Released
    https://blog.riscv.org/2015/11/risc-v-draft-compressed-isa-version-1–9-released/
  18. RISC vs. CISC: the Post-RISC Era
    http://archive.arstechnica­.com/cpu/4q99/risc-cisc/rvc-1.html
  19. Introduction to ARM Thumb
    http://www.embedded.com/electronics-blogs/beginner-s-corner/4024632/Introduction-to-ARM-thumb
  20. Code Size – a comprehensive comparison of microMIPS32 and Thumb code size using many Megabytes of customer code
    https://community.arm.com/grou­ps/processors/blog/2014/04/28/co­de-size-a-comprehensive-comparison-of-micromips32-and-thumb-code-size-using-many-megabytes-of-customer-code
  21. MIPS MCUs Outrun ARM
    http://www.linleygroup.com/new­sletters/newsletter_detail­.php?num=5117
  22. Improving Energy Efficiency and Reducing Code Size with RISC-V Compressed
    http://www.eecs.berkeley.e­du/~waterman/papers/ms-thesis.pdf
  23. An Introduction to Lock-Free Programming
    http://preshing.com/20120612/an-introduction-to-lock-free-programming/
  24. Sequential consistency
    https://en.wikipedia.org/wi­ki/Sequential_consistency
  25. Understanding Atomic Operations
    https://jfdube.wordpress.com/2011/11/30/un­derstanding-atomic-operations/
  26. Load-link/store-conditional
    https://en.wikipedia.org/wiki/Load-link/store-conditional
  27. The RISC-V Compressed Instruction Set Manual (Pozor: verze 1.7)
    http://riscv.org/spec/riscv-compressed-spec-v1.7.pdf
  28. Carry bits, The Architect's Trap
    http://yarchive.net/comp/ca­rry_bit.html
  29. Microprocessor Design/ALU Flags
    https://en.wikibooks.org/wi­ki/Microprocessor_Design/A­LU_Flags
  30. Flags register in an out-of-order processor
    http://cs.stackexchange.com/qu­estions/42095/flags-register-in-an-out-of-order-processor
  31. AMD Am29000
    https://en.wikipedia.org/wi­ki/AMD_Am29000
  32. Status register
    https://en.wikipedia.org/wi­ki/Status_register
  33. AMD Am29000 microprocessor family
    http://www.cpu-world.com/CPUs/29000/
  34. AMD 29k (Streamlined Instruction Processor) ID Guide
    http://www.cpushack.com/Am29k.html
  35. AMD Am29000 (Wikipedia)
    http://en.wikipedia.org/wi­ki/AMD_Am29000
  36. AMD K5 („K5“ / „5k86“)
    http://www.pcguide.com/ref/cpu/fam/g5K5-c.html
  37. Comparing four 32-bit soft processor cores
    http://www.eetimes.com/au­thor.asp?section_id=14&doc_id=1286116
  38. RISC-V Instruction Set
    http://riscv.org/download­.html#spec_compressed_isa
  39. RISC-V Spike (ISA Simulator)
    http://riscv.org/download.html#isa-sim
  40. RISC-V (Wikipedia)
    https://en.wikipedia.org/wiki/RISC-V
  41. David Patterson (Wikipedia)
    https://en.wikipedia.org/wi­ki/David_Patterson_(compu­ter_scientist)
  42. OpenRISC (oficiální stránky tohoto projektu)
    http://openrisc.io/
  43. OpenRISC architecture
    http://openrisc.io/architecture.html
  44. Emulátor OpenRISC CPU v JavaScriptu
    http://s-macke.github.io/jor1k/demos/main.html
  45. OpenRISC (Wikipedia)
    https://en.wikipedia.org/wi­ki/OpenRISC
  46. OpenRISC – instrukce
    http://sourceware.org/cgen/gen-doc/openrisc-insn.html
  47. OpenRISC – slajdy z přednášky o tomto projektu
    https://iis.ee.ethz.ch/~gmichi/a­socd/lecturenotes/Lecture6­.pdf
  48. Maska mikroprocesoru RISC 1
    http://www.cs.berkeley.edu/~pat­trsn/Arch/RISC1.jpg
  49. Maska mikroprocesoru RISC 2
    http://www.cs.berkeley.edu/~pat­trsn/Arch/RISC2.jpg
  50. C.E. Sequin and D.A.Patterson: Design and Implementation of RISC I
    http://www.eecs.berkeley.e­du/Pubs/TechRpts/1982/CSD-82–106.pdf
  51. Berkeley RISC
    http://en.wikipedia.org/wi­ki/Berkeley_RISC
  52. Great moments in microprocessor history
    http://www.ibm.com/develo­perworks/library/pa-microhist.html
  53. Microprogram-Based Processors
    http://research.microsoft.com/en-us/um/people/gbell/Computer_Struc­tures_Principles_and_Exam­ples/csp0167.htm
  54. Great Microprocessors of the Past and Present
    http://www.cpushack.com/CPU/cpu1.html
  55. A Brief History of Microprogramming
    http://www.cs.clemson.edu/~mar­k/uprog.html
  56. What is RISC?
    http://www-cs-faculty.stanford.edu/~ero­berts/courses/soco/projec­ts/2000–01/risc/whatis/
  57. RISC vs. CISC
    http://www-cs-faculty.stanford.edu/~ero­berts/courses/soco/projec­ts/2000–01/risc/risccisc/
  58. RISC and CISC definitions:
    http://www.cpushack.com/CPU/cpu­AppendA.html
  59. FPGA
    https://cs.wikipedia.org/wi­ki/Programovateln%C3%A9_hra­dlov%C3%A9_pole
  60. The Evolution of RISC
    http://www.ibm.com/develo­perworks/library/pa-microhist.html#sidebar1
  61. SPARC Processor Family Photo
    http://thenetworkisthecom­puter.com/site/?p=243
  62. SPARC: Decades of Continuous Technical Innovation
    http://blogs.oracle.com/on­therecord/entry/sparc_deca­des_of_continuous_technical
  63. The SPARC processors
    http://www.top500.org/2007_o­verview_recent_supercompu­ters/sparc_processors
  64. Reduced instruction set computing (Wikipedia)
    http://en.wikipedia.org/wi­ki/Reduced_instruction_set_com­puter
  65. MIPS architecture (Wikipedia)
    http://en.wikipedia.org/wi­ki/MIPS_architecture
  66. Very long instruction word (Wikipedia)
    http://en.wikipedia.org/wi­ki/Very_long_instruction_word
  67. Classic RISC pipeline (Wikipedia)
    http://en.wikipedia.org/wi­ki/Classic_RISC_pipeline
  68. R2000 Microprocessor (Wikipedia)
    http://en.wikipedia.org/wi­ki/R2000_(microprocessor)
  69. R3000 Microprocessor (Wikipedia)
    http://en.wikipedia.org/wiki/R3000
  70. R4400 Microprocessor (Wikipedia)
    http://en.wikipedia.org/wiki/R4400
  71. R8000 Microprocessor (Wikipedia)
    http://en.wikipedia.org/wiki/R8000
  72. R10000 Microprocessor (Wikipedia)
    http://en.wikipedia.org/wiki/R10000
  73. SPARC (Wikipedia)
    http://en.wikipedia.org/wiki/Sparc
  74. CPU design (Wikipedia)
    http://en.wikipedia.org/wi­ki/CPU_design
  75. Control unit (Wikipedia)
    http://en.wikipedia.org/wi­ki/Control_unit

Autor článku

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