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



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

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

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

执行后门访问时,vr_ad定序器使用写入DUT/从DUT读取的值更新阴影模型。(提醒-在前门访问中,监视器有责任调用update(((。访问后阴影模型的确切值考虑--是否访问了此字段?(RTL中的寄存器已读/写(
-这个字段可读写吗?这两个"遮罩"指导阴影模型的更新方式。

mask_backdoor:

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

get_bd_mask((:

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

当执行后门写入时,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的列表。任何你不能访问的部分都应该被屏蔽掉。

最新更新