You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SystemVerilog VPI应用如何在Re-Active区域中执行调度?

VPI在Re-Active区域调度任务的实现方法及Reactive PLI区域调度机制

1. VPI任务调度到Re-Active区域的方式

虽然IEEE 1800-2023第4.10节的表4-1未列出关联Re-Active区域的回调条目,但VPI规范的第38章明确提供了对应的调度手段:

  • 使用vpi_schedule_cb()函数,在构造vpiCbData结构体时,将reason字段指定为cbReactive。这个回调类型专门用于将VPI操作绑定到Re-Active区域集合中的Reactive PLI region。
  • 极简示例:
vpiCbData cb_info = {0};
cb_info.reason = cbReactive;
cb_info.cb_rtn = reactive_pli_callback; // 自定义的回调函数
cb_info.user_data = (void*)"user_context"; // 可选的用户数据
vpi_schedule_cb(&cb_info);
  • 如果需要响应特定信号变化并在Re-Active区域执行逻辑,可先注册cbValueChange回调监听信号更新,再在该回调内部调用vpi_schedule_cb()调度cbReactive类型的操作,确保逻辑在Re-Active阶段执行。

2. Reactive PLI区域的调度机制

依据IEEE 1800-2023第4章的调度器模型:

  • Re-Active区域集合是Active区域执行完毕后的下一个调度阶段,触发条件为Active区域内产生了需要重新评估的信号更新(比如组合逻辑敏感信号的变化)。
  • Re-Active区域集合的执行顺序固定:
    1. Reactive PLI region:所有通过cbReactive调度的VPI回调优先执行,优先级高于SystemVerilog原生的Reactive区域代码。
    2. Reactive region:处理SystemVerilog代码中因Active区域更新触发的组合逻辑重评估等操作。
  • 该阶段会循环执行,直到没有新的信号更新产生,才会进入后续的Non-Blocking Assignment(NBA)区域等调度阶段。

补充:IEEE 1800-2023第38.4.1节明确定义了cbReactive回调类型,这是Re-Active区域PLI调度的核心依据,只是未在第4.10节的表4-1中列出,容易被遗漏。

内容的提问来源于stack exchange,提问作者garethw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:33:14