Greifen Sie über die programmierbare Logik in Zynq auf den NEON-Coprozessor zu

In den letzten Tagen habe ich über den Neon-Coprozessor im Zynq-SoC nachgedacht und ich habe eine Frage, ist es möglich, Anweisungen von der PL-Seite des SoC an das Neon zu senden?

Stellen Sie sich vor, ich habe eine Anwendung mit vielen mathematischen Operationen und ich habe alle DSP-Slices in der programmierbaren Logik aufgebraucht. Ich denke, ich könnte einige Operationen auf das PS auslagern oder einen Weg finden, DSP-Slices zwischen Operationen zu teilen (jeweils ein paar Zyklen). Ich fing an zu denken, dass ich es vielleicht auf das PS auslagern könnte und das PS es an den Neon-Coprozessor senden würde, der weiter tun würde, was es tun muss, und wenn die Daten fertig sind, würde es sie an den PL zurücksenden (wahrscheinlich nicht wie der Neon-Coprozessor funktioniert, aber es ist nur ein Beispiel).

Wie man sehen kann, war mein nächster Gedanke, herauszufinden, ob ich vielleicht von der PL-Seite der Dinge Anweisungen an den Neon-Koprozessor senden könnte. Es wäre wirklich hilfreich, wenn es möglich wäre, aber ich habe keine Dokumentation gefunden, die besagt, ob dies möglich ist, und ich konnte auch niemanden finden, der versucht hat, damit zu experimentieren.

Man könnte wahrscheinlich sagen, wenn ich eine Anwendung habe, die mit den verfügbaren 220 DSP-Slices nicht richtig erfüllt werden kann, sollte ich mir eine andere besorgen, die meinen Anforderungen entspricht. Aber dieser Gedanke kam mir unter der Dusche und ist völlig hypothetisch. Es gibt keine solche Anwendung, die so viele Berechnungen erfordert (na ja ... es gibt, aber keine Anwendungen, die ich entwickeln möchte).

Also weiß jemand ob das möglich ist?

Das ist eine sehr gute Frage.
@Stacey Danke. Hoffe, jemand weiß, wie man darauf antwortet
@stacey Ich habe gefunden, wonach ich gesucht habe. Überprüfen Sie die Antwort. Ich habe zwei Antworten bekommen, beide großartig, aber die als richtige Antwort markierte gab eine ziemlich gute Möglichkeit, dies zu tun (Entschuldigung für mein Englisch ... nicht meine Muttersprache).

Antworten (2)

Ich bezweifle, dass dies nur mit programmierbarer Logik möglich ist, da die NEON SIMD-Engine auf interne Register zugreift und die Anweisungen aus dem Hauptbefehlsstrom stammen. Es gibt keine Möglichkeit, von PL aus auf beide zuzugreifen. Was Sie jedoch möglicherweise tun können, ist, die NEON-Lade-/Speicheranweisungen so einzurichten, dass sie aus dem PL-zugeordneten Adressraum lesen und in diesen schreiben, und dann Code schreiben, um den NEON-Coprozessor anzusteuern.

Die Antwort darauf lautet: „Irgendwie, aber es ist eine Menge Arbeit“.

Die PS und PL auf dem zynq sind über eine Reihe von AXI4-Schnittstellen mit unterschiedlichen Geschwindigkeits- und Kohärenzfähigkeiten miteinander verbunden. Diese Schnittstellen können als Mechanismus zum Implementieren einer Registerschnittstelle oder zum Übertragen von Daten zwischen PS und PL verwendet werden. Es gibt keinen inhärent nativen Weg, die Verarbeitung an das PS weiterzugeben, nur wegen der gegensätzlichen Natur von PS und PL, aber es wäre möglich, einen Mechanismus dazwischen zu entwerfen, um die PL-Aufgaben in diejenigen umzuwandeln, zu denen das PS in der Lage wäre ausführen. Hier kommt die „viel Arbeit“ ins Spiel.

Es wäre notwendig, die Arbeit sinnvoll aufzuteilen, so dass die durchgeführten Verarbeitungen größtenteils für die Architektur (PS oder PL) geeignet sind und sie größtenteils voneinander getrennt werden. Beispielsweise kann die PL einige Daten zur Verarbeitung an die PS weitergeben, während sie mit der nächsten Datenrunde fortfährt.

Dies ist eher eine Frage des Designs als alles andere. Es ist notwendig, die bereitgestellten Schnittstellen zwischen PS und PL zu verwenden, um die Verwendung beider Ressourcensätze optimal für Ihre Anwendung zu optimieren.