我正在使用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();
感谢您的帮助。
答案 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
})。