跳转至

输入查询内容

    本页内容

    get_arg_matches 重用统一匹配接口,/regex/ 仍保留正则语义

    影响范围

    使用 get_arg_matches 的 /regex/,或自行关闭 DPI。

    具体差异

    2.0 改走 uvm_is_match(),但 DPI 的 glob 转换会识别斜杠包围的表达式并保留正则语义,不能仅因调用了 deglob 接口就推断正则失效。/^\\+REVIEW_ARG=(red|green)[0-9]+$/ 匹配 +REVIEW_ARG=green123 的双库实测均命中一次。非斜杠前缀匹配路径保留;无 DPI 条件需要单独验证。

    修改方案

    正常 /regex/ 用法无需为此改写为 glob。自行编译且关闭 DPI 的环境单独核对匹配支持范围。

    兼容措施与范围:原 /regex/ 调用无需兼容开关;关闭 DPI 的构建仍须核对匹配支持范围。

    迁移后验证

    用匹配和不匹配参数各运行一次,比较命中数;关闭 DPI 的构建单独测试,不将默认 DPI 结果推广过去。

    记录本条结果M04-011 · 状态与证据

    已有实测与复现

    补充查阅

    扫描定位与记录结果

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

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

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

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

    源码与标准依据

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

    VCS 内置 UVM-1.2uvm_cmdline_processor.svh:128(DPI uvm_dpi_regcomp/regexec 真正则)

    VCS 内置 uvm-ieee-2020-2.0uvm_cmdline_processor.svh:229(改走 uvm_is_match,保留斜杠正则识别;UVM_CMDLINE_NO_DPI 分支移除)

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

    src/vcs-uvm-1.2/base/uvm_cmdline_processor.svh
      //|                                                                   //and foo123.sv,
      //|                                                                   //not barfoo.sv.
    
      function int get_arg_matches (string match, ref string args[$]);
    
       `ifndef UVM_CMDLINE_NO_DPI
        chandle exp_h = null;
        int len = match.len();
        args.delete();
        if((match.len() > 2) && (match[0] == "/") && (match[match.len()-1] == "/")) begin
           match = match.substr(1,match.len()-2);
           exp_h = uvm_dpi_regcomp(match);
           if(exp_h == null) begin
             uvm_report_error("UVM_CMDLINE_PROC", {"Unable to compile the regular expression: ", match}, UVM_NONE);
             return 0;
           end
        end
        foreach (m_argv[i]) begin
          if(exp_h != null) begin
    

    完整源码 · SHA256:b0c8f08ff0c8a788a317ad6436e637fadf556cec65a57a2393611dbd5e0d72a5

    src/vcs-uvm-ieee-2020-2.0/base/uvm_cmdline_processor.svh
      //|                                                                   //not barfoo.sv.
    
      // @uvm-ieee 1800.2-2020 auto G.1.3.4
      function int get_arg_matches (string match, ref string args[$]);
        bit match_is_regex = (match.len() > 2) && (match[0] == "/") && (match[match.len()-1] == "/");
        int len = match.len();
    
        args.delete();
        foreach (m_argv[i]) begin
          if ( match_is_regex && uvm_is_match( match, m_argv[i] ) ) begin
            args.push_back( m_argv[i] );
          end
          else if((m_argv[i].len() >= len) && (m_argv[i].substr(0,len - 1) == match)) begin
            args.push_back(m_argv[i]);
          end
        end
    
        return args.size();
      endfunction
    

    完整源码 · SHA256:de22012dd08e060c7a2b473781d63a68963b9ed53ea8b524942f26b58a6fcfdc

    术语解释 · 兼容配置

    返回Reporting / 命令行 · 迁移清单

    版本适用范围