mc68020.xmlDenna kod är public domain. Om ni hittar fel eller vill ändra något i koden blir jag jätteglad om ni skickar dessa ändringar till jesper [at] fantasi [punkt] se.
<?xml version="1.0"?>
<article category="hardware" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="article.xsd">
<keyword>MC68020/EC020</keyword>
<keyword hidden="true">processor</keyword>
<keyword hidden="true">processorn</keyword>
<keyword hidden="true">020</keyword>
<topic>MC68020/EC020</topic>
<ingress>
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.
</ingress>
<text>
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.
</text>
<subtopic>Översikt</subtopic>
<list>
<item>Objektkods-kompatibel med tidigare 68000-processorer</item>
<item>Adresseringsmoder för support av högnivåspråk</item>
<item><a href="#anvnd">Bit Field Data Type som accelererar bit-orienterade applikationer som till exempel grafik</a></item>
<item><a href="#cache">text="Inbyggd instruktionscache</a></item>
<item><a href="#io">Flexibelt coprocessor-interface</a></item>
<item><a href="#pipe">Pipeline-arkitektur med hög nivå av parallellism</a></item>
<item><a href="#io">Asynkron 32-bitars buss, ej multiplexad</a></item>
<item><a href="#io">Dynamisk busstorlek stöder 8-/16-/32-bitars minne och externa enheter</a></item>
<item>Fullt stöd för Virtuellt minne och Virtuella maskiner</item>
<item><a href="#reg">16 32-bitars data- och adressregister</a></item>
<item><a href="#reg">Två stackpekare och fem dedikerade kontrollregister</a></item>
<item><a href="#instr">18 adresseringsmoder och sju datatyper</a></item>
<item>4-Gbyte direkt adresserbart minne för MC68020</item>
<item>16-Mbyte direkt adresserbart minne för MC68EC020</item>
</list>
<image box="true" width="500" height="511" src="el_mc68020.png" alt="Blockschema över MC68020/EC020" />
<subtopic label="reg">Register</subtopic>
<text>
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.
</text>
<text>
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.
</text>
<text>
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).
</text>
<text>
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.
</text>
<text>
Vektorbasregistret (VBR) innehåller adressen till avbrottstabellen.
</text>
<subtopic label="instr">Instruktionsuppsättning</subtopic>
<text>
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.
</text>
<subtopic label="cache">Cache</subtopic>
<text>
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.
</text>
<text>
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.
</text>
<subtopic label="pipe">Pipeline</subtopic>
<text>
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.
</text>
<subtopic label="io">I/O - Kommunikation</subtopic>
<text>
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.
</text>
<text>
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.
</text>
<subtopic label="int">Avbrott</subtopic>
<text>
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.
</text>
<list>
<item>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.</item>
<item> 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.</item>
<item> För alla avbrott, förutom reset, är det tredje steget att
spara det nuvarande innehållet i processorn. Detta görs på
stacken.</item>
<item> 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.</item>
</list>
<text>
Vektortabellen innehåller 256 'fack' varav de första 64 är
fördefinierade av Motorola, resten är upp till programmeraren att
fylla med godsaker :)
</text>
<subtopic label="anvnd">Användningsområden</subtopic>
<text>
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.
</text>
</article>
|