Warum ist ein Datenpfad in Mikrocontrollern immer eine Potenz von 2 breit?


8

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?


7
Sakrileg verbrennen ihn auf dem Scheiterhaufen!
Kenny

@ Kenny Ja, ich bin auch empört! :-)
m.Alin

@ m.Alin der Horror! Bevor Sie es wissen, kehren die Leute zu Bit-Slice-Designs zurück und schreiben ihre eigenen Assembler.
Kenny

Er sollte zu 3 Jahren Haft verurteilt werden, wenn er nur alte 5-Bit-Code-Teletypen verwendet (diese hatten unter anderem separate Codes für "Shift", um auf mehr Buchstaben zuzugreifen).
Olin Lathrop

2
... weil ein bisschen an sich eine Potenz von 2 ist? :-P
Shimofuri

Antworten:


8

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.


7

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.

Geben Sie hier die Bildbeschreibung ein


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.


Wenn Sie ein 24-Bit-Produktionsteil wünschen, sind die R300 / 420-GPUs von ATI (9500-X600- und X700-850-Karten) genau das Richtige für Sie.
Dan spielt

Die Idee eines Ein-Bit-Mikros scheint interessant, aber wie nützlich war ein Chip wie der MC14500B in der Praxis? Ich würde denken, dass die Steuerung eines Programmadressbits durch Eingabedaten (unter Verwendung eines Latch und eines 2: 1-Multiplexers) effektiver wäre als der Versuch, Anweisungen zum Verwalten des Status zu verwenden. Ich habe ein Datenblatt aus den 90er Jahren für das Teil gefunden, das darauf hindeutet, dass es eine Weile bestehen geblieben ist, aber ich bin gespannt, wie ein solcher Chip tatsächlich verwendet werden würde.
Supercat

@supercat - Ich habe eine Referenz gefunden, bei der ein Designer sagte, sie hätten ein altes diskretes Wirewrap-Design, das durch ein auf einem MC14500B basierendes ersetzt wurde, und über einige Jahre kaufte der Kunde eine Reihe davon. Ein verkrüppelteres und unfähigeres Gerät wäre jedoch kaum vorstellbar.
Russell McMahon

Ich kann mir die Designpsychologie der 1970er Jahre nicht wirklich vorstellen, aber Steve Wozniaks Diskettenlaufwerk-Controller (im Apple vorgestellt) [) zeigt, dass es nicht viel diskreter Logik bedarf, um einen "Computer" zu bauen. Nachdem ich mir das Handbuch für diesen MC14500B angesehen hatte, überlegte ich, wie ich ein System entwerfen könnte, um Code von einem PROM mit nur diskreter Logik (außerhalb des PROM selbst) auszuführen. Ich denke, der Mut meiner Maschine wäre ein transparenter 8-Bit-Latch, ein 8-Bit-Flip-Flop und ein Quad-NAND sowie möglicherweise eine RC-Verzögerung (abhängig von den Setup / Hold-Anforderungen für die E / A). Ein 16-Bit-Befehl pro Zyklus.
Supercat

Sieben Bits vom Flip-Flop würden die oberen Adressbits des PROM ansteuern, und das untere Bit würde vom Takt angesteuert. Während der ersten Hälfte jedes Zyklus würde der transparente Latch die oberen sechs Ausgangsbits (E / A-Adresse) abtasten und das Gerät würde einen E / A-Lesevorgang durchführen. Der E / A-Eingang würde das siebte transparente Latch-Bit ansteuern, und 3 NANDs würden als Multiplexer fungieren, der den zwischengespeicherten Eingang verwendet, um Q0 oder Q1 aus dem PROM auszuwählen, um das verbleibende transparente Latch-Bit zu speisen. Führen Sie in der zweiten Hälfte jedes Zyklus einen E / A-Schreibvorgang mit der zwischengespeicherten Adresse und den Daten durch.
Supercat

7

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.


2

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.


1
"Die meisten gängigen Datentypen basieren auf einem 4-Bit-Halbbyte". Ich glaube nicht, dass das stimmt. Textdaten (es gibt viele davon) basieren auf Bytes, und numerische Daten (einschließlich komprimierter / codierter Daten) basieren häufig auf 16-Bit oder 32-Bit. Die einzige Verwendung von 4-Bit-Daten, die ich mir vorstellen kann, ist BCD, aber IMO ist sehr begrenzt.
Stevenvh

@stevenvh Ich denke, er bezieht sich auf die große Verwendung von HEX zum Gruppieren von Daten ... Ich würde sagen, es ist wahr, in Architekturen sieht man oft diese Zerlegung
Clabacchio

1

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":

SHL R1,4

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.


1
Ich habe auch darüber nachgedacht, aber ich bin mir nicht sicher, ob das Grund genug ist, eine vollständige Architektur darauf aufzubauen.
Stevenvh

1
Ein größerer Faktor ist meiner Meinung nach die Fähigkeit, Daten in Bit-Arrays zu speichern und darauf zuzugreifen. Die Verwendung solcher Arrays stellt keinen großen Teil dessen dar, was Computer tun, aber sie sind kaum ungewöhnlich. Auf einer Maschine mit z. B. 8-Bit-Bytes kann das Element i eines Arrays über arr[i >> 3] >> (i & 7)oder durch Testen, ob arr[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.
Supercat

@supercat Nicht viel schwieriger, nur viel langsamer. Man ersetzt nur eine Schicht durch eine Division. Ich bin mir sicher, dass Sie es bereits wissen, aber ich dachte nur, dass es sich lohnt, darauf hinzuweisen.
Roman Starkov

0

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


1
Dies erklärt nicht die Potenzen von 2 für die Wortlänge. Sie erwähnen selbst eine Länge von 5 als ausreichend für 32 Kombinationen. OP fragt, warum es keine 5-Bit-Controller gibt.
Stevenvh

@stevenvh: Das ist absolut in Ordnung, Sir. Ich habe es bekommen. Vielleicht habe ich mich nicht richtig auf die Frage konzentriert. Vielen Dank.
Naved

Ich habe Ihre Antwort auf einen Kommentar verschoben, den Sie aus dem Feld unten verwenden können. Die Antworten zielen darauf ab, Inhalte zu der Frage bereitzustellen, der Rest ist für Kommentare.
Clabacchio

0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.