0

UVM e Reference文件中写道:

You can call read_reg_field or write_reg_field for registers whose fields
are defined as single_field_access (see “vr_ad_port_unit Syntax and Examples”).
...
For example:
write_reg_fields tx_mode_reg {.resv = 4; .dest = 2};

但是没有使用read_reg_field的例子......你能解释一下它应该如何使用吗?

(我尝试了下一个代码,但它给出了编译错误 some_var = read_reg_field my_reg_file.my_reg {.my_reg_field}:)谢谢你的帮助。

4

2 回答 2

1

据我所知,没有read_reg_fieds宏。如果要读取寄存器然后保存某个字段的值,请执行以下操作:

read_reg my_reg;
value = my_reg.my_reg_field;

通常,当您读取寄存器时,您会完全读取它们。如果您的总线协议允许窄传输(即您的数据宽度为 32 位,但您可以在其上进行 16 位传输),则仅读取单个字段是有意义的。我还没有看到实现这样的东西vr_ad(可能在那里,我只是不知道),但 UVM RAL(SystemVerilog 注册包)支持它。

长话短说,如果您只关心从 DUT 获取数据,使用read_reg就足够了。

于 2014-10-28T16:50:06.530 回答
1

当被测设计在 verilog 或 vhdl 中实现时 - 您可以读取整个寄存器,您不能“仅读取其中的一些字段”。

寄存器位于特定地址,读取此寄存器 -> 从此地址读取。

关于字段访问的规范引用是当 DUT 是 SystemC 模型时。

使用端口连接到 SC 模型。如果模型为每个字段定义了一个端口 - 您可以读取一个字段。

于 2014-10-29T06:29:06.800 回答