English

MC68020/EC020

Motorola har genom åren tillverkat en serie mikroprocessorer som fått namnet 68k-serien. Dessa processorer finner man bland annat i de olika Amiga-modellerna, gamla Macintosch och även i multimedia-moduler av bland annat Nokia.

MC68020 var den första medlemmen i 68k-serien som var 32-bitars rakt igenom. Det finns även en 'light'-version av denna processor, MC68EC020. De stora skillnaderna mellan dessa processorer är att MC68EC020 har en 24 bitars adressbuss, det är även fem signaler som inte är implementerade; ECS, OCS, DBEN, IPEND och BGACK.

Översikt

Blockschema över MC68020/EC020

Blockschema över MC68020/EC020

Register

MC68020/EC020 är uppbyggd av två typer av register, användarmodellen och supervisor-modellen. Dessa motsvarar de två programkörningsnivåer processorn kan befinna sig i. Normala program befinner sig i användarläge medan systemprogram kan köras i supervisorläge och får då tillgång till supervisor-registren. I princip är det endast känsliga delar av operativsystem som körs i supervisorläge.

I användarnivån kommer man åt 16 stycken 32-bitars data- och adressregister (8 av varje). Adressregistren kan användas som stackpekare eller basadressregister. Det sista av adressregistren är det som normalt används som stackpekare. Dataregistren används för operationer på de olika datatyperna; bit-fällt (1 till 32 bitar), byte (8 bitar), word (16 bitar), longword (32-bitar) och quadword (64-bitar). Man har även tillgång till en 32-bitars programräknare (PC) och ett 16-bitars tillståndsregister.

I supervisornivån har man tillgång till interruptstackpekaren (32-bitar), huvudstackpekaren (32-bitar), statusregistret (16-bitar), vektorbasregistret (32-bitar), alternativa funktioners kodregister (2*3-bitar), cachekontroll-register (32-bitar) och cacheadressregister (32-bitar).

Statusregistret (SR) innehåller tillståndskoder för processorn. Den lägsta byten är det som i användarläge kallas tillståndsregister. Här finns bland annat signaler som talar om hur den senaste instruktionsexekveringen gick. Den övre byten innehåller bland annat interruptprioritetsmasken och switchar som talar om i vilket läge processorn befinner sig, supervisor-/användarläge och master-/interruptläge.

Vektorbasregistret (VBR) innehåller adressen till avbrottstabellen.

Instruktionsuppsättning

MC68020/EC020 är en äkta CISC-processor. Detta märks på den rikligt tilltagna instruktionsuppsättningen. De flesta av de 110 (!) instruktionerna kan hantera bytes, words och longwords. Även de 18 adresseringsmoderna utnyttjas av de flesta instruktionerna.

Cache

MC68020/EC020 har en inbyggd instruktionscache. Denna är direktmappad och innehåller 64 block. Varje block är indelat i ett fält för taggen, en kontrollbit och 32 bitar för instruktioner. Kontrollbiten talar om ifall det ligger något i blocket.

De flesta instruktioner är endast ett word (16-bitar) långa, det får alltså plats i genomsnitt två instruktioner i varje block. När en instruktion skall läsas från minnet används bitarna 2 till 7 i adressen som index för att avgöra vilket block i cache:n som är aktuellt. Därefter jämförs taggen med bitarna 8 till 31 i adressen. Är dessa lika och kontrollbiten är satt blir det en träff. Adressens bit nummer 1 används sedan för att avgöra vilket word i blocket som skall läsas. (Bit #0 behövs inte då alla instruktioner är minst ett word.) Om det inte blir en träff hämtas instruktionen in från primärminnet. Den nya instruktionen skrivs automatiskt in i cacheminnet och kontrollbiten sätts. Då processorn alltid hämtar externa instruktioner i form av longwords, kommer båda instruktionerna i blocket att bytas ut oavsett vilken av dem som orsakade missen.

Pipeline

På blockschemat visas trestegs-pipelinen där instruktioner och op-koder avkodas. Instruktionsflödet från minnet leder till ett 32-bitars register, cache holding register. Från detta register hämtas sedan instruktionerna in i pipelinen. Efter de tre stegen är instruktionen avkodad och sequencern kan exekvera instruktionen. De tre stegen i pipelinen är gjorda för att ta ett word. Om instruktionen i cache holding register endast är ett word lång, ligger alltså även nästa instruktion i detta register. I de fall då instruktionsläsningen därpå är till nästa adress behövs därför ingen inläsningscykel. Detta är vad som oftast händer. Den prefetch som hämtar instruktionen till cache holding register utförs av busscontrollern parallellt med att sequencern exekverar microinstruktioner. Pipeline, cache och prefetch av instruktioner ger tillsammans mycket få väntetider för processorn vid kommunikation med minnet. Någon datacache finns ej, detta implementerades först i 68030.

I/O - Kommunikation

MC68020/EC020 har både minnesmappad och direkt I/O. Den direkta kommunikationen finns till co-processorer, detta interface har fullständigt IEEE-flyttalsstöd, (Tänkt för MC68851 och FPU:erna MC68881 och MC68882). Övriga enheter är minnesmappade.

Kommunikationen utåt sker via två bussar - databussen och adressbussen. Båda är 32-bitar på MC68020, (adressbussen är 24-bitar på MC68EC020). Det finns ett antal kontrollsignaler för båda bussarna som anger storlek, läs-/skrivstatus, om bussen är tillgänglig med mera. Även strobe-signaler som synkar överföringarna med klockan finns för båda bussar.

Avbrott

Det finns ett antal olika avbrott som kan genereras, bland annat kan co-processorer ge svar som orsakar avbrott. Bussfel och problem med stacken genererar också avbrott, plus att extern hårdvara och mjukvara kan generera avbrott av olika orsaker (interrupt). Ett interrupt genereras via tre avbrottsledningar, (det finns alltså åtta olika interrupt). När något program eller hårdvara genererar ett interrupt jämförs detta med interrupt-masken i SR, endast interrupt med högre prioritet släpps igenom. Avbrottshanteringen sker i fyra steg.

  • I det första steget gör processorn en intern kopia av SR, sedan sätts S-biten i SR och processorn övergår i supervisorläge.
  • I nästa steg avgör processorn vektornumret för avbrottet. För interrupten talar de tre avbrottsledningarna om vilket interrupt det var. För co-processorgenererade avbrott finns vektornumret med i svaret från co-processorn. För alla andra avbrott finns det intern logik som ger vektornumret.
  • För alla avbrott, förutom reset, är det tredje steget att spara det nuvarande innehållet i processorn. Detta görs på stacken.
  • Det sista steget startar avbrottsrutinen. Processorn multiplicerar vektornumret med fyra för att få fram vektoroffseten. Denna offset adderas till innehållet i VBR för att hitta rätt i avbrottstabellen och få fram adressen till avbrottsrutinen. Därefter laddas PC med adressen. När de tre första word:en laddats in i pipelinen återgår processorn till normalt användarläge.

Vektortabellen innehåller 256 'fack' varav de första 64 är fördefinierade av Motorola, resten är upp till programmeraren att fylla med godsaker :)

Användningsområden

MC68020/EC020 är främst byggd för grafiska tillämpningar. Med speciella datatyper för bit-fällt och direktkommunikation med FPU:er (Matematik-processorer), var den en mycket kraftfull processor när den kom 1992. Som jag nämnde i inledningen används denna processor och dess likar i maskiner som Amiga, Macintosh och diverse multimediamoduler. Dessa maskiner är (eller var på den tiden) kända för sina kraftfulla grafiska applikationer. En jämförelse mellan AmigaOS som varit ett grafiskt operativsystem på 68000 sedan 1985 och Windows som på x86 kom i sin första "fungerande" version 1992 ger en ganska tydlig bild av vad som var möjligt.