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}
)
谢谢你的帮助。
答案 0 :(得分:1)
据我所知,没有read_reg_fieds
宏。如果要读取寄存器然后保存某个字段的值,请执行以下操作:
read_reg my_reg;
value = my_reg.my_reg_field;
通常,当您阅读注册时,您会完全阅读它们。如果您的总线协议允许窄传输(即您的数据宽度为32位,但您可以对其进行16位传输),则仅读取单个字段是有意义的。我还没有在vr_ad
中看到这样的事情(可能就在那里,我只是不知道),但是UVM RAL(SystemVerilog寄存器包)支持它。
长话短说,如果您只关心从DUT获取数据,使用read_reg
就足够了。
答案 1 :(得分:1)
当在Verilog或vhdl中实现被测设计时 - 你可以整体阅读注册表,你不能只阅读它的一些字段"。
寄存器位于特定地址,读取该寄存器 - >从这个地址读。
关于字段访问的规范的引用是在DUT是SystemC模型时。
使用端口连接到SC型号。如果模型为每个字段定义了一个端口 - 您可以读取一个字段。