Forum: Mikrocontroller und Digitale Elektronik Maschinenbefehl dekodieren (Verständnisfrage)


von Jantscher (technikp)


Lesenswert?

Hallo!
Mich beschäftigen zwei Verständnisfragen:

1)Wie wird ein Maschinenbefehl dekodiert und dann als Mikroprogramm 
realisiert?
Das IR-Register enthät ja den aktuellen OP-Code. Und dieser OP-Code wird 
mit bekannten Mustern verglichen. Nur wie funktioniert das, das dannach 
daraus einzelne Mikroinstruktionen werden?

2)Jeder Maschinenbefehl hat ein zum Maschinenbefehl gehörendes 
Mikroprogramm. Nur wie ermittelt das Steuerwerk wo das entsprechende 
Mikroprogramm im Mikroprogrammspeicher zu finden ist? Über den OP-Code?

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Du solltest angeben, um welchen Mikroprozessor es geht. Denn die Antwort 
hängt ganz stark davon ab und sollte wohl in der Dokumentation dessen 
stehen.

Im übrigen muss nicht zwangsläufig jeder Befehl die Abarbeitung von 
Mikrocode auslösen -> Siehe RISC

von (prx) A. K. (prx)


Lesenswert?

Pat ". schrieb:
> 1)Wie wird ein Maschinenbefehl dekodiert und dann als Mikroprogramm
> realisiert?

Erfundenes Beispiel: Ein Prozessor, bei dem ein 7 Bit Feld des 
Befehlscodes die Operation angibt, der Rest des Befehlscodes sind 
Konstanten und Register. Er hat einen Mikroprogrammspeicher aus 1024 
Worten. Jeder der 128 Opcodes verweist direkt auf einen Block aus 8 
Mikroprogrammworten. Manche Opcodes brauchen weniger als 8, manche mehr, 
also wird ungenutzer Platz kurzer Befehle vom Mikroprogramm langer 
Befehle genutzt, indem dort reingesprungen wird.

Reale Fälle sind weniger simpel zu dekodieren. Da wird eine Gatterlogik 
die relevanten Komponenten des Opcodes in eine Startadresse im 
Mikroprogrammspeicher umsetzen.

: Bearbeitet durch User
von time2weltherrschaft-- (Gast)


Lesenswert?

Da haste einen FPGA-Code fürs decodieren und datapath muxen:

https://www.mikrocontroller.net/svnbrowser/pibla/00_hw/src/pibla.vhd?view=markup


Projektseite dort: https://www.mikrocontroller.net/articles/PiBla

Da das ganze ein Nachbau eines Xilinx-cores ist, kann man bezüglich des 
Blockdiagrammes auch dort nachschauen: 
https://www.xilinx.com/support/documentation/ip_documentation/ug129.pdf

von Axel S. (a-za-z0-9)


Lesenswert?

Pat ". schrieb:
> Mich beschäftigen zwei Verständnisfragen:
>
> 1)Wie wird ein Maschinenbefehl dekodiert und dann als Mikroprogramm
> realisiert?

Bei jeder Architektur anders.

> Das IR-Register enthät ja den aktuellen OP-Code. Und dieser OP-Code
> wird mit bekannten Mustern verglichen.

Nein, verglichen wird da nichts. I.d.R. ist die Codierung eines 
Befehlssatzes darauf ausgelegt, möglichst leicht dekodiert werden zu 
können. Oft kann man den Opcode in wenige Gruppen von Bits zerlegen, die 
jeweils ihre eigene Bedeutung haben. Bspw. 4 bit, um eine ALU-Operation 
auszuwählen, jeweils 3 Bit für Quell- bzw. Zielregister. usw. usf.

Wenn du dir mal den Befehlsvorrat einer real existierenden CPU ansiehst, 
dann wird dir das direkt auffallen. Sehr instruktiv ist in dieser 
Hinsicht z.B. der 6502, auch weil da jeder Opcode maximal 8 Bit lang ist 
und man den Befehlssatz in einem 16x16 Gitter darstellen kann.


> 2)Jeder Maschinenbefehl hat ein zum Maschinenbefehl gehörendes
> Mikroprogramm.

Nicht notwendigerweise. Mikroprogrammierung war mal eine Weile in Mode, 
ist dann aber ganz schnell wieder verschwunden.

> Nur wie ermittelt das Steuerwerk wo das entsprechende
> Mikroprogramm im Mikroprogrammspeicher zu finden ist?
> Über den OP-Code?

Natürlich. Wie denn sonst, wenn man davon ausgeht, daß jeder Opcode 
seine eigene Mikrocode Implementierung braucht?

von Nichtverzweifelter (Gast)


Lesenswert?

Sehr schön auch beim Zilog Z80 zu sehen, die Aufteilung in einzelne bits 
des op-codes.
Alle bits gleich 0 löst dann eben keinerlei Reaktion aus, der Befehl 
lautet schlicht "nop", no operation, einen Zyklus lang nichts tun...

von Fpgakuechle K. (Gast)


Lesenswert?

Pat ". schrieb:

> 1)Wie wird ein Maschinenbefehl dekodiert und dann als Mikroprogramm
> realisiert?

'programm' im englischen bedeudet nicht 100%das selbe wie das deutsche 
Programmlisting. Programmierung als Ablaufsteuerung kann auch Mechanik 
sein wie bei dem Webmaschinen mit hölzernen Locvhkarten:
https://de.wikipedia.org/wiki/Jacquardwebstuhl
Microcode bedeutet hier letzlich steuersignale, die bspw. per 
Multiplexer oder Gates die Eingänge der ALU mit den jeweiligen 
srq-datenquellen verbinden (register aus dem Registerblock, Datenport, 
etc.).

Beim Decodieren können u.u. die bits des Instruction codes direkt als 
steuersignale für die Multiplex etc. genutzt werden.

> 2)Jeder Maschinenbefehl hat ein zum Maschinenbefehl gehörendes
> Mikroprogramm. Nur wie ermittelt das Steuerwerk wo das entsprechende
> Mikroprogramm im Mikroprogrammspeicher zu finden ist? Über den OP-Code?

Siehe LUT-Tabelle, der OP-Code innerhalb des Maschiernenbefehls ist die 
Adresse, der microcode ist dan das Datenwort in der LUT. Ebenfalls im 
Mikrocode steht die nächste Adresse der LUT bei mehr-Zyklen maschinen. 
Sieht man gut beim Mototola 68000 (selbst ein NOP braucht 3 Takte), 
dieser Prozessor gilt auch als Klassiker des Mikrocode-Architektur

http://www.easy68k.com/paulrsm/doc/chip68k.jpg
http://gendev.spritesmind.net/forum/viewtopic.php?t=3023

von (prx) A. K. (prx)


Lesenswert?

Fpgakuechle K. schrieb:
> selbst ein NOP braucht 3 Takte

Es sind 4. Das ist der Grundzyklus.

von Fpgakuechle K. (Gast)


Lesenswert?

A. K. schrieb:
> Fpgakuechle K. schrieb:
>> selbst ein NOP braucht 3 Takte
>
> Es sind 4.

Danke für die Korrektur, ich war grad zu morgen-faul konkret 
nachzulesen.

Hiermit nachgeholt:
http://bitsavers.informatik.uni-stuttgart.de/components/motorola/68000/68000_16-Bit_Microprocessor_Apr83.pdf


> Das ist der Grundzyklus.

Der Grundzyklus für die kurzen Befehle (16bit Innstruction word). Bei 
längeren Befehlen dauert es noch länger. Oder wenn die internen 32bit 
register über den 16bit datenbus beschrieben/gelesen werden müßen.

von letallec (Gast)


Lesenswert?

A. K. schrieb:
> Erfundenes Beispiel: Ein Prozessor, bei dem ein 7 Bit Feld des
> Befehlscodes die Operation angibt, der Rest des Befehlscodes sind
> Konstanten und Register. Er hat einen Mikroprogrammspeicher aus 1024
> Worten. Jeder der 128 Opcodes verweist direkt auf einen Block aus 8
> Mikroprogrammworten. Manche Opcodes brauchen weniger als 8, manche mehr,
> also wird ungenutzer Platz kurzer Befehle vom Mikroprogramm langer
> Befehle genutzt, indem dort reingesprungen wird.

Dann bin ich also nicht der Einzige für den alle Schaltpläne die Ursache 
eines jeden Spaghetticodes sind.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Pat ". schrieb:
> Mich beschäftigen zwei Verständnisfragen:
Immer noch?
Was ist aus dem Beitrag "Maschinenbefehl" geworden?

Beitrag #6390506 wurde von einem Moderator gelöscht.
von letallec (Gast)


Lesenswert?

A. K. schrieb:
> Reale Fälle sind weniger simpel zu dekodieren.

Der Spaghetticode ist immer und überall.

Mit strukturiertem Programmieren wird er verdeckt. Durch 
objektorientierte Sprachen wird er verlagert, in die 
Verwaltungsstrukturen, die Gehirne der Entwickler. Wer das Programmieren 
an einer objektorientierten Sprache lernt, kommt wahrscheinlich auch im 
Leben nich' mehr klar.

Der Spaghetticode ist immer und überall.

von (prx) A. K. (prx)


Lesenswert?

letallec schrieb:
> Dann bin ich also nicht der Einzige für den alle Schaltpläne die Ursache
> eines jeden Spaghetticodes sind.

Mikroprogrammschemata gibts sehr verschiedene. Obiges Beispiel ging von 
einem im Kern sequentiellem Schema aus, vergleichbar 
Maschinenprogrammen, mit Mikroprogrammzähler und bedingt verfolgter 
alternativer Folgeadresse vgl Sprungadresse.

Alternativ können auch in jedem Befehl zwei Folgeadressen enthalten 
sein, ohne jede sequentielle Befehlsfolge. Da gibts dann also keinen 
inkrementierten Mikroprogrammzähler, sondern die Bedingung entscheidet 
zwischen beiden Folgeadressen. Das kann dann vogelwild durcheinander 
gehen.

Ein Vorbild dazu ist die IBM 650. Programm und Daten befanden sich auf 
einem Trommelspeicher. Weshalb es keinen Programmzähler gab, sondern 
jeder Befehl die Adresse des Folgebefehls enthielt und geschickte 
Programmierer die Befehle so auf der Trommel anordneten, dass die 
Laufzeit der Befehle zur Trommelrotation passte. Also eigentlich nie 
zwei aufeinander folgend ausgeführte Befehle hintereinander standen. 
Muss Spass gemacht haben, so ein Programm zu lesen.

: Bearbeitet durch User
von Fpgakuechle K. (Gast)


Lesenswert?

A. K. schrieb:

> Ein Vorbild dazu ist die IBM 650. Programm und Daten befanden sich auf
> einem Trommelspeicher. Infolgedessen war der nächste Befehl zu dem
> Zeitpunkt schon wegrotiert, zu dem er gebraucht wurde.

Nicht nur Trommelspeicher, sowas gabs dann wieder beim XT bei der 
Festplatte als interleave factor:
https://www.classic-computing.org/tag/st506/#8

von (prx) A. K. (prx)


Lesenswert?

Fpgakuechle K. schrieb:
> Nicht nur Trommelspeicher, sowas gabs dann wieder beim XT bei der
> Festplatte als interleave factor:
> https://www.classic-computing.org/tag/st506/#8

Klar, aber da hat das ja keiner mitgekriegt, ausser dem Programmierer 
des Treibers für Floppy oder HD. Bei der 650 war dieses von der Laufzeit 
der Befehle abhängige und damit keineswegs konstante Interleaving Teil 
der Formulierung des Anwenderprogramms.

von Klugscheisser (Gast)


Lesenswert?

> alle Schaltpläne die Ursache eines jeden Spaghetticodes sind.

Transputer haben sogar schon Spaghettiopcodes!

Leider ist das Manual dazu als 'Confidential' gekennzeichnet.
Sonst haette ich es mal zu Belustigung angehaengt.

von (prx) A. K. (prx)


Lesenswert?


von letallec (Gast)


Lesenswert?

A. K. schrieb:
> IBM 650

Dem gegenüber steht mit den objektorientierten Sprachen die Abstraktion 
einer nicht vorhandenen Realität, der spaghettifreie Code.

von Fpgakuechle K. (Gast)


Lesenswert?

letallec schrieb:
> A. K. schrieb:
>> Reale Fälle sind weniger simpel zu dekodieren.
>
> Der Spaghetticode ist immer und überall.
>
> Mit strukturiertem Programmieren wird er verdeckt.

Nein und Ja. Spaghetticode ist nicht das Problem, weil 'GOTO' und 
Sprünge nicht das Problem sind. Das Problem ist Sourcecode ohne 
hilfreiche Erklärung, Spec,PAP, etc. und Programmierer mit 
eingeschränkten Wissen über Programmier- und 
Dokumentationsmöglichkeiten.

Man kann verständliche Assemblerprogramme schreiben und dokumentieren. 
Was aber nichts nutzt, solange der andere Assembler verteufelt und in 
Denkblockaden rennt sobald es um Hardwarerealisierungen geht.

IMHO ist das wie mit dem sog. "Deppen-Apastroph" - manche krakelen, 
begeifern und ereifern sich über dümmlichen Gebrauch der Zeichensetzung, 
ander juckt's nicht im Geringsten wenn es seinen Zweck erfüllt.

>Dem gegenüber steht mit den objektorientierten Sprachen die Abstraktion
>einer nicht vorhandenen Realität, der spaghettifreie Code.
Klar kann man Spaghetti durch Lasagne ersetzen, gekotzt wird trotzdem:
https://en.wikipedia.org/wiki/Spaghetti_code#Related_phrases

von letallec (Gast)


Lesenswert?

Fpgakuechle K. schrieb:
> IMHO ist das wie mit dem sog. "Deppen-Apastroph" - manche krakelen,
> begeifern und ereifern sich über dümmlichen Gebrauch der Zeichensetzung,
> ander juckt's nicht im Geringsten wenn es seinen Zweck erfüllt.

Ich will auf was Anderes hinaus: Die Stringtheorie.

Objektorientierte Sprachen sind ein Schritt auf dem Weg zur Umsetzung 
der perfekten Logik des reinen Kalküls. Leider verschwindet der Traum 
von der perfekten Maschine nach jedem Erwachen wenn man wieder Hand 
anlegen muß. Jedesmal.

von time2weltherrschaft-- (Gast)


Lesenswert?

> ein Schritt auf dem Weg zur Umsetzung
> der perfekten Logik des reinen Kalküls. Leider verschwindet der Traum
> von der perfekten Maschine nach jedem Erwachen wenn man wieder Hand
> anlegen muß. Jedesmal.

Kalter Kaffee, so ähnlich hat es schon Douglas Adams im 'Hitchhiker' 
beschrieben.

https://de.wikipedia.org/wiki/Hintergr%C3%BCnde_zu_Per_Anhalter_durch_die_Galaxis#Der_Sinn_des_Universums_beziehungsweise_was_passiert_wenn_er_gefunden_wird%E2%80%A6

„Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau 
rausfindet, wozu das Universum da ist und warum es da ist, dann 
verschwindet es auf der Stelle und wird durch etwas noch Bizarreres und 
Unbegreiflicheres ersetzt. Es gibt eine andere Theorie, nach der das 
schon passiert ist.“

von letallec (Gast)


Lesenswert?

time2weltherrschaft-- schrieb:
> Kalter Kaffee

Natürlich.

time2weltherrschaft-- schrieb:
> „Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau
> rausfindet, wozu das Universum da ist und warum es da ist, dann
> verschwindet es auf der Stelle und wird durch etwas noch Bizarreres und
> Unbegreiflicheres ersetzt. Es gibt eine andere Theorie, nach der das
> schon passiert ist.“

Warum nicht gleich Harry Potter? Wenn Du einen Zauberstab vorweisen 
kannst mit dem man nicht behebbare Disfunktionalitäten wie mit einer 
objektorientierten Sprache verursachen kann, bin ich ganz nah bei Dir.

von letallec (Gast)


Lesenswert?

P.S.:
...um Dich zu holen. Wo eon Zauberstab ist, da müssen noch mehr sein.

von time2weltherrschaft-- (Gast)


Lesenswert?

letallec schrieb:

> Warum nicht gleich Harry Potter? Wenn Du einen Zauberstab vorweisen
> kannst ... bin ich ganz nah bei Dir.

Das klingt mir irgendwie zu schwul

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.