You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在UVM的HDL访问函数中使用正则表达式?求替代方案

UVM HDL访问函数是否支持正则表达式参数?

直接结论

UVM的uvm_hdl_deposit()、uvm_hdl_check_path()这类HDL访问函数不支持直接传入正则表达式作为路径参数。

原因说明

不是单纯因为DPI没有这个功能,而是这类函数的设计初衷就是定位具体的HDL层次路径——底层DPI调用需要明确、可直接解析的硬件路径字符串,正则表达式属于模糊匹配逻辑,无法被DPI的硬件访问接口直接识别处理。

可行替代方案

1. 提前筛选路径再批量处理

如果清楚目标路径的模式,可以先在SystemVerilog里生成所有符合规则的路径列表,再逐一调用UVM函数。比如借助仿真工具的层次遍历能力,用$regexp_match筛选出匹配正则的路径,存入数组后循环处理:

string paths[$];
string target_pattern = "top.dut.*.reg";

// 遍历HDL层次并筛选(具体实现需结合仿真工具的层次遍历API)
foreach (hier_item[i]) begin
  if ($regexp_match(hier_item.path, target_pattern)) begin
    paths.push_back(hier_item.path);
  end
end

// 批量执行操作
foreach (paths[i]) begin
  if (uvm_hdl_check_path(paths[i])) begin
    uvm_hdl_deposit(paths[i], 1'b1);
  end
end

2. 用外部脚本辅助筛选路径

主流仿真工具(VCS、Questa等)支持通过命令行或Tcl API导出完整的HDL层次结构。你可以先把所有路径导出到文件,用Python/Tcl脚本通过正则表达式筛选出目标路径,再把这些路径传入UVM测试平台处理。

3. 封装自定义工具函数

自己写一个上层函数,把正则匹配、路径筛选和批量调用的逻辑封装起来,后续使用更方便:

function void uvm_hdl_deposit_regex(string pattern, uvm_hdl_data_t value);
  string paths[$];
  // 这里实现路径筛选逻辑(参考方案1的遍历+正则匹配)
  foreach (paths[i]) begin
    if (uvm_hdl_check_path(paths[i])) begin
      uvm_hdl_deposit(paths[i], value);
    end
  end
endfunction

内容的提问来源于stack exchange,提问作者Alexandr Bolotnikov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:37:11