Motorola 68000

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Motorola 68000 demontat de pe un Amiga 600
Preversiunea Motorola 68000

Motorola 68000 (denumit în cod MC68000 ) este un microprocesor CISC de 16/32 biți.

Acesta a fost inițial proiectat, fabricat și comercializat de Motorola începând cu 1979 , iar ulterior produs și comercializat de Freescale Semiconductor , anterior Sectorul produselor semiconductoare al Motorola de care s-a separat în 2004 .

Fiind primul membru al familiei de microprocesoare m68k , software-ul său este, în general, compatibil cu ceilalți procesoare succesive.

Modelul 68000 este încă folosit în scopuri educaționale, în timp ce, după douăzeci de ani, arhitectura sa rămâne în continuare o alegere populară în noile proiecte.

Istorie

Computer fabricat manual Motorola 68000

MC68000 a fost inițial conceput pentru a fi un procesor de uz general. A fost folosit de diferiți producători de computere personale, precum Amiga , Atari și Apple . Multe console l-au folosit, de exemplu Sega Genesis / Sega Mega Drive , Atari Jaguar , Neo Geo și multe mașini arcade. În Sega Saturn , modelul 68000 a fost dedicat gestionării sunetului.

Mulți designeri au folosit-o și au apreciat-o și din lucrările lor Amiga 1000 , Atari ST , s-au născut diverse modele Macintosh , mașinile originale Sun Microsystems și SGI UNIX . Procesorul a fost folosit și de serverele Apollo / Domain .

Succesorii modelului 68000 au fost folosiți de mult timp de mașinile Unix , deoarece arhitectura sa era foarte asemănătoare cu cea a PDP-11 și VAX digitale și, prin urmare, erau mașini excelente pentru rularea programelor scrise în limbajul C. 68000 a avut, de asemenea, un mare succes ca microcontroler ; a fost folosit de companii precum HP , Printronix și Adobe pentru a construi imprimante . Procesoarele CPU32 și Coldfire utilizate în milioane de sisteme de automatizare industrială s-au născut din derivarea sa. De asemenea, a fost utilizat în echipamente medicale datorită raportului său avantaj / cost. În 2001 , versiunea Dragonball a fost folosită de Palm Computing pentru a - și face PDA - urile, iar Handspring a folosit-o și pentru seria Visor, deși cele mai recente versiuni sunt echipate cu procesoare ARM . 68000 este încă folosit de Texas Instruments pentru a-și face calculatoarele grafice.

Versiunea inițială a modelului 68000 a fost introdusă în 1982 pentru a concura cu Intel 8086 și Intel 80286 și cu succesorii acestora. Prima versiune a atins 8 MHz de ceas , care la acea vreme era o frecvență de operare foarte mare.

Motorola a încetat să producă 68000 direct în 2000, deși continuă să producă unele dintre derivatele sale, cum ar fi CPU32. Din 2001, Hitachi a reluat producția de 68000 datorită unei licențe de la Motorola.

Arhitectură

Adresă autobuz

68000 a fost un compromis inteligent: când a fost introdus, autobuzele pe 16 biți erau de fapt cea mai rezonabilă soluție, deoarece erau relativ rapide și nu foarte scumpe. Cu toate acestea, modelul 68000 a fost proiectat cu registre pe 32 de biți și spațiu de adrese, presupunând că costul hardware-ului va scădea rapid și, prin urmare, costul inițial mai ridicat al soluției pe 32 de biți ar plăti pentru sine în cel mai scurt timp.

Deși 68000 ALU avea 16 biți, procesorul gestiona toate adresările pe 32 de biți; adică avea un spațiu de adrese de 32 de biți liniari. Aceasta înseamnă că 68000 a fost și este, de fapt, un microprocesor pe 32 de biți. 8086 avea un spațiu de adrese de 20 de biți, dar nu putea accesa blocuri de mai mult de 64 de kiloocteți (16 biți) la un moment dat, decât prin manipularea registrelor de segmente.

Deși magistrala ALU a fost pe 16 biți, operațiunile de pe adrese au fost efectuate pe 32 de biți și s-a furnizat un sumator și un scăpător de 32 de biți în afara ALU, pentru a fi utilizat pentru operații de post incrementare și pre-decrementare pe adrese, fără trebuind să aștepte ALU și, prin urmare, fără nicio reducere a performanței.

După cum sa menționat, deși Motorola a lansat un procesor pe 16 biți, instrucțiunile și arhitectura acestuia au fost evident formate pentru a fi pe 32 de biți. Această alegere a fost făcută pentru a evita să se confrunte cu probleme de compatibilitate atunci când arhitectura ar fi migrată pe o magistrală pe 32 de biți. Arhitectura aleasă a fost flexibilă, de fapt atât 68008 (procesor cu magistrală de 8 biți), cât și viitorul succesor pe 32 de biți (care mai târziu a fost 68020 ) erau deja prevăzute.

Pentru a satisface nevoile pieței, Motorola a planificat inițial trei procesoare. 68000, echipat cu o magistrală de date pe 16 biți și o magistrală de adresă pe 24 de biți (corespunzătoare la 16 MB). 68008, echipat cu o magistrală de 8 biți pentru date și capabilă să adreseze 18 biți (cu posibilitatea de a utiliza 19 sau 20 biți) și în cele din urmă procesorul generației următoare echipat cu o adresare pe 32 de biți și o date pe 32 de biți bit de autobuz (capabil să adreseze 4 GB).

Registrele interne

CPU are următoarele registre, toate pe 32 de biți:

  • 8 registre cu scop general pentru date (D0-D7)
  • 8 registre pentru adrese (A0-A7)
  • un registru de pointer de instrucțiuni (PC)
  • un registru (SSP) pentru stiva supervizorului

Toate registrele de date sunt de uz general, nu există registre specializate, dedicate de exemplu multiplicării sau divizării, ca în procesatoarele anterioare. Ultimul registru de adrese este indicatorul stivei și poate fi numit indiferent A7 sau SP. Acest număr de registre reprezintă un compromis bun: suficient de mic pentru a nu penaliza prea mult 68000 în schimbarea contextului, dar totuși suficient pentru a accelera majoritatea calculelor.

Separarea registrelor în două tipuri se crede că a permis proiectanților CPU să obțină un grad mai mare de paralelism utilizând o unitate de execuție auxiliară pentru registrele de adrese.

Există, de asemenea, un registru de stare pe 16 biți (SR).

Registrul de stare

Instrucțiunile și transferurile aritmetice-logice setează automat biții de condiție ( semnalizare ) în registrul de stare, cu excepția cazului în care destinația este un registru de adrese. Există 5 biți de condiție:

  • N (negativ) : bit de semn. Este o copie a celui mai semnificativ fragment al rezultatului;
  • Z (zero) : indică faptul că rezultatul este zero;
  • V (oVerflow) : overflow (în aritmetică semnată);
  • C (Carry) : carry (overflow, în aritmetică nesemnată);
  • X (eXtend) : ia în mod normal aceeași valoare ca C, dar numai pentru operații aritmetice. Simplificați implementarea operațiunilor cu o precizie mai mare de 32 de biți.

Biții de condiție sunt utilizați în principal de instrucțiunile de ramificare condiționate pentru controlul fluxului unui program.

Set de instructiuni

Designerii au încercat să facă ortogonalul limbajului de asamblare 68000. Adică, instrucțiunile sunt împărțite în operațiuni și moduri de adresare : aproape toate modurile de adresare pot fi utilizate cu majoritatea instrucțiunilor.

Oricine a scris un asamblator pentru modelul 68000 și-a dat seama în mod clar că aceste „instrucțiuni”, la nivel de biți, pot fi traduse în mai multe coduri operaționale diferite. A fost un compromis suficient de bun, deoarece a oferit aproape aceleași beneficii ca un sistem cu adevărat ortogonal, totuși a oferit proiectanților CPU libertatea de a extinde tabelul de coduri de opțiuni.

Cu doar 56 de instrucțiuni, dimensiunea minimă a unei instrucțiuni era imensă pentru acele vremuri: 16 biți. De asemenea, multe instrucțiuni și moduri de adresare necesită încă câteva cuvinte pentru a gestiona operanzi imediați, biți suplimentari ai modului de adresare și multe altele.

Mulți designeri credeau că arhitectura MC68000, în raport cu costul său, oferea un set de instrucțiuni cu o densitate mare de cod, în special pentru cea generată de un compilator. Această caracteristică a stat la baza succesului și longevității acestei arhitecturi.

Această credință (sau caracteristică, în funcție de proiectant) a continuat să se dovedească reușită pentru setul de instrucțiuni (chiar și pentru procesoarele ulterioare), până când arhitectura ARM a introdus setul de instrucțiuni Thumb , similar în ceea ce privește compactitatea.

Niveluri de privilegiu

68000 și evoluțiile sale sunt echipate cu două niveluri de privilegiu: nivelul utilizatorului și nivelul supervizorului . Un program care rulează la nivel de utilizator are acces la toate jurnalele, cu excepția celor pentru gestionarea întreruperilor . La nivelul supervizorului, nu există limite de acces la jurnal. Modul de execuție este determinat de un bit din registrul de stare.

Un avantaj major al acestui procesor este de a avea două indicatoare de stivă distincte, unul pentru fiecare mod. În modul supraveghetor 68000 folosește un registru SP diferit, numit SSP (Supervisor SP). Procesorul poate accesa în orice caz registrul SP al nivelului utilizatorului (numit USP, User SP) și de la nivelul supervizorului, prin intermediul instrucțiunilor specifice. Datorită acestei caracteristici, într-un sistem multitasking bazat pe 68000 este posibil să se utilizeze stive foarte mici pentru procese individuale, deoarece nu este nevoie de spațiu suplimentar pentru a salva jurnalele pentru întreruperi. Pentru gestionarea întreruperilor va fi suficient ca sistemul de operare să aloce o singură stivă de supraveghere de dimensiuni adecvate.

Modul de supraveghere este mecanismul de bază, comun tuturor celor 68000 de procesoare de familie, pentru a implementa politici de protecție tipice celor mai avansate sisteme de operare: programele comune, care rulează în modul utilizator, nu au voie să folosească potențial „periculos”, care rămâne singurul responsabilitatea sistemului de operare.

Întrerupe

CPU gestionează 7 niveluri de întrerupere . Nivelurile variază de la nivelul 1 la nivelul 7 și sunt prioritare: un nivel de prioritate ridicat poate întrerupe întotdeauna un nivel de prioritate mai mic. În registrul de stare, o instrucțiune privilegiată selectează nivelul de întrerupere executat pentru a ignora orice întrerupere de nivel inferior. Nivelul 7 este demascabil (NMI) în timp ce nivelul 0 indică nicio întrerupere. Nivelurile sunt stocate în registrul de stare și sunt vizibile în modul utilizator.

Tabelul excepțiilor (adresele vectorului de întrerupere ) este situat în locațiile de memorie între 0 și 1023 și permite 256 de vectori pe 32 de biți. Primul vector stochează punctul de plecare al stivei de adrese, al doilea stochează stiva de instrucțiuni. Vectorii între 3 și 15 sunt folosiți pentru raportarea erorilor: eroare de magistrală, adresă incorectă, instrucțiuni ilegale, împărțire la zero etc. De la vectorul 24 în continuare, sunt stocate întreruperile, cele 15 niveluri de TRAP (întreruperea software-ului executării programelor de către procesor) și vectorii definiți de utilizator.

Manipulatorul de întreruperi a fost inițial un cip separat, 68901: acest lucru a complicat foarte mult designul hardware-ului cardului și a încetinit procesorul, deoarece fiecare întrerupere trebuia convertită de cipul extern. 68901 avea, de asemenea, un UART foarte de bază și un temporizator de întrerupere. 68901 avea multe defecte, inclusiv o predispoziție de a rata întreruperile la nivel înalt dacă acesta și cronometrul se opreau în același timp. Omologul produs de Mostek a fost mai bun.

În timpul pornirii computerului, a avea vectorii la adrese fixe a fost foarte convenabil, deoarece a permis programarea ROM-urilor computerului fără prea multe complicații datorită alocărilor dinamice ale vectorilor. Dar când sistemul de operare a fost încărcat, o gestionare fixă ​​a vectorilor a fost o tehnică nerecomandată, deoarece a limitat sistemul de operare și l-a legat foarte mult de funcționarea modelului cu un singur procesor. Pentru a rezolva această problemă, producătorii porneau adesea computerul cu ROM-urile rezidente începând de la o anumită adresă și după pornire, adresa de pornire a fost schimbată și s-a alocat RAM în loc de ROM-ul care putea fi schimbat fără probleme.

O altă problemă a apărut din modul privilegiat: proiectat având în vedere un sistem de operare precum Unix , care din motive de securitate face o distincție clară între programe și sisteme de operare. Ideea a fost bună, dar implementarea sa dovedit a fi incompletă, au existat unele neglijări care au făcut-o nesigură. Aceste erori au fost corectate în generațiile următoare.

68000 nu a reușit să gestioneze în mod corespunzător un eșec de acces la memorie și, prin urmare, nu a putut să implementeze adevărata gestionare a memoriei virtuale , o necesitate vitală pentru multe sisteme de operare. Memoria virtuală este o tehnică simplă utilizată pentru a simula disponibilitatea RAM practic infinită. Când procesorul a accesat o locație de memorie inexistentă, a declanșat o întrerupere care a selectat un bloc de memorie RAM, a salvat conținutul său pe hard disk și apoi a manipulat adresele astfel încât adresele inexistente să indice zona de memorie recent eliberată. Unii furnizori de sistem Unix au construit 68000 de mașini bazate pe suport de memorie virtuală. A fost posibil prin utilizarea a două procesoare cu ceasul defazat. Când primul procesor a fost blocat din cauza accesului la o adresă inexistentă, logica de control l-a împiedicat pe cel de-al doilea să facă același final și a activat întreruperea de gestionare a memoriei virtuale care, după ce a eliberat memoria RAM și a manipulat corespunzător adresele, a deblocat primul procesor care a reluat procesarea de parcă nu s-ar fi întâmplat nimic. Evident, a fost o tehnică foarte scumpă și ineficientă și imediat ce a apărut modelul 68010 , producătorii au actualizat mașinile eliminând al doilea procesor.

O problemă mai puțin vizibilă, dar nu mai puțin importantă, a modelului 68000 a fost că, având multe instrucțiuni și multe moduri de adresare, era dificil de simulat, deoarece simulatorul trebuia să ia în considerare multe cazuri cu multe variante. Aceasta este o problemă care va apărea și în unele versiuni moderne ale arhitecturii sale. De fapt, în controlul avionic a fost ales procesorul Intel 80386 pentru simplitatea sa de simulare în comparație cu procesorul Motorola corespunzător.

Următoarea revizie a procesorului, Motorola 68010 a rezolvat majoritatea problemelor din 68000.

Detalii despre setul de instrucțiuni

Majoritatea instrucțiunilor sunt diadice , adică au doi operanzi, dintre care unul indică și destinația rezultatului. Exemple semnificative sunt:

  • Aritmetic
    • ADĂUGA (adăuga), SUB (scădere)
    • MULU (multiplicare nesemnată), MULS (multiplicare semnată)
    • DIVU (divizie nesemnată), DIVS (divizie semnată)
    • NEG (inversarea semnului)
    • CMP (comparație: un fel de scădere care elimină rezultatul, dar modifică semnalizatoarele de stare)
  • În aritmetică zecimală ( BCD ):
    • ABCD și SBCD
  • Logică:
    • ȘI, SAU
    • NU (logic nu)
    • EOR (SAU exclusiv)
  • Shift și rotații:
    • Logică: LSL, LSR [1]
    • Aritmetică: ASL, ASR [2]
    • ROL (Rotire la stânga), ROR (Rotire la dreapta)
    • cu bit eXtend: ROXL, ROXR
  • Operații pe biți:
    • BSET (setează la 1)
    • BCLR (setează la 0)
    • BTST (test de biți)
  • Suport pentru sisteme multiprocesor:
    • TAS, test-and-set , efectuează un ciclu special de citire-modificare-scriere indivizibil pe autobuz; permite implementarea cu ușurință a mecanismelor de excludere reciprocă în sistemele multiprocesor de memorie partajată.
Condiții Bcc / DBcc
Adevărat 0000
F fals 0001 (numai pentru DBcc)
CC poartă clar 0100
Set de transport CS 0101
EQ egal 0111
GE mai mare sau egal 1100
GT mai mare decât 1110
Bună ziua 0010
LE mai puțin sau egal 1111
LS scăzut sau același 0011
LT mai puțin de 1101
MI minus 1011
NE nu este egal 0110
PL plus 1010
VC overflow clear 1000
Set de revărsare VS 1001
  • Controlul debitului:
    • JMP (salt)
    • JSR (salt la subrutină)
    • BSR (ramură către subrutină: ca salt, dar relativ la PC)
    • RTS (revenire din subrutină)
    • RTE (reveniți din excepție, pentru a ieși din excepții)
    • TRAP (aruncați o excepție de software)
    • CHK (excepție software cu condiție)
  • Salturi condiționate:
    • Cco (Omiteți dacă este îndeplinită condiția „cc”. Aceasta specifică una dintre cele 16 condiții posibile de testare pentru a verifica registrul de stare).
    • DBcc (dacă condiția este falsă, diminuează registrul de date și, dacă registrul nu este -1, omite. Folosind -1 în loc de 0, deoarece valoarea de ieșire vă permite să programați cu ușurință bucle în care numărul de repetări poate fi nul, nu este nevoie de verificări suplimentare devreme în buclă)
  • Alte:
    • acces la registrul de stare și, în modelele ulterioare, la alte registre speciale
    • suport pentru dispozitive vechi

Multe instrucțiuni acceptă un sufix care vă permite să specificați dimensiunea datelor operației:

  • ".b" pentru 8 biți (octeți),
  • „.w” pentru 16 biți (cuvânt),
  • „.l” pentru 32 biți (cuvânt lung).

Valoarea implicită este de 16 biți.

Modurile de adresare acceptate sunt:

  • Direct
    • la registrul de date, de ex. „D0”
    • să se adreseze registrului, de ex. „A6”
  • Indirect
    • Simplu prin registrul de adrese, de ex. (A0)
    • Prin registrul de adrese cu post-increment, de ex. (A0) +
    • Prin registrul de adrese cu pre-decrement, de ex. - (A0)
    • Prin registru de adrese cu offset pe 16 biți, de ex. 48 (A0)

Rețineți că suma adăugată sau scăzută efectiv din registrul de adrese, respectiv în modurile post-incrementare și pre-scădere, depinde de mărimea datelor: 1 dacă funcționează pe octeți, 2 dacă este pe cuvânt, 4 dacă este pe cuvânt lung.

  • Indexat
    • indirect prin registru de adrese, indexat cu registru (16 sau 32 biți) și 8 biți decalat cu semn, de ex. 15 (A0, D0.w) sau 76 (A0, A1.l)
  • Legat de PC (contor de programe)
    • cu offset semnat pe 16 biți, de ex. 1234 (PC)
    • indexat cu registru (16 sau 32 biți) și 8 biți decalat cu semn, de ex. 24 (PC, D2.w)
  • Absolut
    • Scurt, pe 16 biți (cu extensie semn), de ex. „4000 USD”
    • Lung, pe 32 de biți, de ex. 00123456 dolari
  • Imediat
    • Stocate în instrucțiuni, de ex. # 400 $

Notă

  1. ^ Un zero intră în cel mai semnificativ bit
  2. ^ Bitul de semn este extins spre dreapta

Bibliografie

Alte proiecte

linkuri externe

Controlul autorității LCCN (EN) sh85087690 · BNF (FR) cb119620535 (data) · BNE (ES) XX531711 (data)
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT