Uz zase vlastni CPU :).
jiri@bezstarosti.cz
jiri@bezstarosti.cz
Středa Říjen 6 18:20:18 CEST 2004
Zdravim jich.
Chtel bych se s nimi podelit o jednu myslenku, jak take muze vypadat takovy
procesor.
Predstavme si, ze chceme napriklad udelat 32bit CPU.
Instrukce pak vypada tak, ze prvnich 32b obsahuje adresu jednoho operandu,
dalsich 32b adresu druheho operandu, dalsich 32b adresu kam se skoci kdyz
neni priznak a poslednich 32b adresu kam se skoci kdyz priznak je. Protoze
ale potrebujeme uz po nabrani operandu vedet, jakou ze to provadime
instrukci, zkratime adresy operandu na 28b a tim si v nich uvolnime celkem
8bitu k definici co s temi operandy delat. Takze nabereme z pameti 32b, coz
je adresa (a cast kodu instrukce) a nabereme obsah teto adresy do CPU. Pak
nabereme druhy operand a tim mame co je to za instrukci a nacteme z adresy
co jsme ziskali druhy operand. Provedeme na nich treba soucet (dle
instrukcniho kodu, onech 8b popisu instrukce) a ulozime na adresu druheho
operandu - adresova sbernice se od posledniho cteni k zapisu nezmenila. Ted
podle priznaku nabereme bud obsah dalsi adresy ci jeste o jednu dal adresy a
postavime se na ni pro dalsi instrukci. Spoustu veci neni potreba ani drzet,
ty adresy operandu se proste jen prenesou z datove sbernice na adresovou,
cimz se zase setri zdroje.
Takze ted potrebujeme na kazdou instrukci 4 adresy. Kdyz dame pravidlo, ze
vsechny instrukce musi byt na adresach delitelnych 4mi, nemusime PC vubec
pricitat, ale jen si na tvrdo nastavujeme "00","01","10" a "11" na konec
adresy.
Hloupe na tom je, ze kdyz se neda skakat na adresu jinou nez delitelnou 4mi,
jsou volne bity v adresach kam se skace a mohla by tam byt zakodovana
instrukce, jenze ty cteme zrovna na konec a to jeste jen jednu z nich, coz
setri hardware a zvysuje rychlost :).
Protoze jak jsem to navrhl je typ instrukce dan (pro tento pripad) 8bity,
snadno se do toho zakomponuje i to, podle jakeho priznaku ma ta ktera
instrukce skakat, tedy nemusi to byt vzdy jen podle C, ale take podle Z atd.
Pekne je, ze processor pak nema vlastne zadne registry (zase uspora zdroju),
jak je z beznych CPU zname a tudiz i odskok do preruseni se spokoji s
uschovanim adresy, kam se ma skocit v prave provadene instrukci, kdy doslo k
preruseni. Stejne tak neni potreba inkrementovat PC, protoze kazda instrukce
jej po sobe jen nastavi. Tim ma kazda instrukce podmineny rozskok a program
nemusi byt v pameti vubec adresu za adresou, ale klidne libovolne na
preskacku. Pokud chci skocit nepodminene, dam obe adresy skoku stejne.
Protoze vsechno adresovani operandu je pres pevne danou adresu, da se na
takovou adresu predpripravit literal (spolu se zavedenim programu) a tedy
ani s tim neni problem.
Dalsi veci je, ze lze do RAM snadno pripravit instrukci, protoze pamet dat a
programu je tataz a na ni skocit pro pocitane skoky ci pro brani dat poli
pres ukazatel atp.
Uznavam, zere to dost pameti, prece jen 4x 32b na instrukci a cist v kazde
instrukci 5x a 1x zapisovat take neni malo, ale ucelem je vytvorit neco
opravdu funkcniho a snad i s vyhradami pouzitelneho, pricmez ale co
nejjednodussiho a tohle myslim cesta k tomuto cili je. A jeste je to co se
tyce sirky sbernic skalovatelne :). Nakonec vetsi pamet dnes uz takovy
problem neni. Uznavam, je to silne zjednoduseni CPU na ukor pameti, ale
vzdycky je neco za neco :).
Jen se mne proboha neptejte k cemu to je. No prece k odlehceni mozku od te
hnusne elektroniky :).
--
Jiri Bezstarosti
Další informace o konferenci Hw-list