Forum: Mikrocontroller und Digitale Elektronik 1 Befehl pro Zyklus


von jochenPizz (Gast)


Lesenswert?

Guten  Tag,

wie schafft es ein RISC Prozessor  wie ARM oder AVR einen Befehl in nur 
einem Zyklus durchzuführen?

Es muss ja der Befehl geholt werden, dekodiert werden, die nötigen 
Variablen geladen werden eine Berechnung mit der ALU durchgeführt werden 
und dann das Ergebnis und mögliche Statussignale gesetzt werden.

https://cseweb.ucsd.edu/~j2lau/cs141/week3.html

Thx

von (prx) A. K. (prx)


Lesenswert?

jochenPizz schrieb:
> wie schafft es ein RISC Prozessor  wie ARM oder AVR einen Befehl in nur
> einem Zyklus durchzuführen?

Des Rätels Lösung: Er schafft es keineswegs in einem Takt. Aber er 
schafft es, im Idealfall pro Takt ein Befehl zu starten und zu beenden.

https://de.wikipedia.org/wiki/Pipeline_(Prozessor)

von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Des Rätels Lösung: Er schafft es keineswegs in einem Takt.

Doch der AVR schafft das, außsser bei JMP.

>Es muss ja der Befehl geholt werden,
 Kein Problerm bei Onchip ROM wie AVR

>dekodiert werden,
Kein Problem bei RISC, da werden wenige bits (ca. 8) decodiert, der Rest 
geht direct als addressbit an die registerbank

> die nötigen  Variablen geladen werden
Kein Problem bei RISC typischen 'großen Registerbanken' und onchip RAM

> eine Berechnung mit der ALU durchgeführt werden
Kein Problem, wenn man komplexe Befehle wie MUL an Coprozessoren 
auslagert

>und dann das Ergebnis und mögliche Statussignale gesetzt werden.
Flags setzt die ALU nebenher.

>Thx
Tipp: besorg dir ein Buch über Computerarchitektur, dann kannst du Dich 
selber schlau machen und musst nicht das Forum mit theoretischen 
Pillepalle beschäftigen.
Du kannst dir auch den source code von Sngle cycle CPU's anschauen, 
bspw. hier im Forum: https://www.mikrocontroller.net/articles/PiBla

von foobar (Gast)


Lesenswert?

> einen Befehl in nur einem Zyklus durchzuführen?

Ein wichtiger Aspekt dabei ist das Design des Befehlssatzes: man achtet 
z.B. darauf, dass jeder Befehl einen Bus maximal einmal benutzt.  D.h. 
z.B., dass man eine feste Befehlslänge hat und dass Immediate-Operanden 
direkt im Opcode stehen und keinen zweiten Zyklus auf dem Instructionbus 
benötigen.  Man hat keine Read-Modify-Write-Befehle auf's RAM, würden 
den Datenbus zweimal benutzen.  Usw.

von Michael O. (michael_o)


Lesenswert?

Den Tackt in Mikroschritte zu zerlegen konnte schon die Oktale CDC 
Maschine auf der ich meine Technikerausbildung gemacht habe. 8kB 
Ringkernspeicher Papertape Reader Konsole aus einer Kugelkopf 
Schreibmaschine und ein Bandlaufwerk mit 8" Spulen sowie eine 6MB 
Wechselfestplatte ware da angesagt.

MfG
Michael

von olaf (Gast)


Lesenswert?

Nachdem ihr jetzt die einfache Frage geklaert habt, wie schaffen
es superscalare Microcontroller (z.B SH2A) zwei Befehle pro Takt
auszufuehren? :)

Olaf

von jochenPizz (Gast)


Lesenswert?

Fred Focus schrieb:
> Du kannst dir auch den source code von Sngle cycle CPU's anschauen,

ah na klar man kann das/ muss das ja auch in HDL beschreiben können.

Also ich finde vor allem interessant welche Schaltung da verwendet wird, 
um die Befehle rechtzeitig zu bearbeiten.

von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> (prx) A. K. schrieb:
>> Des Rätels Lösung: Er schafft es keineswegs in einem Takt.
>
> Doch der AVR schafft das, außsser bei JMP.

Üblicherweise bezieht man den gesamten Ablauf mit ein. Und Fetch-Execute 
sind 2 Takte.

: Bearbeitet durch User
von Blechbieger (Gast)


Lesenswert?

jochenPizz schrieb:
> Fred Focus schrieb:
>> Du kannst dir auch den source code von Sngle cycle CPU's anschauen,
>
> ah na klar man kann das/ muss das ja auch in HDL beschreiben können.
>
> Also ich finde vor allem interessant welche Schaltung da verwendet wird,
> um die Befehle rechtzeitig zu bearbeiten.

Rechtzeitig ist einfach wenn der Takt nur langsam genug ist. Single 
cycle CPUs haben, verglichen mit pipelined CPUs, sehr niedrige 
Taktfrequenzen (bei gleicher Fertigungstechnologie).

von (prx) A. K. (prx)


Lesenswert?

olaf schrieb:
> Nachdem ihr jetzt die einfache Frage geklaert habt, wie schaffen
> es superscalare Microcontroller (z.B SH2A) zwei Befehle pro Takt
> auszufuehren? :)

Wo siehst du da ein Problem?

von MaWin (Gast)


Lesenswert?

(prx) A. K. schrieb:
>> Doch der AVR schafft das, außsser bei JMP.
>
> Fetch - Execute sind 2 Stufen.

Richtig.
Deshalb brauchen Sprünge mehr Takte.
Der AVR schafft es durch Pipelining nur scheinbar einen Befehl in einem 
Takt auszuführen.

https://www-user.tu-chemnitz.de/~heha/hsn/chm/ATmegaX8.chm/7.htm

von MaWin (Gast)


Lesenswert?

(prx) A. K. schrieb:
>> Nachdem ihr jetzt die einfache Frage geklaert habt, wie schaffen
>> es superscalare Microcontroller (z.B SH2A) zwei Befehle pro Takt
>> auszufuehren? :)
>
> Wo siehst du da ein Problem?

Das Problem ist doch offensichtlich.
In einer CPU ohne Pipelining ginge das gar nicht.
Und was, wenn eine Data-Dependency zwischen den Befehlen besteht?

von (prx) A. K. (prx)


Lesenswert?

MaWin schrieb:
> In einer CPU ohne Pipelining ginge das gar nicht.

Doch, natürlich. Es macht nur niemand, mangels Sinn. Im Prinzip geht 
VLIW auch ohne Pipelinung.

von (prx) A. K. (prx)


Lesenswert?

MaWin schrieb:
> Und was, wenn eine Data-Dependency zwischen den Befehlen besteht?

Finden und blockieren. Oder Schrott rein Schrott raus bei VLIW.

von MaWin (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Doch, natürlich. Es macht nur niemand, mangels Sinn. Im Prinzip geht
> VLIW auch ohne Pipelinung.

(prx) A. K. schrieb:
> Finden und blockieren. Oder Schrott rein Schrott raus bei VLIW.

Ja klar.
Also eine massive Steigerung der Silicon-Komplexität mit 
einhergehender niedrigerer Taktrate.
Null Gewinn.

Es ist schon klar, warum das niemand macht.

von Fred Focus (Gast)


Lesenswert?

MaWin schrieb:
> Ja klar.
> Also eine massive Steigerung der Silicon-Komplexität mit
> einhergehender niedrigerer Taktrate.
> Null Gewinn.

Mumpitz.
Komplex wird ein Design erst durch das Pipelining. Und was heisst schon 
niedrige Taktrate, für einen 8 MHz  AVR in einer Kaffeemascine ist die 
Taktrate schon mehr als genug.
Oder der multi-cycle 6502 auf 1 MHz im Apple II, der hatte noch genügend 
Takt für bit-toggling und Sound erzeugung übrig. Jaja Katzenvideaos 
laufen darauf nicht, aber wer braucht die schon.

Bei den heutigen IC-Strukturbreiten ist es kein problem eine 
single-cycle RISC-CPU im zweistelligen MHz Bereich laufen zu lassen.

von MaWin (Gast)


Lesenswert?

Fred Focus schrieb:
> Komplex wird ein Design erst durch das Pipelining. Und was heisst schon
> niedrige Taktrate

Fred Focus schrieb:
> Bei den heutigen IC-Strukturbreiten ist es kein problem eine
> single-cycle RISC-CPU im zweistelligen MHz Bereich laufen zu lassen.

Lies dir bitte noch einmal durch, worauf ich geantwortet habe.

von Stefan F. (Gast)


Lesenswert?

AVR haben zwei separate Speicher und Busse für Befehle und Daten. 
Deswegen können diese unabhängig voneinander gleichzeitig angesprochen 
werden. Dazu kommt, das der Programmspeicher einen 16 Bit Bus hat, so 
dass der nächste Befehl und sein Operand gleichzeitig geladen werden 
können. AVR laden den nächsten Befehl schon, während der vorherige noch 
abgearbeitet wird. Und dann solltest du bedenken, dass ein Taktzyklus 
zwei Flanken hat, die man nutzen kann.

Zum Beispiel (weiss jetzt nicht ob das bei AVR exakt so ist):

Steigende Flanke: Eingabe holen und Befehl ausführen
Fallende Flanke: Ergebnis ausgeben und nächsten Befehl holen.

von ... (Gast)


Lesenswert?

Ein ST62 schafft 13 Befehle per Takt.
Oder waren es 13 Takte je Befehl.

Ein Takt per Befehl ist ein alter Hut.
Das konnten die DSPs schon lange bevor jemand R.I.S.C.
ueberhaupt buchstabieren konnte.
Oder mehrere Operationen per Befehl in separaten Adressraeumen.

von MaWin (Gast)


Lesenswert?

... schrieb:
> Ein Takt per Befehl ist ein alter Hut.
> Das konnten die DSPs schon lange

Hier geht es um Microcontroller.

Dass Spezialhardware in Spezialfällen mehr kann, sollte klar sein.
Der Extremfall ist der FPGA, der alles in einem Takt machen kann, wenn 
er genug Gates hat.

Begrenzende Faktoren sind aber immer
- Data dependencies
- Bus contention
- Busbreiten
- Anzahl der parallel vorhandenen Funktionsblöcke (z.B. ALU)
- Signallaufzeiten

von MaWin (Gast)


Lesenswert?

Stefan F. schrieb:
> Zum Beispiel (weiss jetzt nicht ob das bei AVR exakt so ist):
>
> Steigende Flanke: Eingabe holen und Befehl ausführen
> Fallende Flanke: Ergebnis ausgeben und nächsten Befehl holen.

Wurde ja schon hier gepostet:
https://www-user.tu-chemnitz.de/~heha/hsn/chm/ATmegaX8.chm/7.htm

von ... (Gast)


Lesenswert?

> Der Extremfall ist der FPGA, der alles in einem Takt machen kann, wenn
> er genug Gates hat.

Da begibst du dich jetzt aber auf ganz duennes Eis.
Ein solches Design waere asynchron. Nicht das es nicht grundsaetzlich
ginge. Es macht aber keiner ohne ganz grosse Not.
Wenn man Pech hat, schmilzt einem das Silizium im Package weg.
Solange noch Silizium uebrig ist, versicht sich der arme Kaefer
dann neu zu konfigurieren.


> Hier geht es um Microcontroller.

Wenn man von einem D.S.P. das D. und das S. weglaesst, bleibt
ein P. uebrig. Es ist sicherlich ein wenig dekadent seine
Strings in etwas groessere :) Wortbreiten zu packen.
Aber es geht auch! Ich habe es probiert.

von (prx) A. K. (prx)


Lesenswert?

... schrieb:
> Ein Takt per Befehl ist ein alter Hut.
> Das konnten die DSPs schon lange bevor jemand R.I.S.C.
> ueberhaupt buchstabieren konnte.

Erster DSP: TMS 5100, 1978

Erster RISC: IBM 801, 1974

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

... schrieb:
> Da begibst du dich jetzt aber auf ganz duennes Eis.

Aha.

> Nicht das es nicht grundsaetzlich ginge.

Also habe ich recht.

> Es macht aber keiner ohne ganz grosse Not.

Habe ich auch nicht behauptet.
Thread lesen, bitte.

> Wenn man von einem D.S.P. das D. und das S. weglaesst, bleibt
> ein P. uebrig.

Ein DSP ist kein universeller RISC-Mikrocontroller. Und darum geht es 
hier in dieser Diskussion.

Dass Spezialhardware in Spezialfällen schneller als ein universeller 
RISC-Mikrocontroller sein kann, hat niemand bestritten.

Thread lesen, bitte.

von Martin S. (mmaddin)


Lesenswert?

jochenPizz schrieb:
> wie schafft es ein RISC Prozessor  wie ARM oder AVR einen Befehl in nur
> einem Zyklus durchzuführen?

Hi, lese gerade ganz gespannt, habe mich das auch schon oft gefragt. Kam 
derzeit eher aus der PIC (Harvard) Welt, dort wurde der Takt immer 
erstmal durch 4 geteilt auf den Taktverteilungs Blockschaltbildern ... 
da war klar, okay, die Dinger nutzen dann also die Flanken dazwischen um 
das zu schaffen, zumindest habe ich mir das immer so zurecht gereimt, 
zumal die PICs ja wirklich alles nach und nach durch die ALU bewegen...
Das spiegelte sich auch in den Assembler Befehlstrukturen wieder, beim 
PIC waren das immer ein Operanden Befehle und nun beim AVR sind es ja 
eher drei Operanden Befehle.

MaWin schrieb:
> Der AVR schafft es durch Pipelining nur scheinbar einen Befehl in einem
> Takt auszuführen.

Stefan F. schrieb:
> Steigende Flanke: Eingabe holen und Befehl ausführen
> Fallende Flanke: Ergebnis ausgeben und nächsten Befehl holen.

Machen die AVR dann nun tatsächlich ein Pipelining oder machen sie es so 
wie von Stefan beschrieben?

Gruß
M.

von olaf (Gast)


Lesenswert?

> Das Problem ist doch offensichtlich.
> In einer CPU ohne Pipelining ginge das gar nicht.
> Und was, wenn eine Data-Dependency zwischen den Befehlen besteht?

Ich fand es immer sehr bizarr wenn man im Singlestep im Debugger
durch den Code gegangen ist und man sah wie sich dann der 
Positionsbalken geteilt hat weil manchmal nur ein Befehl abgearbeitet 
wurde, dann zwei, dann warte der eine auf den anderen, dann springt er 
vor.
Und der Compiler bemueht sich auch die Befehle optimal anzuordnen.

Da steckt schon eine Menge Gehirnschmalz drin.

Dagegen ist eine MCU die nur 1Befehl pro Zyklus macht doch das nahe 
liegende. Wuerde ich ganz ahnungslos selber eine MCU designen, wuerde 
vermutlich sowas rauskommen. Viele Zyklen waren dann irgendwann ein Teil 
von Luxus. (vgl: DJNZ beim Z80) oder das man Gatter sparen wollte. 
(Multiplikation)

Olaf

von ... (Gast)


Lesenswert?

> Also habe ich recht.

Wie ich sehe, hast du es noch nicht verstanden.

Wenn man einen FPGA mit einem asynchronen Design fuettert,
hat man keine Kontrolle ueber die Anzahl der parallel ausgefuehrten
Operationen. Und die ist eben, entgegen deiner Meinung, doch
limitiert. Weil solche Schaltvorgaenge als laestiges Nebenprodukt
Waerme durch die Schaltverluste erzeugen.
Diese Limitierung laesst also ein "Grundsaetzlich" praktisch nicht zu.
Ansonsten wuerden es alle machen. Weil es natuerlich schneller ist.

Ein mit einem asynchronen Design zu 100 % gefuellter FPGA,
wuerde binnen weniger Sekunden seinen magischen Rauch entweichen
lassen sobald er etwas tun soll.

> Ein DSP ist kein universeller RISC-Mikrocontroller.

Wie gut das meine verbauten DSPs das nicht wissen.
Scheinbar kann ich auf das "universelle" recht gut verzichten.

> Erster RISC: IBM 801, 1974

Gab es da auch einen Cobol-Compiler dafuer?

von MaWin (Gast)


Lesenswert?

Martin S. schrieb:
> Machen die AVR dann nun tatsächlich ein Pipelining oder machen sie es so
> wie von Stefan beschrieben?

Ich poste den Link einfach noch ein drittes Mal:

https://www-user.tu-chemnitz.de/~heha/hsn/chm/ATmegaX8.chm/7.htm

von (prx) A. K. (prx)


Lesenswert?

olaf schrieb:
> Ich fand es immer sehr bizarr wenn man im Singlestep im Debugger
> durch den Code gegangen ist und man sah wie sich dann der
> Positionsbalken geteilt hat weil manchmal nur ein Befehl abgearbeitet
> wurde

Das hat viel mit Optimierung durch den Compiler zu tun, wenig mit dem 
betrachteten Thema.

von (prx) A. K. (prx)


Lesenswert?

... schrieb:
>> Erster RISC: IBM 801, 1974
>
> Gab es da auch einen Cobol-Compiler dafuer?

Ja, Designziel Fortran und Cobol.

Und für deinen DSP? ;-)

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

... schrieb:
> Wenn man einen FPGA mit einem asynchronen Design fuettert,

... schrieb:
> Wie gut das meine verbauten DSPs das nicht wissen.

Es geht hier nicht um FPGAs und DSPs.
Du hast meine Aussage vollkommen aus dem Kontext gerissen.

Das hier war der Ausgang (mit den Zitaten) der Diskussionskette, aus der 
du dich ausgekoppelt hast:
Beitrag "Re: 1 Befehl pro Zyklus"

Und jetzt lies den Thread ab da.

Ich habe dir niemals widersprochen.
Weil das gar nicht das Thema war.
Du redest am Thema vorbei.

von Christoph M. (mchris)


Lesenswert?

Sieht so aus, als wenn der AVR 3 Takte pro Takt macht:

https://www-user.tu-chemnitz.de/~heha/hsn/chm/ATmegaX8.chm/bild/b7-5.png

von ... (Gast)


Lesenswert?

> Du hast meine Aussage vollkommen aus dem Kontext gerissen.

Moeglicherweise.
Weil du so ein lustiges Kerlchen bist :).

> Und für deinen DSP? ;-)

Es sind mehrere!

Fuer die allerersten waere ein selbst gehosteter Compiler
vielleicht doch etwas viel vom Gewicht her.
Aber wenn man sich die ganz alten UNIX®-Quellen so anschaut,
koennte man es wohl doch nicht ganz ausschliessen sich da
einen CC zu zimmern.
Die allerzweiten sind schon vom Hersteller mit (Cross-)compilern
versorgt.

Bei der IBM® musste Mann natuerlich nach Cobol fragen.
Und so schlecht ist Fortran 1 ja auch nicht.

Aber immer die Lochkarten mit Zeilennummern stanzen!

von Fred Focus (Gast)


Angehängte Dateien:

Lesenswert?

Christoph M. schrieb:
> Sieht so aus, als wenn der AVR 3 Takte pro Takt macht:
>
> https://www-user.tu-chemnitz.de/~heha/hsn/chm/ATmegaX8.chm/bild/b7-5.png

Bildfehler?
Der arbeitet lt. Bild nur im ersten Takt, alle anderen sind idle. 
Jajaja, die in Karl-Marx-Stadt denken nochn auch eine CPU hat einen acht 
von 24 Stunden Arbeitsrhythmus.

von rbx (Gast)


Lesenswert?

jochenPizz schrieb:
> wie schafft es ein RISC Prozessor  wie ARM oder AVR einen Befehl in nur
> einem Zyklus durchzuführen?

Beim AVR weiß ich nicht - aber beim ARM kann man so grob sagen: mehrere 
Optimierrunden - und Abhängigkeiten. Beispielsweise Befehl a 1 Takt, 
danach aber für 2 Takte blockiert.

Um bei gewissen Vorgängen wie Sprüngen, Cache-Nutzung oder 
Programmwechseln weniger Zeit zu verbrauchen werden Vohersage-Techniken 
eingesetzt.

Man schaut sich besser die Timing-Tabellen zu den einzelnen 
Prozessormodellen und den Befehlen genauer an, und sollte die auch 
vergleichen, um

1) Optimierungen/Relativierungen zu erkennen
2) Abhängigkeiten zu erkennen.
3) Pipelines ziehen einen verzögerten Datenzugriff hinter sich her.

von (prx) A. K. (prx)


Angehängte Dateien:

Lesenswert?

Fred Focus schrieb:
> Bildfehler?
> Der arbeitet lt. Bild nur im ersten Takt, alle anderen sind idle.
> Jajaja, die in Karl-Marx-Stadt denken nochn auch eine CPU hat einen acht
> von 24 Stunden Arbeitsrhythmus.

So lange die Einen den gesamten Ablauf betrachten und die Anderen sich 
daraus die Rosinen rauspicken, redet man nebeneinander her.

von Peter D. (peda)


Lesenswert?

Der Ur-8051 teilte den Quarztakt durch 12 je Befehl. Damit gab es keine 
Probleme, um z.B. eine Flagregister per Interrupt zu setzen, bzw. per 
Befehl zu löschen. Beides erfolgte per Read-Modify-Write in 
verschiedenen Phasen der 12 Takte. Z.B. mit dem JBC-Befehl kann man 
einen Interrupt abfragen und löschen, ohne einen Interrupt zu verlieren.

Als dann aber die 8051 mit Teiler 1:1 rauskamen (z.B. AT89LP51), gab es 
massive Probleme und Bugreports, um das gleiche Verhalten in nur einem 
Takt zu erreichen.

: Bearbeitet durch User
Beitrag #7308483 wurde vom Autor gelöscht.
von Fred Focus (Gast)


Angehängte Dateien:

Lesenswert?

(prx) A. K. schrieb:
> So lange die Einen den gesamten Ablauf betrachten und die Anderen sich
> daraus die Rosinen rauspicken, redet man nebeneinander her.

Nix rauspicken, der 3-Takt-Behaupter hat eindeutig auf das ein-Takt-Bild 
verlinkt.

Und es steht auch schon auf der erste Seite: ein cycle für einen Befehl 
(meistens).

Und welche meistens meint sieht man im Instruction-Set (Auszug 
AVR-Datasheet ebenfalls im Anhang).

Und gerade deshalb haben RISC-Maschinen so einen tiefen registersatz.

von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> Und es steht auch schon auf der erste Seite: ein cycle für einen Befehl
> (meistens).

Fehlschluss. Wenn ein Prozessor einen Befehl pro Takt ausführt, dann 
bedeutet dies nicht, dass der Befehl nur einen Takt dauert. Ebendies 
wird erst durch Pipelining erreicht, wenn auch beim AVR nur rudimentär. 
Weil in diesem Fall beim AVR stets zwei Befehle gleichzeitig in Arbeit 
sind, in verschiedenen Stadien ihres Ablaufs.

: Bearbeitet durch User
von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Wenn ein Prozessor einen Befehl pro Takt ausführt, dann
> bedeutet dies nicht, dass der Befehl nur einen Takt dauert.

Doch genau das bedeutet es hier.

> Ebendies
> wird erst durch Pipelining erreicht, wenn auch beim AVR nur rudimentär.

Nein, bei den single-cycle-Befehlen macht der AVR kein Pipeling. Deshalb 
röttelt er ja auch mit langsamen einstelligen Takten.

Und beim ARM gibt es welche mit und welche Ohne Pipelining. 
Wahrscheinlich hat pipeling für embedded mehr Nach- als Vorteile 
(Ruhestrom, Echtzeit-vorhersagbarkeit).

von MaWin (Gast)


Lesenswert?

Fred Focus schrieb:
>> Wenn ein Prozessor einen Befehl pro Takt ausführt, dann
>> bedeutet dies nicht, dass der Befehl nur einen Takt dauert.
>
> Doch genau das bedeutet es hier.

Nein, tut es nicht. Lies den Link, den ich jetzt nicht zum vierten Male 
posten werde.

> Nein, bei den single-cycle-Befehlen macht der AVR kein Pipeling.

Ja doch. Natürlich macht er das.

Fred Focus schrieb:
> Und beim ARM gibt es welche mit und welche Ohne Pipelining.
> Wahrscheinlich hat pipeling für embedded mehr Nach- als Vorteile
> (Ruhestrom, Echtzeit-vorhersagbarkeit).

Kann es sein, dass du gar nicht weißt, was Pipelining ist?

von c-hater (Gast)


Lesenswert?

Fred Focus schrieb:

> Und es steht auch schon auf der erste Seite: ein cycle für einen Befehl
> (meistens).

Du interpretierst das falsch. Ja, von sehr vielen Instruktionen können 
einer pro Takt abgearbeitet werden. Das heißt aber nicht, dass die auch 
nur einen Takt dauern würden, tatsächlich dauern sie (die mit einem Takt 
Durchsatz angegebenen) zwei Takte. In einem wird das Befehlswort geholt 
und decodiert, im zweiten erfolgt die Abarbeitung. Der entscheidende 
Trick ist: WÄHREND  dieser Abarbeitung wird bereits das Befehlswort 
der nächsten Instruktion geholt und decodiert. So ergibt sich der 
Durchsatz von einem Takt pro Instruktion.
Das ist die simpelste Form von Pipelining.

Im übrigen kann man das selbst in der Instruktionstabelle an vielen 
Stellen sehen, nämlich überall dort, wo Code-Verzweigungen auftreten. 
Denn dann kann logischerweise nur für einen Zweig das Holen des nächsten 
Befehlsworts verschachtelt werden. Geht's auf Grund der Bedingung in den 
anderen Zweig, war der Prefetch nutzlos und es hagelt einen "Straftakt", 
nämlich genau den, der nötig ist, um das erste Befehlsort dieses 
alternativen Codezweigs einzulesen und zu decodieren. Siehe z.B. all die 
br*-Instruktionen.

> Und welche meistens meint sieht man im Instruction-Set (Auszug
> AVR-Datasheet ebenfalls im Anhang).

Tja, zwischen einfach nur lesen und wirklich verstehen liegen manchmal 
halt auch Welten. Aber immerhin sehr löblich, dass du wenigstens liest. 
Viele schaffen ja nichtmal dies...

von MaWin (Gast)


Lesenswert?

Fred Focus schrieb:
> Und beim ARM gibt es welche mit und welche Ohne Pipelining.

Hier ein Pipelining-Beispiel für Arm (Die verschiedenen Arm-Prozessoren 
unterscheiden sich hier stark untereinander):

https://developer.arm.com/documentation/100026/0103/Cycle-Timings-and-Interlock-Behavior/About-cycle-timings-and-interlock-behavior/Pipeline-information

Die einzelnen Befehle brauchen nicht alle die volle Pipelinelänge (hier 
Main-Result):

https://developer.arm.com/documentation/100026/0103/Cycle-Timings-and-Interlock-Behavior/Instructions-cycle-timings/Base-instructions-cycle-timings

Aber in einer Stage (also ohne Pipelining) läuft keine der Instruktionen 
durch.
Das früheste ist Ex1, wenn ich jetzt nichts übersehe. Das wäre in diesem 
Fall 3 Stages.

von Martin S. (mmaddin)


Lesenswert?

MaWin schrieb:
> Ich poste den Link einfach noch ein drittes Mal:
>
> https://www-user.tu-chemnitz.de/~heha/hsn/chm/ATmegaX8.chm/7.htm


Bild 7-5: Zeitablauf ALU-Operation

Beitrag "Re: 1 Befehl pro Zyklus"

Sieht man ja, dass es mehr Takte braucht um einen Zyklus auszuführen, 
also werden intern mehr Taktflanken inerhalb eines Taktes erzeugt oder 
nicht?

Zumal -> wenn man zwei Operanden über einen Bus holt, geht das doch 
schlecht gleichzeitig, verstehe ich dort schon gar nicht... Das ist doch 
die Frage, wie bekommen sie zwei Operanden und in einem Takt an die ALU 
und vor allem dann noch das Ergebnis wieder dort weg...

Also ich komme mit den Darstellungen dort nicht zurecht...

M.

von (prx) A. K. (prx)


Lesenswert?

MaWin schrieb:
> Hier ein Pipelining-Beispiel für Arm (Die verschiedenen Arm-Prozessoren
> unterscheiden sich hier stark untereinander):

Wobei dort auch schon der eminent wichtige vordere Teil der Pipeline 
fehlt, nämlich Fetch/Predict. Aber für Anfänger sind diese Highends zwei 
Klassen zu komplex.

Etwas illustrativer ist die Pipeline vom ersten ARM:
https://en.wikichip.org/wiki/acorn/microarchitectures/arm1#Pipeline

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Martin S. schrieb:
> Sieht man ja, dass es mehr Takte braucht um einen Zyklus auszuführen,
> also werden intern mehr Taktflanken inerhalb eines Taktes erzeugt oder
> nicht?

Ziemlich sicher nicht. Dazu bräuchte man eine PLL.

> Zumal -> wenn man zwei Operanden über einen Bus holt, geht das doch
> schlecht gleichzeitig, verstehe ich dort schon gar nicht

AVR ist Harvard und RISC.
Da geht immer nur ein Datum zugleich über den jeweiligen Bus.

> und vor allem dann noch das Ergebnis wieder dort weg...

Gar nicht. Ist RISC.

von (prx) A. K. (prx)


Lesenswert?

Martin S. schrieb:
> also werden intern mehr Taktflanken inerhalb eines Taktes erzeugt oder
> nicht?

6502 und der eben verlinkte ARM1 verwenden mit ihren Takten Φ1 und Φ2 
auch irgendwo Taktflanken innerhalb einer Taktperiode. Aber das ist 
nicht wirklich massgeblich für die Betrachtung hier. Man kann innerhalb 
eines Taktes auch mehrere Aktionen nacheinander durchführen, ohne 
dazwischen Latches/Register zu setzen. Exakt wie die oben gezeigten 3 
Phasen der Execute-Stage des AVR ablaufen, ist nicht dokumentiert.

: Bearbeitet durch User
von EAF (Gast)


Lesenswert?

Lustig ist in dem Zusammenhang evtl., dass der ATMega328P Nachbau namens 
MD-328D und seine Brüder, an vielen Stellen 1 Takt fixer sind, als das 
Original.

Wenn ich mich richtig erinnere, war die Begründung, dass da drin ein 
zurecht gestutzter 16 Bit Kern werkelt.

von (prx) A. K. (prx)


Angehängte Dateien:

Lesenswert?

Martin S. schrieb:
> Zumal -> wenn man zwei Operanden über einen Bus holt, geht das doch
> schlecht gleichzeitig,

Ist auch nicht so. Register werden über mehrere Ports und Busse 
gleichzeitig angesprochen.

Obiges Diagramm fand ich einstmals in einem Paper der Oregon State 
University. Das Paper beschreibt den Ablauf in einem AVR sehr 
detailliert. Link wäre mir lieber, fand ich jetzt aber nicht. Quelle 
dürfte Reverse Engineering sein, nicht Atmel.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

EAF schrieb:

> Lustig ist in dem Zusammenhang evtl., dass der ATMega328P Nachbau namens
> MD-328D und seine Brüder, an vielen Stellen 1 Takt fixer sind, als das
> Original.

Auch beim Original gibt es hier Varianten. Siehe ATXmega und vor allem 
dessen Erben, die ganzen neueren AVR8-Baureihen.

Vermutlich haben die Chinesen einen raubkopierten XMega-Core mit der 
(ebenfalls raubkopierten) ollen ATMega-Peripherie kombiniert.

Naja, wenn die Chinesen irgenwas können, dann ist das: Kopieren. Wenn 
sie das Ergebnis dann wirklich umfassend dokumentieren würden, wäre 
dagegen ja nichtmal etwas einzuwenden...

Beitrag #7308626 wurde vom Autor gelöscht.
von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb:
> wird erst durch Pipelining erreicht, wenn auch beim AVR nur rudimentär.

?Rudimentäres Pipelining", ist das sowas wie der "rudimentäre Schwanz 
des Homosapiens", auch Coccyx????

Also Pipeling wird nach Stufen unter Angabe einer Ganzzahl 
klassifiziert.

 Beispielsweise 6-stufige Pipeline beim MC68040 oder 20-stufige beim 
Pentium 4 'Prescott'.

Was soll dann "rudimentäres Pipelining" sein??
Eine 1.5708963268-stufige Pipieline? Oder doch eher 0.5 stufige.

Also da hat man schon den Eindruck, da wird des Wort "rusimentäre" aus 
dem Hut gezaubert, wenn man unbedingt über etwas sprechen will, dessen 
Vorhandensein/Aufbau/Struktur aber man überhaupt nicht beschreiben kann. 
Diese Vorgehensweise soll im Marketing häufig vorkommen.

von MaWin (Gast)


Lesenswert?

Fred Focus schrieb:
> Was soll dann "rudimentäres Pipelining" sein??

Ein zweistufiges. Die kleinstmögliche Variante.
Aber Hauptsache gelabert, gell?

von PC-Freak (Gast)


Lesenswert?

Fred Focus schrieb:
>>Thx
> Tipp: besorg dir ein Buch über Computerarchitektur, dann kannst du Dich
> selber schlau machen und musst nicht das Forum mit theoretischen
> Pillepalle beschäftigen

Dafür ist das Forum da.

von Martin S. (mmaddin)


Lesenswert?

Aus dem Bild:

Beitrag "Re: 1 Befehl pro Zyklus"

geht eindeutig hervor dass es eine ganze menge 8 Bit Verbindungen gibt, 
gerade unter ALU, Registern und RAM, anders kanns ja auch gar nicht 
gehen...sonst kommt man nie auf diese Geschwindigkeit bei der 
Abarbeitung ohne eine PLL.

Das Bild:

Beitrag "Re: 1 Befehl pro Zyklus"
https://www-user.tu-chemnitz.de/~heha/hsn/chm/ATmegaX8.chm/bild/b7-5.png

ist somit verwirrend und falsch.

Das hier trifft zumindest das mini "Pipelining"

https://www-user.tu-chemnitz.de/~heha/hsn/chm/ATmegaX8.chm/bild/b7-4.png

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Martin S. schrieb:
> ist somit verwirrend und falsch.

Verwirrend, weil es nur die zweite Stufe der Pipeline beschreibt. Als 
solches aber nicht unbedingt falsch.

von MaWin (Gast)


Lesenswert?

Martin S. schrieb:
> ist somit verwirrend und falsch.

Nö. Ist nicht falsch. Ist lediglich vereinfacht. In Wirklichkeit sind da 
ja noch viel mehr Einzelschritte in den Signalverläufen.

von rbx (Gast)


Lesenswert?

Ist (wenn es gut läuft) auch nur ein Takt:
https://www.youtube.com/watch?v=Q0jeohWnmAQ

von Fred Focus (Gast)


Lesenswert?

MaWin schrieb:

> Aber Hauptsache gelabert, gell?
Danke, gleichfalls!

>> Was soll dann "rudimentäres Pipelining" sein??
> Ein zweistufiges. Die kleinstmögliche Variante.

Nein. Ja.
Zweistufiges Pipelining, also die Einführung einer zweiten 
Delay-Flipflop-Stufe in einen bestehenden Pfad zwischen zwei FF-Stufen 
ist tatsächlich die einfachste Variante des Pipelining.

Hier (AVR) wird aber kein kombinatorischer Pfad zur Taktsteigerung 
aufgebrochen. Hier ist bestenfalls eine Bufferstufe zwischen internen 
Flash und CPU-Core integriert. Das entspricht aber keiner 
Pipelinenestufe sondern einer BusInterfaceUnit - BIU, die 
fälschlicherweise dem Pipeling zugerechnet wird.
Und bei µC mit internen Programmspeicher meist überflüssig ist, da bei 
100 ns (10MHz) ausreichen Laufzeitreserve ist.
Zur Erinnerung, Konservativ gerechnet, schafft ein Signal auf Kupfer in 
100 ns 20 Meter 'gerade' Strecke.

von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb:
>  Das Paper beschreibt den Ablauf in einem AVR sehr
> detailliert. Link wäre mir lieber, fand ich jetzt aber nicht. Quelle
> dürfte Reverse Engineering sein, nicht Atmel.

Eher nicht Reverse Engineering, das ist der Standard-Entwurf für einen 
Prozessor ohne Pipeling, aber mit Auftrennung in 
ProgrammSpeicherInterface (bei CPU mit externen Süpeicher auch BIU 
BusInterfaceUnit) und Ausführungseinheit.

Beide Einheiten sind über taktgesteuerte FF-Stufen verbunden.

Die Ausgangstufe der Ausgangseinheit ist das register PC 
(ProgrammCounter)
die Ausgangsstufe des Programmspeicher besteht aus drei weiteren 
register:

*IR (Instruction read), register für (einen Teil) des Instructionsword

*NPC (Next Programm counter: entweder PC+1(1 clock befehl)  oder 
Sprungaddresse (2clock Befehle)

*DMA (Data Memory Address), die Adresse bei (Data-)Memory Zugriffen 
(also weder register noch intermediate)

Die selbe Struktur findet man auch in dem oben refenzierten 
PiBla-HDL-FPGA Code. Oder eben in Standard-Lehrbüchern zu 
Computerarchitektur, insbesonders Hennessey-Patterson.
Da braucht man kein Silicon abschleifen und re-engineering, das 
erschliesst sich aus dem Verständnis der Computerarchitektur.

von MaWin O. (mawin_original)


Lesenswert?

Fred Focus schrieb:
> Das entspricht aber keiner
> Pipelinenestufe sondern einer BusInterfaceUnit - BIU

Ja. Das Businterface ist keine Pipelinestufe. Ein Businterface ist ein 
Businterface.

Aber das Businterface wird in einer Pipelinestufe betrieben.

Fred Focus schrieb:
> Zur Erinnerung, Konservativ gerechnet, schafft ein Signal auf Kupfer in
> 100 ns 20 Meter 'gerade' Strecke.

Die Instruktionen kommen bei AVR aus dem Flash und die Daten aus einem 
SRAM.
Da geht es nicht nur um reine kombinatorische Signallaufzeiten.

von MaWin O. (mawin_original)


Lesenswert?

Fred Focus schrieb:
> Eher nicht Reverse Engineering, das ist der Standard-Entwurf für einen
> Prozessor ohne Pipeling

Ob mit oder ohne Pipelining hat mit dem Entwurf selbst erst einmal wenig 
zu tun.
Wenn man diesen Entwurf ohne Pipelining betreiben würde, würden die 
Befehle halt 2 Takte brauchen, statt effektiv 1 Takt.

Ich verstehe gar nicht, warum du hier herumdiskutierst.
AVR hat Pipelining und es ist zweistufig. Und damit ist es rudimentär. 
Da gibt es doch überhaupt nichts zu diskutieren.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Soweit ich AVR verstehe, werden 1-Tick Instruktionen wie folgt 
ausgeführt, wobei AA die erste Instruktion ist etc:
1
123456
2
AA
3
 BB
4
  CC
5
   DD
6
    EE
7
123456
8
 ABCDE = Ready

Um n Instruktionen auszuführen braucht's also n+1 Ticks, was bedeutet 
dass man i.W. 1 Instruktion / Tick hat?

Es gibt aber auch Instruktionen die 2 (z.B. LDS, STS, BR**) oder mehr 
brauchen (z.B. BR**, LPM, RETI) wobei das auch vom Core abhängt, und bei 
BR** ob eine 2-Byte oder 4-Byte Instruktion übersprungen wird.

Falls B, D und E 2-Tick Instruktionen sind:
1
12345678901
2
AA
3
 BBB
4
   CC
5
    DDD
6
      EEE
7
        FF
8
         GG
9
12345678901
10
 A BC D EFG = Ready
Das sind dann 4*1+3*2+1 = 11 Ticks.

Das "+1" bedeutet effektiv, das ab Programmstart gerechnet, alle 
Instruktionen 1 Tick "zu spät" ihre Wirkung entfalten.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Johann L. schrieb:

> Das "+1" bedeutet effektiv, das ab Programmstart gerechnet, alle
> Instruktionen 1 Tick "zu spät" ihre Wirkung entfalten.

So könnte man es auch ausdrücken.

von Fred Focus (Gast)


Lesenswert?

MaWin O. schrieb:
> Ich verstehe gar nicht, warum du hier herumdiskutierst.
> AVR hat Pipelining und es ist zweistufig. Und damit ist es rudimentär.
> Da gibt es doch überhaupt nichts zu diskutieren.

Stimmt, das ist nicht-diskussionswürdiger Unsinn.

Erst schreibste rudimentär ist gleich zweistufig, also Pipelinegrad = 2. 
Und jetzt fabuliert Du von zweistufig plus rudimentär, also Pipelinegrad 
= 2.x
Das ist doch Unsinn.

Der AVR hat kein Pipeline, Registerdaten sind im folgenden Takt 
prozessiert, also normale Taktlatenz, keine zusätzliche Pipilinelatenz.

Anders als bspw. gepipelinden Multiplizierer, bei dem es länger als 
einen Takt dauert bis die Eingangsdaten fertig multipliziert sind 
(Pipilinelatenz).

http://courses.csail.mit.edu/6.111/f2008/handouts/L09.pdf S.17ff

von MaWin O. (mawin_original)


Lesenswert?

Fred Focus schrieb:
> Stimmt, das ist nicht-diskussionswürdiger Unsinn.

Ich gebe es auf. Das ist mir jetzt zu dumm.

von c-hater (Gast)


Lesenswert?

Fred Focus schrieb:

> Der AVR hat kein Pipeline

Doch hat er. Eine zweistufige (Fetch&Execute)-Pipeline.

> Registerdaten sind im folgenden Takt
> prozessiert, also normale Taktlatenz, keine zusätzliche Pipilinelatenz.

Doch, diese beträgt genau einen Takt. Und jeder Nicht-Vollidiot kann das 
alleine schon der InstructionSetReference entnehmen.

von rbx (Gast)


Lesenswert?

MaWin O. schrieb:
> Und damit ist es rudimentär.
> Da gibt es doch überhaupt nichts zu diskutieren.

Na doch, dass der Begriff hier etwas holperig rüberkommt, kann damit zu 
tun haben, dass das Pipeline-Know bzw. der Schritt dahin, alles andere 
als trivial war.

Sprungvorhersage, Mikrocodierung, Register Renaming und all solche 
Scherze enthalten eine Menge Gehirnschmalz und Blut, selbst die 
CPU-Logik gehört da noch mit dazu - und wer meint (mit rudimentär) das 
könne man gewissermaßen alles in 21 Tagen lernen, wie C++ (oder mal eben 
an einem Nachmittag durch Lesen einer Forendisskussion) - sollte sich 
nicht über Beschwerden wundern.

von MaWin O. (mawin_original)


Lesenswert?

rbx schrieb:
> Sprungvorhersage, Mikrocodierung, Register Renaming und all solche
> Scherze enthalten eine Menge Gehirnschmalz und Blut, selbst die
> CPU-Logik gehört da noch mit dazu

Ja. Und das alles hat mit dem Pipelining, wie es im AVR vorkommt, nichts 
zu tun.
Eben weil das Pipelining im AVR rudimentär ist.
Der AVR nutzt eine simple fetch- und eine execute-stage.

von (prx) A. K. (prx)


Lesenswert?

rbx schrieb:
> Na doch, dass der Begriff hier etwas holperig rüberkommt,

Ich ja schon gut, ich nehme den Begriff "rudimentär" zurück und ersetze 
ihn durch "minimal". ;-)

Fred Focus schrieb:
> Der AVR hat kein Pipeline, Registerdaten sind im folgenden Takt
> prozessiert, also normale Taktlatenz, keine zusätzliche Pipilinelatenz.

Auch mein PC Prozessor kann Integer-ALU Ergebnisse meist im Takt darauf 
in einer ALU verwenden, und nicht zwingend in der gleichen. Deinem 
Kriterium zufolge wäre er also nicht pipelined. ;-)

Die von dir vermisste Latenz bei Registerdaten gibt es aber durchaus. 
Nämlich zwischen dem Z-Register und dem PC-Register bei IJMP. Da geht 
der Weg vom Output der zweiten Stufe der Pipeline zurück zum Input der 
ersten, was einen Takt kostet.

Ob die Execute-Stage das direkt aus Z durchschiebt, wie bei IJMP, oder 
was reinaddiert, wie in PC = PC + Offset bei den relativen Sprüngen, ist 
in dieser Hinsicht aber egal.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> Der AVR hat kein Pipeline, Registerdaten sind im folgenden Takt
> prozessiert, also normale Taktlatenz, keine zusätzliche Pipilinelatenz.

Vielleicht liegt das Missverständnis darin, dass es in der 
Mikroarchitektur von Prozessoren Pipelining auf mehreren Ebenen geben 
kann. Und du eine andere Pipeline meinst als ich.

Einerseits gibt es Pipelining im Gesamtablauf. Sowas wie 
Fetch-Decode-Execute beim ersten ARM und eben Fetch-Execute bei AVR. Von 
dem ist hier die Rede, weil es um den Gesamtablauf der Befehle geht.

Andererseits kann es Pipelining in Execution Units geben. Wenn 
beispielsweise der Multiplizierer zwar 3 Takte braucht, bis er das 
Ergebnis liefert, aber in jedem Takt eine neue Multiplikation 
durchführen kann. In diesem Sinn ist die ALU des AVR nicht 
gepipelined.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Bei komplexeren CPUs hat man auch den Effekt, daß nach Interruptfreigabe 
oder RETI direkt nach dem Löschen des Interruptflags der Interrupt 
trotzdem noch angesprungen wird. Da muß auch erst noch eine Pipeline 
durchlaufen werden, ehe das Löschen angekommen ist.

: Bearbeitet durch User
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Peter D. schrieb:
> Bei komplexeren CPUs hat man auch den Effekt, daß nach Interruptfreigabe
> oder RETI direkt nach dem Löschen des Interruptflags der Interrupt
> trotzdem noch angesprungen wird. Da muß auch erst noch eine Pipeline
> durchlaufen werden, ehe das Löschen angekommen ist.

Bei den alten AVRs hatte SEI ja eine Latenz von 1 Instruktion, aber CLI 
nicht.  Keine Ahnung, wie diese Asymmetrie entsteht.

Bei XMega wirkt SEI unmittelbar, d.h. vor der nächsten Instruktion kann 
eine IRQ triggern.

Vermutlich überträgt sich dieses Verhalten auch auf RETI?

von MaWin O. (mawin_original)


Lesenswert?

Johann L. schrieb:
> Bei den alten AVRs hatte SEI ja eine Latenz von 1 Instruktion, aber CLI
> nicht.  Keine Ahnung, wie diese Asymmetrie entsteht.

Das hat ausnahmsweise einmal nichts mit Pipelining zu tun, sondern mit 
der SLEEP-Instruktion.

Mit einer 1er-Latenz für SEI ist es möglich sicher schlafen zu gehen, 
ohne durch eine Interrupt-Racecondition unendlich lange zu schlafen, 
falls der Interrupt vor dem sleep kommt.
1
sei
2
sleep ; sei wird erst hier - gleichzeitig mit sleep - aktiv und ein Interrupt weckt sleep wieder auf.

: Bearbeitet durch User
von Fred Focus (Gast)


Angehängte Dateien:

Lesenswert?

(prx) A. K. schrieb:
> Fred Focus schrieb:
>> Der AVR hat kein Pipeline, Registerdaten sind im folgenden Takt
>> prozessiert, also normale Taktlatenz, keine zusätzliche Pipilinelatenz.
>
> Vielleicht liegt das Missverständnis darin, dass es in der
> Mikroarchitektur von Prozessoren Pipelining auf mehreren Ebenen geben
> kann. Und du eine andere Pipeline meinst als ich.

Man nähert sich. Dem Graben, der unüberbrückbar ist. Es wird auf 
mehreren ebenen von Pipelining "gesprochen" was aber nicht bedeutet, das 
es tatsächlich pipeling ist.

Ich hab mal das entsprechende Kapitel aus der deutschsprachigen 
Fachliteratur (P.Pirsch: "Architekturen der digitalen 
Signalverarbeitung") gescannt und angehangen. Pipeling ist das Einfügen 
von Pipeline-Register um den kritischen Pfad in der Kombinatorik zu 
verkürzen.

> Einerseits gibt es Pipelining im Gesamtablauf. Sowas wie
> Fetch-Decode-Execute beim ersten ARM und eben Fetch-Execute bei AVR. Von
> dem ist hier die Rede, weil es um den Gesamtablauf der Befehle geht.
Eben das ist Hardwaretechnisch kein Pipeling, wie schon 2006 hier 
diskutiert:
Beitrag "AVR +Pipelining"

Das sind zwei parallel arbeitsfähige Units: Prefetch und Execute. Das 
AVR_Manual (oder das -Marketing) führt dafür den Begriff 
single-level-pipelining ein, was die Auswahl der hier im Thread 
gemachten Klassifizierungen für ein und die desselbe Architektur weiter 
Vergrössert:

*kein Pipeling
*rudimentäres Pipelining
*single level pipelining
*Zweistufige Pipeline (==kleinstmögliches)

############
PC-Freak schrieb:
> Fred Focus schrieb:

>> Tipp: besorg dir ein Buch über Computerarchitektur, dann kannst du Dich
>> selber schlau machen und musst nicht das Forum mit theoretischen
>> Pillepalle beschäftigen
>
> Dafür ist das Forum da.
Nöö, das Forum ist nicht dazu da dir die Mühen des (Selbst-)studiums 
abzunehmen. Hier hat keiner Bock Dir den privaten und unbezahlten 
Hochschullehrer zu geben. Und wie man an der Kakophonie der 
hingeworfenen Begriffe/Antworten zu ein und der selben Frage sieht ist 
"das Forum" praktisch dazu garnicht in der Lage.

von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> Eben das ist Hardwaretechnisch kein Pipeling

Eine Beschreibung von Pipelining der von mir skizzierten zweiten Art 
schliesst nicht die Verwendung des Begriffs in der ersten Art aus. Ich 
stecke in dem Thema schon recht lange und recht tief drin, um ausgiebig 
beiden Verwendungen begegnet zu sein.

Man kann anderen eine Brücke bauen, aber drüber laufen müssen sie 
selber. Weiter darüber zu diskutieren, halte ich für sinnlos.

: Bearbeitet durch User
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

MaWin O. schrieb:
> Johann L. schrieb:
>> Bei den alten AVRs hatte SEI ja eine Latenz von 1 Instruktion, aber CLI
>> nicht.  Keine Ahnung, wie diese Asymmetrie entsteht.
>
> Das hat ausnahmsweise einmal nichts mit Pipelining zu tun, sondern mit
> der SLEEP-Instruktion.
>
> Mit einer 1er-Latenz für SEI ist es möglich sicher schlafen zu gehen,
> ohne durch eine Interrupt-Racecondition unendlich lange zu schlafen,
> falls der Interrupt vor dem sleep kommt.
>
> sei
> sleep ; sei wird erst hier - gleichzeitig mit sleep - aktiv und ein
> Interrupt weckt sleep wieder auf.

Und wie ist das aus XMega gelöst, wo SEI keine Latenz hat?

Auf die Schnelle hab ich in avr/sleep.h nix gefunden, sleep_cpu() bildet 
einfach nur auf SLEEP ab.

von MaWin O. (mawin_original)


Lesenswert?

Johann L. schrieb:
> Und wie ist das aus XMega gelöst, wo SEI keine Latenz hat?

Das weiß ich leider nicht. Mit XMega kenne ich mich nicht aus.

von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Fred Focus schrieb:
>> Eben das ist Hardwaretechnisch kein Pipeling
>
> Ich
> stecke in dem Thema schon recht lange und recht tief drin, um ausgiebig
> beiden Verwendungen begegnet zu sein.

Soso, willste jetzt Alterspoker spielen? Wer am frühesten das Wort 
Pipeling im Gehörgang hatte gewinnt?!

> Man kann anderen eine Brücke bauen, aber drüber laufen müssen sie
> selber.
Nicht jede Brücke ist tragfähig. Und nicht jede Grenzüberschreitung ist 
der sprichwörtliche Schritt nach vorn (siehe Zeitenwende).

> Weiter darüber zu diskutieren, halte ich für sinnlos.
Dann hättest Du dir diesen beitrag besser gespart.
Und statt Worte drüber auszutauschen ist die Selbsterfahrung, sprich der 
Eigenbau einer CPU bspw. im FPGA Erfahrungsreicher. Da macht den 
Unterschied zwischen marketinggetöse und technischer Terminologie 
schnell klar.

von MaWin O. (mawin_original)


Lesenswert?

Fred Focus schrieb:
> er am frühesten das Wort
> Pipeling im Gehörgang hatte gewinnt?!

Kannst du nicht einfach aufhören?
Jeder hat verstanden, dass du eine andere Definition von Pipelining 
verwendest.
Und das ist auch in Ordnung.
Ich bleibe bei meiner und du bei deiner.
Ok?

von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> Soso, willste jetzt Alterspoker spielen? Wer am frühesten das Wort
> Pipeling im Gehörgang hatte gewinnt?!

Mir reicht, was Hennessy/Patterson über Computer Architecture schreiben.
https://www.amazon.de/-/en/John-L-Hennessy/dp/012383872X

: Bearbeitet durch User
von Fred Focus (Gast)


Lesenswert?

MaWin O. schrieb:
> Fred Focus schrieb:
>> er am frühesten das Wort
>> Pipeling im Gehörgang hatte gewinnt?!
>
> Kannst du nicht einfach aufhören?

Warum ist es wichtig, wer hier wann aufhört?
Meinst Du derletzte gewinnt? Also doch Poker? Oder Hasenfußrennen?

> Jeder hat verstanden, dass du eine andere Definition von Pipelining
> verwendest.
> Und das ist auch in Ordnung.
> Ich bleibe bei meiner und du bei deiner.
> Ok?

Nein, ist nicht OK, wenn es (mindestens) vier verschiedene Antworten auf 
die Frage "Wieviel Pipelinestufen hat der AVR" gibt.

Fragt Dich einer nach dem Ergebnis von 1 + 2, antwortest du ja auch 
"Drei" und nicht: Die Antwort ist "Rudimentär, also 3, was die 
kleinstmögliche Variante ist" ?!

von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Fred Focus schrieb:
>> Soso, willste jetzt Alterspoker spielen? Wer am frühesten das Wort
>> Pipeling im Gehörgang hatte gewinnt?!
>
> Mir reicht, was Hennessy/Patterson über Computer Architecture schreiben.
> https://www.amazon.de/-/en/John-L-Hennessy/dp/012383872X

Und, was schreiben sie? Ich habe 978-3-486-59190-3 vorliegen.

von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> Und, was schreiben sie? Ich habe 978-3-486-59190-3 vorliegen.

Ich nicht, andere Ausgabe. Dort ab A.1.
"Pipeline: Basic and Intermediate Concepts".

von MaWin O. (mawin_original)


Lesenswert?

Fred Focus schrieb:
> Nein, ist nicht OK

Ja, dann. Gut.
Du wirst aber damit leben müssen, dass ich eine andere Meinung habe 
als du.

> Warum ist es wichtig, wer hier wann aufhört?

Weil diese Diskussion zu nichts führt.
Du bist genau so wenig bereit von deinem Standpunkt abzurücken, wie ich.
Wir haben beide unsere Standpunkte begründet und definieren eine Sache 
eben etwas anders. Beide mit Begründung.
Damit wirst du leben müssen.
Ich kann es sehr gut.

Damit war das dann das letzte Wort von mir zu diesem Thema zu dir.

von Fred Focus (Gast)


Lesenswert?

MaWin O. schrieb:

> Damit war das dann das letzte Wort von mir zu diesem Thema zu dir.

OK, dann behalte ich mal:
"AVR hat Pipelining und es ist zweistufig. Und damit ist es rudimentär. 
"
als Deine Meinung in Erinnerung.
Wie auch den Text aus dem AVR-manual "Instructions in the program memory 
are executed with a single level pipelining."

Und trage damit in das Wörterbuch "MarWin-English/English-MarWin" die 
Zeile  "zweistufiges Pipelining" (Marwin) = "single level pipelining" 
(engl.) ein.

von (prx) A. K. (prx)


Lesenswert?

(prx) A. K. schrieb:
> Ich nicht, andere Ausgabe.

So ungefähr die hier, aber -2 am Ende. Hat etliche Seiten mehr.
https://www.amazon.de/-/en/John-L-Hennessy/dp/1558607242

: Bearbeitet durch User
Beitrag #7309835 wurde vom Autor gelöscht.
von MaWin O. (mawin_original)


Lesenswert?

(prx) A. K. schrieb im Beitrag #7309835:
> Womit er nicht alleine ist: "The AVR has a 2 stage single level
> pipeline, which is a simple pre-fetch and execute system."

Ich vermute einmal, dass er kein Informatiker, sondern ein 
Hardwareentwickler ist. Das würde es erklären.

Es ist halt ein Begriff, der in unterschiedlichen Fachbereichen leicht 
unterschiedliche Bedeutungen hat.

Die Arm-Pipeline - am R52 Beispiel - habe ich ja auch schon hier 
gepostet:

https://developer.arm.com/documentation/100026/0103/Cycle-Timings-and-Interlock-Behavior/About-cycle-timings-and-interlock-behavior/Pipeline-information

Soweit ich das verstehe (achtung hier könnte ich falsch liegen) ist 
two-way = two-level.

von Fred Focus (Gast)


Angehängte Dateien:

Lesenswert?

(prx) A. K. schrieb:
> (prx) A. K. schrieb:
>> Ich nicht, andere Ausgabe.
>
> Die hier. Hat etliche Seiten mehr.
> https://www.amazon.de/-/en/John-L-Hennessy/dp/1558607242

Und soll ich jetzt, mehr Seiten kopieren um 'Unentschieden' zu 
erreichen? Also was ist jetzt konkret das was:
>Mir reicht, was Hennessy/Patterson über Computer Architecture schreiben.

Ganz abgesehen davon, das du hier keinen Hennessey/Patterson als ISB 
verlinkst sondern einen Hennessey als einzig genannten Autor?

Anbei ein Scan aus 'meinem' Exemplar. Darin wird genannt, das man aus 
der Anzahl der Takte in der Ausführungszeit auf die Einzal der 
Pipelinestufen schliessen kann. Und da nun der AVR die meisten Opcodes 
in einem Takt ausführt (siehe die Scanschnipsel gestern) kann man 
bestenfalls von einer einstufigen Pipeline sprechen, aber keinesfalls 
von einer zweistufigen. Und dies stimmt auch mit dem AVR-Manual überein 
"single level pipelining".

Ob man eine einstufige Pipeline, also ein Förderband mit einer 
"Arbeitsstation" noch als Pipeling bezeichnen kann, ist vielleicht ein 
weiterer Disput. Aber von zweistufig kann man bei AVR wirklich nicht 
reden.

Der HenPat unterscheidet in Pipelining im Daten-Pfad und Pipeling im 
Steuerwerkvielleicht begründet das ja die Verwirrung. Ferner 
konzentriert er sich auf den Entwurf ganze Befehlssätze, die dann eben 
auf Pipeling optimiert sind. Beim AVR ist eben der Befehlssatz so 
optimiert, das die häufigsten Befhle (registeroperationen) durch 
Pipeling nicht optimiert werden können. Ein typischer Entwurfsansatz bei 
RISC-maschinen.

von (prx) A. K. (prx)


Lesenswert?

MaWin O. schrieb:
> Ich vermute einmal, dass er kein Informatiker, sondern ein
> Hardwareentwickler ist. Das würde es erklären.

Zumindest steckt er offenbar nicht wirklich in Rechnerarchitektur drin. 
Denn sonst wäre er schon längst massenhaft über 
https://en.wikipedia.org/wiki/Instruction_pipelining gestolpert. Kann 
man beim besten Willen nicht vermeiden.

Hennessey diese Art von Pipeline absprechen zu wollen, entbehrt nicht 
einer gewissen Komik. Immerhin gilt er als Schöpfer der Standford MIPS 
Prozessoren, ausgeschrieben Microprocessor without Interlocked Pipeline 
Stages. Und damit sind genau diese Art von Pipelines gemeint, und die 
Vermeidung von Locks durch Delay-Slots bei Lade- und Sprungbefehlen.

> Es ist halt ein Begriff, der in unterschiedlichen Fachbereichen leicht
> unterschiedliche Bedeutungen hat.

Wobei Pipelining von Execution Units auch Teil von Rechnerarchitektur 
ist.

> Soweit ich das verstehe (achtung hier könnte ich falsch liegen) ist
> two-way = two-level.

Der "single level pipelining" Ausdruck war mir bisher neu. Aber auch 
Google findet den fast nur im Kontext von AVRs. Generell ist der Begriff 
"level" im Kontext von Pipelining nicht üblich. Dein "way" übrigens auch 
nicht, der gehört zu Caches.

: Bearbeitet durch User
von Fred Focus (Gast)


Angehängte Dateien:

Lesenswert?

MaWin O. schrieb:
> Die Arm-Pipeline - am R52 Beispiel - habe ich ja auch schon hier
> gepostet:
>
> 
https://developer.arm.com/documentation/100026/0103/Cycle-Timings-and-Interlock-Behavior/About-cycle-timings-and-interlock-behavior/Pipeline-information
>
> Soweit ich das verstehe (achtung hier könnte ich falsch liegen) ist
> two-way = two-level.

Naja Wert auf eine gepflegte Hand-Bibliothek scheint man ja hier nicht 
zu legen ... Anbei das Blockbild für Cortex-M3 und -M4 aus ISBN: 
978-01-12-408082-9.

Da steht 3-stage Pipeline und das bezieht sich wohl auf die 
Execution-Unit allein (Fetch/Decode/Execute), das Speicherinterface ist 
extra aufgeführt und wird wohl nicht zu den Pipeline-Stages 
hinzugerechnet.

Aber da ARM ein ganzer Zoo an CPU's ist, gibt es wohl auch einige mit 
höheren Angaben zu pieline-stages, eher aus der auf Performance 
gezüchteten A-Reihe, statt der für (stronspar-embedded) optimierten 
M-Reihe. Beim ARM-11 sollen es wohl 7 stages sein.

von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb:

> Denn sonst wäre er schon längst massenhaft über
> https://en.wikipedia.org/wiki/Instruction_pipelining gestolpert. Kann
> man beim besten Willen nicht vermeiden.

Scherzkeks, wikipedia hat nicht unbedingt den Status einer 
referenzierbarer fachliteratur, jedenfalls nicht allgemein. Den Artikeln 
über Fußballspieler mag man glauben, bei vielen anderen ist gesunde 
Skepsis angesagt.

Die IT-Artikel gehen selten über das Niveau von Computermagazin hinaus 
und oftmals verschlechtern sich die Artikel im Laufe der Zeit, weil 
irgendein Studiosis sich und seinen Nickname verweigen will und 
reinpresst was er gerade beim Mensagespräch von denen aufgeschnappt hat, 
die nicht die Vorlesung schwänzten.

von MaWin O. (mawin_original)


Lesenswert?

(prx) A. K. schrieb:
> Der "single level pipelining" Ausdruck war mir bisher neu. Aber auch
> Google findet den fast nur im Kontext von AVRs. Generell ist der Begriff
> "level" im Kontext von Pipelining nicht üblich. Dein "way" übrigens auch
> nicht, der gehört zu Caches.

Ja, das sehe ich auch so. "Level" und "way" ist mir vorher im 
Zusammenhang mit Pipelines auch noch nicht untergekommen.
Google findet da auch praktisch nichts.

Festhalten kann man lediglich, dass weder "level" noch "way" das gleiche 
bedeuten wie "stages".

von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> Da steht 3-stage Pipeline

Solche Bilder sind für die Aussage zu den Pipeling-Stufen ungeeignet. 
Dafür sind sie auch nicht da.

Fred Focus schrieb:
> Ganz abgesehen davon, das du hier keinen Hennessey/Patterson als ISB
> verlinkst sondern einen Hennessey als einzig genannten Autor?

Och menno. Was kann ich dafür, wie Amazon die Links nennt. Einmal 
draufgeklickt kommt "English edition by John L. Hennessy (Autor), David 
A. Patterson (Autor)" und auf dem Titelbild stehen auch beide. In beiden 
Ausgaben.

Ist das Standardwerk zu Rechnerarchitektur.

> Anbei ein Scan aus 'meinem' Exemplar. Darin wird genannt, das man aus
> der Anzahl der Takte in der Ausführungszeit auf die Einzal der
> Pipelinestufen schliessen kann.

Kann man nicht, weil der Begriff "Ausführungszeit" mehrdeutig ist. 
Atmel/Microchip geben das an, was man in der Branche als "Latency" 
bezeichnet. Wie lange man drauf warten muss, bis es weiter geht. Die 
Fetch-Stage ist da nur drin, wenn sie relevant ist: bei Sprüngen. Das 
interessiert den Programmierer nämlich weit mehr als die Details der 
Mikroarchitektur.

Wenn beim 32-Bit Pentium 4 in diesem Sinn eine Ausführungszeit von 0,5 
Takten für ADD reg,reg genannt wird, dann ändert das nichts an der von 
Intel genannten 20-stufigen Pipeline.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> Scherzkeks, wikipedia hat nicht unbedingt den Status einer
> referenzierbarer fachliteratur

Such halt woanders, du Scherzkeks. ARM verwendet den Ausdruck 
"Instruction Pipeline" ebenfalls, uvam. Die Erwähnung in der Wikipedia 
macht ihn ja nicht automatisch falsch.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> Beim ARM-11 sollen es wohl 7 stages sein.

Wie ist das möglich, wo ARM doch 1 Takt für ADD dokumentiert? ;-)

: Bearbeitet durch User
von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb:

> Such halt woanders, du Scherzkeks. ARM verwendet den Ausdruck
> "Instruction Pipeline" ebenfalls, uvam. Die Erwähnung in der Wikipedia
> macht ihn ja nicht automatisch falsch.

Und der WP-Artikel "Instruction-Code" bedeudet jetzt genau ?was? in 
Bezug auf die Anzahl der Pipelinstufen im AVR?

Und in dem Bild aus der ARM-Literatur oben findet sich der Begriff 
"Instruction Pipeline" nicht sondern "3-stage pipeline" . Was kommt als 
nächstes? Kaffekochen auf einem Kaffeemaschine mit ARM-Prozessor und 
Interpretation der Muster die sich im Kaffeesatz bilden?!

Beitrag #7309950 wurde vom Autor gelöscht.
von Fred Focus (Gast)


Angehängte Dateien:

Lesenswert?

(prx) A. K. schrieb:
> Fred Focus schrieb:
>> Beim ARM-11 sollen es wohl 7 stages sein.
>
> Wie ist das möglich, wo ARM doch 1 Takt für ADD dokumentiert? ;-)
Weil die latencies einfach auf den Ladebefehl davor resp. danach 
geschlagen werden, siehe Anhang.

Wobei dort von 4 stages pipeline die Rede ist. ARM ist halt ein Zoo an 
Prozessoren.

von rbx (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Ich ja schon gut, ich nehme den Begriff "rudimentär" zurück und ersetze
> ihn durch "minimal". ;-)

Oder eben einfach, vereinfacht, oder genauer "x-stufig".

Naja, ist Haarspalterei hier, ganz abgesehen von dem Hintergrund, dass 
Pipelining eher der schnelleren Programmabarbeitung dient - aber nicht 
unbedingt nahe bei der Ausgangsfrage ist.
Deswegen ja auch der Hinweise auf "Relativierungen" oben.

Vor allem beim ARM sollte man aber, sofern man nicht nur theoretisch 
unterwegs ist, das konkrete Modell genauer untersuchen, mit welchem man 
es zu tun hat.

Beitrag #7310039 wurde vom Autor gelöscht.
Beitrag #7310050 wurde vom Autor gelöscht.
von (prx) A. K. (prx)


Lesenswert?

rbx schrieb:
> aber nicht unbedingt nahe bei der Ausgangsfrage ist.

Die war:

jochenPizz schrieb:
> Es muss ja der Befehl geholt werden, dekodiert werden, die nötigen
> Variablen geladen werden eine Berechnung mit der ALU durchgeführt werden
> und dann das Ergebnis und mögliche Statussignale gesetzt werden.

Die Frage war also, wie der Gesamtablauf eines Befehls bei AVR und ARM 
in einem Takt möglich sei. Also mit allem Gedöns, angefangen mit dem 
Fetch. Und das ähnelt der Frage, wie es möglich sei, dass die Sonne 
blau-weiss kariert ist. Weil die Voraussetzung der Frage falsch ist: Das 
dies alles in einem Takt geschähe.

Will man also auf diese falsch gestellte Frage sinnvoll antworten, kommt 
man um das Thema Pipelining nicht herum. Und auch nicht um die 
Erkenntnis, dass es von Fetch bis Writeback beim AVR 2 Takte sind, bei 
dem ARMen mehr. Und erst dann spielen die Unterschiede zwischen ARM1 und 
ARM11 eine Rolle.

: Bearbeitet durch User
von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb im Beitrag #7310050:
> Da hat sich nämlich von ARM1 bis Cortex A55 nichts verändert.

Also die ersten ARM's waren wohl nochmit Transfer Gates also 'dynamisch' 
fabriziert und skalierten so garnicht auf andere Taktfrequenzen. Zumal 
brauchte er zwei sich nicht überlappende takte die erst zusammen einen 
cycle realisierten.

Der ARM2 hatte dann zwei register mehr, mit ARM3 kam ein ein Swap Befehl 
hinzu

Bedingte Befehlsausführung und damit ein ziemliche Kombinatorischer 
Knoten kam IMHO auch ers später hinzu. Den größten Sprung machte IMHO 
der ARM6, weil in dem alles reingepresst wurde was Apple für den newton 
PDA brauchte.
Also "nichts verändert" ist ne ziemlich übermütige Ansage.

von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> Also "nichts verändert" ist ne ziemlich übermütige Ansage.

Es ging dabei nicht um den gesamten Prozessor, sondern weshalb ADD 
reg,reg (scheinbar) nur einen Takt benötige. Und das ist im ARM1 genauso 
falsch oder genauso richtig wie beim A55, je nachdem, ob man den 
Gesamtablauf oder die Latenz betrachtet.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> Bedingte Befehlsausführung und damit ein ziemliche Kombinatorischer
> Knoten kam IMHO auch ers später hinzu.

Nein. Erst informieren, dann blamieren.

von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Die Frage war also, wie der Gesamtablauf eines Befehls bei AVR und ARM
> in einem Takt möglich sei. Also mit allem Gedöns, angefangen mit dem
> Fetch. ... Weil die Voraussetzung der Frage falsch ist: Das
> dies alles in einem Takt geschähe.

Nein die Voraussetzung ist nicht falsch, klar kann man Eintaktmaschinen 
bauen und hat auch gebaut. Im einstelligen MHZ ist das seit den 
neunzigern kein Problem. Haben wir alles schon gestern durchgekaut: 
Beitrag "Re: 1 Befehl pro Zyklus"

Und der TO hat auch einen link auf Blockbild und Grundstruktur einer 
singlecyclemaschine gegeben.

Aber natürlich kann man eine Frage immer so umbiegen, das man sie mit 
dem eigenen Viertelwissen beantworten kann.

Wenn etwas an der Voraussetzung fehlerhaft ist, dann das sie keinen 
quantitiven Rahmen aka Taktdauer nennt.

von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> Weil die latencies einfach auf den Ladebefehl davor resp. danach
> geschlagen werden, siehe Anhang.

Ladebefehle bei ARMs sind wieder eine andere Baustelle, weil da die 
dokumentierte Latenz grösser als 1 ist, sie somit überhaupt nicht in den 
Thread passen. Und inweit man da auf eine Durchsatz von 1 käme, erst 
recht.

von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> klar kann man Eintaktmaschinen bauen

Das war aber nicht die Frage. Es gab nie einen RISC Prozessor, der den 
gesamten Ablauf ein einem Takt erledigt hätte.

jochenPizz schrieb:
> wie schafft es ein RISC Prozessor  wie ARM oder AVR einen Befehl in nur
> einem Zyklus durchzuführen?

> und hat auch gebaut.

Kann sein. Ich kenne allerdings keinen. Beispiel?

von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Fred Focus schrieb:
>> Bedingte Befehlsausführung und damit ein ziemliche Kombinatorischer
>> Knoten kam IMHO auch ers später hinzu.
>
> Nein.

Doch, Stichwort THUMB, kann keine bedinget Befehlsausführung (ausser dem 
üblich JMP). Steht sogar in deiner gepriesenen Wikipedia

> Erst informieren, dann blamieren.
Das sagt der richtige. Kein Fachbuch zur Hand, aber groß von Informieren 
tröten.

von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Fred Focus schrieb:
>> Weil die latencies einfach auf den Ladebefehl davor resp. danach
>> geschlagen werden, siehe Anhang.
>
> Ladebefehle bei ARMs sind wieder eine andere Baustelle, weil da die
> dokumentierte Latenz grösser als 1 ist, sie somit überhaupt nicht in den
> Thread passen.

Nein das ist die selbe Baustelle, weil eben Register und ALU in der 
selben Pipeline stecken.

von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
> Doch, Stichwort THUMB, kann keine bedinget Befehlsausführung (ausser dem
> üblich JMP). Steht sogar in deiner gepriesenen Wikipedia

Herrje, krieg wenigstens die Fakten gerade, wenn schon nicht die 
Ansichten. Thumb kam mit ARM7T(DMI), und damit lange nach ARM1.

: Bearbeitet durch User
von Fred Focus (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Fred Focus schrieb:
>> klar kann man Eintaktmaschinen bauen
>
> Das war aber nicht die Frage. Es gab nie einen RISC Prozessor, der den
> gesamten Ablauf ein einem Takt erledigt hätte.

Doch das ist die Frage, folge einfach dem Link, der in dem allerersten 
Post mitgegeben wird.

> Kann sein. Ich kenne allerdings keinen. Beispiel?
Wurden schon mehrmals genannt.
Wenn Du Deine Sonnenbrille beim Lesen nicht absetzen willst, weil Du 
ohne deren Coolness-Faktor nicht ernst genommen wird kann ich Dir leider 
auch nicht weiterhelfen.

> Herrje, krieg bitte die Fakten gerade, wenn schon nicht die Ansichten.
> Thumb kam mit ARM7T(DMI), und damit lange nach ARM1.

Fakt ist, du hast behauptet es wäre diesbezüglich alles gleich von ARM1 
bis ARM55. Ist es nun aber nicht. Also hat rbx schon recht, wenn er 
daraufbesteht das das konkrete ARM-Modell genannt wird wenn man über 
Architektur-spezifica spricht.

von (prx) A. K. (prx)


Lesenswert?

Fred Focus schrieb:
>> Das war aber nicht die Frage. Es gab nie einen RISC Prozessor, der den
>> gesamten Ablauf ein einem Takt erledigt hätte.
>
> Doch das ist die Frage, folge einfach dem Link, der in dem allerersten
> Post mitgegeben wird.

Habe ich. Dort steht keiner. Nur ein theoretisches Konzept, wie die 
Turing-Maschine.

: Bearbeitet durch User
Beitrag #7310109 wurde von einem Moderator gelöscht.
von MCUA (Gast)


Lesenswert?

Eine 1-Stufen-Pipeline macht genauso wenig Sinn zu erwähnen wie eine 
Autoschlange bestehend aus nur einem Auto.

Der AVR hat (auch wenn hier das jemand nicht wahr haben will) eine 
2-Stufen-Pipeline. (beim XMEGA kann es wohl nicht anders sein)


> Ein ST62 schafft 13 Befehle per Takt.
Wohl eher nicht.


> Ein DSP ist kein universeller RISC-Mikrocontroller. Und darum geht es
> hier in dieser Diskussion.
Es können in 'MCU's auch DSP-Funktionalit. mit eingebaut sein, wie auch 
in 'DSP's General-Purpose-Funktionalit. mit eingebaut sein kann.
Nur, als 'MCU' verkauft es sich besser.


> Ein Takt per Befehl ist ein alter Hut.
> Das konnten die DSPs schon lange bevor jemand R.I.S.C.
> ueberhaupt buchstabieren konnte.
DSP bedeuted nicht zwangsläufig, dass jeder Befehl in einem Takt 
ausgeführt wird.
Es weisst auf mehrere Busse hin.


> Sieht man ja, dass es mehr Takte braucht um einen Zyklus auszuführen,
> also werden intern mehr Taktflanken inerhalb eines Taktes erzeugt oder
> nicht?
Nein.

von Fred Focus (Gast)


Angehängte Dateien:

Lesenswert?

MaWin schrieb:
> Martin S. schrieb:
>> Sieht man ja, dass es mehr Takte braucht um einen Zyklus auszuführen,
>> also werden intern mehr Taktflanken inerhalb eines Taktes erzeugt oder
>> nicht?
>
> Ziemlich sicher nicht. Dazu bräuchte man eine PLL.

Doch. Nein.
PLL ist nur eine Variante der Implementierung eines 
Maschinen-Zyklusgenerators.
Andere sind DLL (delay looked loop) und bei vorgegebenen 
Takt-Tastverhältniss 1:1 resp. duty cycle 50% einfache Inverter.

In der ARM-Historie ist das sehr gut erkennbar, anfangs wurden extern 
zwei nicht überlappende Rechtecksignale φ1 und φ2 erzeugt und 
eingespeist. Irgendwannführte man dann mehrere clock domains ein, eine 
für das Speicher subsytem eine ander für den Processing-Core. Siehe 
auch, den Pirsch-Auszug im Anhang.

Im AVR Blockbild heisst es gleich vielsagend clock circuit/clock 
generation.

von MaWin (Gast)


Lesenswert?

Fred Focus schrieb:
> Doch, Stichwort THUMB, kann keine bedinget Befehlsausführung (ausser dem
> üblich JMP).

Da spricht mal wieder der Experte Fred.

Selbstverständlich kann Thumb mit der IT-Instruktion bedingte 
Befehlsausführung. Für bis zu vier aufeinanderfolgende nahezu beliebige 
Instruktionen.

(Und außerdem hat Thumb noch die cbz und cbnz Instruktionen, die eine 
Prüfung und einen Sprung in einem Befehl machen.)

https://www.cs.princeton.edu/courses/archive/fall12/cos375/ThumbRefCard.pdf

von Fred Focus (Gast)


Lesenswert?

MaWin schrieb:
> Fred Focus schrieb:
>> Doch, Stichwort THUMB, kann keine bedinget Befehlsausführung (ausser dem
>> üblich JMP).

> Selbstverständlich kann Thumb mit der IT-Instruktion bedingte
> Befehlsausführung. Für bis zu vier aufeinanderfolgende nahezu beliebige
> Instruktionen.

Hier wird Thumb und Thumb-2 verwechselt.

https://developer.arm.com/documentation/ddi0308/d/Introduction-to-Thumb-2/About-Thumb-2#:~:text=Thumb%2D2%20is%20a%20major,of%20the%20ARM%20instruction%20set.

Da bei der Einführung des Thumb Codedichte im Fokus war, musste halt der 
Zoo an Instructionen eingedampft werden, Da mussten halt die bits für 
conditional execution dran glauben.

Vielleicht habe ja die deutschen ein Problem damit, weil es bei Daumen 
keine extra Pluralform gibt: der Daumen, die Daumen, zwei linke Hände 
und rings nur Daumen ...

von MaWin (Gast)


Lesenswert?

Fred Focus schrieb:
> Hier wird Thumb und Thumb-2 verwechselt.

Nein. Du hast nur keine Ahnung von Arm.
Aber wen wundert es, nach dem ganzen Quatsch, den du hier bereits 
abgelassen hast.

Thumb-2 ist gar kein eigener Befehlssatz.

> Da bei der Einführung des Thumb Codedichte im Fokus war, musste halt der
> Zoo an Instructionen eingedampft werden, Da mussten halt die bits für
> conditional execution dran glauben.

Du wirst es kaum glauben, aber trotzdem hat Thumb conditional execution. 
(IT-Instruktion).
Lies und verstehe doch einmal zur Abwechslung meine Beiträge und die 
Links, die ich poste.

von Fred Focus (Gast)


Lesenswert?

MaWin schrieb:

> Lies und verstehe doch einmal zur Abwechslung meine Beiträge und die
> Links, die ich poste.

Soso und eigene Recherche und Links wie oben reicht nicht, es muß immer 
über den Informationsmonopolisten MaWin laufen?! Der bis jetzt kein 
einziges Fachbuch zu dem Thema aus seiner Handbibliothek ziehen konnte?!

Als ganz nach dem erstes Gebot:  DU SOLLST NICHT ANDERE MaWins HABEN 
NEBEN MIR! ICH BIN DER HERR, DEIN MaWin. SCNR

> Thumb-2 ist gar kein eigener Befehlssatz.

Es gibt Thumb, Thumb2, ThumbEE (inzwischen eingestellt) und auch die 
Unterschiede zwischen diesen. So wie es eben nicht "den" ARM-Prozessor 
gibt, sondern einen über Jahrzehnten gewachsenen Dschungel.

von MaWin (Gast)


Lesenswert?

Fred Focus schrieb:
> Es gibt Thumb, Thumb2, ThumbEE (inzwischen eingestellt) und auch die
> Unterschiede zwischen diesen

Thumb ist der Name des Befehlssatzes. In allen Fällen.
Zu sagen Thumb hätte keine bedingte Befehlsausführung ist ganz einfach 
falsch.

Was willst du mir eigentlich sagen?
Dass du sowohl von Pipelining, als auch von Arm keine Ahnung hast?
Das ist dir gelungen.

von Fred Focus (Gast)


Lesenswert?

MaWin schrieb:
> Was willst du mir eigentlich sagen?
> Dass du sowohl von Pipelining, als auch von Arm keine Ahnung hast?

Howgh, der Große MaWin hat gesprochen!
Nichts zur Sache, nichts mit Beleg, sowie das eben sein Ding ist.

von (prx) A. K. (prx)


Lesenswert?

foobar schrieb:
> Man hat keine Read-Modify-Write-Befehle auf's RAM, würden
> den Datenbus zweimal benutzen.

Wobei man eine Pipeline auch darauf einrichten kann. Cyrix's M1/M2 
Prozessoren der x86 Szenerie taten dies, während Intels Pentium zwar mit 
Load-Execute klar kam, aber bei Load-Execute-Store ins Stocken kam.

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Wobei man eine Pipeline auch darauf einrichten kann. Cyrix's M1/M2
> Prozessoren der x86 Szenerie taten dies

Natürlich kann man das. Aber es geht hier im Thread um RISC. Dort geht 
das eben nicht.

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.