uvm_heartbeat.svh实现了uvm_heartbeat类及回调类uvm_heartbeat_callback。uvm_heartbeat,心跳检测仪,用以监测环境内指定component的生命活动,若component hang住了,会报fatal
。uvm_heartbeat监测期间需在component中提起(或撤销)objection才能实现有效监测。监测模式有4中,定义在了枚举类型uvm_heartbeat_modes中,分别为UVM_ALL_ACTIVE、UVM_ONE_ACTIVE、UVM_ANY_ACTIVE、UVM_NO_HB_MODE,各模式释义如下:
UVM_ALL_ACTIVE
:受监测的所有component中,任意一个component没有触发event都会报fatal;
UVM_ANY_ACTIVE
:受监测的所有component均没有触发event则报fatal;
UVM_ONE_ACTIVE
:受监测的所有component中,若在多个component中监测到了event或任意component中都没有检测到event,则报fatal;
UVM_NO_HB_MODE
:不启动heartbeat
uvm_heartbeat类中主要实现了如下表格中的方法,来设置监测模式、启动/停止heartbeat监测、增加/移除监测的object等。
序号 | 方法 | 描述 |
---|---|---|
1 | new | 例化指定uvm_component cntxt的heartbeat并创建cntxt的heartbeat_callback,cntxt为空则采采用uvm_component root |
2 | set_mode | 设置uvm_heartbeat模式,默认UVM_NO_HB_MODE |
3 | set_heartbeat | 调动了start(event),作用与start差不多,若某个component不存在则cnt及其此前触发时刻清零,若触发event与此前触发时间均为空则返回。 |
4 | start | 启动heartbeat监测。若当前event与start指定触发的event均为空则报警;若此前已经开始监测,start指定触发的event与当前event不同则会报错。 |
5 | stop | 停止监测。该function中触发stp_event、关闭callback。再次start之前必须stop |
6 | add | 指定单个component加入受监测的component集合队列中。若未启动监控,该函数不会触发监控;若已启动监控,调用该函数直接把指定component加入监控队列。 |
7 | remove | add的反操作,把指定单个component从受监控component队列里删除。 |
uvm_heartbeat_callback类,主要实现了以下方法:
序号 | 方法 | 描述 |
---|---|---|
1 | raised | 每raise一次cnt计数加一,并更新raise时刻 |
2 | dropped | 调用raised |
3 | reset_counts | 所有heartbeat计数器清零 |
4 | object_triggered | 计数,触发heartbeat检测的object数目 |