Actualmente estoy diseñando una mesa de mezclas digital. Tenemos una cantidad algo grande de ADC y DAC (más de los que puede manejar el puerto serie de audio multicanal del procesador). Decidimos que la solución para esto era usar un FPGA para interactuar con los convertidores de datos y dejar que el procesador accediera a los datos a través de la RAM en el FPGA. Todavía no hemos elegido un FPGA.
Por lo que he leído, podemos configurar la FPGA RAM como un dispositivo NOR de 16 bits no multiplexado a través de la GPMC. ¿Es esto correcto? Y mi otra pregunta es que probablemente sería demasiado lento mantener los datos en la RAM de la FPGA, entonces, ¿sería posible configurar una transferencia DMA desde la RAM de la FPGA a otra memoria en el procesador que sea más fácil y rápida de acceder? ¿O necesitaríamos usar una PRU para copiar los datos?
Haré algunas suposiciones: dado que se trata de una mezcla de audio, querrá leer secuencialmente todos los ADC a una velocidad sincrónica fija (como 96 kHz) y escribir secuencialmente todos los DAC a la misma velocidad. Creo que la PRU será la forma más fácil de implementar un canal de datos rápido hacia/desde una FPGA.
Hay dos procesadores PRU en un procesador AM335x Sitara, y cada uno tiene 32 pines de entrada y 32 pines de salida. Dado que probablemente necesite algunas señales de control y probablemente esté usando códecs de 24 bits, eso debería funcionar bien. Podría dedicar una PRU para recibir datos y la otra para enviar datos. Con un código C estricto, estimo que podría obtener al menos 10 muestras por microsegundo en cada dirección (30 megabytes/segundo) y más con lenguaje ensamblador.
He puesto múltiples interfaces de audio I2S en un FPGA y no es tan difícil. Como dijiste, los códecs podrían mover datos hacia/desde FPGA sram, y después de cada ciclo de códec (cada 10.417 microsegundos a 96 kHz), las PRU podrían leer/escribir los datos como un bloque contiguo. Un secuenciador simple en la FPGA podría responder a las luces estroboscópicas de la PRU para recorrer el bloque de datos. En Sitara, un proceso de Linux puede asignar un bloque de memoria para compartir con la PRU. He puesto matrices y estructuras de C en la memoria ARM/PRU compartida para permitir que el proceso de Linux y la PRU compartan datos como variables de C.
Espero que ayude.
Paebbels
caleb comerciante
Paebbels
caleb comerciante
Laszlo Valko
caleb comerciante