跳转至

输入查询内容

    本页内容

    新增 get_randomize_enabled / set_randomize_enabled

    新增功能:目标库新增的 API 和可选替代接口;已有用法的迁移要求列在用户接口与行为中。

    具体差异

    标准新增的随机化使能存取器;旧字段继续可用。

    修改方案

    无。

    兼容措施与范围:主库保留 do_not_randomize 字段,无需编译 compat 包;采用 set_randomize_enabled 时注意语义取反,检查实际是否执行随机化。

    已有实测与复现

    补充查阅

    扫描定位与记录结果

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

    本条处理级别为“可选采用”,按修改方案评估;缺少扫描规则本身不增加迁移改造要求。

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

    源码与标准依据

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

    VCS 内置 UVM-1.2uvm_sequence_base.svh:158(仅有 bit do_not_randomize

    VCS 内置 uvm-ieee-2020-2.0uvm_sequence_base.svh:194/uvm_sequence_base.svh:199(新方法),do_not_randomize 保留为 @uvm-compatuvm_sequence_base.svh:173);默认 sequence 启动流程改用 get_randomize_enabled() 判断(uvm_sequencer_base.svh:1402

    标准依据:IEEE 1800.2-2020 §14.2.2.2/§14.2.2.3

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

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

    src/vcs-uvm-1.2/seq/uvm_sequence_base.svh
      // by the `uvm_do*() and `uvm_rand_send*() macros,
      // or as a default sequence.
      //
      bit do_not_randomize;
    
      protected process  m_sequence_process;
      local bit m_use_response_handler;
    
      static string type_name = "uvm_sequence_base";
    
      // bits to detect if is_relevant()/wait_for_relevant() are implemented
      local bit is_rel_default;
      local bit wait_rel_default;
    
    
      // Function: new
      //
      // The constructor for uvm_sequence_base. 
      //
    

    完整源码 · SHA256:1594d38afd79cb400a689fdbe6c8e33ff60714bb7527cd8d79739d9357b31682

    src/vcs-uvm-ieee-2020-2.0/seq/uvm_sequence_base.svh
      // or as a default sequence.
      //
      // @uvm-compat , provided for compatibility with 1.2
      bit do_not_randomize;
    
      protected process  m_sequence_process;
      local bit m_use_response_handler;
    
      // bits to detect if is_relevant()/wait_for_relevant() are implemented
      local bit is_rel_default;
      local bit wait_rel_default;
    
    
    
      // @uvm-ieee 1800.2-2020 auto 14.2.2.1
      function new (string name = "uvm_sequence");
    
        super.new(name);
        m_sequence_state_mutex = new(1);
    

    src/vcs-uvm-ieee-2020-2.0/seq/uvm_sequence_base.svh
        m_init_phase_daps(1);
      endfunction
    
      virtual  function bit get_randomize_enabled();
         return (do_not_randomize == 0);
      endfunction : get_randomize_enabled
    
      // @uvm-ieee 1800.2-2020 auto 14.2.2.3
      virtual  function void set_randomize_enabled(bit enable);
         do_not_randomize = !enable;
      endfunction : set_randomize_enabled
    
    
      // Function -- NODOCS -- is_item
      //
      // Returns 1 on items and 0 on sequences. As this object is a sequence,
      // ~is_item~ will always return 0.
      //
      virtual function bit is_item();
        return 0;
      endfunction
    
    
      // Function -- NODOCS -- get_sequence_state
    

    完整源码 · SHA256:aedbad6d9991d5712dd8e5e676a9fb5487ab33af52219ae4786e6adaa7001375

    src/vcs-uvm-ieee-2020-2.0/seq/uvm_sequencer_base.svh
      seq.reseed();
      seq.set_starting_phase(phase);
    
      if (seq.get_randomize_enabled() && !seq.randomize()) begin
        `uvm_warning("STRDEFSEQ", {"Randomization failed for default sequence '",
                                   seq.get_type_name(),"' for phase '", phase.get_name(),"'"})
        return;
      end
    
      fork begin
        uvm_sequence_process_wrapper w = new();
        // reseed this process for random stability
        w.pid = process::self();
        w.seq = seq;
        w.pid.srandom(uvm_create_random_seed(seq.get_type_name(), this.get_full_name()));
        m_default_sequences[phase] = w;
        // this will either complete naturally, or be killed later
        seq.start(this);
        m_default_sequences.delete(phase);
    

    完整源码 · SHA256:6d2477484529dad661a38b31619edf9898bfa3375f217f06a27b3a69af32ccf7

    术语解释 · 兼容配置

    返回Sequence / Sequencer · 迁移清单

    版本适用范围