Zalezi na tom cemu rikate mikroinstrukce. Jestli samotnemu faktu ze vykonani instrukce je rozdelene do nekolika fazi tak pak ma mikroinstrukce uplne vse.
Ja ovsem znam pojem `mikroinstrukce' jako elementarni operaci kterou muze provadet mikroprogram. Mikrokod je neco jako takovy mnohem podrobnejsi strojak, ktery pracuje primo s jednotlivymi castmi CPU. Instrukce jsou vetsinou pomerne siroke a jednotlive bity primo znamenaji napriklad ze se ma pripojit registr X k vnitrni sbernici, jiny bit instrukcniho slova pak treba znamena ze zaroven nastavit ALU tak aby secetla to co je na vnitrni sbernici s registrem A, atd a pak jsou tam jeste bity ktere urcuji jak bude mikroprogram pokracovat. Instrukce je rozdelena do nekolika mikroinstrukci, ktere se sekvencne vykonavaji. Mikroprogram je tabulka techto mikroinstrukci. Instrukce procesoru je mozne brat jako indexy do mikroprogramu, kde zacina implementace te ktere instrukce (samozrejme ze z operacniho kodu instrukce se pro tento ucel vezmou (a dekoduji) jen nektere bity – treba bity ktere urcuji nad kterymi registry instrukce pracuje se za pomoci mikrokodu z operacniho znaku instrukce extrahuji pozdeji).
Je i neco co se nazyva vertikalni mikrokod, ktery neni tak siroky, muzete si to predstavit tak ze tu puvodni tabulku nekdo `zkompresoval' tak aby byl dekoder do puvodni sirky realizovatelny dostatecne jednoduchym kombinacnim obvodem. To se zacalo pouzivat kdyz mikrokod (ktery mel puvodne zjednodusit navrh sekvencnich logickych obvodu) zacal zabirat stale vetsi a vetsi cast chipu.
Drive byl ulozen v pameti ROM, dnes (alespon nektere jeho casti) jsou ve FLASH aby je bylo mozne opravit pripadne chyby.
Na druhou stranu je mozne vtipnym navrhem instrukci vytvorit CPU,ktery se bez mikrokodu zcela obejde. Napriklad ARM-2 ma pouze obvodovy radic. A to i presto ze nektere instrukce trvaji vice taktu (jako treba nacteni vice registru) — proste je tam nekde `citac' ktery dokud je nenulovy, donuti radic pokracovat v ukladani registru do RAM.
S trochou nadsazky by se dalo rict, ze to co takovy procesor zpracovava jako instrukce jsou vlastne mikroinstrukce. Vyhodu to ma v tom ze je snadnejsi udelat pipeline — zatimco se jedna instrukce provadi, dalsi za ni se dekoduje a jeste dalsi se teprve nacita z pameti. Protoze kazda faze provadeni ma sve vlastni ridici obvody tak je toto mozne (take musi byt vykonne jednotky propojene `soukromymi sbernicemi', jedna sdilena by nestacila, protoze v jednom taktu je potreba komunikovat vetsinou v kazde fazi provadeni instrukce, tedy tolikrat jak hubokou mame pipeline). Neco takoveho by se s mikrokodem delalo celkem neohrabane.
Dnesni x86 procesory sice maji mikrokod, ale ten se pouziva jen pro zpracovani neprilis castych instrukci (jako prefixy rep, enter/leave a podobne divnosti), ktere tam jsou kvuli kompatibilite s starsimi x86 procesory — v manualu optimalizace je vyslovene nedoporucuji pouzivat, protoze kdyz CPU takovou instrukci potka, vykonava jeji mikrokod seriove a tudiz nemuze vyuzit pipelining. Instrukce tak potom muze trvat i desitky taktu CPU.
Pro srovnani jak muze byt mikrokod neefektivni: MC68000 obsahoval neco kolem 70k transistoru a navrhovalo ho nejmene 10 lidi. Pritom na 8MHz dosahoval vykon okolo 0.8 MIPS. Procesor ARM-2
dosahoval 4 MIPS na 8MHZ, navrhovali ho 2 lide (jeden z nich instrukce, druhy obvodovou impklementaci) a spotrebovali 28k transistoru. Pritom i 68000 byl ve sve dobe velmi dobry procesor.
Zde se muzete podivat jak vypada chip ARM:
http://media.techworld.com/cmsdata/slideshow/3201497/arm_acorn_10_thumb555.jpg
A takto vypada Motorola 68000:
http://www.thocp.net/hardware/pictures/cpu/motorola_68000_1979.jpg
Dva cerne obdelniky v horni pulce chipu, ktere vypadaji jako cache je podle meho nazoru pamet ROM ve ktere je ulozen mikrokod (cache tento CPU nemel).
Zde se muzete poucit o procesoru ARM:
http://noel.feld.cvut.cz/vyu/scs/prezentace2007/arm_AT91SAM7X/