在使用 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));
我正在尝试在 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));