Creación de perfiles para los requisitos de FPGA para una cámara de alto rendimiento

1

Me gustaría saber cómo hacer un perfil de una adquisición de imagen y almacenamiento en un sistema basado en FPGA, capturar imágenes desde un sensor de imagen CMOS a través de la interfaz LVDS, hacer un procesamiento de imagen básico y luego almacenar los datos en dos SSD .

Estoy hablando de 100 fps, 11,94 megapíxeles, 16 bits por píxel, por lo que el ancho de banda es bastante grande: no se trata de las cámaras clásicas que hemos usado.

    
pregunta user6401990

3 respuestas

3

El ancho de banda de datos que mencionó es ciertamente parte del cálculo, pero solo el comienzo: el FPGA y el módulo de la cámara necesitan una interfaz compatible que pueda alcanzar la velocidad requerida.

La realización de su proceso de procesamiento depende en gran medida de su definición de "procesamiento básico de imágenes". Idealmente, su algoritmo es paralelizable para que pueda crear múltiples instancias, y optimizado para el uso de recursos FPGA para evitar quedarse sin recursos limitados como multiplicadores.

El uso de recursos en los FPGA no siempre es lineal, por lo que cinco copias de la misma lógica pueden usar diez veces más LUT que cuatro copias, simplemente porque se ha quedado sin bloques "especiales" y la quinta instancia intenta emular o porque una instancia debe estar envuelta alrededor de un bloque especial.

Hablando en abstracto: siempre puede compilar y simular su diseño con la cadena de herramientas del proveedor de FPGA, incluso sin el hardware real. Si las restricciones se especifican correctamente y la síntesis se realiza correctamente sin mostrar errores de tiempo, también debería ejecutarse: no hay una reasignación dinámica de recursos que haría que el comportamiento fuera impredecible a menos que agregue eso explícitamente (lo cual puede ser necesario, por ejemplo, para compartir unidades multiplicadoras) .

La interpretación de los errores de las compilaciones de FPGA y la optimización de los diseños son temas bastante complejos, sobre los cuales se han escrito libros completos. El compilador que informa de una falta de recursos podría significar que necesita un FPGA más grande con más tablas, o que debe volver a escribir el algoritmo, o ambos.

    
respondido por el Simon Richter
0

Veo de dónde viene, aunque perfilar no es realmente el término correcto aquí. Los FPGA no están programados en el mismo sentido que una computadora. Describe qué hardware se requiere con el código, luego lo sintetiza con la cadena de herramientas del proveedor específico cuyo FPGA está apuntando. A continuación, recibirá un informe de síntesis que le indicará la utilización de recursos del diseño. El hardware FPGA no cambia dinámicamente, es decir, usted conoce el uso exacto de los recursos en el momento de la compilación y, por lo tanto, no lo "perfila".

Además, ¿te refieres a FPGA o SoC de FPGA? Los dos son diferentes. Algunos FPGA tienen un procesador duro incorporado (SoC). Otros no lo hacen. Si planea intentar hacer esto en software en un procesador integrado (suave o duro) en la lógica FPGA vs. dedicada, la respuesta es muy diferente.

Para agregar a la respuesta de Simons, es prácticamente imposible decir qué recursos utilizará un diseño dado simplemente porque depende no solo del diseño, sino también de muchos otros factores, como la familia específica, si FPGA está utilizando, qué parte del FPGA que está utilizando y las velocidades de reloj que está ejecutando. De hecho, puede cambiar una línea de código que parece ser intrascendente, y cuando vuelva a compilar la disposición completa del diseño y la utilización de los recursos puede cambiar drásticamente debido en parte a las optimizaciones de síntesis.

Para los diseños de FPGA, generalmente lo que hace es comenzar a diseñar la lógica y los algoritmos que planea usar primero. Elija un proveedor (por ejemplo, Altera, Xilinx, etc.) y comience a hacer compilaciones de prueba de partes de su diseño. Para empezar, puede elegir cualquier familia de FPGA, solo para tener una idea de la cantidad de recursos necesarios para cada una de las diferentes familias de FPGA (puede probar más de una).

Una vez que tenga alguna idea de lo que se requiere, puede consultar los requisitos de funciones especiales. Necesitará bloques y PLLs de LVDS SERDES para la interfaz de su cámara, así que mire qué velocidades admite cada familia. Además, si está haciendo un montón de cosas de multiplicación y DSP que parece que es, desea ver las familias que tienen una gran cantidad de recursos DSP (multiplicadores de hardware, etc.).

Una vez que tenga una idea de a qué familia irá a buscar, comience a diseñar su código alrededor de esa familia. Haga más pruebas de compilación con trozos cada vez más grandes de su diseño. Esto le dará una estimación aproximada de los requisitos de recursos que necesitará en su diseño final, y luego podrá conformarse con un FPGA específico: cuanto más grandes son, más caros son, por lo que realmente no quiere ir. con uno que tiene cientos de veces más recursos de los que necesita, pero igualmente no desea ir por uno demasiado pequeño para que el diseño se ajuste.

Lo ideal es que desee apuntar a un FPGA que su diseño utilizará aproximadamente el 70% o menos. El uso de recursos aumenta a medida que se usa cada vez más el diseño debido a la duplicación lógica para cumplir con el tiempo y también la congestión de enrutamiento (demasiadas cosas que intentan encajar en un espacio demasiado pequeño). ¿Por qué el 70%? Bueno, eso es solo una estimación aproximada: a veces, incluso si solo está utilizando una pequeña fracción de los recursos, puede tener problemas si todos esos recursos intentan estar en el mismo lugar en el diseño (debido a los requisitos de tiempo, etc.) ) resultando en una utilización pico mucho más alta.

    
respondido por el Tom Carpenter
0

Trabajé en una compañía que quería diseñar una cámara 4K a 300 fps usando un FPGA de bajo costo.

El proyecto no fue realista debido a muchos problemas que no contaron en la planificación de sus productos.

La dificultad de diseñar una cámara, especialmente una 'gama alta' es principalmente el ancho de banda de la memoria y la cantidad de memoria a la que tiene acceso.

Si desea capturar un sensor de imagen de 12MP a 100 fps y 16 bits, necesitará 12e6x100x16 = 1.92e10 bits / seg para la interfaz hacia la cámara.

El problema comienza después de eso, tienes que elegir capturar los datos y procesarlos como están, o convertirlos a RGB, lo que triplicará la cantidad de datos que tienes, además de que requiere una gran cantidad de operaciones matemáticas, más tú debe mantener al menos 3 líneas de datos en una memoria para poder manejarlo.

El siguiente paso depende de lo que desee hacer con los datos, si desea realizar un filtro de corriente oscura o cualquier otro filtro, que necesita una cantidad significativa de operaciones de memoria y matemáticas.

El problema GRANDE es cuando desea almacenar los datos. Puede elegir comprimir la imagen o guardarla en formato RAW. Ambos tienen ventajas e inconvenientes, el ancho de banda de recursos es siempre una elección difícil que se debe hacer al diseñar un producto de alto rendimiento.

No, esto es fácil de responder a su pregunta, pero es posible diseñar un producto de este tipo utilizando un FPGA de gama alta, pero el precio será bastante alto (IMO)

    
respondido por el FarhadA

Lea otras preguntas en las etiquetas