Az NS32000, röviden 32k, a National Semiconductor által fejlesztett és gyártott mikroprocesszorsorozat. Tervezése az 1970-es évek végén kezdődött és 1981 áprilisában jelentették be az ISSCC (International Solid-State Circuits Conference, Nemzetközi Szilárdtest Áramköri Konferencia) rendezvényen.
A család első, kezdetben 16032-ként ismert tagja 1982-ben került forgalomba, ezután a jelölését 32016-ra változtatták, hogy hangsúlyozzák 32 bites voltát. Ez volt az első belsőleg 32 bites adatméretet használó általános célú mikroprocesszor a piacon: a Motorola 68000 regiszterei 32 bitesek, utasításai támogatják a 32 bites aritmetikai műveletek végrehajtását, de ezek végrehajtásához 16 bites ALU-t használ, így a 32 bites műveletek ezen a processzoron kétszer annyi ideig tartanak, mint ugyanezek a műveletek a 32016-oson. A 32016-os azonban sok hibát tartalmazott és gyakran nem tudott a névleges sebességén futni. Ezek a problémák, és az 1980 óta kapható, hasonló tulajdonságokat mutató 68000-es piaci jelenléte vezetett ahhoz, hogy a korai jelentős érdeklődés ellenére alig használták a gyakorlatban.
Az induló modellt több javított változat követte, köztük az 1985-ös 32032, amely lényegében egy hibajavított 32016 volt, külső 32 bites adatsínnel. Bár körülbelül 50%-kal jobb sebességet kínált, mint a 32016, teljesítményében mégis alulmaradt az egy évvel korábban megjelent 32 bites Motorola 68020 processzorral szemben. Az 1987-ben kibocsátott 32532 teljesítménye közel kétszerese volt a Motorola 68030-asnak, de addigra a mikroprocesszorok iránti érdeklődés nagyrészt a RISC platformok felé fordult, és ez az egyébként kiváló kialakítás szinte alkalmazás nélkül maradt.
A National további fejlesztéseken dolgozott a 32732-es típusban, de az 1990-es években feladta a versenyt a mikroprocesszorok terén. Ehelyett az alap 32000-es architektúrát kombinálták több támogató rendszerrel és Swordfish mikrovezérlőként újra piacra dobták. Ennek némi sikere volt a piacon, majd a cég az 1990-es évek közepén átváltott a CompactRISC architektúrára.
Tervezési koncepció
Az NS32000 sorozat története a National Semiconductor azon törekvésére vezethető vissza, hogy elkészítse a VAX–11 architektúra egycsipes implementációját. A VAX jól ismert a nagymértékben ortogonális utasításkészlet-architektúrájáról (ISA), amelyben minden utasítás bármely adatra alkalmazható, a rendelkezésre álló összes címzési móddal. Például egy ADD utasítás összeadhatja két processzorregiszter tartalmát, vagy hozzáadhatja egy regiszter tartalmát a memóriában lévő értékhez, összeadhat két értéket a memóriában, vagy a regisztert egy címhez képest eltolásként használja. Ez a rugalmasság a tervezés mintaképének számított a komplex utasításkészletű (CISC) számítógép korában.
A National jogi úton próbálta biztosítani a tervezés jogszerűségét, és bíróság elé idézte a Digital Equipment Corporation-t (DEC) Kaliforniában, de amikor a DEC a pert Massachusettsbe, a DEC székhelyének államába helyezte át, a pert ejtették és a VAX-11 architektúra helyett a 32000 sorozat architektúráját fejlesztették ki. Az új utasításkészlet-architektúra ugyan nem volt VAX-11 kompatibilis, de megőrizte annak nagymértékben ortogonális tervezési filozófiáját, tehát minden utasítástípus minden címzéssel (gépi adattípussal) használható. A korabeli cikkek ezt „szimmetrikusnak” is nevezték.
Az eredeti processzorcsalád az NS16032 CPU-ból és egy NS16C032 alacsony fogyasztású változatból állt, mindkettő 16 bites adatútvonallal rendelkezett és így két gépi ciklusra volt szükség egy 32 bites szó betöltéséhez. Mindkettő használható volt az NS16082 memóriakezelő egységgel (MMU), amely 24 bites virtuális memória támogatást biztosított maximálisan fizikai memóriához. Az NS16008 egy leegyszerűsített változat volt 8-bit bites külső adatútvonallal, virtuális memóriatámogatás nélkül, amelynek kevesebb kivezetése (lába) volt és így valamivel könnyebb volt a megvalósítása. Mind az NS16008, mind az NS16016 rendelkezett az Intel 8080 emulációs móddal, amely négyszeres sebességet biztosított az eredetihez képest.
Ugyanebben az időben a National Semiconductor két jövőbeli verziót is bejelentett, az NS32032 és NS32132 jelűeket. Az előbbi lényegében az NS16032 egy változata, 32 bites külső adatsínnel, ami lehetővé teszi az adatok kétszeres sebességgel történő olvasását. A tervek szerint 1984-ben került volna forgalomba. Az NS32132 29 bites belső és 32 bites külső címekkel rendelkező változat volt, ami lehetővé tette teljes memória címzését. 1985-ben szándékoztak kibocsátani.
Mindezek az NS16081 lebegőpontos egységgel (FPU) is használhatók.
Architektúra + NS 32000 regiszter 31... 23... 15... 07... 00 (bitpozíció) Általános regiszterek R0 Regiszter 0 R1 Regiszter 1 R2 Regiszter 2 R3 Regiszter 3 R4 Regiszter 4 R5 Regiszter 5 R6 Regiszter 6 R7 Regiszter 7 Indexregiszterek 0000 0000 SP1 Stack Pointer (felhasználói) 0000 0000 SP0 Stack Pointer (megszakítás) 0000 0000 SB Statikus Bázis 0000 0000 FP Frame Pointer (keretmutató) 0000 0000 INTBASE Interrupt Base (megszakítás báziscím) Programszámláló (Program Counter, PC) 0000 0000 PC Program Counter MOD Modul leíró Programállapot-regiszter (Program Status Register, PSR) 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (bitpozíció) – – – – I P S U N Z (zérus) F – – L T C PSR
A processzorok 8 általános célú 32 bites regiszterrel rendelkeznek, valamint több speciális célú regiszterrel: Keretmutató Veremmutató (SP) (egy-egy a felhasználói és a felügyelői módhoz) Statikus bázisregiszter, a globális változókra való hivatkozásához Csatoló bázisregiszter dinamikusan linkelt modulokhoz (objektumorientált) Programszámláló Egy tipikus processzor-állapotregiszter, egy alacsony helyiértékű felhasználói és egy magas helyiértékű rendszer bájttal (A többi rendszerregiszter nincs felsorolva).
Az utasításkészlet CISC elvű, 2 operandusú utasításokkal, memóriából-memóriába történő műveletekkel, rugalmas címzési módokkal és változó hosszúságú, bájtra igazított utasításkódolással. A címzési módok tartalmazhatnak akár két eltolást és két memória-indirekciót is operandusonként, valamint skálázott indexelést, így a lehetséges leghosszabb utasítás 23 bájt hosszú lehet. A utasítások tényleges száma jóval alacsonyabb, mint a kortárs RISC processzoroké.
Más processzorokkal ellentétben, a bázisregiszter automatikus növelése nem támogatott; ez alól kivétel a „verem teteje” (top of stack) címzési mód és változatai, ami kiolvassa (leemeli, pop művelet) a forrásokat és behelyezi (push) a célokat. Egyedülálló módon, az eltolás mérete a legmagasabb helyiértékű biteken van kódolva: 0, 10 és 11 előzi meg a 7-, 14- és 30 bites előjeles eltolásokat. (Habár a processzorok egyébként következetesen növekvő bájtsorrendűek (little-endian), az eltolások az utasításfolyamban csökkenő (big-endian) sorrendben vannak tárolva).
Az általános célú operandusokat egy 5 bites mező specifikálja. Ehhez hozzáadható egy index bájt (amely megadja az indexregisztert és az 5 bites báziscímet) és operandusonként legfeljebb 2 változó hosszúságú eltolás.
32016 A sorozat első csipjét eredetileg 16032-nek hívták, de később átnevezték 32016-ra, ezzel hangsúlyozva a 32 bites belső felépítést. Ezzel a felépítéssel szemben áll az 1979-es Motorola 68000 (68k) processzorral. A 68k 32 bites utasításokat és regisztereket használ, de az aritmetikai-logikai egysége (ALU), ami az általános feldolgozási feladatok többségét vezérli, csak 16 bites. Ez azt jelenti, hogy a 32 bites adatot két ciklusban kell átküldenie az ALU-n – két 16 bites részben –, egy 32 bites művelet elvégzéséhez. Az NS32000-nek viszont 32 bites ALU-ja van, így a 32 bites és 16 bites utasítások végrehajtási ideje megegyezik.
A 32016-os processzor először 1982-ben jelent meg, 48 tűs DIP tokozásban. Egy 32 bites csip 48 tűs tokozásba illesztéséhez az adatsínt 16 bit szélességűre kellett csökkenteni, és a kivezetéseket megosztani a 24 bites címsínnel. Az érintkezők megosztása miatt külső hardvernek kell tárolnia a memóriacímet, mikor a kivezetések adatüzemmódban működnek, és ez minden hozzáféréskor 1 ciklusos késleltetést okoz. Így míg a belső 32 bites megvalósítás növelte a teljesítményt, az alacsony kivezetésszám ismét csökkentette azt.
Feltehetőleg ez volt az első, tömeggyártásba és forgalomba került 32 bites csip (legalábbis a National marketingje szerint). Egy 1983 júniusi publikációban azonban megjegyezték, hogy a National volt „ezen a nyáron termelési mennyiségeket ígért” a 16032-es alkatrészekből, miután már „több hónapja próbamennyiségeket szállított”, a lebegőpontos koprocesszor mintapéldányok pedig „ebben a hónapban” ígérte, ez azt jelzi, hogy a szállítással gondjai voltak a cégnek.
Bár a 32016 processzor 1982-es megjelenése körülbelül két évvel volt a 68k után, a 68k még nem terjedt el széles körben a piacon és a 32016 nagy érdeklődést keltett. Sajnálatos módon a korai változatok tele voltak hibákkal és ritkán lehetett őket névleges sebességükkel üzemeltetni. Két évvel később, 1984-ben a hibajegyzékben még mindig voltak kontrollálatlan állapotokat leíró elemek, amelyek a processzor leállásához vezettek, újraindítást kikényszerítve.
Az eredeti termékfejlesztési terv - és -es alkatrészeket vizionált 1983-ra és - és -es alkatrészeket 1984-ra. 1984-es sajtóbeszámolók szerint azonban nem sikerült tartani ezt az ütemtervet, mivel állítólag öt hónapba telt, mire a processzorok órajelét növelték, és nyilatkozatok további „két, három vagy öt hónap” tartottak szükségesnek a frekvencia -re történő növeléséhez. A problémákat két, meg nem nevezett csip okozta az öt darabos csipkészletből. Egy korai 1985-ös cikk a 32016-alapú Whitechapel MG-1 munkaállomásról megjegyezte, hogy a 32082 memóriakezelő egység „hibás volt” és külön kártyán helyezték el a hardverjavítások miatt. 1986-ban a Texas Instruments bejelentett egy „teljesen minősített -es TI32000 32 bites mikroprocesszor csipkészletet”, amely a 48 tűs tokozású TI32016 CPU-ból és TI32082 memóriakezelő egységből, a 24 tűs TI32201 időzítésvezérlő egységből és TI32081 lebegőpontos egységből és a 40 tűs TI32202 megszakításvezérlő egységből állt. Az öt alkatrészből álló csipkészlet ára 289 dollár volt, 100 darabos mennyiségben.
A National megváltoztatta tervezési módszertanát, hogy lehetővé tegye a termék gyártását, ennek során egy "Z" nyelven alapuló tervezési rendszert fejlesztett ki az „NSC” tervezőközpont az izraeli Herzlijában, a Tel-Avivi Egyetem közreműködésével. A „Z” nyelv hasonló a mai Verilog és VHDL nyelvekhez, de Pascal-szerű szintaxisa van és kétfázisú órajelű kialakítások tervezésére optimalizálták. Mire azonban a fejlesztések eredménye megjelent a tervezésben, a 68k alapú gépek már kezdték elfoglalni a piacot, kezdve az Apple Macintosh modellel, és a 32016 nem terjedt el széles körben.
A 32016 16 bites külső adatsínnel és 24 bites külső címsínnel rendelkezik, utasításkészlete teljesen 32 bites. Tartalmaz egy koprocesszor-interfészt is, ami lehetővé teszi, hogy a társprocesszorok, mint például az FPU-k és MMU-k, egyenrangú módon csatlakozzanak a fő processzorhoz. Az MMU igény szerinti lapozást használó virtuális memórián alapul, ami szokatlan megoldás a versenytársak által használt szegmentált memória-megközelítéshez képest, és amely mára a mikroprocesszorok tervezésének szabványává vált. Az architektúra támogatja az utasítás-újraindítási mechanizmust laphiba esetén, ami sokkal elegánsabb megoldás, mint a Motorola megközelítése, amely laphiba esetén kiírja a belső állapotot, amit vissza kell olvasni az utasítás folytatása előtt.A Motorola 68000-es laphibakezelése. A hibát a későbbi típusokban javították, de a módszer nem változott, a processzorállapotot a felügyelői verembe menti és onnan olvassa vissza a processzor.