SystemVerilog过程语句(七)

本文详细介绍了SystemVerilog在Verilog基础上增加的++/--操作符、组合逻辑与时序逻辑的区别、赋值语句的新形式,以及逻辑相等、条件相等和通配符比较等特性。此外,涵盖了强制类型转换、尺寸转换、循环结构、跳转语句和特殊case语句的使用。
  1. SystemVerilog在Verilog的基础上增加了递增操作符++和递减操作符–。使用方法与C语言中一样。递增和递减是阻塞赋值,所以一般都只用在组合逻辑中
// 这两条语句是相同的
i++;
i = i + 1;
// 下面这样就是错误的,不能写在时序逻辑中,所以要写成count <= count + 1;
always_ff @ (posedge clock)
	if(!resetN)
		count <= 0;
	else
		count ++;

always_ff @ (posedge clock)
	case(state)
		HOLD: if(count == MAX)
		...
  1. SystemVerilog新增了一些新的赋值语句,这些新的操作符将一些操作符和赋值组合到一起,类似于C语言那样。这些操作符是阻塞赋值,只用在组合逻辑中。新增的操作符如下表。
// 下面这两个语句是一样的
out += in;
out = cout + in;

### 语法规则 在 SystemVerilog 中,类(class)是一种用户自定义的数据类型,用于封装数据和方法。类的基本声明语法如下: ```systemverilog class class_name; // 数据成员(变量) data_type variable_name; // 方法(任务和函数) function return_type function_name(input data_type arg1, ...); // 函数体 endfunction task task_name(input data_type arg1, ...); // 任务体 endtask // 构造函数 function new(); // 初始化代码 endfunction endclass ``` 其中,`class_name` 是类的名称,`data_type` 是数据类型,`variable_name` 是变量名,`return_type` 是函数的返回类型,`function_name` 和 `task_name` 分别是函数和任务的名称。构造函数 `new` 用于在创建类的对象时进行初始化操作。 ### 使用方法 #### 类的实例化 类本身只是一个模板,需要创建对象(实例)才能使用。可以使用 `new` 操作符来实例化一个类: ```systemverilog class_name object_name = new(); ``` #### 访问类的成员 通过对象名和点号(`.`)来访问类的成员: ```systemverilog object_name.variable_name = value; object_name.function_name(arg1, ...); object_name.task_name(arg1, ...); ``` #### 继承和多态 SystemVerilog 支持类的继承,子类可以继承父类的成员,并可以重写父类的方法。使用 `extends` 关键字来实现继承: ```systemverilog class derived_class extends base_class; // 子类特有的成员和方法 endclass ``` 在子类中可以使用 `super` 关键字来引用父类的成员,当父类中的成员、参数被子类重载了,并且还想在子类中使用重载之前的父类的成员,那么要用 `super` [^3]。 ### 应用场景 #### 验证环境 在硬件验证中,类常用于构建验证环境,如测试平台(testbench)、激励发生器(driver)、监测器(monitor)等。通过类的封装和继承特性,可以方便地组织和管理验证代码。 #### 事务级建模 类可以用于事务级建模,将硬件系统的行为抽象为一系列事务,通过类的方法来模拟事务的处理过程。 ### 注意事项 class 里的 method 的 lifetime 必须为 automatic,如果定义成 static 是非法的(这里不是指 static task,而是 task 内 static 的 variables 或 arguments) [^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值