当前位置: 首页 > 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来指明方向,也可以不指明。

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

相关文章:

  • 【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--数据驱动
  • 一、什么是生成式人工智能
  • linux生产环境下根据关键字搜索指定日志文件命令
  • 嵌入式开发之嵌入式系统硬件架构设计时,如何选择合适的微处理器/微控制器?
  • TC、TM、RM如何协同解决分布式事务难题
  • 深入理解 Cross-Entropy 损失函数:从原理到实践
  • 5.5 misc驱动框架
  • SIEMENS 标准程序解读 ---> Fanuc(法那科)机器手通讯交互程序
  • csp基础之进制转换器
  • `shallowReactive` 与 `shallowRef`:浅层响应式 API
  • RA4M2开发涂鸦模块CBU(3)----定时器GPT-PWM调光