FPGA图像处理——前置基础篇
FPGA图像处理——前置基础篇
本系列博客旨在结合FPGA来进行图像处理,致力于各种图像处理算法的实现,同时参考了博客原创作者——咸鱼FPGA的资料。以下是前置基础三节,我会以一个小白的角度去思考,解析学习过程中遇到的各种问题。
1.Modelsim 联合 Matlab的图像仿真平台
这是一个用于验证自己各种图像处理算法实现效果的平台,基本思路在于,将要进行处理的图片转换为. txt 格式,利用 modelsim 的脚本把 .txt 文件输入到 testbench 中进行仿真并得到处理后的 .txt文件,最后用matlab显示处理后效果。
举个栗子——图像RGB转Gray
step1:利用img_to_txt脚本将RGB图像转换为hex文件便于输入
step2: 编写对应的verilog以及testbench文件
以一个RGB转GRAY的程序为例,编写好对应的img_en.v \ rgb_to_gray.v \ top.v \ tb_top.v之后,创建ise并进行仿真
step3:熟悉modelsim的相关操作,熟悉bat文件的编写
step4:用matlab进行处理,查看相应图像处理算法的实现效果
过程中出现的问题
- 代码编译过程中出现了,在top_tb中作为引用的数据应该是常量;错误的定义了其中img_data的位宽导致数据呈现高阻态无法被matlab识别
- matlab端则是出现了,matlab侧和FPGA侧对于图片的定义要统一,不能前后不一致;再就是转换成的灰度数据为24位宽,直接显示的话图片呈白色,需要把数据进行一个8位宽的转换
2.串口传图中的RGB332格式和RGB565格式
写在前面:之前在这个模块卡了一段时间的壳,因为我这边一直是将串口配合SDRAM再配合HDMI进行显示,之前在接口驱动上可能有一定问题,就是当我采用1024*768@60HZ的VGA时序作为SDRAM的读模块再转HDMI时候,显示器就会有闪屏现象,初步猜测应该是频率的原因。
首先我们先完成正常的功能实现以及探讨一下分辨率上的问题:
一、关于生成RGB332和生成RGB565的问题
日常见到的图片大多是RGB888的,但是像项目中的许多图片传输格式采取的是RGB332和RGB565,这就涉及到一个格式转换的问题,用matlab可以简单的实现。
值得注意的是,当你采用不同格式的图像格式传输数据时,相应的图像打包模块要发生改变,因为SDRAM的输入输出端口复用的模块限制为16bit数据,当你采用RGB332格式存数据时候,可以先高位补0,取的时候丢掉即可。
二、搭建工程
模块这部分网上有很多教程也比较基础,这里主要是参考了野火FPGA和咸鱼FPGA的一些设计,复用了一些模块。串口接收模块、VGA时序驱动模块、SDRAM模块、HDMI接口模块,其中HDMI接口模块后续在接口系列博客中进行更详细的介绍。
HDMI接口将输入的VGA/DVI时序转换成四对差分信号进行一个”并转串“的传输,里面涉及一个TMDS传输的概念。
三、实验效果
RGB332格式图片显示
RGB565格式图片显示