跳转至

输入查询内容

    本页内容

    旧录制取时开关失效:明确事务时间契约

    影响范围

    传入 +UVM_VERDI_BEGIN_TR_REALTIME,并依赖 uvm_tr_stream::open_recorder 的默认取时路径。

    具体差异

    未定义 UVM_VERDI_FORCE_BEGIN_TR_TIME 时,1.2 在 open_time 为 0 时按旧 plusarg 在 $realtime$time 间选择,并赋给 time 变量;2.0 固定使用 $time。两版均可传入非零 open_time;两版的 FORCE 宏仍会强制置零。因此不能把删除 plusarg 直接解释为所有事务必然损失时间精度,也不能认为 time 参数能保留任意小数。

    修改方案

    若只需目标默认取时,删除失效 plusarg 后核对实际事务时间;若已有明确的整数时间契约,在调用 stream.open_recorder(name, recorded_time, type_name) 时传入按项目单位换算的非零 time。原先依赖小数分辨率或 Verdi 展示的路径需核对源 timeunit/timeprecision、time 转换和后端;没有已验证的通用开关替换。

    兼容措施与范围:兼容开关和 compat 包不恢复旧取时 plusarg;显式非零 time 只固定该参数,不能恢复被量化的小数部分。UVM_VERDI_FORCE_BEGIN_TR_TIME 定义时仍优先置零。

    迁移后验证

    检查调用点时间单位、0/非零参数和 FORCE 宏;对所需时间间隔核对 recorder.get_open_time 与实际 Verdi 展示。若依赖小数时间,在实际集成中验证量化和舍入,不能只检查参数存在。

    记录本条结果M02-017 · 状态与证据

    已有实测与复现

    vendor_migration_probe 未定义 FORCE 宏,显式传入 time 值 7,两个库的 get_open_time() 均返回 7。旧开关默认取时及小数精度差异仅作源码核对,尚无全部 Verdi 集成实测。

    补充查阅

    扫描定位与记录结果

    有扫描规则,覆盖部分可识别写法。脚本检查名称、参数和部分 FLAG 表达式,并对少数直接声明关联使用点;未做完整类型解析或预处理,行为结果仍需验证。

    uv run tools/uvm_migration_scan.py <SoC代码目录> --rules D14
    

    核对命中对象及生效分支后,在条目清单记录修改与验证证据;扫描规则记录用于整理命中位置。

    扫描器下载、输入范围与报告说明

    源码与标准依据

    核查方式:源码与实测核对。实测仅覆盖本条所列场景。

    1. 默认取时分支移除旧 plusarg,显式时间与 FORCE 分支保留

    VCS 内置 UVM-1.2:根据 plusarg 选择并存入 time:uvm_tr_stream.svh:320–337

    VCS 内置 uvm-ieee-2020-2.0:open_time 为 0 时直接取 $time:uvm_tr_stream.svh:262–272

    补充定位

    VCS 内置 UVM-1.2uvm_tr_stream.svh:320–337

    VCS 内置 uvm-ieee-2020-2.0uvm_tr_stream.svh:262–272

    标准依据:旧 plusarg 是 Synopsys 定制;Accellera 两版无此分支。此处结论基于实际源码,不宣称已验证所有工具时间显示。

    标为“源码标注”或未注明原文核对的条款仅作定位;具体库行为以源码和实测为准。

    引用代码(高亮为引用行);上方行号链接可直接定位。

    src/vcs-uvm-1.2/base/uvm_tr_stream.svh
       // Transaction recorders can only be opened if the stream is
       // ~open~ on the database (per <is_open>).  Otherwise the
       // request will be ignored, and ~null~ will be returned.
       function uvm_recorder open_recorder(string name,
                                          time   open_time = 0,
                                          string type_name="");
      // Modified by Verdi P10049895-133093, P10049895-142165
          time m_time;
    `ifdef UVM_VERDI_FORCE_BEGIN_TR_TIME
          m_time = 0;
    `else    
          // m_time = (open_time == 0 ) ? $time : open_time; 
    
          static bit b_use_realtime = ($test$plusargs("UVM_VERDI_BEGIN_TR_REALTIME")) ? 1 : 0;
          if(open_time != 0)
             m_time = open_time;
          else 
             m_time = b_use_realtime ? $realtime : $time; 
    `endif
      // End
    

    完整源码 · SHA256:4e373501ca2bc9af44d4f168043d2ce07725ff3115a3966455b51529e48839d5

    src/vcs-uvm-ieee-2020-2.0/base/uvm_tr_stream.svh
       // @uvm-ieee 1800.2-2020 auto 7.2.5.1
       function uvm_recorder open_recorder(string name,
                                          time   open_time = 0,
                                          string type_name="");
      // Modified by Verdi P10049895-133093
          time m_time;
    `ifdef UVM_VERDI_FORCE_BEGIN_TR_TIME
          m_time = 0;
    `else
          m_time = (open_time == 0 ) ? $time : open_time;
    `endif
      // End
    
          // Check to make sure we're open
          if (!is_open())
            return null;
          else begin
    

    完整源码 · SHA256:9eebb1f40671f6c3d62666b8fd4f1e35b8a541d2a2c888c9a85a76bdd81d6af5

    术语解释 · 兼容配置

    返回Comparer / Printer / Packer / Recorder · 迁移清单

    版本适用范围