首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用get_field_by_name搜索字段时使用正则表达式

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

Stack Overflow用户
提问于 2016-10-04 01:08:35
回答 2查看 895关注 0票数 3

我正在尝试在systemverilog中按名称获取uvm寄存器字段。我想使用正则表达式,这样我就可以使用一个模式作为字段名。以下是我的寄存器字段:

代码语言:javascript
复制
YY_XXX_2_N
ZZ_BBB_3_N
UU_AAA_8_N
MM_CCC_4_N
YY_WWW_9_N

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

代码语言:javascript
复制
field=env.my_regmap.get_field_by_name("_N$");

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

代码语言:javascript
复制
reporter [RegModel] Unable to locate field '_N$' in block 'my_regmap'

我想知道在这种情况下是否有使用regex的方法。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-04 04:16:48

get_field_by_name()需要精确匹配才能返回字段的单个句柄。您需要做的是使用get_fields()构建字段列表,然后使用SV find()

代码语言:javascript
复制
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));
票数 5
EN

Stack Overflow用户

发布于 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检查每个字段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39836840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档