过程记录,持续更新。。。
1.如果某个进程特意命令(比如fork:t123 ... Join),如果disable t123,那么所有被标记为t123的进程(比如如果一个task被调用多次,或者一个class被例化多次),都会被kill掉
2.task可以起到一定的隔离作用?(实测不行,不能通过task进行fork-join的隔离)
3.fork-join可以对内部的disable fork的作用范围进行隔离
4.可以使用process获得进程信息,精准地进行进程控制
声明: process A,B;
获取: A = process::self(); B = process::self();
控制: A.kill(); B.kill();
5.在disable某个进程时,一定要查看该进程中都有哪些任务,不能简单粗暴直接kill/disable。(比如寄存器读写过程中,寄存器模型里面的write/read等函数,会使用sempore进行锁定,如果强行disable寄存器操作的进程,那么可能sempore还没有被释放,导致后续不能对该寄存器进行操作,进程卡死)
6.对于uvm,进行动态复位时,reset时需要kill seq,sqr和drv之间的通信,然后disable task。seq.kill只会kill掉当前seq,sqr.stop_sequences杀掉所有seqs
7. fork...join
for(int i=0; i < 3; i++) begin
fork
automatic j = i;
......
join_none
end
for(int i=0; i < 3; i++) begin
fork
begin
automatic int j = i;
......
end(包起来,导致编译时变量不可见,不会创建)
join_none
end
for(int i=0; i < 3; i++) begin
fork
automatic int j;
j = i; (编译时候只是创建变量,没有赋值)
......
join_none
end