SV2 过程语句和子程序

SV2 过程语句和子程序

1 过程语句

  • 可以在for循环中定义循环变量,其作用范围仅限于循环内部。
  • 增加了自增、自减运算符++、- -。
  • 可以定义块名。
  • 为循环语句增加了continue和break语句。

2 任务、函数以及void函数

  • 函数:可以有返回值,也可以无返回值,不能包含延时语句
  • 任务:不能有返回值,可以包含延时语句
  • SV扩展:函数可以调用包含延时的任务,但只能在fork...join_none中进行

3 任务和函数概述

  • 不带参数的子程序在定义和调用时可以不加小括号
  • begin...end块可以省略

4 子程序参数

4.1 C语言风格的子程序参数

在这里插入图片描述

4.2 参数的方向

  • 缺省的类型和方向为“logic 输入”

4.3 高级的参数类型

4.4 参数的缺省值

![在这里插入图片描述]( https://img-blog.csdnimg.cn/1246ee46f5d24c0f8f66fe42ac98e2ec.png?x-oss-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAdGhvbXBzb25t,size_14,color_FFFFFF,t_70,g_se,x_16)
在这里插入图片描述
在这里插入图片描述

4.5 采用名字进行参数传递

![在这里插入图片描述]( https://img-blog.csdnimg.cn/996787b5d1eb4e84bff7be07348e951b.png?x-oss-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAdGhvbXBzb25t,size_13,color_FFFFFF,t_70,g_se,x_16)

5 子程序的返回

5.1 return语句

![在这里插入图片描述]( https://img-blog.csdnimg.cn/990fffade7ed41679dcf3769b4a8bdc2.png?x-oss-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAdGhvbXBzb25t,size_12,color_FFFFFF,t_70,g_se,x_16)

5.2 从函数中返回一个数组

6 局部数据存储

6.1 自动存储

Verilog中,如果试图在测试程序里的多个地方调用同一个任务,由于任务里的局部变量会使用共享的静态存储区,所以不同的线程之间会窜用这些局部变量。可以使用automatic声明为自动存储。
![在这里插入图片描述]( https://img-blog.csdnimg.cn/52384091c8e54edaadccd39c83cd4fa1.png?x-oss-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAdGhvbXBzb25t,size_14,color_FFFFFF,t_70,g_se,x_16)

6.2 变量的初始化

  • 局部变量在仿真开始前就会被初始化
    在这里插入图片描述

7 时间值

7.1 时间单位和精度

  • timeunit 和 timeprecision 声明语句可以明确地为每个模块指明时间值
  • 当使用这两个语句代替 `timescale 时,需要把它们放到每个带有延时的模块中

7.2 时间参数

![在这里插入图片描述]( https://img-blog.csdnimg.cn/d3d80eedd3c54feca78a35eb6ac68585.png?x-oss-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAdGhvbXBzb25t,size_14,color_FFFFFF,t_70,g_se,x_16)

7.3 时间和变量

7.4 $time 和 $realtime的对比

  • $time:不带小数部分
  • $realtime:带小数部分的完整实数
posted @ 2021-09-23 20:35  thompsonm  阅读(187)  评论(0)    收藏  举报