微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > uvm环境中怎样停止一个systemverilog线程

uvm环境中怎样停止一个systemverilog线程

时间:10-02 整理:3721RD 点击:

各位大侠:
我现在想在uvm中停止一个线程不知怎样做,我的情况是
首先我在task a 中启动了一个线程

task a;
......
fork : error_check
.......
join_none

endtask
现在我想在task b中去停止这个线程,可是在task b中用disableerror_check 。显示 不识别error_check 标签,
项目中task a运行结束后肯定会运行task b,只是在task b和task a 之间有很多任务.我怎样才能把这个标签导出来呢?或者有没有其它的办法?

有一个办法是传process:
task a(ref process p);
fork begin: error_check
//spawn error_check thread
p = process::self();
error_check();
end
join_none
endtask
task b(ref process p);
....
p.kill();
endtask
process myproc;
a(myproc);
task1();
task2();
...
taskN();
b(p);//kill error_check thread

这就是进程间通信的问题了吧
用event啊 mailbox啊semaphore啊一个全局变量啥的只要让两个进程共享目前的状况就可以做到

whxqq 的方法可行,我check_error启动的是一个forever 循环,直接kill了比较好。

学习了

我只能说,有点高深了。

请教一下:vmm中有没有线程哦?好像没有见过。UVM不了。

这是systemverilog中的,和uvm与VMM无关系。

一般都是會在這個endfork 后面直接做事情,到需要等這個fork全部純種結束或是要kill他時,直接在那等待或kill的地方wait fork 或disable fork就OK了,但我還沒在碰到過在要kill的fork與kill的地方中間還插了fork的情況。看二樓的方法貌似是想把那個handle直接拿出來,但沒見過這個語句誒,不知道在哪里可以查看這個語句的用法

哦。谢谢解答。

我只能说,有点高深了。

我觉得3楼说得很好哈。

除了上面那个朋友提到的kill process的办法,还有一个简单的办法,就是用disable语句,它可以kill进程也可以kill task,如果是kill task 那么在该task里面衍生的所有进程都会被kill。
task a(ref bit kill_en);
fork:error_chk
begin
.....error check processing
end
begin
wait(kill_en == 1'b1);
disable a; ////kill this task a, and this will kill all the threads spawned in this task.
end
join_none
endtask
task b(ref bit kill_en);
kill_en = 1'b0 ;
......
if(satisfy kill condition)
kill_en = 1'b1 ;
......
endtask
....
bit kill_en = 0 ;
task a(kill_en);
task 1..2 ...3...;
task b(kill_en);
.......

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top