Transmitir datos de MATLAB a FPGA

0

Se trata del diseño de un esquema de compresión / descompresión JPEG en un Altera FPGA. Es posible tener una cámara o tarjeta SD para la entrada de imágenes y TV o tarjeta SD para la salida de imágenes. Sin embargo, estas interfaces introducen sus propias complejidades.

Para simplificar las cosas en la primera parte del proyecto y para que sea más fácil probar el diseño a fondo, se desea que sea posible pasar datos de una imagen de MATLAB al FPGA. MATLAB ya tiene muchas funciones para manipular datos, por lo que se desea enviar datos a FPGA y leer el resultado después del procesamiento y comparar el resultado de FPGA con el resultado de un procesamiento idéntico realizado dentro de MATLAB.

Básicamente, los datos se leerán desde el FPGA desde diferentes etapas del procesador de compresión y descompresión JPEG para verificar cómo funciona cada parte del diseño.

Entonces, la pregunta, ¿cómo transmito datos de MATLAB al FPGA y leo los datos? ¿Hay algún tutorial sobre esto en alguna parte?

    
pregunta quantum231

3 respuestas

4

He hecho algo muy similar en el pasado. Mi objetivo era transferir una imagen (* .bmp) de PC a FPGA (BRAM interna) y enviarla de vuelta a PC después del proceso de marca de agua. Como se mencionó anteriormente, UART es su mejor apuesta. Implementar un UART en FPGA o usar un diseño existente. Para Xilinx, consulte este diseño proporcionado con el Picoblaze.

Está bien documentado y puede utilizarse como independiente en su diseño. También puede encontrar versiones anteriores de este diseño para los FPGA Xilinx más antiguos. Creo que puedes encontrar diseños similares para Altera (o proveedor independiente) fácilmente.

En el MATLAB, puede leer y escribir datos en un objeto serie utilizando estas funciones. He tenido problemas con velocidades de transmisión por encima del estándar 115200, por lo que si necesita un rendimiento en tiempo real, UART podría no ser suficiente. De lo contrario, comience con la tasa de baudios más baja y realice una prueba de errores e intente alcanzar el máximo.

Aunque MATLAB será rápido y fácil para esta aplicación; Como no es gratis y no todos pueden tener acceso a él, otra opción es usar Python. En mi caso, he escrito un script de Python para comunicarme con el FPGA. Tiene una biblioteca en serie agradable y simple llamada pyserial para la comunicación en serie. Puede usar PIL (Python Imaging Library) para el procesamiento de imágenes y números para el proceso de cálculo.

Sin embargo; Si solo está interesado en probar la funcionalidad del diseño, solo puede leer los datos de píxeles de un archivo para procesarlos en simulación. Envíe los datos de la imagen a un archivo de texto utilizando MATLAB y luego léalos en una matriz de memoria definida en su archivo de banco de pruebas. Puede simular su diseño como si se estuviera ejecutando en el hardware (suponiendo que el diseño sea sintetizable) y probarlo. Puede enviar datos procesados a un archivo en cualquier etapa del proceso y leerlos de MATLAB para compararlos. Después de asegurarse de que el diseño funciona perfectamente, puede comenzar a implementar la interfaz de comunicación en el hardware real.

    
respondido por el Chief
3

La forma rápida, sucia y económica es incorporar un UART en el FPGA y usar el objeto serial matlab incorporado para transmitir y recibir datos de píxeles. Puede aumentar la velocidad de transmisión hasta cerca de velocidades de megaHertz.

    
respondido por el PFA
1

Esta respuesta se puede considerar como un candidato para la sección de Recomendaciones de software de SE, pero aquí va: podría probar uno de los paquetes de terceros que ofrecen una biblioteca de bloques Simulink específicos para el objetivo de arrastrar y soltar para simplificar el desarrollo. Por ejemplo: enlace . Al insertar su código de Matlab existente en los bloques de Simulink, puede construir diagramáticamente su esquema de control de comunicación alrededor de su código, compilar y descargar el código al FPGA y ejecutarlo.

    
respondido por el MichaelA

Lea otras preguntas en las etiquetas