我正在尝试在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'我想知道在这种情况下是否有使用regex的方法。
谢谢!
发布于 2016-10-04 04:16:48
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));发布于 2016-10-04 04:10:55
SystemVerilog不允许直接使用regex,但是UVM提供了一个DPI函数uvm_re_match,允许您使用regex.h库中的regexec函数。您可以阅读有关此here的更多信息。
您不能将此函数用作get_field_by_name的参数,但您可以通过调用get_fields从register获取所有字段,然后使用uvm_re_match检查每个字段。
https://stackoverflow.com/questions/39836840
复制相似问题