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

moh*_*aba 3 regex system-verilog uvm

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

YY_XXX_2_N
ZZ_BBB_3_N
UU_AAA_8_N
MM_CCC_4_N
YY_WWW_9_N
Run Code Online (Sandbox Code Playgroud)

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

field=env.my_regmap.get_field_by_name("_N$");
Run Code Online (Sandbox Code Playgroud)

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

reporter [RegModel] Unable to locate field '_N$' in block 'my_regmap'
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

dav*_*_59 5

get_field_by_name()需要完全匹配才能将单个句柄返回到字段.你需要做的是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));
Run Code Online (Sandbox Code Playgroud)