我应该在vr_ad中使用哪个掩码进行后门访问?

时间:2015-07-06 05:24:43

标签: specman e

我正在尝试了解vr_ad中的后门访问功能。

似乎有两种不同的面具: 一个是backdoor_mask字段,另一个是 - get_bd_mask()。

两者有什么区别? 我应该使用哪一个?

1 个答案:

答案 0 :(得分:1)

执行后门访问时,vr_ad sequencer使用写入/读取DUT的值更新阴影模型。 (提醒 - 在前门访问中,监视器负责调用update())。 访问后考虑影子模型的确切值 - - 这个字段是否被访问过? (读取/写入RTL中的寄存器)
- 这个字段是可读/可写的吗?两个"掩码"指导影子模型的更新方式。

mask_backdoor:

此字段控制是否应在后门访问中应用寄存器的读写掩码。如果mask_backdoor为FALSE,则在后门访问后更新阴影模型时,将忽略寄存器的读/写掩码。 这意味着,例如,我们假设只读字段可以在后门访问中编写。如果您希望在后门访问中考虑读/写掩码(与前门访问时相同) - 将mask_backdoor设置为TRUE。 (默认值为FALSE。忽略读/写掩码)

get_bd_mask():

后门访问由vr_ad执行,方法是访问使用set_backdoor_path()或set_field_backdoor_path()定义的路径。

执行后门写入时,vr_ad仅向RTL写入路径已设置的字段(当然......)。因此,当它更新阴影模型时 - 它应该知道哪些字段是写的,因此应该在阴影模型中更新,哪些不是。

例如 - 假设此寄存器定义

reg_def  EX_R1  {
    reg_fld fld_0 : uint(bits : 8);
    reg_fld fld_1 : uint(bits : 8);

   set_static_info() is also {       
       set_field_backdoor_path("fld_1" ,"top.ex_r1[7:0]");
   };
};

当您发出此寄存器的后门写入时 - vr_ad将写入top.ex_r1 [7:0]。然后它会更新阴影模型,但它必须只更新fld_1,而不是fld_0。

在这种情况下,对于此寄存器,get_bd_mask()返回{0x0,0xf},表示第一个字段被屏蔽(0),不被更新。

通常,后门访问由vr_ad执行,因此您不应对此方法执行任何操作。但是 - 如果覆盖* _reg_backdoor方法的定义 - 您还应该扩展get_bd_mask()。如果在您的实现中您访问所有字段 - 那么此方法应返回1的列表。你不能访问任何一点 - 应该被屏蔽掉。