我需要访问4个仅在偏移量上不同的相同寄存器。
reg布局: reg0:0x10 reg1:0x14 reg2:0x18 reg3:0x20 我使用自动工具生成uvm_block,如下所示:
class dut_reg_block extend uvm_reg_block
REG0 reg0;
REG1 reg1;
REG2 reg2;
REG3 reg3;
endclass;
support我有一个功能ConfigureDut( RegNum ),在其中我想根据 RegNum (0〜3)访问寄存器,如何优雅地实现呢?
当前,代码是这样的:
if (RegNum == 0) reg_block.reg0.read(data);
else if (RegNum == 1) reg_block.reg1.read(data);
else if (RegNum == 2) reg_block.reg2.read(data);
......
因为uvm_block是自动生成的,所以我也不能使用数组。 有人可以建议一种更好的方式访问这些寄存器吗? 谢谢!
答案 0 :(得分:0)
您可以使用read_reg_by_name
方法:
reg_block.read_reg_by_name(status, $sformatf("reg%0d", RegNum), data);
您使用$sformatf
从RegNum
int
的字符串中建立寄存器名称:
$sformatf("reg%0d", RegNum)
,然后利用以下事实:UVM中的每个组件都有一个名称,并且该名称应该与引用它的变量相同。