Zynq7020 VHDL puro decodifica video MIPI, salida HDMI, admite configuración dinámica ISP y proporciona código fuente de proyecto vivado y soporte técnico

1. Introducción

El protocolo más complejo y técnicamente más difícil en el campo de la adquisición de imágenes FPGA es probablemente el protocolo MIPI. La decodificación MIPI es tan difícil que ha derrotado a innumerables héroes, hasta el punto de que Xilinx tuvo que lanzar oficialmente un núcleo IP dedicado para que lo utilicen los desarrolladores. de lo contrario, sería demasiado sofisticado. Esta operación ahuyenta directamente a una gran cantidad de desarrolladores de FPGA y nadie jugará con ella.

Este diseño se basa en la placa de desarrollo Zynq7020 de Xilinx. Recopila video MIPI de 2 líneas de la cámara OV5640. El pin de la cámara OV5640 está conectado al BANK35 del Zynq7020. Los módulos D-PHY y CSI2 RX implementados en video Bayer con salida VHDL pura, y luego, el módulo Bayer a RGB emite RGB, el vídeo se mejora mediante el módulo de corrección gamma para mejorar la calidad de la imagen, y luego se llama al VDMA oficial de Xilinx para enviar la imagen a DDR3 en el lado PS para un almacenamiento en búfer de tres cuadros y luego leer; se llama al módulo VTC oficial de Xilinx para generar la sincronización del video de salida, y zynq configura dinámicamente el VTC a través del software SDK. La sincronización de salida admite tres salidas de sincronización: 1080P, 720P y 640P. Llama al AXI4-Stream oficial de Xilinx para Salida de video para conversión de flujo de datos, genera datos RGB de temporización VGA y finalmente envía el video a la pantalla a través del módulo RGB a HDMI implementado en VHDL puro. ; En el lado del software SDK, interactúa con la PC a través del puerto serie y el La PC envía instrucciones al software SDK para configurar dinámicamente el ISP. Las funciones del ISP incluyen controlar la resolución de entrada del OV5640, controlar el formato de imagen de entrada del OV5640, modificar arbitrariamente el valor del registro interno del OV5640 y leer arbitrariamente el valor del registro interno del OV5640, modificar arbitrariamente el coeficiente de corrección gamma (diferentes efectos de salida), controla y cambia el modo de balance de blancos automático (hay tres modos: avanzado, simple y deshabilitado);

Este artículo describe en detalle el esquema de diseño de la salida HDMI de video MIPI con decodificación VHDL pura del Zynq7020. Después de compilar el código de ingeniería y pasar la depuración y verificación a bordo, el proyecto se puede trasplantar directamente. Es adecuado para que los estudiantes de la escuela se gradúen. proyectos y desarrollo de proyectos de posgrado, y también es adecuado para que lo realicen ingenieros en servicio El desarrollo de proyectos se puede aplicar a los campos de imágenes digitales y transmisión de imágenes en industrias médicas, militares y otras; proporciona código fuente de ingeniería completo y completo
y soporte técnico;
el método para obtener el código fuente de ingeniería y soporte técnico se encuentra al final del artículo, tenga paciencia y lea Finalmente,
con respecto al protocolo MIPI, busque usted mismo. Hay muchos tipos importantes en csdn que hablan sobre en detalle, así que no escribiré más sobre ello;

Descargo de responsabilidad

Este proyecto y su código fuente incluyen partes escritas por mí y partes obtenidas de canales públicos en Internet (incluido CSDN, sitio web oficial de Xilinx, sitio web oficial de Altera, etc.). Si se siente ofendido, envíe un mensaje privado para criticar y educar; basado en esto, este proyecto El proyecto y su código fuente están limitados a lectores o fanáticos para estudio e investigación personal, y está prohibido su uso con fines comerciales. Si surgen problemas legales debido al uso comercial por parte de los propios lectores o fanáticos, Este blog y el blogger no tienen nada que ver con él, así que utilícelo con precaución. . .

2. La solución de códec MIPI ya la tengo aquí

Actualmente tengo una gran cantidad de soluciones de codificación y decodificación MIPI basadas en FPGA, principalmente decodificación MIPI. Hay decodificación MIPI implementada mediante vhdl puro y decodificación MIPI implementada llamando a la IP oficial de Xilinx. Hay decodificación MIPI de 2 líneas y decodificación MIPI de 4 líneas. , incluida la decodificación MIPI con resolución 4K y la decodificación MIPI con una resolución tan pequeña como 720P, la decodificación MIPI basada en la plataforma FPGA Xilinx, la decodificación MIPI basada en la plataforma FPGA Altera y la decodificación MIPI basada en la plataforma FPGA Lattice. En el futuro, continuaremos lanzar soluciones de decodificación MIPI que sean mejores que las FPGA domésticas. Después de todo, las soluciones domésticas son actualmente la corriente principal en el futuro. También lanzaremos más soluciones DSI de codificación MIPI en el futuro y nos esforzaremos por hacer que las soluciones de codificación y decodificación MIPI para FPGA sean asequibles. . .
En base a esto, creé una columna especial para la codificación y decodificación MIPI, y puse todos los blogs de codificación y decodificación MIPI en la columna. Los hermanos que tengan necesidades de proyectos o intereses de aprendizaje en codificación y decodificación FPGA MIPI pueden ir a mi columna para echar un vistazo. La dirección es la siguiente:
Click para ir directamente a la columna

3. Rendimiento y ventajas de este módulo MIPI CSI2

En una palabra: impresionante, el rendimiento es el siguiente:
1: implementación de código VHDL puro, el aprendizaje y la legibilidad han alcanzado el techo;
2: la portabilidad está bien, siempre que la FPGA sea compatible con el lenguaje fuente de deserialización de Xilinx, se puede trasplantar;
3: El algoritmo ha llegado al techo, el protocolo de recepción estándar CSI2 implementa la decodificación;
4: La practicidad llega al techo, utilizando la cámara OV5640 como entrada (principalmente porque es barata). A diferencia de la verificación y experimental. Proyectos en el mercado, este diseño está directamente orientado a proyectos prácticos, cercanos a proyectos reales, y los hermanos con proyectos similares pueden usarlo directamente y obtener un mes de salario directamente. . . 5: Admite decodificación de video MIPI con resoluciones de hasta
1920. VHDL , Se ha encapsulado como una IP personalizada y los usuarios no necesitan preocuparse por la implementación del código. Para una lógica compleja, solo necesita llamar a la IP y configurarla a través de la interfaz UI para usarla. Por supuesto, si lo desea vea el código fuente en el interior, aún puede abrirlo directamente y verlo;

4. Plan de diseño detallado

Diagrama esquemático de diseño.

El diagrama de bloques del principio de diseño es el siguiente:
Insertar descripción de la imagen aquí

Cámara OV5640 y su configuración.

La cámara OV5640 que uso produce formato MIPI de 2 líneas. Las resoluciones de salida son 720p@60Hz y 1080p@30Hz. Puede elegir cuál configurar a través del software SDK; OV5640 genera datos RAW10; zynq se configura a través de periféricos en chip i2c. OV5640, esta operación se completa en el software SDK y no es necesario involucrar el hardware del lado PL;

Módulo D-PHY

Con respecto a MIPI D-PHY, hay muchos artículos en Internet que presentan los principios y conceptos, no los repetiré aquí, aquí me concentro en la implementación usando FPGA, usamos código VHDL puro para implementar MIPI D-PHY
. función. Para atender a todos los que no están acostumbrados a leer código VHDL. De acuerdo con la costumbre, hemos encapsulado parte del código en una IP personalizada. Los usuarios no necesitan preocuparse por la lógica compleja de la implementación del código. Solo necesitan para llamar a la IP y configurarla a través de la interfaz UI para usarla. Por supuesto, si desea ver el código fuente dentro, aún puede abrirlo y mirarlo directamente; este MIPI D-PHY solo puede admitir MIPI de 1 o 2 líneas. video; la
llamada IP personalizada de D-PHY en este proyecto es la siguiente:
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
El código fuente VHDL puro de MIPI D-PHY es el siguiente:
Insertar descripción de la imagen aquí

Módulo CSI-2-RX

Respecto a MIPI CSI-2-RX, hay muchos artículos en Internet que presentan los principios y conceptos, no los repetiré aquí, aquí me enfoco en la implementación usando FPGA, usamos código VHDL puro para implementar MIPI CSI
. Función -2-RX. Para cuidar de todos. Para acostumbrarse al hábito de leer código VHDL, hemos encapsulado parte del código en una IP personalizada. Los usuarios no necesitan preocuparse por la lógica compleja de la implementación del código. Solo necesita llamar a la IP y configurarla a través de la interfaz UI para usarla. Por supuesto, si desea verlo, el código fuente aún se puede abrir directamente para verlo; este MIPI CSI-2-RX solo puede admitir 1 línea o Video MIPI de 2 líneas y el formato de datos admite RAW10; la
llamada IP personalizada CSI-2-RX en este proyecto es la siguiente:
Insertar descripción de la imagen aquí
El código fuente VHDL puro de MIPI CSI-2 -RX es el siguiente:
Insertar descripción de la imagen aquí

Módulo Bayer a RGB

Con respecto a la conversión de MIPI Bayer a RGB, hay muchos artículos en Internet que presentan los principios y conceptos. No los repetiré aquí. Aquí nos centramos en la implementación usando FPGA; usamos código VHDL puro para implementar MIPI Bayer
para Función de conversión RGB, para atender a todos los que no están acostumbrados a leer código VHDL. De acuerdo con la costumbre, hemos encapsulado parte del código en una IP personalizada. Los usuarios no necesitan preocuparse por la compleja lógica de implementación del código. Solo necesitan llamar a la IP y configurarla a través de la interfaz UI para usarla. Por supuesto, si desea ver el código fuente adentro, aún puede abrirlo y mirarlo directamente;
la llamada de IP personalizada de Bayer a RGB en este proyecto es de la siguiente manera:
Insertar descripción de la imagen aquí
El código fuente de MIPI Bayer a RGB puro VHDL es el siguiente:
Insertar descripción de la imagen aquí

Módulo de corrección gamma

Con respecto a la corrección de gamma MIPI, hay muchos artículos en Internet que presentan los principios y conceptos, no los repetiré aquí, aquí me concentro en la implementación usando FPGA, usamos código VHDL puro para implementar la función de corrección de gamma MIPI,
en Para cuidar de todos los que no están acostumbrados a leer código VHDL. De acuerdo con la costumbre, hemos encapsulado parte del código en una IP personalizada. Los usuarios no necesitan preocuparse por la lógica compleja de la implementación del código. Solo necesitan llamar la IP y configurarla a través de la interfaz UI para usarla. Por supuesto, si desea ver el código fuente dentro, aún puede abrir y mirar directamente;
la llamada IP personalizada de corrección gamma en este proyecto es la siguiente:
Insertar descripción de la imagen aquí
Corrección gamma MIPI El código fuente VHDL puro es el siguiente:
Insertar descripción de la imagen aquí

Módulo RGB a HDMI

Respecto a RGB a HDMI, hay muchos artículos en Internet que presentan los principios y conceptos, no los repetiré aquí, aquí me concentro en la implementación usando FPGA, usamos código VHDL puro para implementar la función RGB a HDMI,
en Para cuidar a todos los que no están acostumbrados a leer código VHDL. , hemos encapsulado parte del código en una IP personalizada. Los usuarios no necesitan preocuparse por la lógica compleja de la implementación del código. Solo necesitan llamar a la IP y configurar Utilícelo a través de la interfaz UI. Por supuesto, si desea ver el código fuente en su interior, aún puede abrirlo directamente y verlo.
El código fuente VHDL puro de RGB a HDMI en este proyecto es el siguiente:
Insertar descripción de la imagen aquí

Configuración dinámica del ISP

En el lado del software SDK, interactúa con la PC a través del puerto serie y la PC envía instrucciones al software SDK para configurar dinámicamente el ISP. Las funciones del ISP incluyen controlar la resolución de entrada del OV5640, controlar el formato de imagen de entrada del OV5640 y modificar arbitrariamente los valores del registro interno del OV5640, y leyendo arbitrariamente el valor del registro interno del OV5640, modifica arbitrariamente el coeficiente de corrección gamma (diferentes efectos de salida), controla y cambia el modo de balance de blancos automático (hay tres modos: avanzado, simple y deshabilitado); los detalles son los siguientes: Después de descargar el bit, el asistente de depuración del puerto serie en la PC recibirá una
información impresa;

Please press the key corresponding to the desired option:
a. Change Resolution
b. Change Liquid Lens Focus
d. Change Image Format (Raw or RGB)
e. Write a Register Inside the Image Sensor
f. Read a Register Inside the Image Sensor
g. Change Gamma Correction Factor Value
h. Change AWB Settings

En este momento, puede ingresar los casos a, b, d, e, f, g, h para configurar dinámicamente la cámara; las instrucciones aquí son las siguientes:

Control de resolución de entrada OV5640

Cuando ingrese a, verá la siguiente información impresa:

1. 1280 x 720, 60fps
2. 1920 x 1080, 15fps
3. 1920 x 1080, 30fps

Entrada 1, la resolución de entrada del OV5640 es 1280 x 720, 60 fps;
entrada 2, la resolución de entrada del OV5640 es 1920 x 1080, 15 fps;
entrada 3, la resolución de entrada del OV5640 es 1920 x 1080, 30 fps;

Control de enfoque OV5640

Esa es la función cuando se ingresa b arriba, pero no he podido depurar esta función. Todavía no sé dónde radica el problema, así que la omitiré y no entraré en detalles;

Control de formato de datos de entrada OV5640

Cuando ingresa d, verá la siguiente información impresa:

Please press the key corresponding to the desired setting:
1. Select image format to be RGB, output still Raw
2. Select image format & output to both be Raw

Entrada 1, el formato de datos de entrada de OV5640 es RGB;
entrada 2, el formato de datos de entrada de OV5640 es RAW;
Nota: el formato RGB solo se usa en la depuración, porque este proyecto es MIPI, así que asegúrese de configurarlo como RAW;

Control de registro de escritura OV5640

Cuando ingresa e, verá la siguiente información impresa:

Please enter address of image sensor register, in hex, with small letters:

En este momento, debe ingresar la dirección de registro OV5640 que debe escribirse. Tenga en cuenta que ingresa el número hexadecimal.
Después de ingresar la dirección, verá la siguiente información impresa:

Please enter value of image sensor register, in hex, with small letters:

En este momento, debe ingresar los datos del registro OV5640 que deben escribirse. Tenga en cuenta que ingresa el número hexadecimal,
a partir de ese momento se completa la operación de escritura del registro OV5640;

Control de registro de lectura OV5640

Cuando ingresa f, verá la siguiente información impresa:

Please enter address of image sensor register, in hex, with small letters:

En este momento, debe ingresar la dirección de registro OV5640 que debe leerse. Tenga en cuenta que ingresa el número hexadecimal,
después de ingresar la dirección, verá los datos leídos nuevamente;

Control del coeficiente de corrección gamma

Cuando ingresa g, verá la siguiente información impresa:

Please press the key corresponding to the desired Gamma factor:
1. Gamma Factor = 1
2. Gamma Factor = 1/1.2
3. Gamma Factor = 1/1.5
4. Gamma Factor = 1/1.8
5. Gamma Factor = 1/2.2

Ingrese 1, el coeficiente de corrección gamma es 1;
ingrese 2, el coeficiente de corrección gamma es 1/1,2;
ingrese 3, el coeficiente de corrección gamma es 1/1,5; ingrese 4, el coeficiente de corrección gamma es 1/1,8; ingrese 5,
el el coeficiente de corrección gamma es 1/ 1,8;
el coeficiente de corrección del caballo es 1/2,2;

Control automático del balance de blancos

Cuando ingresa h, verá la siguiente información impresa:

Please press the key corresponding to the desired AWB change:
1. Enable Advanced AWB
2. Enable Simple AWB
3. Disable AWB

Ingrese 1, el balance de blancos automático está en modo avanzado y el efecto es mejor;
ingrese 2, el balance de blancos automático está en modo simple y el efecto es promedio;
ingrese 3, la función de balance de blancos automático está desactivada y la salida puede ser negro;

Solución de hardware MIPI D-PHY

Este diseño utiliza la solución de red de resistencias recomendada oficialmente por xilinx, que requiere 800 M Hz o menos y cableado dentro de 30 mm; el esquema de la interfaz MIPI integrada es el siguiente: Luego, el
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
grupo de señales diferenciales se conecta a BANK35 de la siguiente manera:
Insertar descripción de la imagen aquí

5. Explicación detallada del proyecto vivado.

Diseño de hardware FPGA del lado PL

Modelo FPGA de placa de desarrollo: Xilinx–zynq7020–xc7z020clg400-1;
Entorno de desarrollo: Vivado2019.1;
Entrada: OV5640 MIPI 2 Line RAW10;
Salida: Pantalla HDMI, 720P;
Aplicación: Zynq7020 decodificación VHDL pura de video MIPI Salida HDMI;
El diseño de bloques del proyecto es de la siguiente manera:
Insertar descripción de la imagen aquí
La estructura del código de ingeniería es la siguiente:
Insertar descripción de la imagen aquí
Las estimaciones de consumo de recursos y consumo de energía de FPGA después de una compilación completa son las siguientes:
Insertar descripción de la imagen aquí

Diseño de software PS SDK

La estructura del código del software del lenguaje SDK C++ es la siguiente:
Insertar descripción de la imagen aquí

6. Instrucciones de trasplante del proyecto.

Manejo de inconsistencias de la versión de Vivado

1: Si su versión de vivado es consistente con la versión de vivado de este proyecto, abra el proyecto directamente;
2: Si su versión de vivado es inferior a la versión de vivado de este proyecto, debe abrir el proyecto y hacer clic en Archivo -> Guardar como ; pero este método no No es seguro. La forma más segura es actualizar su versión vivado a la versión vivado de este proyecto o una versión superior; 3:
Insertar descripción de la imagen aquí
Si su versión vivado es superior a la versión vivado de este proyecto, la solución es el siguiente:
Insertar descripción de la imagen aquí
Después de abrir el proyecto, encontrará que la IP ha sido Está bloqueado, de la siguiente manera:
Insertar descripción de la imagen aquí
En este momento, es necesario actualizar la IP y la operación es la siguiente:
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Manejo de inconsistencias del modelo FPGA

Si su modelo FPGA no coincide con el mío, debe cambiar el modelo FPGA. La operación es la siguiente:
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Después de cambiar el modelo FPGA, también debe actualizar la IP. El método para actualizar la IP se describió anteriormente;

Otras cosas a tener en cuenta

1: Dado que el DDR de cada placa no es necesariamente exactamente el mismo, la IP MIG debe configurarse de acuerdo con su propio esquema. Incluso puede eliminar directamente el MIG de mi proyecto original y volver a agregar la IP y reconfigurarla; 2 : Según el
suyo Para modificar las restricciones de pin del diagrama esquemático, simplemente modifíquelo en el archivo xdc;
3: Al trasplantar FPGA puro a Zynq, debe agregar el núcleo suave de zynq al proyecto;

7. Depuración y verificación de la placa.

El resultado es el siguiente:
Insertar descripción de la imagen aquí

8. Beneficios: Obtención de códigos de ingeniería

Bonificación: Adquisición de código de ingeniería.
El código es demasiado grande para enviarlo por correo electrónico. Se enviará a través de un determinado enlace de disco de red.
El método de adquisición de información es: privado o la tarjeta de presentación V al final del artículo.
La información del disco de red es la siguiente:
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_41667729/article/details/132690083
Recomendado
Clasificación