[sv]进程相关

本文探讨了进程控制中的关键概念,包括fork-join机制、任务隔离以及disable进程的影响。强调了在禁用进程时需谨慎,以免造成资源锁死。同时,介绍了uvm中的动态复位操作,以及不同fork语法在创建并发任务时的差异。内容涵盖了进程通信、并发控制和软件调试的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

过程记录,持续更新。。。

 

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

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值