浅谈UVM/SV中的进程管理

本文探讨了System Verilog中的进程管理,重点介绍了fork的三种形式——join、join_any和join_none,以及wait fork和disable fork的用法。同时,提到了process类如何用于控制和查看进程状态,并指出UVM的phase机制如何应用这些概念。

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

在System  Verilog中 initial/always/task/function/fork  等都会产生进程,过程是自动产生的(process),用户不可以手动的产生process,但是可以引用已经存在的进程句柄,从而实现进程的管理,在实际的使用中,fork  进程是使用较多的情况,也是容易产生混淆的

3中格式的fork

fork  join  :   fork join 产生子进程中各个语句是并发执行的,会block 父进程的执行,直到所有子进程结束。

fork join_any:fork join-any 产生子进程中各个语句是并发执行的,会block 父进程的执行,直到任意一个子进程救赎。

fork join_none:子进程不会block父进程执行,子进程的执行时间是父进程遇到了延时或者阻塞语句(#0延时也是ok的)

与fork 进程相关的是wait  fork 以及disable fork,,,

wait fork:  等父进程的所有直接子进程结束(不用care 子进程本身产生的子进程(相对父进程来说就是孙进程))

disable  fork: kill  掉所有由父进程产生的子进程(包括子进程本身产生的子进程)

module   thread;
   initial begin
        fork
              child1();
              child2();
        join_none
        do_test();
        $display("%t,finsish the parent thread",$time);
   end
endmodule
task child1();
     #3;
     $display("%t calling the child1 thread1",$time);
endtask
task child2();
     #5;
   
在SystemVerilog (sv) 中,Universal Verification Methodology (UVM) 提供了一种机制来通过 DPI (Directed Programming Interface) 进行测试逻辑与硬件模型之间的交互。UVM DPI 子程序通常会使用特定的头文件,如 `uvm_hdl.svh`,其中可能包含对读取(如 `uvm_hdl_read`)和等待信号状态变化的方法。 然而,关于等待信号上升沿的具体功能,通常不在 UVM DPI 的标准库中直接提供类似于 `uvm_hdl_read` 的等待函数,这通常是驱动器 (`driver`) 或分析器 (`monitor`) 自定义行为的一部分。UVM DPI 更多的是用来实现数据传输和配置,而不是实时信号监控。 如果你需要在 sv 中等待信号上升沿,你可能会创建自定义的 DPI 函数,或者使用第三方库,或者编写一些底层的 sv 代码来实现这个功能。这可能涉及到信号的状态跟踪、时钟同步以及触发条件的设置。 具体示例可能涉及以下步骤: 1. **信号状态追踪**[^1]: 定义一个 DPI 函数来监视信号状态,比如 `uvm_hdl_monitor_signal_rising_edge`,它会在信号从低电平变为高电平时调用。 ```systemverilog function void uvm_hdl_monitor_signal_rising_edge(uvm_hdl_if ifc, uvm_reg_field field); // 实现信号上升沿监测逻辑 endfunction: uvm_hdl_monitor_signal_rising_edge ``` 2. **事件触发**: 当 `uvm_hdl_monitor_signal_rising_edge` 被调用时,可能触发一个事件或者回调到另一个 DPI 函数,进一步处理后续操作。 ```systemverilog uvm_event_type rising_edge_event; // 在 DPI 类中定义并注册事件 // 在 monitor 中调用上升沿监测函数 ifc.monitor(rising_edge_event, uvm_hdl_monitor_signal_rising_edge, field); ``` 请注意,以上代码仅作为概念性示例,实际实现会更复杂,取决于具体的测试环境和需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值