跳转至

输入查询内容

    本页内容

    link 工厂显式保存调用进程的随机状态

    内部实现:文件组织、内部数据结构与实现钩子的变化。直接依赖内部接口时查阅,普通 API 的使用不需要重审这些源码。

    影响范围

    在 sequence 等进程内创建 transaction link,并要求随机序列保持稳定。

    具体差异

    parent_child / cause_effect / related 三种 get_link 在 new 前后新增 process::get_randstate/set_randstate。utility_probe 对 parent_child 的观察两版都保持随机状态,不能从新增防护代码推断本机旧版必然改变后续随机序列。

    修改方案

    无强制修改;同 seed 跨库逐事务一致仍须由实际激励验证。

    兼容措施与范围:本条是新增能力或实现说明,无需恢复旧接口;按使用条件核对行为。

    迁移后验证

    同一 seed 下在 link 创建前后采样随机值,与不创建 link 的对照比较;另外检查建立的父子关系。

    记录核销:在无规则及补充检查中记录实际依赖与证据。

    已有实测与复现

    补充查阅

    扫描定位与记录结果

    无对应规则。当前脚本没有针对本条的直接检测规则。

    按“影响范围”检视实际代码与配置,再执行本条验证方法;扫描零命中不能排除此项。

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

    源码与标准依据

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

    VCS 内置 UVM-1.2uvm_links.svh:172uvm_links.svh:251uvm_links.svh:330

    VCS 内置 uvm-ieee-2020-2.0uvm_links.svh:122uvm_links.svh:199uvm_links.svh:275

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

    src/vcs-uvm-1.2/base/uvm_links.svh
       // rhs - Right hand side reference
       // name - Optional name for the link object
       //
       static function uvm_parent_child_link get_link(uvm_object lhs,
                                                      uvm_object rhs,
                                                      string name="pc_link");
          uvm_parent_child_link pc_link = new(name);
          pc_link.set(lhs, rhs);
          return pc_link;
       endfunction : get_link
    
       // Group: Implementation Callbacks
    
       // Function: do_set_lhs
       // Sets the left-hand-side (Parent)
       //
       virtual function void do_set_lhs(uvm_object lhs);
          m_lhs = lhs;
       endfunction : do_set_lhs
    

    src/vcs-uvm-1.2/base/uvm_links.svh
       // rhs - Right hand side reference
       // name - Optional name for the link object
       //
       static function uvm_cause_effect_link get_link(uvm_object lhs,
                                                     uvm_object rhs,
                                                     string name="ce_link");
          uvm_cause_effect_link ce_link = new(name);
          ce_link.set(lhs, rhs);
          return ce_link;
       endfunction : get_link
    
       // Group: Implementation Callbacks
    
       // Function: do_set_lhs
       // Sets the left-hand-side (Cause)
       //
       virtual function void do_set_lhs(uvm_object lhs);
          m_lhs = lhs;
       endfunction : do_set_lhs
    

    src/vcs-uvm-1.2/base/uvm_links.svh
       // rhs - Right hand side reference
       // name - Optional name for the link object
       //
       static function uvm_related_link get_link(uvm_object lhs,
                                                     uvm_object rhs,
                                                     string name="ce_link");
          uvm_related_link ce_link = new(name);
          ce_link.set(lhs, rhs);
          return ce_link;
       endfunction : get_link
    
       // Group: Implementation Callbacks
    
       // Function: do_set_lhs
       // Sets the left-hand-side
       //
       virtual function void do_set_lhs(uvm_object lhs);
          m_lhs = lhs;
       endfunction : do_set_lhs
    

    完整源码 · SHA256:5ccbc5e8a3c4d287dd5055a7b3045f9568ec38bf5dc8131996cdc19cd907298f

    src/vcs-uvm-ieee-2020-2.0/base/uvm_links.svh
       // @uvm-ieee 1800.2-2020 auto 7.3.2.2.2
       static function uvm_parent_child_link get_link(uvm_object lhs,
                                                      uvm_object rhs,
                                                      string name="pc_link");
          process p_;
          string s_;
    
          p_ = process::self();
          if (p_ != null)
        s_ = p_.get_randstate();
    
          get_link = new(name);
    
          if (p_ != null)
        p_.set_randstate(s_);
    
          get_link.set(lhs, rhs);
    

    src/vcs-uvm-ieee-2020-2.0/base/uvm_links.svh
       // @uvm-ieee 1800.2-2020 auto 7.3.3.2.2
       static function uvm_cause_effect_link get_link(uvm_object lhs,
                                                     uvm_object rhs,
                                                     string name="ce_link");
          process p_;
          string s_;
          p_ = process::self();
          if (p_ != null)
        s_ = p_.get_randstate();
    
          get_link = new(name);
    
          if (p_ != null)
        p_.set_randstate(s_);
    
          get_link.set(lhs, rhs);
       endfunction : get_link
    

    src/vcs-uvm-ieee-2020-2.0/base/uvm_links.svh
       // @uvm-ieee 1800.2-2020 auto 7.3.4.2.2
       static function uvm_related_link get_link(uvm_object lhs,
                                                     uvm_object rhs,
                                                     string name="ce_link");
          process p_;
          string s_;
          p_ = process::self();
          if (p_ != null)
        s_ = p_.get_randstate();
    
          get_link = new(name);
    
          if (p_ != null)
        p_.set_randstate(s_);
    
          get_link.set(lhs, rhs);
       endfunction : get_link
    

    完整源码 · SHA256:4723cdb992d53c61043ce30dca3fc4d6a6781607bd459ab24702cf0ce752aeea

    术语解释 · 兼容配置

    返回Object / Factory · 迁移清单

    版本适用范围