Forum: Mikrocontroller und Digitale Elektronik CPU/µC - Takt/Schaltfrequenz


von Fred (Gast)


Lesenswert?

Moin allerseits,

ich hätte eine Verständnisfrage zu CPU und µC im allgemeinen.

Mit jedem Takt eines CPU's, nehmen wir mal die xmega Reihe als Beispiel 
diese haben ein Takt von 32 MHz, wird ja nicht jedesmal ein Befehl 
verarbeitet. Sondern je nach Befehlsstruktur braucht der CPU ja vll für 
einen Zyklus 8 Takte. Je nach Befehlslänge dann halt mehrere Takte

Beispiel MOV bei einem 8051:

- 1. Takt Befehl aus dem Befehlsspeicher holen und PC um eins inc...
- 2. Readleitung setzen
- 3. Speicher auslesen usw.

Vermutlich gerade nicht ganz richtig aber darum geht es auch nicht.

Und zwar ist meine Frage die folgende, woran kann ich aus dem Datenblatt 
erkennen wie maximal schnell ein CPU seine Ausgänge setzen kann?

Folgendes Problem beschäfftigt mich: Kann ein STM32 mit 400 MHz+ 
überhaupt noch mit einem 74 HC/HCT arbeiten (bei 3,3V kann es glaub auch 
nur noch 30-40 Mhz)? Ist das nicht zu langsam? Also wie viele Takte hat 
ein Zyklus so eines CPUs?

Vielleicht könnt ihr Licht in mein Dunkeln bringen.

danke vielmals

von Jim M. (turboj)


Lesenswert?

Fred schrieb:
> haben ein Takt von 32 MHz, wird ja nicht jedesmal ein Befehl
> verarbeitet. Sondern je nach Befehlsstruktur braucht der CPU ja vll für
> einen Zyklus 8 Takte.

Wir haben 2015 und nicht 1983. Soll heissen, die CPU macht sehr wohl 
einen Befehl pro Takt.

Fred schrieb:
> woran kann ich aus dem Datenblatt
> erkennen wie maximal schnell ein CPU seine Ausgänge setzen kann?

Das steht manchmal explizit drin, aber normale Wald-und-Wiesen µC 
Ausgänge machen bei ungefähr 50 MHz dicht. Es kommt aber auch sehr auf 
den Fanout an, also was da am Ausgang so dranhängt.

von Max H. (hartl192)


Lesenswert?

Fred schrieb:
> Ist das nicht zu langsam?
Du kannst mit einem 400+ MHz µC auch nur eine Frequenz von 10µHz an den 
IOs haben, hängt also ganz davon ab was du machen willst...

von Joe (Gast)


Lesenswert?

Max H. schrieb:
> Du kannst mit einem 400+ MHz µC auch nur eine Frequenz von 10µHz an den
> IOs haben, hängt also ganz davon ab was du machen willst...

Er fragt aber nach der maximalen ....

Fred schrieb:
> Und zwar ist meine Frage die folgende, woran kann ich aus dem Datenblatt
> erkennen wie maximal schnell ein CPU seine Ausgänge setzen kann?

von Fred (Gast)


Lesenswert?

Jim Meba schrieb:
> Wir haben 2015 und nicht 1983. Soll heissen, die CPU macht sehr wohl
> einen Befehl pro Takt.

Aber der Durchlauf EINES Befehles wird nicht ein 1 Befehl/Takt sein. 
Durch Pipelining und andere Sachen hast du natürlich recht.

Jim Meba schrieb:
> Das steht manchmal explizit drin, aber normale Wald-und-Wiesen µC
> Ausgänge machen bei ungefähr 50 MHz dicht.

Okay dann Frage was passiert wenn ich ein Programm schreibe mit nur 
Setzen und Rücksetzen eines Ausgangs? Da muss es ja ne 
Sicherungsfunktion geben!

von Dennis (Gast)


Lesenswert?

Bei manchen um hängen die Gpios nicht direkt am CPUKern sondern sind 
über einen Systembus auf dem Chip angebunden der langsamer ist als die 
cpu.
Wenn der Bus mit "nur" 50 MHz arbeitet, kommen die Befehle zum 
Pinwechsel nur mit 50 MHz an, auch wenn der Kern 400 MHz hat.

Solange der Bus belegt ist und die Puffer der Kern voll sind wird der 
Kern normalerweise blockiert.

von Max H. (hartl192)


Lesenswert?

Joe schrieb:
> Er fragt aber nach der maximalen ....
und ob er noch mit einem 74HC(T) arbeiten kann. Wenn eine Anwendung z.B. 
max. 20Hz IO-Takt erfordert, dann geht das mit einem 74HC(T) unabhängig 
davon ob die IOs maximal bis 50Hz oder 5GHz schalten könnten und wenn 
man 100MHz will geht das nicht egal ob der µC bei 100Mhz am Maximum ist 
oder ob noch Platz nach Oben ist...

von asdfasd (Gast)


Lesenswert?

> woran kann ich aus dem Datenblatt erkennen wie maximal schnell ein CPU
> seine Ausgänge setzen kann?

Studium des Befehlssatzes und des Aufbaus der MCUs.  Bei den einfachen 
MCUs musst du dir dann die gewünschte Befehlssequenz zusammenstellen und 
Takte zählen.  Beim ATMega z.B. dauert ein Port-Write 1 Zyklus, ein 
Branch 2. Eine Schleife "set low, set high, jump back" läuft in 4 Takten 
und erzeugt ein unsymetrisches Signal (1 low, 3 high) mit CPU-Takt/4.

Bei den schnellen ARMs wird es schwierig - die haben mehrere 
Clock-Domains und durch die vielen internen Optimierungen wird das 
Zählen sehr schwierig/unmöglich.  Auf denen bekommst du meist die 
höchste verlässliche "Togglerate" indem du die vorhandenen I/O-Blöcke 
(UART etc, evtl mit DMA) benutzt.

> Folgendes Problem beschäfftigt mich: Kann ein STM32 mit 400 MHz+
> überhaupt noch mit einem 74 HC/HCT arbeiten (bei 3,3V kann es glaub auch
> nur noch 30-40 Mhz)?

Nun, dann erzeug halt nicht so schnelle Signale ;-).  Von den internen 
Vorgängen siehts du aussen ja eh nichts - du siehst nur das, was dein 
Programm explizit auf den Pins erzeugt.

Solltest du allerdings meinen, an einen MCU, der einen extern Datenbus 
unterstützt, 74er-ICs zu hängen, musst du dir das Timing des externen 
Busses im Datenblatt ganz genau anschauen.  Selbst 50 MHz werden 
jemanden, der solche Fragen stellt, wohl überfordern ;-)

von Fred (Gast)


Lesenswert?

@asdfasd: Dich scheinen andere Dinge zu überfordern. Aber mach dir 
nichts draus. Wir sind ja alles nur Menschen.

von asdfasd (Gast)


Lesenswert?

Fred schrieb
> [...]

Gern geschehen.

von Tom Thomsen (Gast)


Lesenswert?

Jim Meba schrieb:
> Wir haben 2015 und nicht 1983. Soll heissen, die CPU macht sehr wohl
> einen Befehl pro Takt.

Dann guck dir mal die Zahl der Takte pro Befehl bei einem 6502/6510 an. 
Und der stammt aus dem Jahr 1975.

von c-hater (Gast)


Lesenswert?

Tom Thomsen schrieb:

> Dann guck dir mal die Zahl der Takte pro Befehl bei einem 6502/6510 an.
> Und der stammt aus dem Jahr 1975.

???

Der 6502 hatte nur ziemlich wenige 1-Takt-Befehle. Nur das bissel Zeug 
zum Kopieren innerhalb der wenigen (3!) Register und das bissel Zeug zum 
expliziten Setzen/Löschen der CPU-Flags. Zusammen sind das nur knapp 
über 10 Instruktionen.

Aber vor allem: Man kann allein mit diesen Instruktionen kaum ein 
sinnvolles Programm schreiben, braucht also in aller Regel auch die 
vielen anderen, deutlich länger dauernden Instruktionen. Wenn ich mich 
richtig erinnere, ging das bis zu 7 Takte pro Instruktion oder so 
(jmp/jsr mit indirekter Adressierung).

von (prx) A. K. (prx)


Lesenswert?

c-hater schrieb:
> Der 6502 hatte nur ziemlich wenige 1-Takt-Befehle.

Nämlich keinen einzigen. 2 Takte Minimum.

von Fpgakuechle K. (Gast)


Lesenswert?

Fred schrieb:

> Mit jedem Takt eines CPU's, nehmen wir mal die xmega Reihe als Beispiel
> diese haben ein Takt von 32 MHz, wird ja nicht jedesmal ein Befehl
> verarbeitet. Sondern je nach Befehlsstruktur braucht der CPU ja vll für
> einen Zyklus 8 Takte.

Nie ins datenblatt geschaut? Der XMega und die gesamte AVR-Familie wirbt 
damit das sie in einem takt einen Befehl abarbeitet. Bspw. steht das 
hgier:
http://www.atmel.com/Images/doc8077.pdf S.2 chapter Overview, 2. Satz:

"by executing powerful instructions in a single clock cycle" ...

Oder auf S. ) chapter "Instruction execution timing"

Und für die die es genau wissen wollen gibt es auf S. 375 eine Tabelle 
die für jeden Befehl listet wieviel Takte er benötigt.

MfG,

von Fpgakuechle K. (Gast)


Lesenswert?

Fred schrieb:
> Und zwar ist meine Frage die folgende, woran kann ich aus dem Datenblatt
> erkennen wie maximal schnell ein CPU seine Ausgänge setzen kann?

Nach I/O timing resp GPIO timing suchen. Bei "CPU"s wie Intel 486 und 
selige wirst du wahrscheinlich kaum fündig weil die keine GPIO's haben. 
Die Stecken im Chipsatz oder als I/O Karte am Bus.

Was du meinst sind keine CPU's sondern mikrocontroller oder SOC's. bei 
denen kann sowas auch im Chapter Peripheral beschrieben sein. Das ist 
u.U. nicht gleich in nsecs angegeben, sondern in I/O-takten die vom 
Sys-Takt ebgeleitet sein kann. Eine allgemeine Antwort dazu gibt es 
nicht, da muss man schon tief nach den genannten Stichworten in das 
Datenblatt des interessierenden Controllers schauen.

Und dann kommt es noch drauf an was an dem Oin "draußen dranhängt": 
Kapazitive Last, Pullup in entgegengesetzte Richtung -> schon wirds 
deutlich langsamer.

MfG,

von Stefan F. (Gast)


Lesenswert?

Beispiele:

Wenn ich auf einem AVR Mikrocontroller per Befehl einen I/O Pin immer 
abwechselnd auf High und Lowe Schalte, dass erhalte ich am Ausgang genau 
die halbe Frequenz des Systemtaktes (also 16Mhz bei einem Xmega, der mit 
32Mhz getaktet ist).

Bei einem 8051 brauchen die meisten Befehle 6 Takte, soweit ich mich 
erinnere (bitte nagelt mich nicht fest, fall ich mich irre). Also 
toggelt dort der Ausgang mit 1Mhz, wenn die CPU mit 12Mhz getaktet wird.

Bei meinem alten 486er PC war die CPU intern mit 100Mhz getaktet. Extern 
jedoch nur mit 25Mhz. Und der ISA-Bus war mit 8Mhz getaktet. Somit 
konnte ich am Parallel-Port theoretisch maximal 4Mhz ausgeben. Praktisch 
war es weniger als 1Mhz, da dessen I/O Pins mit Tiefpass-Filtern 
beschaltet waren.

Bei PC's mit Windows, Linux, Mac OS (usw.) ist es ganz schwierig, per 
Software präzise Timings einzuhalten. Es treten hunderte Ereignisse pro 
Sekunde auf, die das Programm unregelmäßig ausbremsen. Deswegen 
kombiniert man häufig PC's mit Mikrocontrollern. Der PC steuert die 
Abläufe, der Mikrocontroller steuert das Timing und puffert.

Als Beispiel möchte ich Maus und Tastatur nennen. Wenn die Maus keinen 
Mikrocontroller enthalten würde, der die Messwerte des Sensors puffert, 
würde der Cursor ruckeln. Die Maus wäre beinahe unbrauchbar. Gleiches 
gilt für die Tastatur. Du kannst ja mal zum Spass eine passive 
Matrix-Tastatur an den parallel-Port anschließen und per Software 
abfragen. Du wirst sehen, dass der PC manche Tastendrücke einfach 
verpasst, weil das Programm gerade im entscheidenden Moment manchmal 
pausiert.

von (prx) A. K. (prx)


Lesenswert?

Stefan Us schrieb:
> Deswegen
> kombiniert man häufig PC's mit Mikrocontrollern. Der PC steuert die
> Abläufe, der Mikrocontroller steuert das Timing und puffert.

So geschieht es seit dem PC/AT und seinem Mikrocontroller 8042, der das 
Interface zur Tastatur mit deren Mikrocontroller übernahm. Mit den PS/2 
dann auch das Interface zur Maus.

: Bearbeitet durch User
von Maxx (Gast)


Lesenswert?

Fred schrieb:
> Folgendes Problem beschäfftigt mich: Kann ein STM32 mit 400 MHz+
> überhaupt noch mit einem 74 HC/HCT arbeiten (bei 3,3V kann es glaub auch
> nur noch 30-40 Mhz)? Ist das nicht zu langsam? Also wie viele Takte hat
> ein Zyklus so eines CPUs?

Mein Ferrari macht 210 **sing**
Und dennoch kann ich ihn ganz ausgezeichnet auch in der Stadt benutzen, 
wo nur 50 erlaubt sind. Oder gar vor der roten Ampel stehen bleiben.

Der maximale Kern-Takt hängt nicht direkt mit dem Takt der Ansteuerung 
von externer Hardware auf GPIO oder sonstigen IOs zu tun. Noch nicht mal 
als obere Grenze dient er (vgl. Fast PWM, IO-PLLs etc) und Bremsen lässt 
sich die IO immer bis runter auf exakt 0Hz (Im Ferrari Vergleich: 
Auskuppeln und auf der Bremse stehen).


Wo du aufpassen musst sind dann die elektrical Spec.: Flankensteilheit, 
Signallevel, max. Draining und Sourcing Ströme. Das sind aber alles 
Dinge, die man mit der Beschaltung zwischen den uC/uP und der Peripherie 
beeinflussen kann.

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.