Natürlich weiß ich, dass es nützlich ist, die Zeit einer Verzögerung zu kontrollieren, aber eine andere Verwendung?
Mit einer 16-MHz-Uhr dauert jede Zeile meines Programms 1/16000000 Sekunden, oder?
Selbst eine sehr sehr große Linie wird nur 1/16000000 Sekunden dauern?
Mit einem 8-MHz-Takt benötigt jede Leitung das Doppelte der Zeit, oder? Also wird die ganze "Hauptschleife" auch die doppelte Zeit brauchen, oder?
oscillator-clock
n0tis
quelle
quelle
Antworten:
Denn so funktionieren Computer, Mikrocontroller usw.
Nein.
Nein.
Die Uhr definiert, mit welcher Geschwindigkeit die Maschinencode-Anweisungen aus dem Speicher abgerufen und ausgeführt werden. Die meisten Anweisungen benötigen einen Taktzyklus, einige jedoch mehr.
Eine Zeile C-Code kann in eine beliebige Anzahl von Montageanweisungen kompiliert werden, die dann in Maschinencode (Rohzahlen) umgewandelt werden. Das kann von 1 Montageanleitung bis zu Tausenden von Montageanweisungen reichen, je nachdem, was die Linie tut.
Jede Operation im Chip wird von der Uhr gesteuert. Wenn der Takt halb so schnell ist wie der Chip, läuft jeder Vorgang doppelt so lange, ja.
quelle
Nicht beantwortet in @ Majenkos Beitrag: Ja, mit einem 8-MHz-Takt benötigt jede Leitung das Doppelte der Zeit. Es sei denn, die Leitung wartet auf etwas, das nicht taktgesteuert ist - z. B. einen externen Eingang.
Zusätzlich zur Antwort von @ Majenko verfügt eine CPU über eine Uhr, um sicherzustellen, dass die Anweisungen vollständig sind, bevor der nächste Schritt beginnt. Eine CPU besteht aus vielen Transistoren (ich habe eine Referenz gefunden, die angibt, dass der AtMega im Bereich von niedrigen Millionen liegt und eine Größenordnung gibt oder nimmt).
Während eines Zyklus fließt der Strom durch den Chip und schaltet die Transistoren ein / aus, wodurch mehr Transistoren auf der ganzen Linie ein- und ausgeschaltet werden. Währenddessen haben einige Teile des Chips einen "falschen" Wert - Sie können sich dies als die Hälfte der Berechnung vorstellen (Sie haben die Spalte "one" und die Spalte "10s" hinzugefügt und beginnen gleich mit der 100s Spalte). Sie möchten nicht, dass dies die Außenwelt beeinflusst, also werden (zum Beispiel) Ihre Ausgangspins verriegelt - auf dem Wert gehalten, den sie haben - bis der Befehl abgeschlossen ist. Wie lange es dauert, eine Anweisung auszuführen, ist unterschiedlich, aber der Hersteller erarbeitet unter den schlimmsten Umständen die langsamste Anweisung.
Für den AtMega (der Chip auf dem Arduino) hat Atmel (der den Chip entworfen hat) angegeben, dass dies 1 / 20.000.000 Sekunden sind - das sind 20 MHz.
Beachten Sie, dass nicht alle Mikroprozessoren alle ihre Befehle mit 1 Befehl pro Zyklus ausführen - einige Befehle können 1, 2 oder 10 Zyklen dauern. Pipelining macht die Sache noch komplizierter - ein Prozessor erledigt möglicherweise einen Teil der Arbeit (z. B. den nächsten Befehl abrufen) in einem Zyklus, führt ihn im nächsten aus - aber während er Befehl 1 ausführt, kann er auch den nächsten Befehl abrufen. Um dies zu tun, muss möglicherweise erraten werden, welche Anweisung als nächstes kommt (im Fall des Maschinencode-Äquivalents eines "goto" - dies wird für Schleifen verwendet), und wenn es falsch errät, muss es damit umgehen Das; Werfen Sie die abgerufene Anweisung weg und rufen Sie die nächste ab, wobei Sie einen Zyklus verlieren.
Die Wikipedia-Seite zum Anweisungs-Pipelining zeigt ein Beispiel für ein RISC-Chip-Pipelining in 5 Stufen - Befehlsabruf, Befehlsdecodierung, Ausführung, Speicherzugriff und Rückschreiben. Sie können also zu einem bestimmten Zeitpunkt der Ausführung 5 Anweisungen haben, die sich überlappen. Bis zur "Rückschreib" -Phase haben die Anweisungen keine wirkliche Wirkung. Sie können sich dies als Fließband vorstellen - das Zusammenstellen eines Widgets dauert 7 Minuten, kann jedoch in 5 Phasen unterteilt werden, wobei die längste Phase 2 Minuten dauert. Alle zwei Minuten wird jedes teilweise fertiggestellte Widget vom Fließband zur nächsten Station verschoben. Sie erhalten alle zwei Minuten ein Widget - Die "Uhr" kann nur so schnell ticken wie der langsamste Schritt. Wenn Sie das Widget schneller herausschieben, werden durch den "Engpass" immer mehr Widgets in die Warteschlange gestellt.
quelle