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

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

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

图像在HSV域完成了处理,最终还是要转换回RGB域进行显示。本篇我们介绍一下HSV转RGB的FPGA实现。

图像HSV转RGB的公式如下所示,看似简单,其实暗藏玄机,主要是设计除法和取余的运算,还有就是多步的乘法运算。我们首先将q和t的公式化简一下,最终变成v-v*f*s,p+v*f*s,由于p已经进行了一步的乘法运算,而单独求v*f*s还需要两步的乘法运算,其实v*f*s=(v-p)*f,这样就减少了一步的乘法运算;而求q和t都离不开f,f的计算需要除法,求模和减法,所以求f是本公式的一个关键。

如何求f呢?首先需要求出来hi,而求hi的关键是求h/60,这儿成工想到的有三种方法,一是用直接用除法器,花费一个时钟周期;而是将除法转变成乘法,1/60约等于0.01667,再按照前面讲解的放大到整数,计算出结果后再缩放回去;第三种方法就是根据实际情况将除法变成判断,因为h取值是0-360,我们根据h取值的区间直接就能得出h/60到底是多少,而且可以直接得到hi的值。

至于求f,我们可以先计算出h-hi*60,因为hi*60也是可以直接判断得出数值的,最后再除以60来计算f,当然这个除法也可以转换成乘法,简单起见,本例成工直接使用除法。

所以我们来确定一下该公式需要的处理周期。第一个时钟周期计算出hi和1-s,第二个时钟周期计算出f和p,第三个时钟周期计算出v*f*s,第四个时钟周期用组合逻辑计算出q和t,然后根据v、t、p的值用时序逻辑完成最终的计算。

在src文件夹下的rgb文件夹中,hsv2rgb.sv模块完成图像的HSV到RGB的转换。第一个时钟周期,完成hi的计算。

第一个时钟周期同时完成hi*60的计算。

第二个时钟周期完成f的计算。

当然还有第一个时钟周期1-s的计算和第二个时钟周期p的计算,这样第三个时钟周期就可以完成v*f*s的计算。

用组合逻辑实现一些计算结果。

最后一个时钟周期完成最终结果的计算。

由于公式的计算用了四个时钟周期,所以图像的场同步,行同步,数据有效信号都需要延时4个时钟周期进行同步。

在src的top模块中,将rgb2hsv和hsv2rgb模块进行例化。

在tb_image_sim仿真文件中,将图像的数据分别给到图像测试平台和FPGA可综合模块经常仿真测试,最后将结果进行比对并保存图像。

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

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

打开img文件夹,也可以看到图像测试平台和FPGA硬件仿真的结果是一致的(no_seq*是图像测试平台处理后的图片,seq*是FPGA硬件仿真处理后的结果)。

其实成工在上个系列的第二十一课中,说到图像测试平台中的hsv2rgb这个task处理后图像的颜色有失真,而安装FPGA的设计思路hsv2rgb_fpga这个task解决了相关的问题,请大家来分析一下问题到底出在哪儿。


网站公告

今日签到

点亮在社区的每一天
去签到