Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SystemVerilog class的简短介绍

SystemVerilog class的简短介绍

作者头像
tech life
发布于 2024-07-02 09:10:05
发布于 2024-07-02 09:10:05
20500
代码可运行
举报
运行总次数:0
代码可运行

Class Types

当你声明一个class时,你正在声明一组成员和一组对这些成员操作的方法。

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyClass; 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 bit [7:0] member1;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 bit member2;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 function void method;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   $display("members are %h %b", member1, member2);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 endfunction
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
endclass
代码语言:javascript
代码运行次数:0
运行
复制

我们正在声明一个class的形式和行为,但没有分配任何内容来存储这种类的值。

Class Objects

类对象是类的特定实例。创建对象的唯一方法是使用类的内置new()方法调用类构造函数。

Class Handles

每次调用new()方法时,它都会构造一个新的类对象,该方法会返回类对象的类句柄。句柄是对类对象的间接引用,就像指向内存中地址的指针一样。

Class Variables

类变量是存储引用特定class类型的特定类对象的类句柄的地方。

有点拗口~

声明类变量不会创建类对象,只会创建保存类句柄的空间。这与其他数据类型形成鲜明对比,在其他数据类型中,变量的声明会创建该类型的对象,并为你提供一个符号名称来引用这些对象。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typesef struct {bit [7:0] member1; bit member2;} MyStruct;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MyStruct StructVar1,StrucVar2

这为两个MyStruct类型对象创建和分配空间,可以使用StructVar1.member1访问其成员之一。

另一方面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MyClass ClassVar1,ClassVar2;

这为两个MyClass变量创建和分配空间,但只分配空间来保存MyClass对象的句柄,而不是对象本身。如果你现在尝试访问ClassVar1.member1,你将收到一个空句柄引用错误,因为类变量的初始值是特殊值null

关于句柄而不是指针的好处之一是,它们消除了访问未初始化的对象引用的可能性。

Class Types, Objects, Handles, and Variables

一旦你有了类变量,就可以调用new()方法来构建类对象

ClassVar1 = new();

这调用MyClass类型的构造函数,该构造函数将该句柄存储在MyClass变量ClassVar1中。你现在可以访问ClassVar1.member1,因为ClassVar1引用了一个实际的对象。如果你那么做: ClassVar2 = ClassVar1; 两个类变量现在都引用了同一个类对象——但MyClass仍然只有一个对象。ClassVar1.member1和ClassVar2.member1指的是同一个类成员。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字芯片实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《C++初始化列表陷阱:谨慎前行,避免潜在风险》
一 在 C++编程中,初始化列表是一个强大的工具,它允许在对象创建时直接初始化成员变量。然而,就像任何强大的工具一样,如果使用不当,初始化列表也可能会带来一些陷阱。在本文中,我们将深入探讨 C++中的初始化列表陷阱,并提供一些避免这些陷阱的方法。
程序员阿伟
2024/12/09
1380
Java下static关键字用法详解
  本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家。
哲洛不闹
2018/09/19
6820
Java下static关键字用法详解
C++相关基础知识总结笔记
尖括号形式时,预处理器会在标准系统目录中搜索头文件。这种方式主要用于包含标准库提供的头文件,如 <iostream>、<vector> 等。
晨星成焰
2024/09/24
4760
C++相关基础知识总结笔记
C++必知必会之基础知识-常用关键(3)
在C++中,位域(bit fields)是一种特殊的数据结构,允许将结构体或类的成员变量按位进行分配。通过位域,可以有效地利用内存,节省存储空间,特别适用于表示布尔类型、标志位或其他不需要完整字节的数据。
Linux兵工厂
2023/09/15
2460
C++必知必会之基础知识-常用关键(3)
【C++指南】类和对象(二):类的默认成员函数——全面剖析 :构造函数
理解并正确实现这些默认成员函数对于编写健壮、可维护的C++代码至关重要。它们不仅影响着对象的性能,还直接关系到程序的安全性和正确性。然而,这些函数的自动生成和默认行为往往无法满足所有情况的需求,特别是在涉及资源管理、动态内存分配或复杂数据结构时。因此,作为C++开发者,我们有必要深入了解这些默认成员函数的工作原理,学会在适当的时候自定义它们以满足特定的需求。 本文旨在详细讲解C++中类的默认成员函数,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载函数以及取地址运算符重载函数的基本概念、使用场景、实现细节和注意事项。 通过本文的学习,读者将能够更加熟练地运用这些默认成员函数,编写出更加高效、安全、易于维护的C++代码。
倔强的石头_
2024/12/06
4630
【C++指南】类和对象(二):类的默认成员函数——全面剖析 :构造函数
【Python 入门第十六讲】类(Class)和对象(Object)
类是用户定义的蓝图或原型,从中创建对象。类提供了一种将数据和功能捆绑在一起的方法。创建新类会创建一种新类型的对象,从而允许创建该类型的新实例。每个类实例都可以附加属性以维护其状态。类实例还可以具有用于修改其状态的方法(由其类定义)。
不惑
2024/02/11
1.4K0
【Python 入门第十六讲】类(Class)和对象(Object)
Java语言中的面向对象特性总结
【课前思考】    1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?    2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?    3. 你知道java语言在面向对象编程方面有何独特的特点吗? 
全栈程序员站长
2021/12/28
5160
C/C++开发基础——类对象与构造析构
private: 类的成员可以被同一个类中的成员函数访问,或者被友元函数访问,该修饰符可以禁止一些针对类中成员的高风险操作。
Coder-ZZ
2023/09/18
3560
C/C++开发基础——类对象与构造析构
七、构造函数与析构函数
在C++中,构造函数是一种特殊的成员函数,它用于初始化类的对象。当创建类的对象时,构造函数会被自动调用。构造函数的名字与类的名字相同,并且没有返回类型(即使是void也没有)。
用户11332765
2024/10/28
4440
类和对象(下)
虽然看起来这两种方式都能达到相同的效果,但在效率上有所不同。对于内置类型(如 int、double),差别不大,但对于复杂类型,初始化列表可以避免不必要的临时对象创建和拷贝操作。
用户11286421
2024/09/23
2370
类和对象(下)
C++小知识点
由于结构体内存在 next指针 ,而申请结构体空间后同时定义了 next指针 ,此时 next指针 未指向任何空间,故在测试时可能导致上述错误。
小锋学长生活大爆炸
2025/05/24
1560
C++小知识点
SystemVerilog类与继承
类(class):包含成员变量和成员方法;verilog对应模块(module);
数字芯片社区
2020/07/20
1.2K0
Java 基础教学:基础语法-变量与常量
变量是程序设计中的基本概念,它用于存储信息,这些信息可以在程序执行过程中被读取和修改。
世间万物皆对象
2024/10/24
1890
Java官方笔记4类和对象
定义了类MyClass继承类MySuperClass,并实现接口YourInterface。类只能有一个父类,但是能实现多个接口。
dongfanger
2023/06/10
2950
Java官方笔记4类和对象
python Class(类) and
Python类与面向对象    程序=指令+数据 (或算法+数据结构)。代码可以选择以指令为核心或以数据为核心进行编写。    两种类型        (1)以指令为核心:围绕“正在发生什么”进行编写(面向过程编程:程序具有一系列线性步骤;主体思想是代码作用于数据)以指令为中心,程序员的主要工作在于设计算法。        (2)以数据为核心:围绕“将影响谁”进行编写(面向对象编程OOP:围绕数据及为数据严格定义的接口来组织程序,用数据控制对代码的访问) 面向对象编程的核心概念     所有编程语言的最终目的都是提供一种抽像方法。     在机器模型("解空间"或"方案空间")与实际解决的问题模型("问题空间")之间,程序员必须建立一种联系。     (1)面向过程:程序=算法+数据结构     (2)面向对象:将问题空间中的元素以及它们在解空间中的表示物抽象为对象,并允许通过问题来描述问题而不是方案(可以把实例想象成一种新型变量,它保存着数据,但可以对自身的数据执行操作)     类是由状态集合(数据)和转换这些状态的操作集合组成     类:定义了被多个同一类型对象共享的结构和行为(数据和代码)     (1)类的数据和代码:即类的成员         数据:成员变量或实例变量         成员方法:简称为方法,是操作数据的代码,用于定义如何使用成员变量;因此一个类的行为和接口是通过方法来定义的。     (2)方法和变量:         私有:内部使用;公共:外部可见  面向对象的程序设计方法     所有东西都是对象;程序是一大堆对象的组合。     通过消息传递,各对象知道自己该做什么。
py3study
2020/01/15
1K0
一分钟学Python| 面向对象(上)
面向对象编程的语言中,具有相同的属性或能力的模型是使用类进行定义的。在程序中需要编写出能反映现实世界事物的类,并基于类来创建对象。
Python进击者
2020/10/27
3980
剖析【C++】——类和对象(下篇)——超详解——小白篇
构造函数是用来初始化对象的特殊函数。当我们创建一个对象时,编译器会自动调用构造函数来给对象的成员变量赋值。
小李很执着
2024/06/15
1390
Java基础01 从HelloWorld到面向对象
Java是完全面向对象的语言。Java通过虚拟机的运行机制,实现“跨平台”的理念。我在这里想要呈现一个适合初学者的教程,希望对大家有用。 "Hello World!" 先来看一个HelloWorld.java程序。这个程序在屏幕上打印出一串字符"Hello World!": public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!");
Vamei
2018/01/18
7030
Java基础01 从HelloWorld到面向对象
C# .NET面试系列二:面向对象
构造函数(Constructor)是一种特殊类型的方法,它在创建类的实例(对象)时被调用,用于初始化对象的状态。构造函数的名称必须与包含它的类的名称相同,并且没有返回类型。
GoodTime
2024/03/07
4983
C# .NET面试系列二:面向对象
Python 高级教程之类
类是用户定义的蓝图或原型,从中创建对象。类提供了一种将数据和功能捆绑在一起的方法。创建一个新类会创建一种新类型的对象,允许创建该类型的新实例。每个类实例都可以附加属性以维护其状态。类实例也可以有方法(由它们的类定义)来修改它们的状态。
海拥
2022/05/07
4600
相关推荐
《C++初始化列表陷阱:谨慎前行,避免潜在风险》
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档