uvm_event_callback.svh 实现了uvm_event_callback,uvm_event_callback直接从uvm_object扩展而来,是个参数化的类,该类用于uvm_event的callback。该类中,实现了两个function:pre_trigger和post_trigger,使用该类时需重载这两个函数。pre_trigger中默认返回0,如果如要在触发时间之前做判断,可以重载pre_trigger函数使其返回1,这样就不再触发event且不执行post_trigger。post_traigger在触发uvm_event之后自动执行,默认返回0,用户可重载该callback函数实现自定义功能。
uvm_event.svh 中实现了uvm_event机制,实现了两个类:uvm_event_base和uvm_event。
uvm_event_base直接扩展自uvm_object,相当于在SystemVerilog event基础上包了层uvm的外衣。除了sv event支持的属性外,uvm_event_base还能保存waiter的数目且支持callback。uvm_event_base中实现的主要方法有:
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | wait_on | 等待事件on。事件触发函数trigger中会将on置一,若事件已经被触发直接返回,返回前可定义#0以避免进程竞争;若事件未触发,等待触发且num_waiters计数加一 |
| 2 | wait_off | 等待事件off。事件reset函数中会将on置零,若事件触发后已被reset则直接返回,返回前可定义#0以避免进程竞争;若事件触发后尚未reset,等待事件reset,且num_waiters计数加一 |
| 3 | wait_trigger | 等待事件触发。@m_event且num_waiters++。该函数不会判断此前事件是否已被触发,若事件早前已被触发,则等待下次触发 |
| 4 | wait_ptrigger | 等待事件触发,若此前事件已触发,则直接返回 |
| 5 | get_trigger_time | 返回事件的触发事件,在事件触发函数trigger中会记录该时间 |
| 6 | is_on | 判断事件是否on,事件触发之前on=0,事件触发后on=1,reset中on=0,即判断事件是否处于trigger后reset前 |
| 7 | is_off | 判断事件是否off,即判断事件是否处于reset后trigger前 |
| 8 | reset | reset事件,num_waiters置零,trigger_time置零,on置零。用户还可以指定输入参数bit wakeup=1来触发事件释放所有阻塞住的进程,默认不触发 |
| 9 | cancel | num_waiters减一,多用于某进程被kill/disable之后 |
| 10 | get_num_waiters | 获取num_waiters值 |
| 11 | get_type_name | 返回type_name |
| 12 | do_print | 钩子函数,把on/num_waiters/trigger_time变量注册进printer.print_field_int,在调用print进行打印的时候能够打印出来 |
| 13 | do_copy | 钩子函数,类型转换 |
uvm_event派生自uvm_event_base,其中实现的方法有:
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | wait_trigger_data | 调用wait_trigger等待事件触发,调用get_trigger_data获取触发数据 |
| 2 | wait_ptrigger_data | 跟wait_trigger的唯一区别是调用了wait_ptigger而非wait_trigger |
| 3 | trigger | 触发事件。用户可传递data进来,供pre_trigger和post_triger取用。pre_trigger和post_trigger在下文uvm_event_callback类中介绍。触发事件之后num_waiters清零,on=1,记录trigger_data及触发时间。 |
| 4 | get_trigger_data | 获取触发时间 |
| 5 | get_type_name | 返回type_name |
| 6 | add_callback | 添加注册uvm_event_callback,若已注册则报warning并退出。用户可指定该callback是加到callback队列的队首或队尾 |
| 7 | delete_callback | 从uvm_event_callback队列中删除当前callback |
| 8 | do_print | 在uvm_event_base do_print基础上添加了trigger_data |
| 9 | do_copy | 在uvm_event_base do_copy基础上添加了trigger_data |
本文详细介绍了UVM框架中的uvm_event机制,包括uvm_event_base和uvm_event的使用方法,以及如何通过uvm_event_callback实现事件回调功能。
1180

被折叠的 条评论
为什么被折叠?



