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

闲庭信步使用图像验证平台加速FPGA的开发:第一课——由测试平台到验证平台

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

上个系列成工搭建的是图像处理的测试平台,也就是不涉及任何的时序逻辑,而我们常说的FPGA的仿真测试都是基于验证平台的,而FPGA的验证平台一般都是包括时序信息的,也就是所有的操作都是在时钟的控制下一步步进行的。

在图像的测试平台中,我们首先是将一幅图像读到一个数组或者队列中去,然后根据标号读写相应像素进行各种处理,而在时序逻辑中,是不能这样处理。对于视频的图像,是通过场同步,行同步,数据有效三个信号来控制图像的生成的处理的,如下所示。

转换成图像的控制时序如下所示。

大家如果想深入理解视频的时序,可以去看看VGA或者LCD屏的视频协议,都有非常详细的讲解,这不是本系列的重点,成工已经设计了video_modes.sv和video_ctl.sv这两个文件,仿真tb文件夹的preprocess文件夹下面,用来生成不同分辨率的视频的时序。如下是video_modes.sv文件,通过宏定义的方式定义了常用分辨率视频的参数。

而video_ctl.sv文件根据宏定义选择不同的视频分辨率,生成对应的图像的时序

有了相关的视频图像生成的时序,也有了图像的数据,如何将图像的数据和时序结合起来呢?在这儿,成工新建了一个img_sequence_pkt的包,其中seq_data_generate是根据生成的视频时序将视频的数据和时序结合起来;seq_img是根据处理后的视频时序将三个通道的图像数据保存到队列中去;而seq_chnl_img是根据处理后的视频时序将单通道的图像数据保存到队列中去,这样有了img_sequence_pkt包,就可以将图像的测试平台和时序逻辑整合起来了

有一点需要注意,img_sequence_pkt包中task的参数前面都是ref,而不是像img_process_pkt包中的task都是使用input或者output。这是因为使用ref就是直接地址的映射,这是因为在类中,如果使用input和output,参数的值会一直保存在仿真0时刻的值,并不会随着时间的变化而变化,而使用ref,就是地址的直接映射,只要外部该参数发生了变化,task中该参数的值也会随着进行变化。这就像图片和视频一样,图片只能记录某一时刻的状态,而视频可以记录时间段内的所有状态。

最后一点,就是接口interface的使用,接口给模型提供了一种新的方式,通过使用接口可以简化大型复杂设计的建模和验证。接口是把模块信号封装起来的方法,所有相关的信号都封装起来形成interface block,因此接口可以在其他项目中复用。本系列的模块间的信号不是太多,可以不用接口,但是从学习的角度出发,成工还是使用了接口,如下所示。定义了接口,需要例化后使用其中的各个信号。

因为是FPGA的开发,那就是可综合的rtl代码,所以src文件夹下就不再是空的了,由于是第一课,对图片没有特别的处理,就是将输入时序直接打拍给到输出逻辑,如下所示。

在仿真的tb_image_sim文件中,先导入相关的包,定义需要的变量,同时例化类和接口。

然后例化video_ctrl和top模块,并将相关的接口信号进行连接。

最后在第一个initial块中新建了时钟和复位信号,这是时序逻辑仿真必须的信号;第二个initial块完成的测试平台相关的功能,比如图像的读取,保存和比对;第三个initial块时序的时序逻辑,由于这三个task都是同步运行的,所有使用了fork-join_none。

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

modelsim的Transcript窗口会打印如下的信息,发现图像的数据经过视频的时序逻辑后前后的图像数据是相同,而且不同于上个系列测试平台的的仿真时刻都是0,现在的仿真时刻是5423390ns。

可以加入需要观测的信号,在Wave窗口查看。

最后打开img文件夹,也可以看到经过视频时序前后的图像。

http://www.dtcms.com/a/268171.html

相关文章:

  • CSS06:字体样式
  • 数据结构---链表结构体、指针深入理解(三)
  • Petalinux工程如何离线编译
  • C++ 中左值和右值
  • 论文评价指标之(n-gram、BLEU、MRR、ANLS)
  • python库 maya 库的各种案例的使用详解(人性化的日期时间处理)
  • 使用Python将PDF转换成word、PPT
  • SSL 终结(SSL Termination)深度解析:从原理到实践的全维度指南
  • 电商系统二次开发找谁做?ZKmall开源商城前后端分离技术更易升级迭代
  • leetcode 每日一题 1865. 找出和为指定值的下标对
  • python学习打卡:DAY 21 常见的降维算法
  • 红宝书学习笔记
  • 多级缓存如何应用
  • YOLO目标检测数据集类别:分类与应用
  • Oracle使用SQL一次性向表中插入多行数据
  • NLP之文本纠错开源大模型:兼看语音大模型总结
  • 李宏毅genai笔记:推理
  • Maven引入第三方JAR包实战指南
  • 支持向量机(SVM)在肝脏CT/MRI图像分类(肝癌检测)中的应用及实现
  • Python11中创建虚拟环境、安装 TensorFlow
  • AI编程:打造炫酷多语倒计时器
  • 【Elasticsearch】自定义评分检索
  • 评论区实现 前端Vue
  • 【openp2p】 学习4: 纳秒级别的时间同步算法及demo
  • 数学建模的一般步骤
  • FastAPI+React19开发ERP系统实战第04期
  • Hadoop YARN 命令行工具完全指南
  • ProCCD复古相机:捕捉复古瞬间
  • uniapp的光标跟随和打字机效果
  • LangChain有中文网可以访问,还有教程可以学