mc68020.xml

Denna 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>