Uso de FPGA para interactuar con una cámara a través de 1394 / firewire

5

Hola chicos, fui referido aquí desde otro sitio y esperaba que alguien pudiera ayudarme.

Información de fondo:

Soy estudiante de cuarto año de EE en Georgia Tech. Un equipo de investigación con el departamento de AE se acercó a algunas de nuestras clases y pidió ayuda con su proyecto para algunas de sus cosas más electrónicas. Me inscribí y terminé en el equipo de FPGA que se ha deteriorado para mí y para otro tipo, por lo que estamos muy ocupados. Mi tarea actual es configurar una cámara para tomar y almacenar fotos usando el FPGA & DSP en esta placa .

Estoy atascado usando Firewire debido a las limitaciones de la cámara y las restricciones en el número de pines que me han sido asignados, así que en el último mes he estado tratando de construir una capa de enlace + host para una interfaz Firewire con esta cosa que está arbitrando para mí. También tengo que usar el sistema verilog. De todos modos, nunca he usado el lenguaje y me cuesta mucho crear uno desde cero. La interfaz de FireWire parece muy compleja y, básicamente, me han dicho "apurados" por los responsables del proyecto.

Originalmente, había planeado usar a> de opencores.com pero faltan archivos y renuncié a intentar repararlo ya que no conozco bien el idioma, pero parece que probablemente voy a necesitar averiguar cómo solucionarlo o encuentre otra cosa que funcione o de lo contrario no terminaré a tiempo.

En el archivo de nivel superior incluye un archivo llamado fw_link_defines.vh, que no tengo y no parece estar en ningún otro lugar en Internet. Parece que define (?) Tres cosas, si eso es lo que 'está haciendo en realidad en declaraciones como "pkt_type =' SELF_ID_PKT;", lo cual no sería demasiado difícil de arreglar, pero también hay algo extraño llamado phy_ctrl que el pensamiento era una estructura o algo así, pero después de buscar en Internet parece ser una "instanciación". No puedo averiguar qué diablos hace eso. He visto algunos tutoriales pero parece que no puedo encontrar ninguno bueno, todo lo que he encontrado son grandes tutoriales con un párrafo que dice "esto es una creación de instancias, son un verdadero dolor trabajar con ellos" y Realmente no explica mucho.

(Comienza aquí para TL; DR)

Básicamente, lo que pregunto es que si alguien conoce algún otro proyecto FPGA abierto que use FireWire para hablar con un dispositivo, o si alguien sabe una buena fuente para aprender a usar las instancias. Lo he estado pasando muy mal con esto y estaría muy agradecido por cualquier ayuda que pudieras dar. Gracias chicos.

    
pregunta

2 respuestas

1

Ouch, bueno, nunca he trabajado con FireWire a este nivel antes, pero aquí hay algunos pensamientos que pueden ser útiles:

Leí la hoja de datos de TI PHY que vinculaste, parece que está diseñada para funcionar con la TI Controladores de capa de enlace . ¿Ha considerado usar una parte así en lugar de intentar implementar su funcionalidad desde cero?

También el PHY < - > El enlace LLC se ejecuta a la velocidad total del firewire, que para 400 Mbps y un enlace de 8 bits es de ~ 50 MHz, la cámara puede permitirle ejecutar el enlace mucho más lento, tal vez no. No se puede simplemente tomar los pines de esa PHY, cablearlos de manera azul en los pines FPGA y esperar una conexión estable o funcional de forma remota. Es muy probable que tengas problemas importantes de integridad de señal.

Parece que las LLC de TI vienen en varias configuraciones, algunas con interfaces de microcontrolador de 8/16 bits bastante simples y genéricas que deberían ser fáciles de implementar. Probablemente pueda encontrar bloques de Verilog para una interfaz disponible de forma gratuita. Estos enlaces aún deben ser rápidos, ~ 50Mhz, por lo que aún tendrá el problema de integridad de la señal. Supongo que podría ejecutarlo más lento, pero si la fuente de datos supera el FIFO en la LLC, su SOL.

Una vez que haya terminado con la interfaz física, todavía tiene que implementar una pila completa de controladores firewire, ¿supongo que tendría que hacer esto en el DSP? ¿O poner un núcleo blando pequeño en el FPGA para manejar este trabajo?

Lo que realmente haría es decirles que están locos por forzar una interfaz Firewire para algo de este tamaño / capacidades. Tomará una cantidad significativa de recursos para construir la interfaz Firewire sin ganancia, ya que nunca usará en ningún lugar cerca de su ancho de banda.

Si eso falla, probaría algo como esto que es un solo parte con el firewire PHY.LLC y un núcleo ARM7 en un solo chip. Ofrece un bus de datos paralelo para obtener la información en el FPGA. De esta manera, usted escribe el controlador Firewire para admitir las comunicaciones con la cámara y lo coloca en el núcleo ARM7 y todo lo que tiene que transferir al FPGA son las imágenes en bruto, sin trabajo de sobrecarga en el FPGA. Aún necesita diseñar cuidadosamente una PCB para esto, su todavía lidiando con un bus firewire de muy alta velocidad.

EDIT:

A 100MBit / s, el bus Firewire funciona a 100MHZ, por lo que debe lidiar con el movimiento de señales diferenciales de 100MHZ desde el PHY al conector Firewire. En el lado de PHY < - > LLC < - > FPGA: personalmente no trataría de crear un bus de datos paralelo de 13MHZ, puede ser posible si tiene cuidado.

El problema crítico para la integridad de la señal es el tiempo de subida / caída de la señal, no su velocidad de reloj. La frecuencia de reloj alta generalmente significa tiempos de subida / caída más rápidos, pero a veces, si utiliza un transceptor diseñado para funcionar a una frecuencia alta en frecuencias más bajas, en realidad no ralentiza los tiempos de subida / caída.

Si el cable que transporta la señal es más largo que:

Tr / (2 * Td) con

Tr = el tiempo de subida de la señal en la fuente y

Td = el retraso de propagación por unidad de longitud del cable / cable que está utilizando.

Entonces necesitas considerar los efectos de la línea de transmisión. Tendrás que lidiar con los reflejos en el cable que causarán todo tipo de basura en la línea.

También debe tener cuidado de asegurarse de que todos los cables de un bus paralelo tengan la misma longitud con la tolerancia de variación dependiendo de la frecuencia de reloj del bus.

¿Esto realmente va a terminar en un avión UAV / RC? Si es así, también tienes que lidiar con las vibraciones y las fuerzas G

    
respondido por el Mark
2

Para ser honesto, si su objetivo es obtener videos / imágenes de una cámara en un dispositivo basado en FPGA, una cámara FireWire es el punto de partida equivocado. Probablemente debería encontrar una cámara más adecuada para su propósito con una interfaz más fácil de usar. Probablemente, esto también tiene la ventaja de ser mucho más pequeño que una videocámara comercial.

Espera, ¿estoy malinterpretando algo? Solo miré un poco el enlace que describe la placa que tiene tu FPGA, y dice que ya tiene una cámara incorporada. (Omnivision OV5610 5.17 megapíxeles en color CMOS sensor de imagen array). ¿Está diciendo que está utilizando Firewire para la conexión a bordo entre el FPGA y la cámara integrada?

    
respondido por el davr

Lea otras preguntas en las etiquetas