Forum: Mikrocontroller und Digitale Elektronik Mehr als eine "Instruktion" pro Takterereignis?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von _self (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hey, ich lese gerade das Datenblatt zum ATMega8 und wundere mich etwas 
darüber, dass der ALU offenbar mehrere -nun ja, am ehesen würde ich sie 
Instruktionen nennen - pro Taktereignis ausführen kann.
Hier sieht man im Dokument 
(http://www.atmel.com/images/atmel-8159-8-bit-avr-microcontroller-atmega8a_datasheet.pdf, 
S. 30), dass der Alu innerhalb von einem Takt sowohl die Operanden 
einliest, die Rechenoperation ausführt wie auch das Ergebnis 
zurückschreibt. Wie funktioniert sowas auf Hardwareebene? Wird der Takt 
irgendwie verzögert auf Subschaltkreise des ALUs weitergeleitet?
Mit freundlichen Grüßen

von Jacko (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Das eine geschieht bei der negativen Clock-Flanke,
das andere bei der positiven Clock-Flanke.

Wenn ich mich recht entsinne...

von Max M. (jens2001)


Bewertung
0 lesenswert
nicht lesenswert
_self schrieb:
> dass der ALU offenbar mehrere -nun ja, am ehesen würde ich sie
> Instruktionen nennen - pro Taktereignis ausführen kann.

WO???? liest du das?

Fetch, Execute und Writeback sind EINE INSTRUCTION!

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


Bewertung
0 lesenswert
nicht lesenswert
Da steht keine Subtakt-Sequenz oder Delayline dahinter. Wie man schon am 
Bild darüber erkennt, sind die dicken Teile der Balken jene Phasen, in 
denen dieser Teil der CPU relevant ist. Der Rest ist kein 
Tristate-Zustand, das sieht aufgrund der an Buszustände erinnernden 
Darstellung nur so aus.

Aus dem Registerfile wird in der ersten Takthälfte gelesen, danach 
bleiben die Daten stabil. In das Registerfile wird nur in der zweiten 
Takthälfte geschrieben, was davor kommt wird ignoriert. Die ALU 
verbindet die beiden Read-Ports mit ihrer Operation mit dem Write-Port. 
Bevor die Daten aus dem Registerfile da sind und durch die ALU durch 
sind liefert die ALU Schrott, aber das stört nicht.

: Bearbeitet durch User
von _self (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten!

von Tim  . (cpldcpu)


Bewertung
-2 lesenswert
nicht lesenswert

von (prx) A. K. (prx)


Bewertung
3 lesenswert
nicht lesenswert
Nur ist das, worum es hier gerade geht, keine Pipeline.

von Tim  . (cpldcpu)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Bild ist gemeint?

Das ist ein rein kombinatorischer Vorgang. Erst der Write-Back führt 
wieder zum latching der Daten. Da nichts besonders dran und es sind auch 
keine "sub-clocks" notwendig.

Natürlich erlaubt eine solche Architektur keine sehr hohen 
Taktfrequenzen, aber das ist beim AVR wohl egal, da er sowieso durch da 
langsame Flash begrenzt ist.

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Bewertung
0 lesenswert
nicht lesenswert
Tim  . schrieb:
> Das Bild ist gemeint?
>
> Das ist ein rein kombinatorischer Vorgang. Erst der Write-Back führt
> wieder zum latching der Daten. Da nichts besonders dran und es sind auch
> keine "sub-clocks" notwendig.

Yep. Etwas irreführend an dem Bild ist, daß das Lesen der Operanden, die 
Verarbeitung und das Writeback so dargestellt ist, als wären es drei 
separate Vorgänge. Sind sie nicht. Das passiert alles gleichzeitig. Am 
Beginn des Zyklus schaltet ein Multiplexer die beiden Operanden auf die 
Eingänge der ALU. Die ALU selber führt praktisch ununterbrochen ihre 
Arbeit durch (ein paar Bits aus dem Befehlsdecoder sagen ihr dabei, was 
genau sie  tun soll, z.B. ADD oder AND). Und am Ende des Zyklus wird das 
Ergebnis aus der ALU im Zielregister gelatcht.

> Natürlich erlaubt eine solche Architektur keine sehr hohen
> Taktfrequenzen

Entscheidend ist nicht die Taktfrequenz, sondern der Durchsatz. Wenn man 
mehr Verarbeitungsschritte asynchron macht, dann braucht es wegen der 
Laufzeiten natürlich länger, bis das Ergebnis "steht". Wenn man die 
Verarbeitung in kleinere, taktsynchrone Einheiten aufteilt, dann wird 
zwar jede Einheit für sich schneller fertig, aber die Instruktion 
braucht am Ende genauso lange oder sogar länger.

Klassisches Beispiel ist Z80 vs. 6502. Der erstere ist synchron 
aufgebaut und braucht entsprechend mehr Takte pro Instruktion. In der 
Praxis sind ein Z80 bei 2.5MHz und ein 6502 bei 1MHz ungefähr gleich 
schnell.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.