Verwenden mehrerer Kerne auf Zynq

9

Bis heute habe ich auf einem einzelnen Kern programmiert, jetzt muss ich meine Codes auf mehreren Kernen ausführen. Ich recherchiere seit ungefähr 1 Woche und habe einige Fragen dazu.

Ich benutze übrigens Zynq 702, Arm DS-5 und Dstream. Und ich versuche, dies zu erreichen, während ich meine bereits vorhandenen Codes verwende, die auf Core0 laufen.

Ich habe wirklich nichts auf core1 getan, nur damit verbunden und möchte nur beobachten, dass es auf 0xFFFFFFF0 und auf den Wert dieser Adresse springt. Ich habe keinen Interrupt-Handler gesetzt, der auf core1 abzielt. Ist es in Ordnung mit meiner einzigen "Beobachtungs" -Situation? Oder brauche ich wirklich einige Konfigurationen? Wie erreiche ich das am einfachsten?

Ich verbinde mich mit core1 und beobachte seinen Zustand, während mein Programm auf core0 fortfährt. Es gibt übrigens keine Anwendung, die auf core1 läuft. Es geht bis zu Adresse 0x300, an dieser Adresse gibt es einen WFE-Befehl und gleich danach gibt es einen B (ranch) -Befehl, der verzweigt wieder zu 0x300 . Dies ist wie eine Schleife und mein Code bleibt etwa 0,5 Sekunden auf WFE-Befehl, springt zur nächsten Anweisung B und verzweigt erneut zur WFE ......

Ich denke, Core1 sollte genau dort nach dem Ausführen des WFE-Befehls bleiben, es sei denn, ich sende ein EVENT, um den folgenden B (ranch) -Befehl nicht auszuführen, oder? Wenn ja, bedeutet es, dass core1 von irgendwoher periodisch kommt? Stellt das Verbinden der Karte mit Dstream Debugger EVENTs?

Wenn ich den Wert der Adresse 0xFFFFFFF0 setze, was bewirkt, dass der Kern1 zu der Adresse bei 0xFFFFFFF0 springt, Ist ein einfacher SEV-Befehl genug, während sich core1 im WFE / WFI-Zustand befindet? Wenn 0xFFFFFFF0 einen Wert von 0x00000000 hat, was passiert dann? Geht Core1 wieder zum rufenden WFE / WFI zurück? Oder etwas anderes?

    
Yunus Yurtturk 13.11.2014, 09:22
quelle

2 Antworten

6

Wenn core1 in einer WFE-Schleife (state) ist, wacht der SEV cmd auf core0 auf core1 auf. Wenn Sie WFE eingeben, gehen Sie in den Standby-Modus und das SEV ist ein Wakeup, eine Anforderung von der SCU kann auch ein Wakeup ausführen (für eine Cache-Kohärenzoperation in einem MP-System).

Hinweis: Nach dem Zurücksetzen der APU befindet sich core1 in einem WFE-Zustand und führt Code von 0xFFFFFE00 bis 0xFFFFFFF0 aus

Nach dem Start befindet sich core1 in einem WFE-Zustand. Wenn core1 ein SEV erhält, springt es zu der Adresse, die bei 0xFFFFFFF0 gespeichert ist. Wenn Sie die Zieladresse nach dem SEV aktualisieren, kehrt core1 in den WFE-Zustand zurück. Dies liegt daran, dass 0xFFFFFFF0 die Adresse der WFE-Anweisung hat.

Die richtige "Startsequenz" ist:

  1. Schreiben Sie die Adresse der core1-App auf 0xFFFFFFF0
  2. Führe den SEV-Befehl aus

(Schauen Sie auf Seite 158 (6.1.10) im Zynq-7000 All Programmable SoC Technisches Referenzhandbuch)

Wenn 0xFFFFFFF0 den Wert 0x00000000 hat, erhalten Sie unvorhersehbare Ergebnisse. (abhängig von Ihrem CPU-Status).

    
gj13 17.12.2014, 08:47
quelle
0

In meinem Fall (Cyclone V SoC) nach dem Kaltstart hat die CPU1 den Zustand "Reset halten". Zum Starten von CPU1 von CPU0 füge ich Code zu Reset_Handler hinzu:

%Vor%     
user1025874 15.04.2016 08:37
quelle

Tags und Links