AM335x FPGA Memory Integration

3

Actualmente estoy diseñando una mesa de mezclas digital. Tenemos una gran cantidad de ADC y DAC (más de lo que puede manejar el puerto serie de audio multicanal en el procesador). Decidimos que la solución para esto era utilizar un FPGA para interactuar con los convertidores de datos y permitir que el procesador acceda 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 RAM FPGA como un dispositivo NOR no multiplexado de 16 bits a través de la GPMC. ¿Es esto correcto? Y mi otra pregunta es que probablemente sería demasiado lento para mantener los datos en la memoria RAM del FPGA, por lo que sería posible configurar una transferencia DMA desde la memoria RAM FPGA a otra memoria en el procesador que sea más fácil y más rápido de acceder. ¿O deberíamos usar una PRU para copiar los datos?

    
pregunta Caleb Merchant

1 respuesta

2

Haré algunas suposiciones: como se trata de una mezcla de audio, querrá leer secuencialmente todos los ADC a una velocidad sincrónica fija (como 96 kHz) y escribir todos los DAC de manera secuencial. Creo que la PRU será la forma más fácil de implementar un canal de datos rápido a / desde un FPGA.

Hay dos procesadores PRU en un procesador Sitara AM335x, y cada uno tiene 32 pines de entrada y 32 pines de salida. Como probablemente necesitaría algunas señales de control y es probable que 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 el estricto código C, 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 varias interfaces de audio I2S en un FPGA, y no es tan difícil. Como usted dijo, los códecs podrían mover datos desde / hacia FPGA sram, y después de cada ciclo de códec (cada 10.417 microsegundos a 96kHz) las PRU podrían leer / escribir los datos como un bloque contiguo. Un simple secuenciador en el FPGA podría responder a las luces estroboscópicas de la PRU para recorrer el bloque de datos. En el Sitara, un proceso de Linux puede asignar un bloque de memoria para compartir con la PRU. He puesto las estructuras y matrices de C en la memoria compartida ARM / PRU para permitir que el proceso de Linux y la PRU compartan datos como variables C.

Espero que ayude.

    
respondido por el Mark

Lea otras preguntas en las etiquetas