IC验证学霸笔记3—SV--线程(一)
1线程的使用
1.1程序和模块 • 线程即独立运行的程序。
• 线程需要被触发, 可以结束或者不结束。
• 在module中的initial和always,都可以看做独立的线程,它们会在仿真0时刻开始,而选择结束或者不结束。
• 硬件模型中由于都是always语句块 , 所以可以看成是多个独立运行的线程, 而这些线程会一直占用仿真资源, 因为它们并不会结束。
• 软件测试平台中的验证环境都需要由initial语句块去创建, 而在仿真过程中, 验证环境中的对象可以创建和销毁, 因此软件测试端的资源占用是动态的。
• 线程需要被触发, 可以结束或者不结束。
• 在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验证工程师##你为什么选择硬件行业#• 线程0在#2延时之后禁止了该任务,而由于三个线程均是“ 同名”线程, 因此这些线程都被禁止了, 最终也都没有完成。
注:优秀验证学员随堂笔记,已经征求到学生的同意,会持续给牛友们分享!
大家看完记得 一键三连!多多支持
查看11道真题和解析