闲庭信步使用图像验证平台加速FPGA的开发:第四课——RGB转HSV的FPGA实现

发布于:2025-07-09 ⋅ 阅读:(14) ⋅ 点赞:(0)

(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程文件请关注知识星球:成工fpga,关注即送200GB学习资料,链接已置顶!)

本系列只讲RGB转HSV的FPGA实现,至于其它的请参阅上个系列的相关章节。

RGB转HSV的公式如下所示,很明显,s和v的计算相对比较简单,主要是h的计算稍微复杂,涉及到加减乘法

首先分析一下,能不能避免除法的运算?无论是max还是max-min,都是根据像素点随时变化的,也就是说除数不是常数,这种情况下必须使用除法,所以除法是不可以避免的

然后就是乘法,发现乘法中有一个固定数60,这就好办了,可以将乘法转变成加减法。怎么转变呢?我们知道,60=64-4,为什么这样分解,而不是分解成50+10呢?其实成工在前面也讲过,对于2的n次方的乘法,直接移n位即可,所以64就是将乘数左移6位,4就是将乘数左移2位,然后再将这两个移位后的数相减,就完成了和60相乘的计算

然后我们来安排一下h的计算的时钟周期,由于有除法的运算,我们给除法安排一个完整的时钟周期;但是进行除法运算前,要不除数和被除数准备好,也就是计算出60*x和max-min,所以第一个时钟周期完成60*x和max-min的计算,第二个时钟周期完成除法运算,第三个时钟周期完成最后的加法和取值范围的判断;而s的除法运算,可以安排在第二个时钟周期,也可以安排在第三个时钟周期。

在src文件夹下的rgb文件夹中,rgb2hsv.sv模块就是完成图像的RGB到HSV的转换。如下,第一个时钟周期完成除法中除数和被除数的计算,其中124行到134行的模块就是将60*x操作转变成x<<6-x<<2的操作

第一个时钟周期再结合相关的组合逻辑,就可以完成除法需要的除数和被除数的运算。

第二个时钟周期,只完成除法运算

第三个时钟周期,完成最后的加法运算。

s和v的运算也放在了第三个时钟周期。

最后,将图像控制相关的场同步,行同步和数据有效信号延时三拍进行同步。

在src的top模块中,例化rgb2hsv模块。

同理,在仿真文件tb_image_sim中,先将RGB的图像通过图像测试平台的rgb2hsv_fpga这个task进行转换,同时将图像的数据给到FPGA的rgb2hsv模块进行硬件的仿真,等一帧图像处理完(frame_done信号拉高),生成相关的图片,并将图像测试平台和FPGA硬件仿真的结果进行比对。

最后我们双击sim文件夹下的top_tb.bat文件,完成系统的自动化仿真。

可以看到在modelsim的Transcript有如下的打印信息,图像测试平台和FPGA硬件仿真的结果一致。

最后我们打开img文件夹,也可以看到图像测试平台和FPGA硬件仿真的结果是一致的。