在使用 get_field_by_name 搜索字段时使用正则表达式

using regex in searching for a field using get_field_by_name

我正在尝试在 systemverilog 中按名称获取 uvm 寄存器字段。我想使用正则表达式,以便我可以使用字段名称的模式。这是我的注册字段:

YY_XXX_2_N
ZZ_BBB_3_N
UU_AAA_8_N
MM_CCC_4_N
YY_WWW_9_N

如您所见,所有寄存器字段都以 _N 结尾,我使用以下代码获取寄存器字段:

field=env.my_regmap.get_field_by_name("_N$");

所以我希望此代码获得与提供的模式匹配的寄存器字段。使用上面的代码,我收到以下错误:

reporter [RegModel] Unable to locate field '_N$' in block 'my_regmap'

我想知道在这种情况下是否有办法使用正则表达式。

谢谢!

SystemVerilog 不允许直接使用 regex,但 UVM 提供了一个 DPI 函数 uvm_re_match,允许您使用 regex.h 库中的 regexec 函数。您可以阅读更多相关信息

您不能将此函数用作 get_field_by_name 的参数,但您可以通过调用 get_fields 从寄存器中获取所有字段,然后使用 uvm_re_match.[=15= 检查每个字段]

get_field_by_name() 需要与 return 字段的单个句柄完全匹配。您需要做的是使用 get_fields() 构建字段列表,然后使用 SV find()

uvm_field_reg all_fields[$], selected_fields[$];

all_fields = get_fields();
selected_fields = all_fields.find(item) with (uvm_re_match("*_N",item.get_name));