IC验证学霸笔记3—SV--线程(一)

1线程的使用

1.1程序和模块

•    线程即独立运行的程序。
•    线程需要被触发, 可以结束或者不结束。
•    在module中的initial和always,都可以看做独立的线程,它们会在仿真0时刻开始,而选择结束或者不结束。
•    硬件模型中由于都是always语句块 , 所以可以看成是多个独立运行的线程, 而这些线程会一直占用仿真资源, 因为它们并不会结束。
•    软件测试平台中的验证环境都需要由initial语句块去创建, 而在仿真过程中, 验证环境中的对象可以创建和销毁, 因此软件测试端的资源占用是动态的。 

2.线程的控制

2.1 fork.... join

2.2 fork...join_any



2.3 fork...join_none 

2.4 等待所有衍生线程

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

2.5 停止单个线程

在使用了fork.. join_any或者fork... join_none以后,我们可以使用disable来指定需要停止的线程。

 2.6 停止多个线程

disable fork可以停止从当前线程中衍生出来的所有子线程。 

 2.7 停止被多次调用的任务

如果你给某—个任务或者线程指明标号, 那么当这个线程被调用多次以后 , 如果通过disable去禁止这个线程标号, 所有衍生的同名线程都将被禁止。

•    任务wait_for_time_out被调用了三次, 从而衍生了三个线程。
•    线程0在#2延时之后禁止了该任务,而由于三个线程均是“ 同名”线程, 因此这些线程都被禁止了, 最终也都没有完成。

注:优秀验证学员随堂笔记,已经征求到学生的同意,会持续给牛友们分享!
大家看完记得 一键三连!多多支持
#做项目##深度学习##转行转岗经验分享##芯片IC验证工程师##你为什么选择硬件行业#
全部评论
满满的笔试知识,写的非常清楚
点赞 回复 分享
发布于 2022-09-06 10:47 陕西

相关推荐

评论
1
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务