当前位置: 首页 > news >正文

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

(本系列只需要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硬件仿真的结果是一致的。

http://www.lryc.cn/news/582555.html

相关文章:

  • 利用外部Postgresql及zookeeper,启动Apache Dolphinscheduler3.1.9
  • 进阶向:Python音频录制与分析系统详解,从原理到实践
  • 3.直面分布式核心挑战:厘清概念、破解雪崩与熔断之道
  • 采煤机:技术革新驱动下的全球市场格局与未来趋势
  • 2025年前端面试题
  • C++ 选择排序、冒泡排序、插入排序
  • 云原生安全观察:零信任架构与动态防御的下一代免疫体系
  • 小红书APP品牌升级,启用新品牌口号“你的生活兴趣社区”
  • Axure-9高级教程:Axure函数使用手册-免费
  • Menu:菜单控件应用实例
  • Python入门Day5
  • 【华为昇腾|CUDA】服务器A6000显卡部署LLM实战记录
  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (一)为什么RISC-V是颠覆性创新?
  • Redis常用数据结构以及多并发场景下的使用分析:Sorted List类型
  • 算法设计与分析 知识总结
  • 【Python-GEE】如何利用Landsat时间序列影像通过调和回归方法提取农作物特征并进行分类
  • Paimon本地表查询引擎LocalTableQuery详解
  • DVWA靶场通关笔记-SQL盲注(SQL Injection Blind Medium级别)
  • 【Mac】实现Docker下载安装【正在逐步完善】
  • hmall学习
  • Apollo源码架构解析---附C++代码设计示例
  • 基于odoo17的设计模式详解---命令模式
  • 如何快速分析光伏电站气象数据?
  • 没合适的组合wheel包,就自行编译flash_attn吧
  • 云原生技术与应用-容器技术技术入门与Docker环境部署
  • 【RL+空战】学习记录01:jsbsim 仿真环境初次学习,F16 战机起飞
  • 吃透二分法的模板解法(适合所有类似于二分的算法题)
  • 【OceanBase 诊断调优】—— SQL 查询触发笛卡尔积怎么处理
  • Proface触摸屏编程软件介绍及下载
  • H3初识——入门介绍之常用中间件