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

闲庭信步使用SV搭建图像测试平台:第五课——使用task

 (如需要该系列的工程文件请关注知识星球:成工fpga,https://t.zsxq.com/DMeqH关注即送200GB学习资料,链接已置顶!)

fpga仿真文件中的initial块其实就相当于c、c++、python等的主函数,到目前为止,图像的读写,图像RGB通道的分离,生成RAW图像等功能都是在initial块中实现的,我们来看看代码,initial块已经有100多行了,后续随着功能的增加,长度还会增加。

这就会出现一些问题,首先就是代码的可读性差,还好前面有讲解,大家可以很快的明白代码要实现的功能,如果直接给到一个没有看过讲解的朋友,把代码读明白就要很长时间;其次就是代码的可维护性差,对于成千上万行的代码,如果要修改或者删除一些功能,怎么保证修改的部分不会影响到其它的功能?还有就是定位问题效率低,如果测试发现某个功能有问题,由于代码很冗长和混乱,很难快速的定位问题。

其实对于高级编程语言的学习者,很多人存在类似的问题,喜欢把所有功能都在main函数中实现。其实高级语言都可以定义函数的,system verilog也不例外,可以定义函数function和任务task,但是function只能实现组合逻辑,而task既可以实现组合逻辑又可以实现时序逻辑。通俗的讲,组合逻辑就是不消耗仿真时间的,就像本系列全部是组合逻辑,在仿真时刻0可以完成所有的功能;而时序逻辑是要消耗仿真时间的,必须有时钟的驱动。

成工其实是做时序仿真比较多,所以倾向于使用task,function用的比较少,所以本系列的各个功能,成工基本上都是用task来实现。

到目前为止,我们主要实现了读图片,写图片,写txt文档,图像的RGB通道分离,由彩色图片生成RAW图片这五个功能,那我们就新建五个task,如下所示,新建了read_image,save_image,save_txt,save_image_rgb,save_raw这五个task。

再看initial块,清晰明了多了,可读性和维护性提高了,定位问题的效率也提高了,比如生成的RAW图像有问题,直接去查看save_raw这个task即可。

最后说明一下,task是可以访问task外定义的变量和参数的,比如img_all等变量,这些相当于是全局的变量,task块内可以直接访问全局的变量。还有就是task的接口参数可以用input和output来指明方向,也可以不指明。

相关文章:

  • 【Fargo】mediasoup发送2:码率分配、传输基类设计及WebRtcTransport原理
  • x1+x2=4 X1-X2=2的画图呢?
  • std::shared_ptr 的线程安全性
  • Java基础 6.21
  • cursor中定义cursor rules
  • 【Elasticsearch】运维监控:分片和节点
  • 当数据自己会说话:聚类与分类算法全景解析
  • P1220 关路灯
  • AI大模型学习之基础数学:微积分-AI大模型的数学引擎
  • nn4dms开源程序是用于深度突变扫描数据的神经网络
  • 安装 Labelme
  • 如何使用Ant Design Blazor组件在列表页弹窗增加修改数据
  • C++ 文件读写
  • 并查集(Disjoint-Set Union)详解
  • 单点登录(SSO)系统
  • SpringAI1.0.0 入门案例
  • 教育培训APP源码核心功能开发详解:直播、考试、组卷系统全拆解
  • GNU Octave 基础教程(8):GNU Octave 常用数学函数
  • nginx服务器配置时遇到的一些问题
  • 从0开始学习计算机视觉--Day02--数据驱动
  • 用别人的电影网站做公众号/百度关键词搜索怎么做
  • 祺越网站建设/湖南关键词优化排名推广
  • 五屏网站建设哪家有/做seo有什么好处
  • 中国企业500强企业名单/商丘网站优化公司
  • 相城专业的网站建设/凤凰军事新闻最新消息
  • 深圳网站建设制作设计/公司员工培训方案