• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

uvm_event中wait_trigger和wait_ptrigger的不同

  // Task: wait_trigger
  // Waits for the event to be triggered. 
  // If one process calls wait_trigger in the same delta as another process
  // calls <trigger>, a race condition occurs. If the call to wait occurs
  // before the trigger, this method will return in this delta. If the wait
  // occurs after the trigger, this method will not return until the next
  // trigger, which may never occur and thus cause deadlock.

  virtual task wait_trigger ();
    num_waiters++;
    @m_event;
  endtask


  // Task: wait_ptrigger
  // Waits for a persistent trigger of the event. Unlike <wait_trigger>, this
  // views the trigger as persistent within a given time-slice and thus avoids
  // certain race conditions. If this method is called after the trigger but
  // within the same time-slice, the caller returns immediately.

  virtual task wait_ptrigger ();
    if (m_event.triggered)
      return;
    num_waiters++;
    @m_event;
  endtask
  1. @会阻塞一个进程,直到@的事件被触发(->)后,该进程才会unblock。如果事件触发(->event)在@event先执行,则@event的进程会一直被阻塞住。如果->event和@event发生在同一个time step,就会造成竞争冒险,因为无法确认他们哪一个先执行。

  2. event的triggered属性的持续时间是一个time step, 因此它解决了触发事件和等待事件在同一个time step时的竞争冒险问题。只要wait(event.triggered)在->event之前执行,或者在同一个time step执行,都能正确地等到事件。

wait_trigger的用法:
1)如果wait_trigger在trigger之后调用,那@是等不到->的,就不会被trigger触发。
2)在wait_trigger被trigger过一次之后,并不用调用event.reset()重置event。依然可以使用wait_trigger阻塞并等待下一次的trigger。
wait_ptrigger的用法:
与wait_trigger的区别就是多了个对m_event.triggered的判断。这个triggered的标记,会保持一个time slot,下一个time slot就会丢失。如果触发过,会立即返回。
所以wait_ptrigger是使用在如下场合:当trigger()和wait()的调用可能发生在同一个cycle时,并且懒得区分谁可能会被先调用,那么就用wait_ptrigger,可以保证同一个time slot调用时,依然能够被触发。

posted on 2023-02-05 19:23  SOC验证工程师  阅读(2048)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3