Me gustaría saber cómo crear perfiles de una tubería de adquisición y almacenamiento de imágenes en un sistema basado en FPGA, capturar imágenes de un sensor de imagen CMOS a través de la interfaz LVDS, realizar un procesamiento básico de imágenes 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 a las que estamos acostumbrados.
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.
Si su canal de procesamiento se puede realizar 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 de FPGA para evitar quedarse sin recursos limitados como multiplicadores.
El uso de recursos en 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 quedó sin algunos bloques "especiales" y la quinta instancia intenta emularlos, o porque una instancia debe envolverse 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 tiene éxito sin mostrar errores de tiempo, entonces 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 lo agregue explícitamente (lo que puede ser necesario, por ejemplo, para compartir unidades multiplicadoras) .
Sin embargo, la interpretación de errores de compilaciones de FPGA y la optimización de diseños son temas bastante complejos sobre los que se han escrito libros completos. El compilador que informa sobre la falta de recursos podría significar que necesita un FPGA más grande con más tablas, o que necesita reescribir el algoritmo, o ambos.
Veo de dónde viene, aunque la elaboración de perfiles no es realmente el término correcto aquí. Los FPGA no están programados en el mismo sentido que una computadora. Usted describe qué hardware se requiere usando el código, luego lo sintetiza usando la cadena de herramientas del proveedor específico cuyo FPGA está apuntando. Luego obtiene un informe de síntesis que le indicará la utilización de recursos del diseño. El hardware de FPGA no cambia dinámicamente, es decir, 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 FPGA SoC? Los dos son diferentes. Algunos FPGA tienen un procesador duro integrado (SoC). Otros no. Si planea intentar hacer esto en software en un procesador integrado (soft o hard) en el FPGA frente a la lógica dedicada, la respuesta es muy diferente.
Para agregar a la respuesta de Simons, es virtualmente imposible decir qué recursos usará cualquier 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á usando, qué parte del FPGA está utilizando y las velocidades de reloj a las que se está ejecutando. De hecho, puede cambiar una línea de código que parece intrascendente y, cuando vuelve a compilar, la disposición completa del diseño y la utilización de recursos pueden 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 (p. ej., Altera, Xilinx, etc.) y comience a realizar compilaciones de prueba de partes de su diseño. Para empezar, puede elegir cualquier familia de FPGA, es solo para tener una idea de cuántos recursos se requieren en varias familias de FPGA diferentes (puede probar más de una).
Una vez que tenga una idea de lo que se requiere, puede ver los requisitos de funciones especiales. Necesitará bloques LVDS SERDES y PLL para la interfaz de su cámara, así que observe qué velocidades admite cada familia. Además, si está haciendo muchas cosas de multiplicación y DSP que parece que está haciendo, querrá ver familias que tienen una gran cantidad de recursos DSP (multiplicadores de hardware, etc.).
Una vez que tenga una idea de qué familia va a elegir, comience a diseñar su código en torno a esa familia. Realice más compilaciones de prueba con fragmentos 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á decidirse por un FPGA específico: cuanto más grandes sean, más caros serán, por lo que realmente no querrá ir con uno que tiene cientos de veces más recursos de los que necesita, pero igualmente no desea optar por uno demasiado pequeño para que el diseño encaje.
Idealmente, desea apuntar a un FPGA que su diseño utilizará alrededor del 70% o menos. El uso de recursos aumenta a medida que usa más y más del diseño debido a la duplicación lógica para cumplir con el tiempo y también con la congestión de enrutamiento (demasiadas cosas que intentan caber en un espacio demasiado pequeño). ¿Por qué el 70%? bueno, eso es solo una suposició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 requisitos de tiempo, etc.). ) lo que da como resultado una utilización máxima mucho mayor.
¡Trabajé en una empresa que quería diseñar una cámara 4K a 300 fps usando un FPGA de bajo costo!
El proyecto no era realista debido a muchos problemas que no tuvieron en cuenta en la planificación de su producto.
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 tienes acceso.
Si desea capturar un sensor de imagen de 12 MP 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, debe elegir capturar los datos y procesarlos tal como están, o convertirlos a RGB, lo que triplicará la cantidad de datos que tiene, además necesita una gran cantidad de operaciones matemáticas y debe mantener en menos 3 líneas de datos en una memoria para poder manejarla.
El siguiente paso depende de lo que desee hacer con los datos, si desea realizar un filtro de corriente oscura o cualquier otro filtrado que requiera una cantidad significativa de operaciones matemáticas y de memoria.
El GRAN problema es cuando quieres almacenar los datos. Puede elegir comprimir la imagen o guardarla en formato RAW. Ambos tienen ventajas y desventajas, el ancho de banda de recursos siempre es una elección difícil que se debe hacer al diseñar un producto de tan alto rendimiento.
No creo que sea fácil responder a su pregunta, pero es posible diseñar un producto de este tipo utilizando un FPGA de alta gama, pero el precio será bastante alto (en mi opinión)
tom carpintero
usuario6401990
usuario6401990
tom carpintero
QueRosaBestia
usuario6401990
FarhadA