什么是reg_model鏡像值?
DUT的配置寄存器的值是實際值,reg_model有鏡像值、期望值的概念。
鏡像值:存放我們認為此時DUT里寄存器的實際值。
期望值:存放我們期望DUT寄存器被賦予的值。
什么是auto predict?
那么怎么更新reg_model里面的鏡像值呢?有三種方式更新reg_model里面的鏡像值。
方式1:reg_model調用自己的auto predict
舉個例子,如下圖,model.regA.write(47),通過regA找到對應的uvm_reg_item,然后找到address_map里面對應的地址,用adapter完成轉換得到bus_item并給到sequencer。然后通過driver的讀寫完成reg_model寄存器的鏡像值刷新。
在寄存器模型創建的組件的connect_phase()調用寄存器模型中的uvm_reg_map的set_auto_predict(on)來選擇打開(on=1)或關閉(on=0)自動預測功能,默認關閉。
景芯SoC驗證項目采用的就是auto_predict,如下圖,在SoC_subsys_env.sv里面connect_phase階段寫一句regmodel.default_map.set_auto_predict(1)即可。默認是關閉的。
自動預測打開的優點在于我們UVM環境實現起來會比較簡單,工作量大大降低,缺點是無法predict寄存器模型之外的總線行為(例如sequence),因而不能保證寄存器模型與DUT的實時匹配。
方式2:關閉自動預測功能并實例化uvm_reg_predictor
如果關閉自動預測功能,那么我們需要將uvm_reg_predictor實例化(或者繼承一個我們自己的predictor),將predictor實例與我們monitor相連接(這里還需要我們monitor能夠正確抓去總線數據),這樣predictor就會實時的獲取monitor所監測到的transaction信息,通過transaction中提供的address信息與uvm_reg_map中的寄存器address進行匹配進而發起相應的uvm_reg的predict()行為。
這樣一來uvm_reg的predict行為就跟寄存器模型中的讀寫行為脫鉤了,只是跟monitor上的行為想關聯,即使不是寄存器模型發起的讀寫(例如通過一般的sequence發起的總線讀寫),也是可以實時的更新寄存器模型中的鏡像值和期望值,這樣做更能保證寄存器模型中的值與DUT中的寄存器值最大程度的保持一致。
方式3:reg_model被動實例化uvm_reg_predictor
reg_model不做寄存器配置,僅作為被動檢測,由bus agent的monitor來獲取DUT的寄存器配置值,經過adapter轉為為address和data,address從map關系中找到對應的register,然后把data通過uvm_reg_item返回給reg_model。
我們需要在寄存器模型創建的組件的connect_phase()調用寄存器模型中的uvm_reg_map的set_auto_predict(on)來選擇打開(on=1)或關閉(on=0)自動預測功能,默認關閉。
自動預測打開的優點在于我們UVM環境實現起來會比較簡單,工作量大大降低,缺點是無法predict寄存器模型之外的總線行為(例如sequence),因而不能保證寄存器模型與DUT的實時匹配。
關閉自動預測我們就需要實例化uvm_reg_predictor,并將uvm_reg_predictor實例中的bus_in與我們的uvm_monitor中的uvm_analysis_port相連接,這就需要我們保證uvm_monitor實現必須完善,這樣就可以保證我們寄存器模型與DUT中的寄存器值最大可能的保持一致性。
-
寄存器
+關注
關注
31文章
5336瀏覽量
120230 -
soc
+關注
關注
38文章
4161瀏覽量
218162 -
模型
+關注
關注
1文章
3226瀏覽量
48807 -
DUT
+關注
關注
0文章
189瀏覽量
12373
原文標題:詳解寄存器模型reg_model的auto_predict
文章出處:【微信號:全棧芯片工程師,微信公眾號:全棧芯片工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論