Uz zase vlastni CPU :).

Jiri Bezstarosti jiri@bezstarosti.cz
Čtvrtek Říjen 7 23:19:01 CEST 2004


Uz jsem tomu dal i jmeno: MYF32. A protoze je tady, kdyz ctu co se pise k
tematu, otazek vice, zkusim tady odpovedet na vsechno zaroven :).

Tedy v minimalni verzi by mely stacit instrukce:

ADDC, IOR, XOR, AND, SHR, SHL, MOV, RETI

priznaky jen Z a C a skok dle vyberu dle Z ci C na dve ruzne adresy, tedy
funguje stejne dobre NZ a NC kdyz se adresy prohodi.

Mozna by si to zaslouzilo jeste trochu vysvetlit, jak si to cele
predstavuju, pak se to cteni a zapisy treba nebudou zdat tak hrozive :).

Adresovka ma 28b a datovka 32b. Kazda instrukce se sklada ze 4x 32b ctenych
po 32b.

Prvnich 32b - 4b typ instrukce, 28b adresa prvniho operandu

Druhych 32b - 4b typ instrukce, 28b adresa druheho operandu a adresa pro
ulozeni vysledku

Tretich 32b - 26b prvni adresa pro skok bez spodnich 2 bitu - instrukce
zarovnany na adresy delitelne 4

Ctvrtych 32b - 26b prvni adresa pro skok bez spodnich 2 bitu

Pracuje to tak, ze vezme adresu prvniho operandu z datove sbernice a rovnou
s ni na adresovku, tedy co je z toho adresa a nejvyssi bity si naberu jako
typ instrukce. Data operandu bere ihned za tim, protoze nemusi cvicit
signalem /RD, ale dalsi takt ta data proste nabere. Doplnenim neceho co by
slo nazvat PC o "01" na konec a vyslanim na adresovku a naslednym nabranim
dat naberu druhy operand a take typ instrukce uz mam kompletni, treba 8bit
na typ instrukce. Mam 4 takty a 4x jsem cetl, s RD jsem zatim nehnul, stale
bylo /RD aktivni. Na datovce mam stale druhy operand, takze nemusim ho nikam
davat a rovnou provedu matematiku, pak nahodim /RD do neaktivna, dam
vysledek na datovku a pak shodim /WR a nemusim se starat o adresu, protoze
ta tam stale je od nabrani hodnoty toho druheho operandu a je to zaroven
adresa, kam se uklada. /WR jde do neaktivna, datovka do vysoke impedance.
Ted nahodim /RD a na adresovku podle priznaku Z ci C dam PC & "10" nebo PC &
"11". Naberu data, soupnu je do PC a na adresovku a mohu jet dalsi
instrukci, pricemz /RD uz je aktivni v nultem cyklu instrukce, tedy mohu
rovnou cist.

No a preruseni jen jednoduche a to ulozenim adresy kam se aktualne skace z
prave provedene instrukce a k tomu z celkoveho schematu vybocujici instrukce
RETI, ktera nebere nic krome typu instrukce v potaz a skoci na navratovou
adresu. Zavedenim uchovani priznaku se vrati i tyto ulozene, protoze
instrukce treba XOR muze ovlivnovat jen Z, ale skakat se v ni muze i podle
C, tedy dle toho, jak bylo C nastaveno drive :).

Myslim, ze tento pristup by mohl setrit zdroje pro CPU dost podstatne -
pamatuje si opravdu jen to nutne. A dokonce jsem usetril i pricitani PC,
protoze ja ho jen sproste nabiram z pameti. Tedy kazda instrukce ma skok
jako "rozdvojku" a nepodmineny skok na dalsi instrukci je pak tak, ze jsou
obe ty adresy kam skocit shodne.

Tato architektura navic dava moznost snadno sestavovat v RAM instrukce a
tedy si udelat mraky smerniku. Zrovna tak je mozne si udelat odskoky do
podprogramu, kdyz si nekam ulozim kam se ma vracet z podprogramu a to jeste
na nekolikrate, takze to nakonec bude plnohodnotny stack a to klidne i
nekolik, ale stara se o to jen program, CPU samotnemu je to fuk.

K tomu poctu taktu. Bezny CPU stejne musi nacist data do registru a pak je
zapsat, jen muze operovat nekolika ctenimi s jednim registrem, tedy setri
zapisy, ci zapisuje nekolikrate jednu vec a setri tak cteni. Jenze kdyz ja
tim systemem cteni vim ze ctu nekolik adres za sebou, nemusim zbytecne
cvicit signalem /RD jak strhany. Proste necvicim se vsim jak strhany a tedy
nekdy provedu cteni ci zapis jako by navic, ale vlastne delam jako by vice
instrukci za ty takty, tedy cteni-cteni-modifikace-zapis-podmineny_skok. Co
nemohu, je mit frontu instrukci a delat jako by jednu instrukci za jeden
takt - to diky vecnemu pouzivani pameti a sdileni dat a programu v jedne
pameti asi nejde.

No a ze v te nejjednodussi variante neco chybi ? Je tam vse podstatne a
pokud se to slusne vejde do FPGA (jako ze to bude legrace pro male deti),
pak prece neni problem to rozsirit, kdyz mame na typ instrukce 8b a 1b z
toho rozlisuje zda se skace dle Z ci C, takze az 128 ruznych typu instrukci
:).

K domysleni jiste jeste neco chybi, ze bych neco taky nedomyslel si nedelam
iluze a ani jsem nenapsal sve myslenky komplet, to je mozna na knihu.

Predpokladam to nacpat do SPARTAN2, ponevadz uz XC2S200 a XC2S50 mam :).

--
Jiri Bezstarosti



----- Original Message -----
From: "Danhard" <danhard@volny.cz>
To: "[HWnews]" <hw-list@mailman.nethouse.cz>
Sent: Thursday, October 07, 2004 5:49 PM
Subject: Re: Uz zase vlastni CPU :).


> No protoze za tim vidim spis tu realizaci, tak se Jiri ptam, cim chces
> realizovat tu 32 bitovou aritmetiku, a co by mela umet ?
>
> Danhard












Další informace o konferenci Hw-list