(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程文件请关注知识星球:成工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.pswp.cn/diannao/88483.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88483.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/88483.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android数据库GreenDao的使用

简介 GreenDao 是一个轻量级的对象关系映射(ORM)库,用于简化 Android 应用中的数据库操作。它提供了以下主要功能: 简化数据库操作:通过注解定义实体类,GreenDao 自动生成 DAO(数据访问对象&a…

24小时留言板

title: 24小时留言板 date: 2025-06-25 23:32:53 tags: 代码工具 24小时留言板 核心效果如图所示 代码解析 # TodoController 代码解析## 整体架构 这是一个基于Spring WebFlux的响应式控制器,结合Redis发布\订阅机制实现实时更新的待办事项系统。关键组件包括&a…

深入理解Redis整数集合(intset)的升级策略:内存优化的核心魔法

引言 作为Redis中最节省内存的数据结构之一,整数集合(intset) 专门用于高效存储整型数据。但你可能不知道,它背后藏着一个精妙的「动态升级」机制——能在不浪费内存的前提下,灵活适配不同大小的整数。今天我们就来扒…

高性能计算(HPC)集群和工作流:intel-oneapi-hpc-toolkit安装与使用

成功安装了 Intel oneAPI HPC Toolkit!这个工具包包含了很多强大的工具,可以帮助你优化和加速高性能计算(HPC)任务,特别是在使用 Intel 的硬件(如 Xeon 处理器和 GPU)时。 接下来,…

QT vscode cmake 编译 undefined reference to `vtable for 问题解决

编译时出现undefined reference to vtable for 问题,是没有添加头文件到目标,添加即可: 如果使用的是qt5, 没有qt_add_executable, 使用qt 5的 自动处理即可: # 启用 Qt 自动处理功能 set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC …

linux内核奔溃转储之kexec、kdump

一、kexec是什么? kexec 是 Linux 内核提供的一种关键技术,允许系统‌在不经过完整硬件重启(BIOS/UEFI 初始化)的情况下,直接从当前正在运行的内核加载并启动另一个新内核‌。以下是其核心要点: ‌定义与核…

标题:2025金融护网行动实战指南:从合规防御到智能免疫的体系化进阶

引言 2025年,随着《中国人民银行业务领域网络安全事件报告管理办法》正式实施,金融护网行动已从“合规检查”升级为“能力对抗”。面对AI驱动的自适应攻击、勒索病毒与黑灰产协同威胁,金融机构需构建“技术-管理-人才”三位一体的智能防御体…

NEO4j的安装部署

windows neo4j新版本安装需要部署jdk17,下面这个版本是jdk8最新的支持版本 neo4j-community-3.5.9-windows.zipIndex of /doc/neo4j/3.5.9/ 启动 dos面板中启动 neo4j.bat console linux neo4j新版本安装需要部署jdk17,下面这个版本是jdk8最新的支…

八股文——JAVA基础:说一下C++与java的区别

首先,c与java都是面向对象编程,都包含封装、继承、多态的特性。但是c多继承,而java只能单继承与多实现。 其次,java无法直接访问内存,java通过引用对向,比如new一个对象,拿到的对象实例实际上是…

Vue3 Composition API 深度解析:告别Options API的局限性

目录 一、为什么需要Composition API? 二、核心概念:setup() 函数 三、响应式核心:ref() 和 reactive() 1. ref - 处理基本类型/对象 2. reactive - 处理对象 四、生命周期钩子新写法 五、强大的逻辑复用:组合式函数 六、响…

IoT/HCIP实验-5/基于NB-IoT的智慧农业实验(平台侧开发+端侧编码+基础调试分析)

文章目录 概述扩展板 E53_IA1智慧农业平台测开发功能定义/模型开发编解码插件开发-消息编解码插件开发-关联编解码插件开发-部署注册实际设备 智慧农业端侧编码工程配置数据结构定义数据收集任务数据上报任务设备接入过程正确设置接入参数命令响应任务 程序调试其他 概述 本实…

多网络环境vmware虚拟机配置

环境:一台台式机、一台笔记本、笔记本中安装虚拟机。台式机及笔记本都使用wifi连接。 实现效果:虚拟机采用固定ip方式,台式机可以直接连接虚拟机。 1、VMware环境配置 台式机ip:192.168.31.43 笔记本ip:192.168.31.…

ZArchiver×亚矩云手机:云端文件管理的“超维解压”革命

在数字化办公与移动应用生态中,文件压缩与解压是高频刚需场景,但传统本地工具受限于设备性能、存储空间及跨平台协作痛点。ZArchiver(轻量级压缩工具)与亚矩云手机的结合,通过“云端算力虚拟化环境”的创新模式&#x…

微帧WZVQA:极致还原人眼感知,精准评估视频画质

随着移动互联网的不断发展以及智能手机的普及,短视频已逐步取代图片和文字,跻身主流媒体形式的前列。短视频平台的兴起,让数十亿用户可以制作,分享并接收彼此的信息,为人们开辟了一条全新的知识获取途径。然而&#xf…

信创 CDC 实战|国产数据库的数据高速通道:OceanBase 实时入仓 StarRocks

国产数据库加速进入核心系统,传统同步工具却频频“掉链子”。本系列文章聚焦 OceanBase、GaussDB、TDSQL、达梦等主流信创数据库,逐一拆解其日志机制与同步难点,结合 TapData 的实践经验,系统讲解从 CDC 捕获到实时入仓&#xff0…

Unity 通过AVProMovieCapture插件实现摄像机录屏

1.AVProMovieCapture插件下载 没什么好说的,搞到安装包之后,直接往项目中拉就行。 2.操作面板配置 (1)在Hierarchy创建一个空物体,上面添加Capture From Camera和Camera Selector两个插件 (2&#xff09…

深度学习:PyTorch卷积神经网络分享(1)

本文目录: 一、CNN概述二、CNN日常应用三、CNN的卷积层(一 )基本介绍(二)卷积层计算1.对输入数据的要求2.卷积核核心参数3.计算过程4.特征图尺寸计算5.1、多通道卷积计算5.2、多卷积核计算6.PyTorch卷积层API 前言&…

Cesium添加3dtiles并平移到指定经纬度

访问tileset.json,查看root.transform,12,13,14分别代表模型参考原点的地心坐标Cartesian3(x,y,z) let tileset await Cesium.Cesium3DTileset.fromUrl()构造origin_cartesian3new Cesium.Cartesian3(x,y,z) 设置待平移到的位置经纬高为longitude,latitude,height,例如(116,…

STM32G070x 单片机项目代码解析:基于 HAL 库的嵌入式系统开发

项目总体架构 该项目采用标准的 STM32 工程结构,主要包含以下几个部分: 头文件包含:系统头文件和用户自定义头文件外设句柄定义:SPI、TIM、UART 等外设的句柄声明用户自定义变量:LED 控制、按键状态等标志位初始化函数…

winform mvvm

if (!mvvmContext1.IsDesignMode) InitializeBindings(); 这段代码的意思是:如果当前应用程序不是处于设计模式(即程序正在运行),就调用InitializeBindings方法来初始化视图与视图模型之间的绑定。 void Initiali…