Krajowe PACE półprzewodnikowe
IPC-16A PACE firmy National Semiconductor , skrót od „Processing and Control Element”, był pierwszym komercyjnym jednoukładowym 16-bitowym mikroprocesorem , ogłoszonym pod koniec 1974 r. Była to jednoukładowa implementacja ich pięcioukładowego IMP z początku 1973 r. -16 , która z kolei została zainspirowana minikomputerem Data General Nova . Do podstawowego IMP-16 firma PACE dodała nowy tryb operacyjny, „tryb bajtowy”, który był przydatny do pracy z danymi 8-bitowymi, takimi jak tekst ASCII .
Zaimplementowany w pMOS , co było powszechne w tamtych czasach, PACE wymagał trzech napięć zasilania i zewnętrznego zegara z wystarczającym sygnałem do sterowania wewnętrzną logiką. Zwykle było to dostarczane przez układ STE. Większość systemów PACE wymagała również chipa BTE do konwersji sygnałów o wyższym napięciu wewnętrznym na TTL używane przez resztę systemu. Jego zmultipleksowany adres i piny danych również wymagały dodatkowej logiki.
Chociaż National Semiconductor miał umowy drugiego źródła z Signetics i Rockwell Semiconductor , żadna z firm nie wyprodukowała projektu PACE. Po PACE pojawił się INS8900 , który miał tę samą architekturę, ale został zaimplementowany w nMOS . Ta wersja ułatwiła interfejs elektryczny, a także naprawiła kilka błędów w logice PACE i zwiększyła prędkość o około 50%. Zanim była dostępna, pojawiały się 16-bitowe procesory o wyższej wydajności, a firma zaczęła zmniejszać nacisk na sprzedaż tej linii.
Opis
Fizyczny
PACE był zapakowany w 40-stykową podwójną obudowę rzędową (DIP), pierwotnie wykonaną z ceramiki. Ponieważ była oparta na logice pMOS , seria PACE wymagała trzech napięć zasilania, +5V (V SS , pin 20), +8V (V BB , pin 23) i -12V jako poziom masy (V GG , pin 29). Poziom +8V był zwykle dostarczany za pomocą prostej elektroniki zasilanej linią +5V, zmniejszając w ten sposób złożoność zasilania .
Chip był normalnie sterowany za pomocą zewnętrznego zegara 750 nanosekund (1,33 MHz) z wykorzystaniem układu System Timing Element, STE, do generowania sygnałów o wymaganej sile sygnału. Ponieważ sygnały te były również używane przez urządzenia zewnętrzne, sygnały zegara były na TTL , +5V, w przeciwieństwie do większości pinów, które miały +8V.
Ze względu na to, że sygnały zewnętrzne prezentowane były na napięciu +8V, połączenie systemu z popularnymi urządzeniami pracującymi na poziomach TTL nie było banalne. Z tego powodu systemy wykorzystujące PACE zwykle zawierały dwukierunkowy element nadawczo-odbiorczy, BTE. Działało to w połączeniu z PACE w celu wytworzenia pełnego zestawu sygnałów magistrali przy napięciach TTL, które można następnie wykorzystać do łatwego łączenia z większością współczesnych urządzeń, takich jak SRAM .
Aby zmieścić 16-bitowe adresy i dane na 40-pinowym DIP, ten sam zestaw 16 pinów został zmultipleksowany między prezentacją adresu oraz odczytem i zapisem danych w oddzielnych cyklach. Wymagało to od urządzeń zewnętrznych, takich jak pamięć główna , zatrzaśnięcia adresu między cyklami.
Projekt wewnętrzny
|
IMP-16 firmy National Semiconductor został zainspirowany Data General Nova , ale miał kilka drobnych różnic w swoim ISA. Wśród nich była obsługa czterech dostępnych dla użytkownika 16-bitowych rejestrów procesora . W Nova pierwsze dwa rejestry były akumulatorami ogólnego przeznaczenia i były używane do większości podstawowych operacji arytmetycznych i logicznych, podczas gdy drugie dwa mogły być używane jako operandy lub jako rejestry indeksowe . IMP-16 wzorował się na tym modelu, ale PACE zmienił szereg instrukcji, tak aby działały tylko na pierwszym akumulatorze, AC0.
Oryginalna Nova nie implementowała stosu sprzętowo, chociaż został on dodany w późniejszych modelach Nova 3, począwszy od 1975 r. PACE zaimplementował inny styl stosu przy użyciu nowego rejestru wskaźnika stosu (SP), który był automatycznie zwiększany i zmniejszany, gdy PUSH
i Napotkano instrukcje PULL .
Licznik programów (PC) był automatycznie przesuwany lub wyciągany na stos podczas wywołań i powrotów podprogramów . Dodatkowe instrukcje pozwoliły również na pchanie i ciągnięcie czterech rejestrów oraz rejestru statusu i flag kontrolnych.
Procesor miał dziesięć 16-bitowych lokalizacji pamięci, w których znajdowały się najwyższe wartości stosu. Unikalną cechą PACE jest to, że gdy stos się zapełni i podjęta zostanie kolejna próba wypychania lub gdy jest pusty i podjęta zostanie próba wyciągnięcia, generowane jest przerwanie . Zwykle jest to używane do wywołania kodu obsługi przerwań , który kopiuje niektóre lub wszystkie wartości ze stosu do pamięci głównej , a następnie opróżnia stos. Dzięki temu wewnętrzne rejestry stosu mogą być używane jako pamięć podręczna większego stosu opartego na pamięci.
Rejestr statusu i flagi kontrolnej miał również szerokość 16 bitów. Bity 0 i 15 są ustawione na 1 i normalnie nie są używane, podczas gdy pozostałe czternaście jest aktywnie używanych. Obejmowało to typowe flagi, takie jak CRY wskazujące, że dodanie spowodowało przeniesienie, OVF, jeśli się przepełniło, oraz LINK, które wskazywało, że bit należy przesunąć podczas instrukcji przesuwania i obracania. LINK jest zwykle obsługiwany za pomocą flagi przenoszenia w większości projektów procesorów mikrokomputerów, ale posiadanie dwóch oddzielnych flag jest bardziej powszechne w minikomputerach gdzie jest wystarczająco dużo dostępnych bitów stanu, ponieważ pozwala to na śledzenie tych dwóch oddzielnie podczas serii instrukcji przesuwania / obracania i dodawania, co jest powszechną sekwencją. Flaga IN EN, zwykle 1, umożliwia włączanie i wyłączanie przerwań. Unikalną cechą PACE, której nie ma w IMP-16, jest flaga BYTE. Gdy ta opcja jest włączona, dane są dostępne w słowach 8-bitowych zamiast 16-bitowych. Pozwala to na łatwiejsze przetwarzanie danych 8-bitowych, takich jak tekst ASCII .
Pozostałe bity w SCF są w większości mapowane bezpośrednio na piny na zewnątrz chipa. Bity od 1 do 5 to flagi IE1 do IE5, które są używane do sterowania przerwaniami w sposób priorytetowy. IE1 jest ustawiane tylko w przypadku przepełnienia stosu. Pozostałe cztery mogą być używane do wyłączania poszczególnych linii przerwań lub częściej do generowania wartości binarnej od 0 do 15, na podstawie której urządzenia zewnętrzne określają, czy powinny wykonać przerwanie. Na przykład, jeśli wartość w tych flagach sumuje się do 5, dowolne urządzenie z wartością przerwania 5 lub niższą (1 to najwyższy priorytet) może to wyrazić, urządzenie, które chce wywołać niższy priorytet, powiedzmy 7, jest instruowane trzymać to.
Podobnie flagi SCF od F11 do F14 są używane jako wyjścia w celu zapewnienia bezpośredniej kontroli nad urządzeniami zewnętrznymi. Na przykład mogą być użyte do wskazania, że urządzenie 6 powinno prezentować dane na magistrali, co może zrobić, mapując 128 bajtów wewnętrznego bufora na wspomnianą wcześniej podzieloną stronę bazową.
Tryby adresowania i formaty instrukcji
W przeciwieństwie do większości projektów mikrokomputerów tamtej epoki, PACE nie wykorzystywał instrukcji o zmiennej długości, wszystkie instrukcje wykorzystywały 16 bitów. 16-bitowe słowa zostały podzielone na szereg pól bitowych dla formatu instrukcji. Sześć górnych bitów, od 10 do 15, zawierało kod operacji , podczas gdy bity 8 (R dla względnego) i 9 (X dla indeksu) wskazywały tryb adresowania. Pozostałe osiem bitów w instrukcji zwykle zawierało 8-bitowy adres. Oznaczało to, że nie można było bezpośrednio określić dowolnego miejsca w pamięci; do zbudowania wymaganego adresu 16-bitowego z wartości 8-bitowej użyto kilku różnych systemów. Były 43 instrukcje i 45 kodów operacji, z dwoma kodami operacji dla LD
i ST
(patrz poniżej).
Gdy X wynosił zero, bity adresu reprezentowały bezpośredni adres w pamięci. Przy R również ustawionym na zero adres znajdował się na stronie podstawowej, zwykle w pierwszych 256 bajtach pamięci. Ustawienie R na 1 i X na 0 wykorzystywało pozostałe osiem bitów jako przesunięcie względem komputera. Ustawienie bitu X na 1 włączyło indeksowanie, używając ośmiu bitów oprócz wartości w rejestrach indeksowych, przy R równym 0 dodałoby wartość w AC2, a ustawienie na 1 użyłoby zamiast tego AC3.
Zwykle strona podstawowa była pierwszymi 256 bajtami pamięci, ale kiedy potwierdzono pin BPS , zamiast tego podział strony podstawowej między pierwsze i ostatnie 128 bajtów.
Pomysł polegał na tym, że urządzenia zewnętrzne byłyby mapowane na te wysokie lokalizacje pamięci i mogłyby łatwo obserwować zapisy i odczyty, sprawdzając adres na magistrali i sprawdzając, czy wszystkie dziewięć górnych bitów to jedynki. Co dziwne, nie ma instrukcji zmiany ustawień BPS
, zamiast tego większość systemów podłączała pin do jednego ze pinów stanu, a następnie używała instrukcji zmiany statusu do sterowania nim.
Adresowanie pośrednie w PACE było ograniczone, wspierane głównie przez instrukcje LD
i ST
, które ładują i zapisują wartości między rejestrami a pamięcią. Wskazanie adresowania pośredniego wykorzystywało oddzielne kody operacyjne, w przeciwieństwie do bitów wskazujących adresowanie. W przypadku użycia adres był konstruowany w normalny sposób, dodając osiem bitów adresu do strony podstawowej lub komputera. Następnie odczytałby 16-bitową wartość w tej lokalizacji pamięci, a następnie załadował lub zapisał z tego adresu. W połączeniu z flagą X, 8-bitowe przesunięcie jest najpierw dodawane lub odejmowane od wskazanego rejestru indeksowego.
Innym użytkownikiem adresowania pośredniego był ISZ
i DSZ
. Te zwiększały lub zmniejszały wartość w pamięci i były powszechnie używane do implementacji pętli, dlatego powszechne było adresowanie pośrednie, ponieważ zmienna sterująca pętli mogła znajdować się poza blokiem kodu. Inną interesującą cechą tych instrukcji było to, że (w dowolnym trybie adresowania) jeśli wartość została zmieniona na zero, wywoływana była instrukcja SK ip.
Pozwoliło to na wyjście z pętli bez żadnych dodatkowych testów; zazwyczaj ostatnią instrukcją w pętli byłby JMP
z powrotem na początek pętli, ale gdy wartość osiągnie 0, automatycznie przekroczy
ten JMP
i będzie kontynuowany.
Ten styl sterowania w pętli jest powszechny w minikomputerach, ale nie w projektach mikrokomputerów. W dedykowanych mikroprocesorach tego rodzaju operacja jest zwykle wykonywana za pomocą kilku instrukcji, z których jedna porównuje indeks pętli z określoną wartością (w tym przypadku zerem), a następnie rozgałęzia się z powrotem na górę, jeśli warunek nie jest spełniony. Nieodłączny element PACE, polegający na pomijaniu zera, był powszechną cechą minis, która przyspieszała wydajność pętli, unikając osobnego testu. Jeśli nie jest to właściwe, przyrost lub spadek może ustawić przesunięcie na zero, aby uniknąć wyzwalania tej funkcji.
INS8900
Ciągłe doskonalenie produkcji półprzewodników we wczesnych latach siedemdziesiątych doprowadziło do wprowadzenia koncepcji logicznej NMOS lub nMOS. Ten typ logiki ma tę istotną zaletę, że jego wewnętrzne tranzystory nie wymagają dużego napięcia na warstwie podłoża, jak pMOS. W praktyce oznacza to, że procesor nMOS może działać tylko przy dwóch napięciach wejściowych zamiast trzech, a dodatnie zasilanie można ustawić na +5 V, dzięki czemu połączenie z obwodami TTL jest banalnie proste.
National Semiconductor wykorzystał tę technikę, przeprojektowując PACE w nMOS, aby stworzyć INS8900. Nowa wersja zachowała wiele z oryginalnego układu chipów, chociaż, co nie jest zaskoczeniem, niektóre piny zasilacza zmieniły swoje wejścia; oryginalny +5V V SS był teraz uziemiony (GND), VBB zmienił się z -8 na +8V, a dawny -12V V GG stał się +12V V DD . Z nieznanych przyczyn dwa inne piny nie zmieniły funkcji, ale zmieniły nazwę; CLK stał się V CC , a NCLK stał się CLKX.
Najważniejszą zmianą pod względem użytkowania było to, że różne piny sygnałowe pracowały teraz przy napięciach TTL, umożliwiając im bezpośrednią komunikację z systemami zewnętrznymi, takimi jak pamięć. Ta zmiana nie rozwiązała problemu konieczności zatrzaskiwania adresu na wspólnej magistrali danych/adresowej, ale znacznie ułatwiła takie zatrzaskiwanie. Zamiast wymagać stosunkowo złożonego układu BTE, zadanie to mogłoby teraz być wykonywane przez zwykłe komponenty TTL, chociaż National Semiconductor zasugerował do tego celu własne INS8208 i INS8212. Magistrala może być teraz zaimplementowana przez pojedynczy INS8208 blokujący sygnały kontrolne wskazujące, czy magistrala jest w trybie adresu lub danych (między innymi), dwa dodatkowe INS8208 do każdego bufora 8-bitowego danych i dwa INS8212 do każdego bufora 8 -bity adresu.
Kolejną zmianą, która była możliwa dzięki niższym obciążeniom w nMOS, było to, że sygnały zegara nie wymagały już tak dużej mocy. Wyeliminowało to potrzebę stosowania STE, które można było zastąpić odpowiednim kryształem i pojedynczym falownikiem 7404 , dostępnym u wielu producentów. Ponieważ zegar zewnętrzny nie miał już dużej mocy, potrzebne było tylko jedno wejście zegara, dawny NCLK, teraz przemianowany na CLKX. Poprzednia druga faza była teraz generowana na pokładzie procesora. Zmiany te pozwoliły również systemowi działać z większą szybkością, zalecany był kryształ 2 MHz, co znacznie zwiększyło się w porównaniu z 1,33 PACE. To poprawiło czas instrukcji do 8 do 20 mikrosekund.
Inne zmiany obejmowały szereg poprawek problemów znalezionych w PACE. Godny uwagi wśród nich był problem z przerwaniem, które było wyzwalane, gdy stos się zapełnił. W PACE to nie działało poprawnie; gdyby przerwanie dotarło dokładnie w tym samym czasie co NIR3 lub NIR5, z lokalizacji 0 zamiast 2 zostałby wywołany niewłaściwy kod przerwania. National Semiconductor zasugerował albo nieużywanie tej funkcji, albo umieszczenie tego samego adresu w obu lokalizacjach, aby zawsze wywołać ten sam kod, który następnie ustaliłby, co faktycznie się wydarzyło. Podobne problemy występowały, gdy przerwanie poziomu 0 wystąpiło w ciągu 12 cykli innych przerwań, powodując wywołanie niewłaściwego kodu. Wszystkie te problemy zostały rozwiązane w 8900.
Wydajność
Chociaż PACE działał ze stosunkowo dużą częstotliwością zegara w tamtych czasach, architektura zestawu instrukcji (ISA) została zaimplementowana przy użyciu mikrokodu , a multipleksowana magistrala wymagała dwóch cykli dla każdego dostępu do pamięci. W rezultacie wykonanie typowej instrukcji zajęło około 12 do 30 mikrosekund, co daje mniej więcej taką samą prędkość, jak współczesne procesory 8-bitowe, takie jak Intel 8080 . Nadal zapewniało to przewagę podczas pracy z większymi danymi, na przykład w zmiennoprzecinkowej , ponieważ ta pojedyncza instrukcja mogła przetworzyć dwa razy więcej danych w jednej operacji.
Notatki
Cytaty
Bibliografia
- IPC-16A PACE , karta katalogowa National Semiconductor, Bitsavers (2018-01-06)
- Abramowicz, Bob; Enger, Janice; Ingraham, Curtis; Jacobson, Zuzanna; McGuire, Patrick (1981). Podręcznik 16-bitowego mikroprocesora Osborne'a . Osborne/McGraw-Hill. ISBN 0-931988-43-8 .