当前位置: 首页 > 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.lqws.cn/news/464293.html

相关文章:

  • pyqt logger类与界面分开
  • 从语义到推荐:大语言模型(LLM)如何驱动智能选车系统?
  • Mac电脑-Markdown编辑器-Typora
  • c++26新功能—hive容器
  • 税务 VR 虚拟体验,带来全新办税感受
  • 【软考高级系统架构论文】论NoSQL数据库技术及其应用
  • HarmonyOS 5的分布式通信矩阵是如何工作的?
  • 鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(1/3)
  • 在AI普及的大环境下神经网络在新能源汽车热管理系统中的应用简介
  • 无线Debugger攻防全解:原理剖析与突破之道
  • Qt中的布局
  • 深入浅出:Go语言中的Cookie、Session和Token认证机制
  • 关于 Kyber:抗量子密码算法 Kyber 详解
  • 首页实现多级缓存
  • 【信号与系统四】采样和通信系统
  • rent8_wechat-最常用出租屋管理系统-微信小程序
  • Mac Parallels Desktop Kali 2025 代理设置
  • 外卖之后再度进军酒旅,京东多线出击的逻辑是什么?
  • Electron 开发桌面应用概述
  • 跟着AI学习C# Day27
  • Pytorch3D 中涉及的知识点汇总
  • 【Flutter】状态管理框架Provider和Get对比分析(面试常用)
  • Python内存使用分析工具深度解析与实践指南(下篇)
  • 江科大STM32入门:DMA传输数据
  • java 找出两个json文件的不同之处
  • 神经网络中的均方误差(Mean Squared Error)详解
  • 自定义OceanBase集群安装并使用OCP接管集群
  • 【DCS开源项目】—— Lua 如何调用 DLL、DLL 与 DCS World 的交互
  • LeetCode第279题_完全平方数
  • Vue3 的生命周期:从 Composition API 视角看