Salida de video a través de USB (u otros medios)

Para un convertidor ADC de velocidad media-alta, mi FPGA actualmente recibe muestras de 16 bits a 54 MHz a través de una interfaz LVDS (4 líneas de señal diferencial más 1 señal de reloj diferencial). Estas son señales de video/cámara.

Ahora, necesito considerar cómo puedo obtener la imagen del FPGA a la PC. Tengo un microcontrolador y una interfaz USB-OTG. Pero el USB es de 480 Mbit/s, y probablemente hasta 35 MB/s efectivamente (o menos), lo que no es lo suficientemente alto para 16 bits 1.5 MPixels @ 54 cuadros/seg. Eso sería 162 MB/seg, demasiado alto para USB 2.0. ¿Estoy obligado a usar USB 3.0? Tenía muchas ganas de sacar las imágenes en bruto a la PC. También podría realizar una compresión sin pérdidas en el FPGA.

La segunda pregunta es cómo transmitir estos datos fuera de la FPGA. Podría almacenar los datos del ADC en la memoria RAM externa, o podría configurar una interfaz para el microcontrolador, o incluso controlar directamente las señales de salida en un puerto. De cualquier manera, ¿qué opciones tengo para grandes flujos de datos?

¡Cualquier ayuda sería apreciada!

Quieres usar un microcontrolador para 162MB/s... ¿En serio? ¿Qué microcontrolador exactamente planeabas usar?
No, no directamente, por supuesto. Sin embargo, el uController debe tener una función de supervisión.
¿Puedes agregar alguna otra interfaz específicamente para video? HDMI o algo?
Hay tarjetas de captura de video HD, Black Magic, creo que fabrica algunas de 1080p60 / HDMI / HD-SDI, pero es una gran demanda de video sin comprimir / sin pérdidas, ya que el ancho de banda está en el límite de lo que está diseñado para mucho hardware en cualquier manera sostenida.
...por otro lado, los datos comprimidos se pueden hacer increíblemente pequeños, las imágenes de 1080p30 se pueden descargar a través de ethernet a 1 Mbit/s con un códec H.264 decente en una calidad sorprendentemente buena.
Un proyecto en el que estoy trabajando usa un procesador TI DaVinci que es un núcleo DSP para manejar la codificación de video (LVDS -> H.264 / MPEG4 / MJPEG) y un núcleo ARM que supervisa la ejecución de Linux.
Puede olvidar el USB2, no hay forma de que funcione sin una compresión muy fuerte, pero puede usar fácilmente una placa USB3 como esta arrow.com/en/products/beusb3.0/arrow-development- tools/#page-1 que se puede 'hackear' para conectarse a cualquier placa FPGA, o comprar una de las otras disponibles en el mercado. Con eso puedes conseguir hasta 100MB/s no más (militación de la CPU Cypress)
Para ser honesto con usted, elegiría PCIE en lugar de USB para asegurarme de que no tendrá sorpresas más adelante. Las placas PCIe son bastante comunes y puede obtener una a un precio decente y con un conector estándar (FMC) para conectarse a su ADC, e incluso con un PCIe gen1 de 4 canales, obtiene un rendimiento mucho mejor que el USB2/3 puede ofrecer .

Respuestas (1)

Su requisito de ancho de banda es mucho más allá de USB2 (por un factor de 4-5x). A menos que sus imágenes tengan algunas características especiales que pueda aprovechar, la compresión sin pérdida solo le brindará una mejora del 50% (más o menos), por lo que no funcionará.

Debe aumentar su ancho de banda disponible (USB3) o reducir el requisito de ancho de banda (es decir, resolución, velocidad de fotogramas, profundidad de bits o alguna combinación).

Con respecto a la interfaz FPGA->USB, si desea algo fácil de usar, pruebe las placas de Opal Kelly : han hecho la interfaz USB3/FPGA para usted y puede concentrarse en la parte que le interese. (No tengo conexión con OK más que como un usuario feliz de sus cosas).

De lo contrario, necesita un micro con la interfaz USB y algún hardware tipo FIFO + motor DMA para que el micro (como usted dice) solo supervise las transferencias de datos. Ciprés hacer algunos. FTDI también (aunque son micros, no tienes que tocar las entrañas, puedes fingir que son FIFO y los datos aparecen 'mágicamente' en la PC).