Datenpfade von Mikrocontrollern haben immer eine Leistung von 2 Breiten: 4 Bit, 8, 16, 32 Bit usw. Selbst PICs, die 12 Bit breite Befehle verwenden, sind 8-Bit-Controller. Warum? Gibt es einen Designvorteil? Was ist los mit einem 12-Bit-Datenbus oder einem 7-Bit-Controller ?
edit
Das 7-Bit macht nicht viel Sinn, aber es hat mich dazu gebracht, über die Frage nachzudenken. Die Antworten beziehen sich auf die Tradition der 8-Bit. Aber 16-Bit ist nicht 8-Bit, und 24-Bit kann sowohl 8-Bit-Daten als auch 16-Bit verarbeiten, oder? Warum haben sie 24-Bit übersprungen, um zu 32-Bit zu wechseln?
microcontroller
architecture
Federico Russo
quelle
quelle
Antworten:
Tradition hat eine starke Anziehungskraft. Aber auch die Interoperabilität. Nahezu jedes vorhandene Dateiformat und Kommunikationsprotokoll arbeitet mit Bytes. Wie gehen Sie damit in Ihrem 7-Bit-Mikrocontroller um?
Der PIC kommt damit durch, indem der Anweisungsraum vollständig getrennt und von außen im Voraus programmiert wird. Das Bit-Rasieren des Befehlssatzes hat einen gewissen Wert, da Sie sich als Mikroprozessor-Designer nur selbst steuern können.
Wenn Sie eine extreme Architektur wünschen, können Sie den Befehlssatz mit Huffman codieren, wodurch Sie eine Bitness variabler Länge erhalten.
quelle
4 Bit sinnvolles Minimum:
0-9 Numerische Daten benötigen 4 Bit
0-9 = 10 Wörter.
Nächste höchste binäre Wortgröße = 4 Bits = 16 mögliche Wörter.
Also BCD-Daten (binär codierte Dezimalzahl) = 4 Bits
8 Bit logischer nächster Sprung
0-9, az, AZ = 10 + 26 + 26 = 62 Wörter.
Könnte mit 7 Bits = 128 Wörtern umgehen.
8 ist ungefähr so einfach wie 7 und erlaubt 2 x 4 Bit, so dass numerische Daten 2 pro 8 Bit Byte gepackt werden können.
Dann 12 Bit (nicht 16) ?:
Nächste logische Größe = 12 Bit und der frühe und sehr erfolgreiche PDP-8 verwendete 12 Bit. 12 Bits, die für Daten und Programme verwendet werden, ermöglichen 2 ^ 12 = 4096 Adresspositionen. Wie Bill Gates möglicherweise einmal gesagt hat "4K Speicher sollten für jeden ausreichen".
Die folgende PDP-11-Familie verwendete 16 Bit.
Verdoppelung für Kompatibilität.
Wenn Sie mit Systemen auf niedrigeren und höheren Ebenen zusammenarbeiten möchten und leistungsfähigere Geräte in derselben Familie haben möchten, ist es sehr sinnvoll, zwei Wörter des kleineren Systems innerhalb des größeren Systemworts verarbeiten zu können.
ABER
Die Ausnahmen, die die Regel bestätigen:
"Immer" ist so ein starkes Wort :-)
1-Bit-, 12-Bit-, 18-Bit-, 36-Bit-Beispiele unten.
18- und 36-Bit-Maschinen waren niemals Mikrocontroller.
1 & 12 Bit waren.
Das unten erwähnte Ein-Bit-System ist wirklich ein "Zufallsbits, wie Sie es für richtig halten" -System. Das Ein-Bit-Datenwort ist im Wesentlichen ein durch Berechnung erzeugtes Go / No-Go-Flag und wird zum Aktivieren oder Deaktivieren der Programmaktivität verwendet. Der Programmzähler ist ein Aufwärtszähler, der zyklisch durch den Speicher läuft, wobei der Code nach Bedarf aktiviert oder deaktiviert wird. Sehr, sehr, sehr böse. Als es auf den Markt kam, waren die 8-Bit-Prozessoren des Tages ziemlich ausgereift und der 1-Bit-Prozessor machte nie wirklich Sinn. Ich weiß nicht, wie viel Nutzen es jemals bekommen hat.
1-Bit !!!:
Motorola MC14500B Ich habe eine lobende Erwähnung von Jack Gansell für die beste Beschreibung dieses Geräts erhalten :-)
Datenblatt - Klicken Sie auf die Seite zum PDF-Download.
12-Bit:
Harris HM-6100 alias Intersil IM6100 - 12-Bit-Minicomputer wannabee] ( http://www.classiccmp.org/dunfield/other/i6100cfs.pdf )
Basierend auf dem äußerst erfolgreichen 12-Bit-Minicomputer DEC PDP-8.
Überblick
Programmspeicher und Datenspeicher belegen den gleichen Speicherplatz. Die Gesamtgröße des direkt adressierbaren Speichers beträgt 4 K Wörter. Die Wortgröße beträgt 12 Bit. Der 6100 hat keinen Stapelspeicher.
Die Programmspeichergröße beträgt 4 K Wörter. Alle bedingten Anweisungen ermöglichen es dem Prozessor, nur die nächste Anweisung zu überspringen. Um bedingt zu einer beliebigen Adresse im Speicher zu gelangen, wenn eine bestimmte Bedingung erfüllt ist, sollte der Code zuerst den Befehl "Überspringen, wenn die Bedingung nicht erfüllt ist" ausführen und nach dem Sprungbefehl einen direkten oder indirekten bedingungslosen Sprungbefehl setzen. Unbedingte Anweisungen können verwendet werden, um direkt innerhalb der aktuellen Seite (127 Wörter) oder indirekt innerhalb des gesamten Speicherplatzes (4 K Wörter) zu springen. Der 6100 unterstützt Unterprogrammaufrufe, aber aufgrund des Mangels an Stapelspeicher wird die Rücksprungadresse für Unterprogramme im Speicher gespeichert . Es gibt keine Anweisung "Rückkehr vom Unterprogramm" - das Unterprogramm sollte einen indirekten Sprung verwenden, um zum Aufrufer zurückzukehren.
Die Datenspeichergröße beträgt 4 K Wörter. Auf die Daten kann direkt innerhalb der Nullseite (0000h - 007Fh) oder innerhalb der aktuellen 127-Wörter-Seite zugegriffen werden. Auf die Daten kann indirekt überall in 4 K Speicherwörtern zugegriffen werden.
Wikipedia - Intersil 6100
Der PDP-8 & Intersil 6100 hatte 16 sehr umfangreiche Anweisungen. Es gibt KEINE Subtraktionsanweisung.
Die ADD-Anweisung heißt TADD, um Sie daran zu erinnern, dass es sich um eine 2-Komplement-Addition handelt, sodass wir keine ... Subtraktionsanweisung benötigen.
18 Bit, 36 Bit andere - die PDP-Familie:
Wikipedia Programmierter Datenprozessor
PDP1 - 18 Bit
PDP2 - 24 Bit starb am Morgen
PDP3, PDP6 - 36 Bit
PDP-12 Benutzerhandbuch (vorläufig - Wow.
Trotz der Nummerierung ist dies vor PDP16 - ein PDP-8 für Steroide mit analoger E / A-Fähigkeit - und ein technisches Laborgerät. Ich hätte eines kostenlos haben können, wenn ich wollte, aber Es hätte nirgendwo vernünftig oder unempfindlich gepasst. Das
erste Computerspiel, das ich jemals gespielt habe, war eines davon.
Space War. Die
Maschine befand sich in zwei kleinen Schränken.
Sie öffneten eine Tür und gingen hinein, um etwas zu tun Einbauten.
quelle
Weil der größte Teil der Welt sich darauf konzentriert hat, Computerdaten in 8-Bit-Blöcken zu speichern, zu kommunizieren und auf andere Weise zu verarbeiten. Es ist kein offizieller Standard, aber es ist ein sehr starker Ad-hoc-Standard.
In der Vergangenheit gab es Maschinen, die andere Vielfache als 8 Bit in ihren Datenpfaden handhabten. Beispiele hierfür sind die Serien CDC Cyber 6000 und 7000 sowie PDP-8. Die CDC-Maschinen verwendeten 6-Bit-Bytes, und der PDP-8 hatte ein 12-Bit-breites Wort ohne spezielle Art, nur mit 8-Bit-Mengen umzugehen. Es gab sicherlich auch andere Maschinen in dieser Kategorie. Der Grund, warum Sie heute nicht viel über sie hören, ist, dass die Leute entschieden haben, dass sie Maschinen wollen, die ihre 8-Bit-Bytes gut verarbeiten können, und genau das machen die Hersteller. Wie gut würde sich ein 7-Bit-Mikrocontroller verkaufen? Wer auch immer einen gemacht hat, wird lächerlich gemacht und findet dann nur wenige Kunden. Es wäre ein dummer Geschäftsvorschlag.
Sie können einige zusätzliche Hinweise auf Nicht-8-Bit- "Bytes" sehen, wenn Sie sich die Internetstandards ansehen. Sie verwenden absichtlich den Begriff "Oktett", weil es damals keine allgemeine Übereinstimmung gab, dass ein Byte immer 8 Bit war. Heutzutage hat sich die Bedeutung von Byte zu 8 Binärbits zusammengeschlossen, und Sie würden außerhalb der Stadt ausgelacht, wenn Sie versuchen würden, es anders zu verwenden.
quelle
Es gibt ein bisschen Effizienz gemischt mit viel Abwärtskompatibilität als Grund für diese gemeinsame Designwahl.
Wenn mein Datenpfad 7 Bit breit ist, benötige ich 3 Bit, um eine bestimmte Zeile dieses Pfades darzustellen. Da ich drei Bits verschwenden werde, kann ich sie genauso gut vollständig verbrauchen, sowohl aus Effizienzgründen als auch um einen toten Pfad zu beseitigen, der zu einem Absturz führen könnte.
Die meisten gängigen Datentypen basieren auf einem 4-Bit-Halbbyte, und die meisten basieren auf einem 8-Bit-Byte. Wenn Sie sich für eine alternative Basis entscheiden, müssen Sie möglicherweise auf ungeraden und ineffizienten Code zurückgreifen, um mit gängigen Datentypen umgehen zu können. Zum Beispiel würde mein 7-Bit-Computer 5 Speicherplätze benötigen, um mit einer der 32-Bit-Zahlen, einschließlich Gleitkommazahlen, umzugehen, die in der heutigen Industrie sehr verbreitet sind.
Wenn meine Maschine nicht von externen Daten abhängig wäre, könnte ich wahrscheinlich damit durchkommen, aber Motorsteuerungen, Encoder, Temperatursensoren und die meisten realen Schnittstellengeräte und Sensoren unterstützen solche Standardeinheiten.
Es ist nicht so, dass es unmöglich ist, einen 7-Bit-Computer an einen USB-Anschluss anzuschließen, aber Sie werden viele zusätzliche Tests durchführen und viel mehr Anweisungen ausführen, um all diese 5-Einheiten-Transaktionen für 32-Bit-Datentypen zu verarbeiten, als Sie es tun würden fügte Ihrem Datenpfad ein bisschen mehr hinzu und stimmte mit dem Rest der Branche überein.
Aufgrund der Effizienz der Bitadressierung wurde es jedoch weitgehend gestartet und mit der aktuellen Form verschmolzen. Das ist also die Hauptursache. Wenn Sie beispielsweise einen Trinary-Computer erstellen würden (3 Zustände anstelle von 2 Zuständen pro Bit), würden Sie die effizientesten Bitgrößen bei 3, 9, 27, 81 usw. sehen. Sie würden auch weniger effiziente Versuche bei sehen 18, 24, 33 und 66, um eine engere Kompatibilität mit binären Systemen zu gewährleisten.
quelle
Dies ist einfacher, da Sie eine Anzahl von Bits in einer Anzahl von Bits angeben können. Dies mag wie ein Salon-Trick erscheinen, aber Befehlssätze tun es die ganze Zeit. Denken Sie zum Beispiel an eine Anweisung "Nach links verschieben":
Wenn Sie eine Anzahl von Bits haben, die eine Zweierpotenz ist, können Sie den Operanden in einer festen Anzahl von Bits ohne Verschwendung codieren.
quelle
arr[i >> 3] >> (i & 7)
oder durch Testen, obarr[i >> 3] & mask[i & 7]
es nicht Null ist, gelesen werden (einige CPUs bevorzugen einen Ansatz gegenüber dem anderen). Es wäre viel schwieriger, so etwas mit einer Wortgröße ohne Zweierpotenz zu tun.Meines Wissens nach in der digitalen Elektronik liegt der Grund auf der Hand. Die Sache ist, dass wir für alle digitalen Systeme das Konzept des Binärzahlensystems verwenden. Das heißt, wir haben nur zwei Betriebsebenen, dh 0 oder 1. Jede Kombination, die auf Hardwareebene möglich ist, muss also eine Kombination aus 0 und 1 sein. Wenn wir also 4 verschiedene Aufgaben ausführen müssen, benötigen wir 2 Variablen, für 32 Aufgaben benötigen wir 5 Variablen usw. (die Logik ist 2 ^ n, wobei n die Anzahl der Variablen ist). Da es sich also nur um zwei Ebenen handelt, müssen wir nur eine Kombination als Potenz von 2 haben, was folglich 2,4,8,16,32,64,128,256 usw. ergibt. ..
quelle
Ich gebe zu, ich habe nur die anderen Antworten überflogen, aber ein wichtiges Detail scheint nur indirekt angesprochen zu werden: logische Geschwindigkeit und Kompaktheit.
Wenn Sie 24-Bit-Werte zusammenhängend packen und auch byteadressiert darauf zugreifen können, muss die Verarbeitungslogik für den Wortzugriff durch 3 geteilt werden. Die Division ist in der Logik ziemlich teuer (überprüfen Sie einfach Ihre bevorzugte Prozessorreferenz - der Divisionsbefehl ist langsam), es sei denn, es handelt sich speziell um eine Potenz von 2; In diesem Fall ignorieren Sie einfach die niedrigsten Bits (was die Software durch Bitverschiebung tut). Dies ist der gleiche Grund, warum wir ausgerichtete Zugriffe bevorzugen.
Es ist natürlich möglich, einen Prozessor um diese Grenzen herum zu entwerfen, vielleicht sogar die Wortzugriffe als vierten Adresswert zu codieren (da zwei Bits benötigt werden, um zwischen drei Bytes auszuwählen), und ich wäre nicht schrecklich überrascht, wenn ich einen solchen in einem sehen würde DSP (wie eine GPU); Dies ist jedoch nicht die Norm für CPUs. Es würde auch zu einem seltsamen 4/3-Schritt für Byte-Array-Zugriffe führen, der ähnlich wie BCD-Nummern behandelt werden müsste. Es wird somit viel effizienter, ein Array von 3 × 8-Bit-Vektoren anstelle von 8-Bit-Bytes zu handhaben.
quelle