Mikrokód - Microcode

V návrhu procesoru , mikrokódu je technika, která vloží vrstvu počítačového organizace mezi CPU hardware a programátorem viditelné instrukční sady architektury počítače. Mikrokód je vrstva instrukcí na úrovni hardwaru, která implementuje pokyny strojového kódu vyšší úrovně nebo vnitřní stavové sekvenování strojů v mnoha prvcích digitálního zpracování . Mikrokód se používá v univerzálních centrálních procesorových jednotkách , i když v současných stolních CPU je to jen záložní cesta pro případy, které rychlejší hardwarová řídicí jednotka nedokáže zvládnout.

Mikrokód se obvykle nachází ve speciální vysokorychlostní paměti a překládá strojní pokyny, uvádí strojová data nebo jiný vstup do sekvencí podrobných operací na úrovni obvodu. Odděluje instrukce stroje od základní elektroniky , aby mohly být instrukce volněji navrženy a pozměněny. Usnadňuje také vytváření složitých vícekrokových pokynů a zároveň snižuje složitost počítačových obvodů. Zápis mikrokódu se často nazývá mikroprogramování a mikrokód v konkrétní implementaci procesoru se někdy nazývá mikroprogram .

Rozsáhlejší Microcoding umožňuje malým a jednoduché microarchitectures k emulovat silnější architektur s širším délkou slova , více výpočetních jednotek a tak dále, což je poměrně jednoduchý způsob, jak dosáhnout softwarovou kompatibilitu mezi různými produkty v rodině procesorů.

Někteří prodejci hardwaru, zejména IBM , používají termín mikrokód jako synonymum pro firmware . Tímto způsobem je veškerý kód v zařízení nazýván mikrokód bez ohledu na to, zda se jedná o mikrokód nebo strojový kód ; například u pevných disků se říká, že mají aktualizovaný svůj mikrokód, ačkoli obvykle obsahují mikrokód i firmware.

Přehled

Nejnižší vrstvou v zásobníku softwaru počítače jsou tradičně instrukce nezpracovaného strojového kódu pro procesor. V mikrokódovaných procesorech mikrokód tyto pokyny načte a provede. Aby nedošlo k záměně, je každý prvek související s mikroprogramem odlišen mikro předponou: mikroinstrukce, mikroassembler, mikroprogramátor, mikroarchitektura atd.

Inženýři obvykle zapisují mikrokód během fáze návrhu procesoru a ukládají jej do struktury paměti jen pro čtení (ROM) nebo do struktury programovatelného logického pole (PLA) nebo v kombinaci obou. Existují však také stroje, které mají některé nebo všechny mikrokódy uložené v paměti SRAM nebo flash . To je tradičně označováno jako zapisovatelné úložiště ovládacích prvků v kontextu počítačů, které může být buď jen pro čtení, nebo pro čtení a zápis . V druhém případě proces inicializace CPU načte mikrokód do řídicího úložiště z jiného paměťového média s možností změnit mikrokód tak, aby opravil chyby v sadě instrukcí, nebo implementovat nové strojové instrukce.

Složité digitální procesory mohou také využívat více než jednu (možná na bázi mikrokódu) řídicí jednotku za účelem delegování dílčích úkolů, které musí být prováděny v podstatě asynchronně paralelně. Programátor na vysoké úrovni nebo dokonce programátor sestav obvykle mikrokód nevidí ani nemění. Na rozdíl od strojového kódu, který si často zachovává určitou zpětnou kompatibilitu mezi různými procesory v rodině, mikrokód běží pouze na přesném elektronickém obvodu, pro který je určen, protože tvoří nedílnou součást samotného návrhu konkrétního procesoru.

Mikroprogramy se skládají ze série mikroinstrukcí, které řídí CPU na velmi základní úrovni hardwarových obvodů. Jedna typická horizontální mikroinstrukce může například určovat následující operace:

  • Připojte registr 1 k A straně ALU
  • Připojte registr 7 k B straně ALU
  • Dal ALU hrát dvojkových doplňků přidání
  • Nastavte přenosový vstup ALU na nulu
  • Výslednou hodnotu uložte do registru 8
  • Aktualizujte kódy podmínek ze stavových příznaků ALU ( negativní , nula , přetečení a přenos )
  • Microjump to micro PC nnn pro další mikroinstrukci

Aby bylo možné současně ovládat všechny funkce procesoru v jednom cyklu, je mikroinstrukce často širší než 50 bitů; např. 128 bitů na 360/85 s funkcí emulátoru. Mikroprogramy jsou pečlivě navrženy a optimalizovány pro co nejrychlejší provedení, protože pomalý mikroprogram by měl za následek pomalé strojové instrukce a snížený výkon pro související aplikační programy, které takové instrukce používají.

Odůvodnění

Mikrokód byl původně vyvinut jako jednodušší metoda vývoje řídicí logiky pro počítač . Zpočátku CPU instrukční sady byla jediná možnost . Každý krok potřebný k načtení, dekódování a provedení strojových instrukcí (včetně jakýchkoli výpočtů adresy operandu , čtení a zápisu) byl řízen přímo kombinační logikou a spíše minimálními sekvenčními obvody strojního stavu. Přestože byly takto pevně zapojené procesory velmi účinné, potřeba výkonných instrukčních sad s vícekrokovým adresováním a složitými operacemi ( viz níže ) ztěžovala jejich návrh a ladění; k tomu mohou přispět i vysoce kódované instrukce s různou délkou, zvláště když se používají velmi nepravidelná kódování.

Mikrokód zjednodušil práci tím, že umožnil definovat většinu chování a programovacího modelu procesoru spíše pomocí rutin mikroprogramů než pomocí vyhrazených obvodů. I pozdě v procesu návrhu bylo možné snadno změnit mikrokód, zatímco pevně zapojené návrhy CPU bylo velmi obtížné změnit. To tedy výrazně usnadnilo návrh CPU.

Od čtyřicátých let do konce sedmdesátých let byla velká část programování prováděna v jazyce sestavení ; instrukce vyšší úrovně znamenají vyšší produktivitu programátora, takže důležitou výhodou mikrokódu byla relativní snadnost definování výkonných strojních instrukcí. Konečným rozšířením jsou návrhy „přímo spustitelného jazyka na vysoké úrovni“, ve kterých je každé prohlášení jazyka na vysoké úrovni, jako je PL/I, zcela a přímo provedeno mikrokódem, bez kompilace. Projekt IBM Future Systems a Data General Fountainhead Processor jsou toho příkladem. Během 1970, rychlost procesoru rostly rychleji než paměť rychlosti a mnoho technik, jako je převod paměťovému bloku , paměť pre-fetch a multi-level cache byly použity ke zmírnění to. Dále pomohly strojové pokyny na vysoké úrovni umožněné mikrokódem, protože méně složitých strojových pokynů vyžaduje menší šířku pásma paměti. Například operaci na řetězci znaků lze provést jako jedinou strojovou instrukci, čímž se vyhnete více načítání instrukcí.

Architektury s instrukčními sadami implementovanými komplexními mikroprogramy zahrnovaly IBM System/360 a Digital Equipment Corporation VAX . Přístup stále komplexnějších instrukčních sad implementovaných mikrokódem se později nazýval CISC . Alternativní přístup, používaný v mnoha mikroprocesorech , je použít PLA nebo ROM (namísto kombinační logiky) hlavně pro dekódování instrukcí a nechat většinu sekvenování provést jednoduchý stavový stroj (bez velkého nebo jakéhokoli mikrokódu). MOS technologie 6502 je příkladem mikroprocesoru pomocí PLA pro instrukce dekódovat a sekvenování. PLA je viditelná na mikrofotografiích čipu a její činnost je vidět na simulaci na úrovni tranzistoru.

Mikroprogramování se stále používá v moderních návrzích CPU. V některých případech poté, co je mikrokód v simulaci odladěn, jsou logické funkce nahrazeny úložištěm řízení. Logické funkce jsou často rychlejší a levnější než ekvivalentní paměť mikroprogramů.

Výhody

Mikroprogramy procesoru pracují na primitivnější, úplně jiné a mnohem více hardwarově orientované architektuře, než jsou pokyny pro sestavení viditelné pro běžné programátory. V koordinaci s hardwarem mikrokód implementuje architekturu viditelnou programátorem. Základní hardware nemusí mít pevný vztah k viditelné architektuře. To usnadňuje implementaci dané architektury instrukční sady na širokou škálu základních hardwarových mikroarchitektur.

IBM System/360 má 32bitovou architekturu se 16 obecnými registry, ale většina implementací System/360 ve skutečnosti používá hardware, který implementoval mnohem jednodušší základní mikroarchitekturu; například System/360 Model 30 má 8bitové datové cesty k aritmetické logické jednotce (ALU) a hlavní paměti a implementuje obecné registry ve speciální jednotce vysokorychlostní základní paměti a model System/360 40 má 8bitové datové cesty do ALU a 16bitové datové cesty do hlavní paměti a také implementoval obecné registry ve speciální jednotce vysokorychlostní základní paměti. Model 50 má plně 32-bitové datové cesty a provádí univerzální registry ve speciální jednotky jádrového paměti vyšší rychlost. Model 65 až model 195 má větší datové cesty a implementuje obecné registry do rychlejších tranzistorových obvodů. Mikroprogramování tímto způsobem umožnilo IBM navrhnout mnoho modelů System/360 s podstatně odlišným hardwarem a pokrýt širokou škálu nákladů a výkonu, přičemž všechny byly architektonicky kompatibilní. To dramaticky snižuje počet jedinečných systémových softwarových programů, které musí být napsány pro každý model.

Podobný přístup použil Digital Equipment Corporation (DEC) ve své rodině počítačů VAX. V důsledku toho různé procesory VAX používají různé mikroarchitektury, přesto se architektura viditelná programátorem nemění.

Mikroprogramování také snižuje náklady na změny pole za účelem opravy defektů ( chyb ) v procesoru; chybu lze často opravit nahrazením části mikroprogramu, nikoli změnami provedenými v hardwarové logice a zapojení.

Dějiny

V roce 1947 návrh MIT Whirlwind představil koncept řídicího skladu jako způsob, jak zjednodušit počítačový design a překonat metody ad hoc . Řídicí paměť je diodová matice : dvourozměrná mřížka, kde jedna dimenze přijímá „řídicí časové impulsy“ z vnitřních hodin CPU a druhá se připojuje k řídicím signálům na hradlech a dalších obvodech. „Rozdělovač pulsů“ odebírá impulsy generované hodinami CPU a rozděluje je na osm samostatných časových impulsů, z nichž každý aktivuje jinou řadu mřížky. Když je řada aktivována, aktivuje k ní připojené řídicí signály.

Popsáno jiným způsobem, signály vysílané obchodem s ovládáním se hrají podobně jako role hráče na piano . To znamená, že jsou ovládány sekvencí velmi širokých slov vytvořených z bitů a jsou „přehrávány“ postupně. V obchodě s ovládáním je ale „píseň“ krátká a neustále se opakuje.

V roce 1951 Maurice Wilkes vylepšil tento koncept přidáním podmíněného provedení , konceptu podobného podmíněnému v počítačovém softwaru. Jeho počáteční implementace se skládala z dvojice matic: první generovala signály na způsob řídicího úložiště Whirlwind, zatímco druhá matice vybírala, kterou řadu signálů (takříkajíc instrukční slovo mikroprogramu) vyvolá v dalším cyklu. Podmíněné podmínky byly implementovány poskytnutím způsobu, který si jeden řádek v úložišti ovládacích prvků mohl vybrat z alternativ ve druhé matici. Tím byly řídicí signály podmíněny detekovaným interním signálem. Wilkes vytvořil termín mikroprogramování, aby popsal tuto funkci a odlišil ji od jednoduchého obchodu s ovládáním.

Příklady

  • EMIDEC 1100 údajně používá řídící obchod drátových sestávající z drátů provlečeny feritových jader, které jsou známé jako „tkaničky“.
  • Většina modelů řady IBM System/360 je mikroprogramovaná:
    • Model 25 je jedinečný mezi System / 360 modelů s použitím horní 16 K bajtů úložiště jádra držet řízení úložiště pro mikroprogramem. 2025 používá 16bitovou mikroarchitekturu se sedmi řídicími slovy (nebo mikroinstrukcemi). Po údržbě systému nebo při změně provozního režimu se mikrokód načte ze čtečky karet, pásky nebo jiného zařízení. IBM 1410 emulace pro tento model je naloženo tímto způsobem.
    • Model 30 používá 8bitové mikroarchitektury jen s několika hardwarových registrů; vše, co programátor viděl, je emulováno mikroprogramem. Mikrokód pro tento model je také uložen na speciálních děrných kartách, které jsou uloženy uvnitř zařízení ve vyhrazené čtečce na kartu, nazývané jednotky „CROS“ (Capacitor Read-Only Storage). Pro stroje objednané s emulací 1401/1440/1460 a pro stroje objednané s emulací 1620 je přidána další jednotka CROS.
    • Model 40 používá 56-bit kontrolní slova. Box 2040 implementuje jak hlavní procesor System/360, tak multiplexní kanál (I/O procesor). Tento model používá dedikované čtečky „TROS“ podobné jednotkám „CROS“, ale s indukčním snímačem (Transformer Read-only Store).
    • Model 50 má dvě vnitřní datapaths, které pracují paralelně: 32bitové DataPath použitý pro aritmetické operace, a 8-bitovou datovou cestu používané v některých logických operací. Řídicí úložiště používá 90bitové mikroinstrukce.
    • Model 85 má samostatný návod k načtení (I-jednotka) a provedení (E-jednotka) pro zajištění vysokého výkonu. Jednotka I je ovládána hardwarem. E-jednotka je mikroprogramovaná; řídicí slova jsou široká 108 bitů na základní 360/85 a širší, pokud je nainstalována funkce emulátoru.
  • NCR 315 je mikroprogramovaný ručně pevné feritovými jádry (a ROM ), které byly pulzovány podle sekvenceru s podmíněným provedení. Dráty vedené přes jádra jsou povoleny pro různé datové a logické prvky v procesoru.
  • Procesory PDP-11 společnosti Digital Equipment Corporation , s výjimkou PDP-11/20, jsou mikroprogramované.
  • Většina minipočítačů Eclipse Data General je mikroprogramovaná. Úkol napsat mikrokód pro Eclipse MV/8000 je podrobně popsán v knize oceněné Pulitzerovou cenou s názvem Duše nového stroje .
  • Mnoho systémů od Burroughs je mikroprogramováno:
  • „Mikroprocesor“ B700 spouští operační kódy na úrovni aplikace pomocí sekvencí 16bitových mikroinstrukcí uložených v hlavní paměti; každý z nich je buď operací načítání registru, nebo je mapován na jedinou 56bitovou instrukci „nanocode“ uloženou v paměti jen pro čtení. To umožňuje, aby relativně jednoduchý hardware fungoval buď jako periferní řadič sálového počítače, nebo aby byl zabalen jako samostatný počítač.
  • B1700 je realizován s radikálně odlišným hardware, včetně hlavní paměti bit adresovatelné ale má podobnou organizaci vícevrstvý. Operační systém předem načte tlumočníka pro jakýkoli požadovaný jazyk. Tito tlumočníci představují různé virtuální stroje pro COBOL , Fortran atd.
  • Mikrodata vyráběla počítače, ve kterých je mikrokód přístupný uživateli; to umožňuje vytváření vlastních pokynů na úrovni assembleru. Tuto schopnost hojně využívá design operačního systému Microdata Reality .
  • Pracovní stanice Xerox Alto používala mikrokódovaný design, ale na rozdíl od mnoha počítačů není modul mikrokódu skryt před programátorem ve vrstveném provedení. Aplikace toho využívají ke zrychlení výkonu.
  • Na Nintendo 64 ‚S Reality Koprocesor (RCP), který slouží jako konzoly grafický procesor a audio procesor využívá mikrokód; je možné implementovat nové efekty nebo vyladit procesor, aby bylo dosaženo požadovaného výstupu. Některé pozoruhodné příklady zakázkové RCP mikrokódu obsahovat grafiku s vysokým rozlišením, částice motory a neomezené losovací vzdálenosti nalezené v Factor 5 ‚s Indiana Jones a pekelný stroj , Hvězdné války: Rogue Squadron a Hvězdné války: Bitva o Naboo ; a přehrávání videa v plném pohybu nalezené v Resident Evil 2 Angel Studios .
  • Vektorové jednotky VU0 a VU1 v Sony PlayStation 2 jsou mikroprogramovatelné; ve skutečnosti je VU1 přístupný pouze pomocí mikrokódu pro prvních několik generací sady SDK.
  • Laboratoře MicroCore MCL86 , MCL51 a MCL65 jsou příklady vysoce kódovaných implementací „vertikálních“ mikrosekvencerů Intel 8086/8088, 8051 a MOS 6502.
  • Digital Scientific Corp. Meta 4 Series 16 počítačový systém byl uživatelsky microprogammable systém nejprve k dispozici v roce 1970. mikrokódu měl především vertikální styl s 32-bitovými mikroinstrukcí. Pokyny byly uloženy na vyměnitelných programových deskách s mřížkou bitových pozic. Jeden (1) bit byl reprezentován malými kovovými čtverci, které byly snímány zesilovači, nula (0) bitů absencí čtverců. Systém mohl být konfigurován s až 4K 16bitovými slovy z mikroúložiště. Jedním z produktů společnosti Digital Scientific byl emulátor pro IBM 1130 .
  • Dřívější procesory x86 jsou plně mikrokódované; počínaje Intel 80486 jsou méně komplikované pokyny implementovány přímo v hardwaru. Procesory x86 implementovaly opravitelný mikrokód (opravu systémem BIOS nebo operačního systému ) od mikroarchitektury Intel P6 a mikroarchitektury AMD K7 .
  • Některé grafické karty , řadiče rozhraní bezdrátové sítě implementovaly opravitelný mikrokód (oprava podle operačního systému).

Implementace

Každá mikroinstrukce v mikroprogramu poskytuje bity, které řídí funkční prvky, které interně tvoří CPU. Výhodou oproti pevně zapojenému CPU je, že se interní řízení CPU stává specializovanou formou počítačového programu. Mikrokód tak transformuje složitou výzvu elektronického návrhu (řízení CPU) na méně složitou výzvu programování. Aby toho bylo možné využít, je CPU rozděleno na několik částí:

  • I jednotka může dekódovat instrukce v hardwaru a určit mikrokódu adresu pro zpracování instrukcí paralelně s E-jednotky .
  • Microsequencer zvedne příští slovo o obchodě kontroly. Sekvencer je většinou čítač, ale obvykle má také nějaký způsob, jak přeskočit do jiné části úložiště kontrol v závislosti na některých datech, obvykle datech z registru instrukcí a vždy nějaké části úložiště control. Nejjednodušší sekvencer je jen registr načtený z několika bitů úložiště kontrol.
  • Sada registrů je rychlá paměť obsahující data centrální procesorové jednotky. Může zahrnovat čítač programu a ukazatel zásobníku a může také zahrnovat další registry, které nejsou pro programátora aplikací snadno přístupné. Často set registru je trojnásobný-ported registr souborů ; to znamená, že lze číst dva registry a třetí zapisovat současně.
  • An aritmetické a logické jednotky provádí výpočty, obvykle sčítání, logická negace, pravý shift, a logický. Často plní i další funkce.

Může také existovat registr adres paměti a registr dat paměti , který se používá pro přístup k hlavnímu úložišti počítače . Dohromady tyto prvky tvoří „ popravčí jednotku “. Většina moderních procesorů má několik prováděcích jednotek. I jednoduché počítače mají obvykle jednu jednotku pro čtení a zápis paměti a druhou pro spouštění uživatelského kódu. Tyto prvky lze často spojit v jeden čip. Tento čip je dodáván v pevné šířce, která by vytvořila „řez“ prostřednictvím prováděcí jednotky. Jsou známé jako čipy „ bit slice “. Rodina AMD Am2900 je jedním z nejznámějších příkladů prvků bitového segmentu. Části prováděcích jednotek a samotné prováděcí jednotky jsou propojeny svazkem vodičů nazývaných sběrnice .

Programátoři vyvíjejí mikroprogramy pomocí základních softwarových nástrojů. Microassembler umožňuje programátorovi definovat tabulku kousků symbolicky. Kvůli svému blízkému vztahu k základní architektuře „mikrokód má několik vlastností, které ztěžují generování pomocí kompilátoru“. Program simulátoru je určen ke spouštění bitů stejným způsobem jako elektronika a umožňuje mnohem větší volnost při ladění mikroprogramu. Poté, co je mikroprogram dokončen a rozsáhle testován, je někdy používán jako vstup do počítačového programu, který konstruuje logiku pro vytváření stejných dat. Tento program je podobný těm, které se používají k optimalizaci programovatelného logického pole . I bez plně optimální logiky může heuristicky optimalizovaná logika výrazně snížit počet tranzistorů z počtu požadovaného pro úložiště ROM control. To snižuje náklady na výrobu a elektřinu spotřebovanou procesorem.

Mikrokód lze charakterizovat jako horizontální nebo vertikální , přičemž se odkazuje především na to, zda každá mikroinstrukce ovládá prvky CPU s malým nebo žádným dekódováním (horizontální mikrokód), nebo vyžaduje rozsáhlé dekódování kombinatorickou logikou, než to udělá (vertikální mikrokód). V důsledku toho je každá horizontální mikroinstrukce širší (obsahuje více bitů) a zabírá více úložného prostoru než vertikální mikroinstrukce.

Horizontální mikrokód

"Horizontální mikrokód má několik diskrétních mikrooperací, které jsou kombinovány do jedné mikroinstrukce pro simultánní provoz." Horizontální mikrokód je obvykle obsažen v poměrně širokém úložišti ovládacích prvků; není neobvyklé, že každé slovo má 108 a více bitů. Při každém zaškrtnutí hodin sekvenceru se přečte, dekóduje a použije mikrokódové slovo k ovládání funkčních prvků, které tvoří CPU.

V typické implementaci obsahuje horizontální mikroprogramové slovo poměrně přesně definované skupiny bitů. Jedním jednoduchým uspořádáním může být například:

Zaregistrovat zdroj A. Zaregistrovat zdroj B Registr destinace Aritmetické a logické jednotky provoz Typ skoku Skočit na adresu

Aby tento typ mikroprocesoru implementoval instrukci JUMP s adresou za operačním kódem, může mikrokód vyžadovat dvě tiknutí hodin. Inženýr, který to navrhuje, by napsal zdrojový kód mikroassembleru, který vypadá nějak takto:

  # Any line starting with a number-sign is a comment
  # This is just a label, the ordinary way assemblers symbolically represent a 
  # memory address.
InstructionJUMP:
      # To prepare for the next instruction, the instruction-decode microcode has already
      # moved the program counter to the memory address register. This instruction fetches
      # the target address of the jump instruction from the memory word following the
      # jump opcode, by copying from the memory data register to the memory address register.
      # This gives the memory system two clock ticks to fetch the next 
      # instruction to the memory data register for use by the instruction decode.
      # The sequencer instruction "next" means just add 1 to the control word address.
   MDR, NONE, MAR, COPY, NEXT, NONE
      # This places the address of the next instruction into the PC.
      # This gives the memory system a clock tick to finish the fetch started on the
      # previous microinstruction.
      # The sequencer instruction is to jump to the start of the instruction decode.
   MAR, 1, PC, ADD, JMP, InstructionDecode
      # The instruction decode is not shown, because it is usually a mess, very particular
      # to the exact processor being emulated. Even this example is simplified.
      # Many CPUs have several ways to calculate the address, rather than just fetching
      # it from the word following the op-code. Therefore, rather than just one
      # jump instruction, those CPUs have a family of related jump instructions.

U každého zatržítka je běžné zjistit, že jsou použity pouze některé části CPU, přičemž zbývající skupiny bitů v mikroinstrukci jsou no-ops. Při pečlivém návrhu hardwaru a mikrokódu lze tuto vlastnost využít k paralelním operacím, které využívají různé oblasti CPU; například ve výše uvedeném případě není ALU vyžadována během prvního zaškrtnutí, takže by mohla být potenciálně použita k dokončení dřívější aritmetické instrukce.

Svislý mikrokód

Ve svislém mikrokódu je každá mikroinstrukce výrazně zakódována - to znamená, že bitová pole obecně procházejí přechodnou kombinační logikou, která zase generuje skutečné řídicí a sekvenční signály pro vnitřní prvky CPU (ALU, registry atd.). To je v kontrastu s horizontálním mikrokódem, ve kterém samotná bitová pole buď přímo produkují řídicí a sekvenční signály, nebo jsou kódována jen minimálně. V důsledku toho vertikální mikrokód vyžaduje menší délky instrukcí a méně úložiště, ale vyžaduje více času na dekódování, což má za následek pomalejší takt procesoru.

Některé vertikální mikrokódy jsou pouze sestavovacím jazykem jednoduchého konvenčního počítače, který emuluje složitější počítač. Některé procesory, jako jsou procesory DEC Alpha a mikroprocesory CMOS v pozdějších sálových počítačích IBM System/390 a z/Architecture , používají strojový kód spuštěný ve speciálním režimu, který mu umožňuje přístup ke speciálním instrukcím, speciálním registrům a dalším hardwarovým prostředkům, které k dispozici běžnému strojovému kódu, k implementaci některých pokynů a dalších funkcí, jako je procházení tabulky stránek na procesorech Alpha. Toto se nazývá PALcode na procesorech Alpha a millicode na sálových procesorech IBM.

Další forma svislého mikrokódu má dvě pole:

Výběr pole Hodnota pole

Výběr pole určuje, která část CPU bude ovládána tímto slovem úložiště ovládacích prvků. Hodnota pole ve skutečnosti řídí tuto část CPU. U tohoto typu mikrokódu se designér výslovně rozhodne vytvořit pomalejší procesor, aby ušetřil peníze snížením nepoužívaných bitů v úložišti ovládacích prvků; snížená složitost však může zvýšit taktovací frekvenci procesoru, což snižuje účinek zvýšeného počtu cyklů na instrukci.

Jak tranzistory zlevnily, horizontální mikrokód začal dominovat designu procesorů využívajících mikrokód, přičemž svislý mikrokód se používal méně často.

Pokud se používá svislý i vodorovný mikrokód, může být vodorovný mikrokód označován jako nanocode nebo picocode .

Obchod se zapisovatelným ovládáním

Několik počítačů bylo postaveno pomocí „zapisovatelného mikrokódu“. V tomto provedení je mikrokód místo ukládání mikrokódu v paměti ROM nebo pevně zapojené logice uložen v paměti RAM, která se nazývá úložiště pro zápis s možností zápisu nebo WCS . Takovému počítači se někdy říká zapisovatelný počítač s instrukční sadou nebo WISC .

Mnoho experimentálních prototypových počítačů používá zapisovatelné řídicí úložiště; existují také komerční stroje, které používají zapisovatelný mikrokód, jako jsou Burroughs Small Systems , starší pracovní stanice Xerox , řada DEC VAX 8800 („Nautilus“), stroje Symbolics L- a G, řada IBM System/360 a System /370 implementací, některé stroje DEC PDP-10 a Data General Eclipse MV/8000 .

Mnoho dalších strojů nabízí volitelně uživatelsky programovatelné zapisovatelné řídicí úložiště, včetně minipočítačů řady HP 2100 , DEC PDP-11/60 a Varian Data Machines V-70 . IBM System/370 obsahuje zařízení s názvem Initial-Microprogram Load ( IML nebo IMPL ), které lze vyvolat z konzoly, jako součást restartu po zapnutí ( POR ) nebo z jiného procesoru v těsně propojeném víceprocesorovém komplexu.

Některé komerční stroje, například IBM 360/85, mají úložiště jen pro čtení a úložiště ovládacího prvku pro zápis pro mikrokód.

WCS nabízí několik výhod, včetně snadné opravy mikroprogramu a u určitých generací hardwaru rychlejší přístup, než může poskytnout ROM. Uživatelsky programovatelné WCS umožňuje uživateli optimalizovat stroj pro konkrétní účely.

Počínaje Pentiem Pro v roce 1995 má několik procesorů x86 zapisovatelný mikrokód Intel . To například umožnilo opravit chyby v mikrokódech Intel Core 2 a Intel Xeon opravou záplatou jejich mikroprogramů, namísto nutnosti výměny celých čipů. Druhým prominentním příkladem je sada záplat mikrokódů, které společnost Intel nabídla pro některé ze svých procesorových architektur ve věku až 10 let, ve snaze čelit zranitelnostem zabezpečení objeveným v jejich návrzích - Spectre a Meltdown - které byly zveřejněny na začátku z roku 2018. Aktualizaci mikrokódu lze nainstalovat v systémech Linux, FreeBSD , Microsoft Windows nebo BIOS základní desky.

Srovnání s VLIW a RISC

Trend návrhu směrem k silně mikrokódovaným procesorům se složitými instrukcemi začal na počátku 60. let 20. století a pokračoval zhruba až do poloviny 80. let minulého století. V tu chvíli začala být filozofie designu RISC stále výraznější.

CPU, který používá mikrokód, obecně potřebuje několik hodinových cyklů k provedení jedné instrukce, jeden taktovací cyklus pro každý krok v mikroprogramu pro danou instrukci. Některé procesory CISC obsahují pokyny, jejichž provedení může trvat velmi dlouho. Takové variace narušují jak latenci přerušení, tak, což je v moderních systémech mnohem důležitější, potrubí .

Při návrhu nového procesoru má RISC s pevným zapojením oproti mikrokódovanému CISC následující výhody:

  • Programování se do značné míry přesunulo z úrovně montáže, takže se již nevyplatí poskytovat složité pokyny z důvodu produktivity.
  • Jednodušší instrukční sady umožňují přímé provedení hardwarem a vyhýbají se výkonnostním trestům mikrokódovaného provádění.
  • Analýza ukazuje, že složité pokyny se používají jen zřídka, a proto jsou jim vyhrazené strojové prostředky do značné míry zbytečné.
  • Prostředky stroje věnované zřídka používaným složitým instrukcím jsou lépe využity pro urychlení výkonu jednodušších, běžně používaných instrukcí.
  • Složité mikrokódované instrukce mohou vyžadovat mnoho hodinových cyklů, které se liší a pro zvýšení výkonu je obtížné je zpracovat .

Existují také kontrapunkty:

  • Složité instrukce v silně mikrokódovaných implementacích nemusí vyžadovat mnoho dalších strojových prostředků, kromě prostoru pro mikrokód. Například stejná ALU se často používá pro výpočet efektivní adresy a pro výpočet výsledku ze skutečných operandů (např. Původní Z80 , 8086 a další).
  • Moderní překladače často používají jednodušší instrukce bez RISC (tj. Zahrnující operandy přímé paměti ). Dokonce se běžně používají aritmetické operace bezprostředně ke stohování (tj. Výsledek paměti). Ačkoli jsou takové paměťové operace, často s různou délkou kódování, obtížněji zpracovatelné, je to stále plně proveditelné - jasně to dokládají modely i486 , AMD K5 , Cyrix 6x86 , Motorola 68040 atd.
  • Non-RISC instrukce ze své podstaty vykonávají více práce na instrukci (v průměru) a jsou také běžně vysoce kódované, takže umožňují menší celkovou velikost stejného programu, a tím i lepší využití omezené paměti cache.

Mnoho procesorů RISC a VLIW je navrženo tak, aby prováděly každou instrukci (pokud je v mezipaměti) v jednom cyklu. To je velmi podobné tomu, jak procesory s mikrokódem provádějí jednu mikroinstrukci za cyklus. Procesory VLIW mají instrukce, které se chovají podobně jako velmi široký horizontální mikrokód, i když obvykle bez takové jemnozrnné kontroly nad hardwarem, jakou poskytuje mikrokód. Pokyny RISC jsou někdy podobné úzkému vertikálnímu mikrokódu.

Microcoding byl populární v aplikačně specifických procesorů, jako jsou síťové procesory , mikroprocesory , procesory digitálního signálu , regulátory kanálů , řadiče disků , řadiče síťového rozhraní , GPU , a jiný hardware.

Micro Ops

Moderní implementace CISC, jako je x86 rodiny, instrukce dekódovat do dynamicky pufrovaných mikro-operace ( „μops“) s instrukcí kódující podobné RISC nebo tradiční mikrokódu. Pevně ​​zapojená dekódovací jednotka instrukcí přímo vysílá μops pro běžné instrukce x86, ale pro složitější nebo zřídka používané instrukce se vrací k tradičnější mikrokódové ROM.

Například x86 může vyhledávat μops z mikrokódu, aby zvládl složité vícestupňové operace, jako jsou smyčkové nebo řetězcové instrukce, transcendentální funkce jednotky s plovoucí desetinnou čárkou nebo neobvyklé hodnoty, jako jsou denormální čísla , a speciální instrukce, jako je CPUID .

Viz také

Poznámky

Reference

Další čtení

externí odkazy