Ich entwerfe gerade ein digitales Mischpult. Wir haben eine ziemlich große Anzahl von ADCs und DACs (mehr als der serielle Mehrkanal-Audioanschluss am Prozessor verarbeiten kann). Wir haben entschieden, dass die Lösung hierfür darin besteht, ein FPGA als Schnittstelle zu den Datenkonvertern zu verwenden und den Prozessor über das RAM im FPGA auf die Daten zugreifen zu lassen. Wir haben uns noch nicht für ein FPGA entschieden.
Nach dem, was ich gelesen habe, können wir den FPGA-RAM als NOR-nicht gemultiplextes 16-Bit-Gerät über die GPMC konfigurieren. Ist das richtig? Und meine andere Frage ist, dass es wahrscheinlich zu langsam wäre, die Daten im RAM des FPGA zu halten. Wäre es also möglich, eine DMA-Übertragung vom FPGA-RAM zu einem anderen Speicher im Prozessor einzurichten, auf den einfacher und schneller zugegriffen werden kann? Oder müssten wir eine PRU verwenden, um die Daten zu kopieren?
Ich werde einige Annahmen treffen: Da es sich um das Mischen von Audio handelt, möchten Sie alle ADCs nacheinander mit einer festen Synchronrate (z. B. 96 kHz) lesen und alle DACs nacheinander mit derselben Rate schreiben. Ich denke, die PRU wird der einfachste Weg sein, eine schnelle Datenleitung zu/von einem FPGA zu implementieren.
Es gibt zwei PRU-Prozessoren in einem AM335x Sitara-Prozessor, und jeder hat 32 Eingangspins und 32 Ausgangspins. Da Sie wahrscheinlich einige Steuersignale benötigen und wahrscheinlich 24-Bit-Codecs verwenden, sollte das gut funktionieren. Sie könnten eine PRU dem Empfang von Daten und die andere dem Senden von Daten zuweisen. Ich schätze, dass Sie mit straffem C-Code mindestens 10 Samples pro Mikrosekunde in jede Richtung (30 Megabyte/Sekunde) und mehr mit Assemblersprache erhalten könnten.
Ich habe mehrere I2S-Audioschnittstellen in ein FPGA gesteckt, und es ist nicht so schwer. Wie Sie sagten, könnten die Codecs Daten zum/vom FPGA-SRAM verschieben, und nach jedem Codec-Zyklus (alle 10,417 Mikrosekunden bei 96 kHz) könnten die PRUs die Daten als zusammenhängenden Block lesen/schreiben. Ein einfacher Sequenzer im FPGA könnte auf Strobes von der PRU reagieren, um den Datenblock zu durchlaufen. In der Sitara kann ein Linux-Prozess einen Speicherblock zur gemeinsamen Nutzung mit der PRU zuweisen. Ich habe C-Strukturen und -Arrays in den gemeinsam genutzten ARM/PRU-Speicher eingefügt, damit der Linux-Prozess und die PRU Daten als C-Variablen gemeinsam nutzen können.
Hoffentlich hilft das.
Paebbels
Kaleb Kaufmann
Paebbels
Kaleb Kaufmann
Laszlo Valko
Kaleb Kaufmann