SV2 过程语句和子程序
SV2 过程语句和子程序
1 过程语句
- 可以在for循环中定义循环变量,其作用范围仅限于循环内部。
- 增加了自增、自减运算符++、- -。
- 可以定义块名。
- 为循环语句增加了continue和break语句。
2 任务、函数以及void函数
- 函数:可以有返回值,也可以无返回值,不能包含延时语句
- 任务:不能有返回值,可以包含延时语句
- SV扩展:函数可以调用包含延时的任务,但只能在fork...join_none中进行
3 任务和函数概述
- 不带参数的子程序在定义和调用时可以不加小括号
- begin...end块可以省略
4 子程序参数
4.1 C语言风格的子程序参数

4.2 参数的方向
- 缺省的类型和方向为“logic 输入”
4.3 高级的参数类型
- SV中,参数的传递方式可以指定为引用而不是复制
- 声明为ref参数后,可以修改变量值,并且修改结果对调用它的函数随时可见
![在这里插入图片描述]()
注:const修饰符使得函数内不能修改数组的值。
![在这里插入图片描述]()
![在这里插入图片描述]()
4.4 参数的缺省值



4.5 采用名字进行参数传递

5 子程序的返回
5.1 return语句

5.2 从函数中返回一个数组
- 建立一个数组类型,在函数声明中使用该类型
![在这里插入图片描述]()
- 通过引用进行数组参数的传递
![在这里插入图片描述]()
- 将数组包装到类中,然后返回类的句柄
6 局部数据存储
6.1 自动存储
Verilog中,如果试图在测试程序里的多个地方调用同一个任务,由于任务里的局部变量会使用共享的静态存储区,所以不同的线程之间会窜用这些局部变量。可以使用automatic声明为自动存储。

6.2 变量的初始化
- 局部变量在仿真开始前就会被初始化
![在这里插入图片描述]()
7 时间值
7.1 时间单位和精度
- timeunit 和 timeprecision 声明语句可以明确地为每个模块指明时间值
- 当使用这两个语句代替 `timescale 时,需要把它们放到每个带有延时的模块中
7.2 时间参数

7.3 时间和变量
- time类型的变量不能保存小数值
![在这里插入图片描述]()
![在这里插入图片描述]()
7.4 $time 和 $realtime的对比
- $time:不带小数部分
- $realtime:带小数部分的完整实数








浙公网安备 33010602011771号