首页 > 解决方案 > 试图在寄存器中设置所有具有相似名称的寄存器字段

问题描述

我正在尝试在SystemVerilog. 这是我的注册字段:

TXA
TXA1
RSVD
T4AMP

我有兴趣将所有这些都设置到以 TXA 开头的寄存器字段中。我已经使用下面的代码来使用正则表达式

uvm_reg_field my_fields;
register1.get_fields(all_fields);
my_fields = all_fields.find(register1) 
with(!uvm_re_match("TXA*",register1.get_name()));    
//I have a loop to loop through the interested fields 
my_fields[i].set('1); 

但是,我看到了错误:

指定值 ( 0xffffffffffffffff) 大于字段“TXA”大小(1 位)

有人可以帮帮我吗。提前致谢 :)

标签: system-veriloguvm

解决方案


uvm_reg_field这是所有值在内部都具有 typedef 的宽度的缺点之一umm_reg_data_t。默认为 64 位。因此'1扩展到 64 个。

你可以做:

my_fields[i].set((uvm_reg_data_t'(1) << my_fields[i].get_n_bits)-1)

推荐阅读