3

我正在为 e 使用 vr_ad 包。我在以下位置定义了一个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();

谢谢您的帮助。

4

1 回答 1

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)。

于 2014-10-30T11:31:41.713 回答