来都来了
不关注一下吗
来源| 杰瑞IC验证(ID:Jerry_IC)
|原创作者| 老黄鸭 Hello everybody,我们接着上期的 Process(1)-产生进程的方式(点击跳转) 继续讲解SystemVerilog中对于process的多种控制方式。 本期黄鸭哥主要给大家讲解 named block、wait_order、wait_fork、disable,还有SystemVerilog中的内建类:process类。1
Named block
Block,也就是语句块,SystemVerilog提供了两种类型的语句块,分别是begin…end为代表的顺序语句块,还有以fork…join为代表的并发语句块。 这两种block都是工程项目中常用的block,但是,大家可能都不知道block也是可以 命名 的,就像我们每个人的名字一样,名字是我们每个人的一个标识。 通过这个 标识 ,我们可以访问block中的 变量、parameter 等。

2
wait_order、wait fork
SystemVerilog提供了两大类process的控制方式,分别为wait和disable。 wait中又包含了三小类:wait、wait_order、wait fork。 其中,wait相对简单,在这就不说了,黄鸭哥只介绍后两种。 那么,什么是wait_order? 黄鸭哥总结一句:wait_order会 阻塞等待多个事件的触发 ,并且要求这几个 事件间发生的顺序和设置的一致 。 这句话该怎么理解呢? 我们来看下例子:


3
disable 、disable fork
上面说完了wait,我们接着说SystemVerilog中第二大类的进程控制方式:disable。 disable语句常用的多种方式包括:disable named_block、disable task_name和disable fork等,调用disable语句将会 终止指定的进程 。

4
内建类:process
SystemVerilog中内建了一种class,可以对进程进行访问和控制,此种class就是process,我们先来看下process类的原型:
Method | Describe |
self() | 获取当前进程的句柄,process类不能主动的通过new来进行创建,只能通过initial…begin…end,final…begin…end,4个always procedure,3个fork procedure和dynamic process来产生 |
status() | 获取当前进程的状态:FINISH: 该进程已经结束了RUNNING: 该进程正在运行WAITING: 该进程等待阻塞条件SUSPENDED:该进程停止了,等待resume,当前状态只能通过调用process类中的resume函数来解除KILLED: 该进程被强制终止了 |
kill() | 终止该进程以及该进程的子进程 |
await() | 等待其他进程结束,不能在该进程中,调用该方法,只能是别的进程调用本进程的await()来阻塞本进程 |
suspend() | 挂起该进程 |
resume() | 恢复该进程 |
srandom(int seed) | 设置进程的随机种子 |


总结
process就讲到这了,我们再回顾下今天的要点: 1、block可以进行命名,命名之后就可以通过标识名访问block内部的变量和parameter,还可以通过disable named_block终止此block。 2、进程的两大控制方式:wait、disable。 3、SystemVerilog内建类,process类,可以通过process类访问进程和控制进程。 4、三种终止进程的方式:disable、disable fork、process.kill()。 快乐的时光总是很短暂,又到了说拜拜的时候了,下次黄鸭哥将给你们带来新的主题。 别着急问新主题是什么,留着点悬念,下次将带给你们新的惊喜!——The End——

历史推荐
SystemVerilog中的Process(1)---产生进程的方式
disable fork,你真的会用吗?
IC验证之“Timescale”使用小谈(一)

留言板
