【SV的面向对象 SV的类_2024.01.02】

在这里插入图片描述

OOP术语

OOP:object oriented programming
Class类:包含变量和子程序的基本构建块
Object对象:类的一个实例
Handle句柄:指向对象的指针
Property属性:存储数据的变量;在V中,可以是wire或reg类型
Method方法:类中可以使用task或者function来定义方法以便处理自身或者外部传入的数据;在V中可在module中定义task或function,也可以使用initial或always处理数据 (SV中不可,initial和always仿真就执行,class使用时才调用)

类(class)

验证中类的作用:激励生成器;驱动器;监测器;比较器
function参数默认input,logic类型
句柄的声明不用放在initial块中
没有句柄指向的类,生命周期消亡,分配空间消失
在这里插入图片描述

类的成员操作

类的闭合属性

public:子类和外部可以访问成员
protected:该类和子类可以,外部不可以
local:该类可以,子类和外部不可以

Verilog & SV的class

Verilog的例化是静态的,SV的class例化是动态的,更加灵活和节省空间
Verilog中没有句柄,SV的class可将对象的指针赋予其它句柄,操作更灵活

浅复制 & 深复制

浅复制仅复制对象的所有属性,但不包括属性成员中句柄指向的对象
深复制创建一个新的和原始句柄指向的内容相同的字段,是两个一样大的数据段,故两者的句柄指向的空间是不同的,但内容是相同的,之后新对象中的句柄指向的内容与原始对象中句柄指向的内容不会相互影响。
(面试重点)
在这里插入图片描述在这里插入图片描述

类 & 模块(module)

二者都可作为封闭的容器来定义和存储

硬件部分必须在仿真一开始就确定下来,即module和其内部过程块、变量都应是静态的;
而软件部分,类的部分可在仿真任何阶段声明并动态创建出新的对象。
封装性上,模块是public,而类可根据需要确定外部访问的权限。
继承性上,模块无继承性。

OOP三大特性

类的封装

封装是面向对象编程的核心思想,将对象的属性(变量)和行为(方法)封装起来

类和结构体:类变量在声明之后需要构造才会构建对象实体,而struct在变量声明时已开辟内存,类除了声明数据变量成员,还可声明方法(function/task)

类的继承:分为实现继承和接口继承

super.new();系统自动调用父类的new函数

优先显示子类的方法;new函数不能共享,显示子类和父类的new函数

类的多态

当一个类派生出子类的时候,基类中的一些方法可能需被重写;用对象中的类型来决定调用哪一个实现方法,这是一个动态的过程,动态的选择方法的实现方式叫多态
重写:子类中具有的与父类相同的函数名和参数的方法
带有虚方法的类称为多态类
没有继承就没有多态

虚方法

添加virtual关键字声明一个虚方法,虚方法是一个基本的多态性结构
每个类的继承关系只有一个虚方法的实现,而且是在最后一个派生类中
p2指针发现dis()是虚方法会在子类中找是否重写
在这里插入图片描述

类型转换

一种多态形式
父类→子类:向下类型转换(安全)
子类→父类:向上类型转换(不安全,会报错)
$cast(目标,源);//目标=源

//可以通过在endmodule后加上冒号和模块名来区分多个模块,分清多个endmodule与module的对应
module top;
……
endmodule:top

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690067.shtml

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

相关文章

java-场景题

1、超时关单 delayQueue 延迟队列不支持分布式RocketMQ 延迟投递Redis 设置过期时间监听过期事件定时任务(阿里) 定时任务搂数据库(对数据库有压力)超时中心 2、分布分表如何进行分页查询 采用es,由es完成分页查询&…

NOTA-马来酰亚胺,1295584-83-6,可作为过渡金属离子的配体

您好,欢迎来到新研之家 文章关键词:NOTA-马来酰亚胺,NOTA Maleimide ,NOTA-Mal,1295584-83-6 一、基本信息 产品简介:NOTA Maleimide, also known as NOTA maleimide, is a novel bifunctional integrat…

【LeetCode每日一题】单调栈 402 移掉k位数字

402. 移掉 K 位数字 给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k **位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 : 输入:num "1432219", k 3 输出&#xff…

Sora不懂物理世界,翻车神图全网爆笑!LeCun马斯克DeepMind大佬激辩世界模型

大火的Sora,让许多动画、影视行业的人大为恐慌。 不过,今天网上广为流传的这张图,让大家倒是放心了不少。 可以看到,在这个视频中,玻璃杯碎裂的方式十分诡异—— 它被抬到半空中时,桌子上就忽然出现了一滩…

PWM功能介绍 和配置

泰山派默认提供了3组PWM的GPIO , 为了检测PWM的输出,我们可以配合逻辑分析仪来查看效果,或者搭配STC8的LED灯 PWM 测试 列举所有的PWM设备: # 查找所有有pwm名称的文件 find / -name "pwm" # pwm4: pwmfe6e0000 edp屏幕…

Vue2:Vuex中使用mapMutations和mapActions

一、情景说明 上一节,我们学会在vc的computed模块中,使用mapState和mapGetters来简化代码 这一节,我们学习在vc的methods模块中,使用mapMutations和mapActions来简化代码 在vc的methods中,我们会使用到store的dispat…

控制与状态机算法

控制与状态机算法是计算机科学、电子工程和自动化领域中常用的一种设计工具,它用来描述一个系统的行为,该系统在不同时间点可以处于不同的状态,并且其行为取决于当前状态以及输入的信号或事件。状态机算法的核心概念包括: 状态(State):系统的任何可能配置。每个状态代表…

【图像分割 2023 WACV】HiFormer

【图像分割 2023 WACV】HiFormer 论文题目:HiFormer: Hierarchical Multi-scale Representations Using Transformers for Medical Image Segmentation 中文题目:HiFormer:基于Transformer的分层多尺度表示医学图像分割 论文链接: 论文代码&a…

解决updatexml和extractvalue查询显示不全

报错注入是一种常见的SQL 注入方式,通过注入代码,触发数据库的错误响应,并从错误信息中获取有用的信息。 updatexml和extractvalue updatexml和extractvalue 是常用的两个报错注入函数 http://localhost/sqli/Less-5/?id1%27and%20updat…

【使用QT遇到的小问题】

使用QT遇到的小问题 error: cannot open output file debug_0219homework.exe: Permission denied 应该是由于没关多次ctrl r 运行项目导致的,解决办法,把项目关了,重新开下。 0.0醉了。

Maxwell - 增量数据

前言 今天来学习一个新的大数据小工具 Maxwell ,它和 Sqoop 很像。Sqoop主要用于在 Hadoop (比如 HDFS、Hive、HBase 等)和关系型数据库之间进行数据的批量导入和导出,而 Maxwell 则主要用于监控数据库的变化(通过监控…

如何使用Docker部署Drupal并结合cpolar实现固定公网地址访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS,适用于各种不同的网站项目,从小型个人博客到大型企业级门户网站。它的学习…

table表格/内容等左右滑动禁止mac笔记本等自带左右滑返回功能

.el-table__body-wrapper {overscroll-behavior: contain;/* 防止滚动过头效果 */ }overscroll-behavior CSS 属性是 overscroll-behavior-x 和 overscroll-behavior-y 属性的合并写法, 让你可以控制浏览器过度滚动时的表现——也就是滚动到边界。 auto - 默认。元素的滚动会传…

2024年及以后在您的项目中使用的最佳CSS框架

在过去几年中,CSS已经取得了长足的进步。在过去,您可能会使用CSS来创建依赖于HTML表格和CSS浮动作为其布局系统的简单外观的Web应用程序。而现在,您可以设计复杂的交互式用户界面,具有优雅的设计。 尽管CSS变得越来越先进&#x…

虚拟机centos7 网络IP冲突

修改其中一个虚拟机IP 1: 设置虚拟机网络配置器的模式为NAT模式,操作方式如下图所示 2:点击虚拟网络编辑器 3:点击NAT设置 4:点击DHCP配置 5: 修改配置文件来指定IP并可以连接到外网,在roo…

Oracle12cR2之EXP与IMP命令行工具多种使用方式

Oracle12cR2之EXP与IMP命令行工具多种使用方式 文章目录 Oracle12cR2之EXP与IMP命令行工具多种使用方式1. EXP命令行导出dump文件1. 完全模式2. 用户模式3. 表模式 2. 使用IMP命令行导入dump文件1. 与EXP导出对应的三种导入方式2. 使用参数文件方式导入dump文件 在Oracle数据库…

linux系统监控工具的补充内容

监控补充 注意在配置电话告警时候,出现创建新报警媒介类型失败zabbix的默认端口zabbix自定义键值报错 注意 模板导入不要勾选主机,因为主机ip与之前不同监听端口用的是tcp协议监控项是键值分为有变量和无变量报警信息自定义信息优先级比报警媒介模版优先…

【通讯录案例-数据存储总结 Objective-C语言】

一、我们简单的把“数据存储”总结一下, 1.上午,我们说的三种存储方式, 1)plist 2)Preference(偏好设置) 3)NSKeyedArchiver(归档、解档) 三种存储方式, 2.什么能做plist存储, 1)writeToFile:方法, 实际上,这个东西,才是关键, 有一个对象,可以去写w…

ETL数据集成工具DataX、Kettle、ETLCloud特点对比

ETL数据集成工具 对于数据仓库,大数据集成类应用,通常会采用ETL工具辅助完成。ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract) 、交互转换(transform) 、加载(load)至的端的过程当前的很多应…

spring @Transactional注解参数详解

事物注解方式: Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: 1 Transactional public class TestServiceBean implements TestService {}当类中某些方法不需要事物时: Transactional public class TestServiceBean implements TestService {private…