Hoppa till innehållet

Användare:Knoppson/Wiki-CPU

Från Wikipedia

Ackumulator (AC)

[redigera | redigera wikitext]

Ackumulator 2.0

[redigera | redigera wikitext]
En uppgraderad ackumulator

Bilden visar en uppgraderad ackumulator. Den här ackumulatorn kan skifta runt utgående bit eller ej (SA_A=Shift Around A). Den kan även sätta ingående bit Ain_A och på så sätt välja om en etta eller nolla ska skiftas in (i detta fall åt höger). Det har även upptäckts att vår CPU behöver tre bussar, D, B och A.

CPU'n innehåller varken RAM (annat än som vippor i register) eller ROM (annat än i intruktionsregistret).

Vi säger att det externa programinnet (hårddisk eller PROM) innehåller en instruktion som PC pekar på. Det kan t.ex vara resetvektorn efter start. Vi antar prilimärt åtta bitar lång data och adressbuss och att POR-kretsen har ställt alla räknare och register. Säg då att PC då står på FFh. Och den fyra bitar långa instruktionsräknaren står på #0000. Den åtta bitar långa OP-koden i instruktionsregistret har också satts av POR-kretsen till säg 00h (som vi låtsas är OP-koden för Reset). Vi antar alltså CISC-arkitektur med upp till 256 OP-koder och maximalt 16 steg att hinna utföra dom.

Eventuellt räcker det med att nyttja halva databussen till OP-koder då vi knappast behöver så många fler än 16 (vilket ger oss tillbaka den galanta RISC-arkiktekturen). Dock bör databussen vara minst åtta bitar om vi ska kunna göra nåt roligt med processorn (även om författaren lyssnat på 5-bitas D/A-omvandlig vilket var gränsen för vad han tyckte lät "bra" på en CTH-laboration i Kommunikationsteori).

Direkt efter spänningspåslag står alltså instruktionsregistret (IR) på OP-koden för Reset (tack vare POR-kretsen). Den lägger då ut en ordledning som möjliggör läsning av innehållet i adress FFh varvid denna adress (resetvektorn) läggs ut på databussen. Dataregistret enablas (EnD_in) samtidigt asynkront mha IR (dock har ingen klockpuls kommit än). När sen E-klockan (som styr allt utom PC) kommer klockas värdet (dvs resetvektorn) in i dataregistret (DR) och är då i praktiken läst. IR står då på adress 001h. Här haltas PC (En_PC=0) och laddning av resetvektorn påbörjas genom att LD_PC samtidigt sätts hög. IR stegar upp till 002h och släpper där haltningen dvs En_PC går hög. När så PC börjar räkna igen pekas adressvektorns data ut i minnet och processen börjar om med att E-klockan laddar DR osv.

AC-register (ACR)

[redigera | redigera wikitext]
Ett AC-registers realisering

Detta speciella skiftregister är benämnd ackumulator i bilden ovan.

Instruktionsregister (IR)

[redigera | redigera wikitext]

IR-räknare (IRC)

[redigera | redigera wikitext]
En IR-räknares realisering

IR-register (IRR)

[redigera | redigera wikitext]
Ett IR-registers realisering

Instruktionsregister 2.0

[redigera | redigera wikitext]
Ett instruktionsregisters realisering

Bilden visar vårt andra försök att realisera ett instruktionsregister.

Instruktionsregister 2.1

[redigera | redigera wikitext]
Ett instruktionsregisters realisering

Bilden visar ytterligare en uppgradering. Den viktigaste detaljen är att klockpulsen (CP) har bytts ut mot E-klockan. Kodningen har också ändrats något men stämmer ändå inte.

Instruktionsregister 2.2

[redigera | redigera wikitext]
Ett instruktionsregisters realisering

Bilden visar ytterligare en uppgradering. Den viktigaste uppgraderingen med E-klockan redan gjord enligt ovan. Kodningen börjar "kanske" stämma.

Instruktionsrealisering

[redigera | redigera wikitext]
Vår CPU's instruktionsuppsättning

Bilden visar realiseringen av OP-koderna eller instruktionerna hos vår CPU.

Synkroniseringsproblemet

[redigera | redigera wikitext]
Timingen hos vår CPU

Eftersom vi har att göra med grindfördröjningar så finns inte informationen tillgänglig direkt vid huvudklockans (CP) positiva flank. Man kan alltså inte klocka två enheter efter varandra (på samma buss) samtidigt och förvänta sig att man ska få giltig data. Om vi leker med tanken att det är någon typ av permanentminne (PROM eller HD) som ska läsas så kommer data ut vara "rejält" fördröjd från det att adressen blivit giltig.

Vi har förenklat timingen lite och utersluter tills vidare adressregistret (AR) då programräknaren (PC) självt lika gärna kan agera adressregister såväl som programräknare. Om AR ändå används får man nämligen se till att använda tre klockor något fördröjda i förhållande till varandra.

Det är käckt att komma på att man kan invertera CP för att få en E-klocka. Denna klocka kan nämligen användas i instruktionsregistret (IR) vilket får till följd att positiv flank hos E-klockan kommer mitt i klockpulsen (CP) dvs vi avsätter praktiskt taget Tcp/2 till fördröjningsproblem.

CP går alltså till programräknaren (PC) där den genererar adresser och E-klockan går till instruktionsregistret (IR) som realiserar OP-koderna genom att rycka i diverse Enable-signaler som till exempel EnD_in.

Nu när vi tänkt till redan från början kan vi bygga en snabb processor...

Timingen hos vår CPU


Klockgenerator (CG)

[redigera | redigera wikitext]
Klockornas realisering

Bilden visar hur CP och E-klockan kan genereras med hjälp av en kristalloscillator och en inverterare.

CPU blockdiagram

[redigera | redigera wikitext]

CPU blockdiagram 2.0

[redigera | redigera wikitext]
Vår processors arkitektur

Bilden visar vår processors blockdiagram.

CPU blockdiagram 2.1

[redigera | redigera wikitext]
Vår processors arkitektur

Bilden visar vår processors uppgraderade blockdiagram.

CPU blockdiagram 2.2

[redigera | redigera wikitext]
Vår processors arkitektur

Bilden visar vår processors uppgraderade blockdiagram. CS_RAM och CS_HD är två egentligen onödiga signaler då Chip Select (CS) normalt avkodas utifrån respektive enhets adressarea. Till exempel så kan man avkoda HD att jobba mellan 0000h och 0FFFh och RAM mellan 1000h och FFFFh. Vi har här valt separat Chip Select då det blir smidigare samt utnyttjar adressutrymmet bättre. CS är alltså mer eller mindre samma sak som Output Enable (OE) som förklaras bättre i samband med three-state.

Dataregister (DR)

[redigera | redigera wikitext]

Dataregister 2.0

[redigera | redigera wikitext]
Ett dataregister

Bilden visar ett dataresters realisering med så kallade three-state buffrar.

Dataregister 2.1

[redigera | redigera wikitext]
Ett dataregister

Bilden visar en uppgradering av vårt dataregister. Det har tillkommit en finess som liknar pre-fetch dvs databussen enablas för inkommande data innan den första instruktionen. Data kommer då garanterat ligga inne på databussen och IR kan fungera som det ska.

Adressregister (AR)

[redigera | redigera wikitext]
Ett adressregister

Bilden visar ett adressregisters realisering. Adressregistret är numera borttaget ur arkitekturen då programräknaren (PC) lika gärna kan agera adressregister såväl som räknare.