Specman UVM:直接访问寄存器和使用read_reg_val()有什么区别?

时间:2014-10-30 08:36:35

标签: specman uvm e

我正在使用vr_ad包进行e。我在my_reg

中定义了一个注册vr_ad_reg_file my_reg_file
reg_def MY_REG MY_REG_FILE 20'h00018 {
    reg_fld my_reg_field     : uint (bits : 32)  : RW : 0x0;
};

我想访问寄存器的值。直接访问寄存器之间有什么区别(如果有的话):

some_var = my_reg_file.my_reg.my_reg_field;

并使用read_reg_val()访问注册表:

some_var = my_reg_file.my_reg.read_reg_val();

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

在您的情况下,由于您的注册只有一个字段,因此没有。但是为了更深入地理解,我们假设您的寄存器定义如下:

reg_def MY_REG MY_REG_FILE 20'h00018 {
    reg_fld my_reg_field     : uint (bits : 32)  : W : 0x0;
};

注意我只写了字段。我们假设您的字段的值已更新0x1010_1010

致电my_reg.my_reg_field将返回此值0x1010_1010

read_reg_val()方法返回对此寄存器执行读访问时将获得的值。在这种情况下,由于该字段无法读取,因此您需要0x0000_0000(此值可配置,但默认情况下它是重置值)。

还有一个read_reg_rawval()方法返回存储在寄存器中的值(即它忽略了字段的访问策略)。在我们的例子中,它将返回存储在字段0x1010_1010

中的值 当您在寄存器中声明多个字段时,

read_reg_val()read_reg_rawval()非常有用,因为这些方法将打包所有字段的值并返回标量值(类型为vr_ad_data_t })。