UVM中的regmodel建模(二)


UVM的寄存器模型,對一個寄存器bit中有兩種數值,mirror值,盡可能的反映DUT中寄存器的值。expected值,盡可能的反映用戶期望的值。

幾種常用的操作:

read/write:可以前門訪問也可以后門訪問,如果在env的頂層定義過uvm_auto_predict(1),則UVM會在這兩個操作后自動調用do_predict函數

                 來更新寄存器模型中的mirror值。

peek/poke:只用於后門訪問,而且完全不管硬件的行為,如向只讀寄存器寫數據,仍可以寫入。應用很少。會自己更新mirror值和expected值。

get/set:得到或設置寄存器模型的期望值。

update操作:可以使用前門訪問,也可以使用后門訪問,檢查期望值與鏡像值是否一致,如不一致,則向DUT寫入期望值。

             通過枚舉結構uvm_path_e來定義。

mirror操作:用於讀取DUT中寄存器的值並將它們更新到寄存器模型中。可以前門訪問也可以后門訪問。兩種的應用場景:1)check選項關閉,

                  仿真中不斷調用。2)check選項打開,用在結束時,檢查DUT與寄存器模型的值是否相同。

predict操作:人為的根據DUT來更新寄存器模型中的鏡像值。但同時又不對DUT進行任何操作。此時的uvm_path_e是UVM_PREDICT_DIRECT。

                  可以通過加monitor在寄存器總線上。檢測到uvm_reg_item操作,便通過TLM傳送到uvm_reg_predict模塊來更新mirror值。

                   函數內部主要有do_predict操作,這是主要的實現函數。還有一個post_predict的回調函數,可以自己擴展根據mirror值更新

                   期望值。但是pre_predict並不是一個回調函數,僅僅只是一個虛函數原型。可以在do_predict操作之前調用,完成覆蓋率采樣。

 

由於前門訪問會消耗仿真時間,而后門訪問不會消耗仿真時間,所以在build_phase,connect_phase只能使用后門訪問,所以

                  uvm_path_e中默認定義有一個UVM_DEFAULT_PATH,這樣就可以在這些phase隱式的指明后門訪問。而在task phase中在

                  顯式的指明前門訪問。(這時DUT已經開始工作,使用前門訪問比較接近硬件)

一般在config中使用寄存器模型,先set/randomized再update。后門訪問。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM