2015-07-06 51 views

回答

1

當執行後門程序訪問時,vr_ad排序器使用從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寫入路徑設置的字段(自然是......)。所以,當它更新陰影模型時 - 它應該知道哪些字段被寫入,因此應該在陰影模型中更新,哪些不是。

例如-assume該寄存器定義

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的列表。任何你不訪問的位都應該被掩蓋掉。

相關問題