寄存器模型保持著DUT內部寄存器值的鏡像(mirror)。
鏡像值不能保證是正確的,因為寄存器模型只能感知到對這些寄存器的外部讀寫操作。
如果DUT內部修改了寄存器中的字段,鏡像值就會過時(outdated)。
寄存器模型可以通過使用uvm_reg_field::mirror(), uvm_reg::mirror(), 或uvm_reg_block::mirror()方法將一個寄存器的鏡像值更新為存儲在DUT中的值。
更新寄存器中某個字段的鏡像也會同時更新同一寄存器中所有其他字段的鏡像。更新一個block的鏡像會更新它包含的所有寄存器和字段的鏡像。
如果使用前門訪問,更新一個大block的鏡像可能需要大量的仿真時間;而使用后門訪問更新不需要消耗仿真時間。
可以通過使用uvm_reg_field::set()或uvm_reg::set()方法在不消耗仿真時間向寄存器模型中的寫入鏡像值,這個鏡像值不會反應到DUT中相應字段或寄存器。
可以通過使用uvm_reg::update()或uvm_reg_block::update()方法更新DUT的寄存器以匹配鏡像值。如果新的鏡像值與舊的鏡像值相匹配,寄存器就不會被更新,從而節省不必要的總線訪問。
要想不消耗仿真時間訪問一個field或register的當前鏡像值,可以使用 uvm_reg_field::get() 或uvm_reg::get()方法。
Memories是沒有鏡像的
Memories比較大,所以通常使用稀疏陣列的方法來建模。只有被寫入的位置才會被存儲起來,然后再讀回來。任何未使用的內存位置都不會被建模。
與寄存器不同,memory的行為非常簡單,memory鏡像將是一個ROM或RAM內存模型,所以可以通過提供對內存模型的后門訪問來取代。因此,使用uvm_mem::peek()或uvm_mem::poke()方法提供與memory鏡像完全相同的功能。此外,與基于觀察到的讀寫操作的寄存器鏡像不同,使用后門訪問的memory鏡像總是返回或設置DUT中一個內存位置的實際值。
-
寄存器
+關注
關注
31文章
5343瀏覽量
120366 -
鏡像
+關注
關注
0文章
164瀏覽量
10725 -
DUT
+關注
關注
0文章
189瀏覽量
12384
原文標題:寄存器模型中的Mirroring
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論