Ich habe einen Dual-Core-ARM A9-basierten Prozessor, den ich brauche, um einige ziemlich bestimmte Nanosekunden-Timing mit. Ich plane, die NOP-Assembleranweisung zu verwenden, um dies zu erreichen, indem ich die Anzahl der Nanosekunden pro Zyklus des Systemtakts festlege.NOPs auf Multicore ARM A9
Ich frage mich, ob es irgendwelche besonderen Überlegungen geben sollte, wenn ich die NOPs anrufe, wenn es um einen Dual-Core-ARM-Prozessor geht, da ich mich immer nur mit Single-Core-ATMEL- und ARM-Prozessoren beschäftigen musste. Wird der Prozessor versuchen, die NOPs automatisch über die beiden Kerne zu verteilen? Sollte ich meine Timing-Berechnung für die doppelte Systemtaktfrequenz (667 MHz) durchführen, um die beiden Kerne zu berücksichtigen? Gibt es noch andere spezielle Überlegungen, die mir nicht im Weg stehen?
Nein, jeder Kern hat seinen eigenen Befehlsstrom. Sie müssen auch nicht verdoppeln. Sie haben nicht gesagt, ob Sie ein Betriebssystem oder Interrupts aktiviert haben. Diese Dinge könnten dein Timing durcheinander bringen;) Auch keine Ahnung, ob ARM-CPUs Taktfrequenz-Skalierung (Power Saving) machen. – Jester
Was Sie versuchen zu tun, ist wahrscheinlich nicht haltbar. Der ARM Cortex-A9 verwendet superskalare Out-of-Order-Kerne mit einer Pipeline mit 8 bis 11 Stufen. Selbst ohne externe Ereignisse zu berücksichtigen, müsste man die genauen Instruktionszeiten berechnen, wenn ARM alles vollständig dokumentiert. Stattdessen heißt es in der Dokumentation: "Die Komplexität des Cortex-A9-Prozessors macht es unmöglich, präzise Timing-Informationen manuell zu berechnen. Das Timing einer Anweisung wird oft durch andere gleichzeitige Anweisungen, Speichersystemaktivität und zusätzliche Ereignisse außerhalb des Anweisungsflusses beeinflusst." –
Aus Interesse, was ist die tatsächliche Art der Verzögerung? Es könnte kreativere Wege geben, es anzugehen - eines der coolsten Dinge, die ich gesehen habe, war ein Peripheriegerät, das eine genaue Verzögerung in der Größenordnung von ein paar hundert Buszyklen zwischen Operationen benötigte; es hatte ein zusätzliches Register in seiner Programmierschnittstelle, das absolut nichts tat, aber die erforderlichen paar hundert Zyklen benötigte, um 0 zurückzugeben, wenn es gelesen wurde: D – Notlikethat