数字验证学习笔记——SystemVerilog芯片验证19 ——线程的控制

一、线程的控制

1.1 fork并行线程语句块

在这里插入图片描述
fork join_any 当T3结束时,退出fork join_any 后,T1和T2还会执行。

1.1.1 fork … join

在这里插入图片描述
在这里插入图片描述
上述代码中,在fork join中开辟了4个子线程,当4个子线程执行完之后,才能执行下面的$dispaly语句。

1.1.2 fork … join_any

在这里插入图片描述
在这里插入图片描述

1.1.3 fork … join_none

在这里插入图片描述
在这里插入图片描述
fork join_none 与 fork join_any 不同的是先执行after join_none 在执行 parallel start。

如果上述三行代码最后都没有“… finish after”那句代码,只有fork join在仿真结束之前,可以将之前打印的句子都打印完全。

1.2 等待所有衍生线程

  • 在SV中,当程序中的initial块全部执行完毕,仿真器就退出了。
  • 如果我们希望等待fork块中的所有线程执行完毕再退出结束initial块,我们可以使用wait fork语句来等待所有子线程结束。
    在这里插入图片描述

1.3 停止线程

1.3.1 停止单个线程

  • 在使用了fork join_any 或者 fork join_none以后,我们可以使用disable来指定需要停止的线程。
    在这里插入图片描述

1.3.2 停止多个线程

  • disable fork 可以停止从当前线程中衍生出来的所有子线程。
    在这里插入图片描述

1.3.3 停止被多次调用的任务

  • 如果你给某一个任务或者线程指明标号,那么当这个线程被调用多次以后,如果通过disable去禁止这个线程标号,所有衍生的同名线程都将被禁止
    在这里插入图片描述
    在这里插入图片描述
    在initial begin end 调用了三次wait_for_time_out()任务,因为wait_for_time_out()里面是fork join_none 相当于并行执行。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值