跳转至

输入查询内容

    本页内容

    响应队列溢出默认不报错,需要显式开启

    影响范围

    sequence 使用响应队列并依赖默认溢出报错时需核对;旧 disabled 接口仍可调用,但默认行为已变化。

    具体差异

    旧 API 仍正确取反映射,但新 enabled 位没有初始化为 1,默认值为 0。因此默认溢出从 1.2 的报错变为 2.0 的静默丢弃响应。lifecycle_probe 设置深度为 0 后投递响应,两库默认报错次数为 1 / 0;显式恢复报错后均为 1。

    修改方案

    需要检测响应丢失的 sequence 显式调用 set_response_queue_error_report_disabled(0)(双库可用),或目标版 set_response_queue_error_report_enabled(1);同时检查消费速度和队列深度。不能仅靠默认 UVM_ERROR 计数验收。

    旧代码可能不设置开关,依靠默认行为报告溢出。在业务 sequence 中显式开启,两版均可使用:

    set_response_queue_error_report_disabled(0);
    

    仅面向目标版的新代码也可写 set_response_queue_error_report_enabled(1),不要把参数值一并照搬。

    队列已满时继续投递 response 1.2 2.0
    不设置报告开关 报错 默认不报错
    显式 disabled(0) 报错 报错

    这只恢复报错,不会防止响应丢失。还需让 sequence 正常 get_response() 消费响应,并确认峰值积压不超过队列深度。

    兼容措施与范围:主库保留旧 disabled 接口;它不恢复默认溢出报告行为,应显式开启报告并验证响应消费和队列深度。

    迁移后验证

    显式开启报告,受控填满队列后检查溢出诊断;正常消费场景验证每个 response 都被取走且深度合理。

    记录本条结果M06-008 · 状态与证据

    已有实测与复现

    补充查阅

    扫描定位与记录结果

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

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

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

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

    源码与标准依据

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

    VCS 内置 UVM-1.2uvm_sequence_base.svh:150response_queue_error_report_disabled)、uvm_sequence_base.svh:1142/uvm_sequence_base.svh:1153set/get_response_queue_error_report_disabled

    VCS 内置 uvm-ieee-2020-2.0uvm_sequence_base.svh:164response_queue_error_report_enabled)、uvm_sequence_base.svh:1122/uvm_sequence_base.svh:1138(新增 set/get_response_queue_error_report_enabled)、uvm_sequence_base.svh:1127/uvm_sequence_base.svh:1143(旧 disabled 版以 @uvm-compat 内联保留,实现取反)

    标准依据:IEEE 1800.2-2020 §14.2.7.4/§14.2.7.5

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

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

    src/vcs-uvm-1.2/seq/uvm_sequence_base.svh
      protected uvm_sequence_item response_queue[$];
      protected int               response_queue_depth = 8;
      protected bit               response_queue_error_report_disabled;
    
      // Variable: do_not_randomize
      //
      // If set, prevents the sequence from being randomized before being executed
      // 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
    

    src/vcs-uvm-1.2/seq/uvm_sequence_base.svh
      // from the driver than get_response calls are made. Setting value to 0
      // disables these errors, while setting it to 1 enables them.
    
      function void set_response_queue_error_report_disabled(bit value);
        response_queue_error_report_disabled = value;
      endfunction
    
    
      // Function: get_response_queue_error_report_disabled
      //
      // When this bit is 0 (default value), error reports are generated when
      // the response queue overflows. When this bit is 1, no such error
      // reports are generated.
    
      function bit get_response_queue_error_report_disabled();
        return response_queue_error_report_disabled;
      endfunction
    
    
      // Function: set_response_queue_depth
      //
      // The default maximum depth of the response queue is 8. These method is used
      // to examine or change the maximum depth of the response queue.
      //
      // Setting the response_queue_depth to -1 indicates an arbitrarily deep
      // response queue.  No checking is done.
    
      function void set_response_queue_depth(int value);
        response_queue_depth = value;
      endfunction  
    

    完整源码 · SHA256:1594d38afd79cb400a689fdbe6c8e33ff60714bb7527cd8d79739d9357b31682

    src/vcs-uvm-ieee-2020-2.0/seq/uvm_sequence_base.svh
      protected uvm_sequence_item response_queue[$];
      protected int               response_queue_depth = 8;
      protected bit               response_queue_error_report_enabled;
    
      // Variable -- NODOCS -- do_not_randomize
      //
      // If set, prevents the sequence from being randomized before being executed
      // by the `uvm_do*() and `uvm_rand_send*() macros,
      // 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;
    

    src/vcs-uvm-ieee-2020-2.0/seq/uvm_sequence_base.svh
      // '1' enables them.
    
      // @uvm-ieee 1800.2-2020 auto 14.2.7.5
      function void set_response_queue_error_report_enabled(bit value);
        response_queue_error_report_enabled = value;
      endfunction : set_response_queue_error_report_enabled
    
      // @uvm-compat provided for compatibility with 1.2
      function void set_response_queue_error_report_disabled(bit value);
        response_queue_error_report_enabled = ~value;
      endfunction : set_response_queue_error_report_disabled
    
      // Function -- NODOCS -- get_response_queue_error_report_enabled
      //
      // When this bit is '1' (default value), error reports are generated when
      // the response queue overflows.  When this bit is '0', no such error
      // reports are generated.
    
      // @uvm-ieee 1800.2-2020 auto 14.2.7.4
      function bit get_response_queue_error_report_enabled();
        return response_queue_error_report_enabled;
      endfunction : get_response_queue_error_report_enabled
    
      // @uvm-compat provided for compatibility with 1.2
      function bit get_response_queue_error_report_disabled();
        return ~response_queue_error_report_enabled;
      endfunction : get_response_queue_error_report_disabled
    
      // Function -- NODOCS -- set_response_queue_depth
      //
      // The default maximum depth of the response queue is 8. These method is used
      // to examine or change the maximum depth of the response queue.
      //
      // Setting the response_queue_depth to -1 indicates an arbitrarily deep
      // response queue.  No checking is done.
    
      // @uvm-ieee 1800.2-2020 auto 14.2.7.7
      function void set_response_queue_depth(int value);
        response_queue_depth = value;
      endfunction
    

    完整源码 · SHA256:aedbad6d9991d5712dd8e5e676a9fb5487ab33af52219ae4786e6adaa7001375

    术语解释 · 兼容配置

    返回Sequence / Sequencer · 迁移清单

    版本适用范围