在暫存器模型中,比如讀寫操作,我們是怎麼進行**的,也就是說怎麼更新field的3個值得,即value,mirror_value,desired_value。核心方法是do_predict。我們發現在後門訪問時,會自動呼叫do_predict方法進行**,而在前門訪問時,是否會進行**是有條件的,必須得設定map.set_auto_predict。只有設定了map的自動**功能才可以在執行完前門讀寫操作後進行**功能。除了上述方法中使用了do_predict方法,還可以在predict中使用,**如下
function bit uvm_reg::predict (uvm_reg_data_t value,
uvm_reg_byte_en_t be = -1,
uvm_predict_e kind = uvm_predict_direct,
uvm_door_e path = uvm_frontdoor,
uvm_reg_map map = null,
string fname = "",
int lineno = 0);
uvm_reg_item rw = new;
rw.value[0] = value;
rw.path = path;
rw.map = map;
rw.fname = fname;
rw.lineno = lineno;
do_predict(rw, kind, be);
predict = (rw.status == uvm_not_ok) ? 0 : 1;
endfunction: predict
具體的在這裡就不介紹了,最終的結果是field的3個值全部更新成要**的值。 暫存器(RAL)模型中的後門操作路徑
我們在進行暫存器模型的後門操作時,必須提前設定後門操作路徑,以此ral模型方能進行操作。在上面這個ral 模型中,當呼叫reg blk.reg1.write 引數指定是後門操作 uvm backdoor 那麼ral模型時如何取得硬體rtl的絕對路徑?核心的方法是呼叫reg get full hdl ...
UVM暫存器篇之五 暫存器模型的整合(下)
本文 前門訪問 利用暫存器模型,我們可以更方便地對暫存器做操作。接下來我們分別兩種訪問暫存器的方式,即前門訪問 front door 和後門訪問 back door 前門訪問,顧名思義指的是在暫存器模型上做的讀寫操作,最終會通過匯流排uvc來實現匯流排上的物理時序訪問,因此是真實的物理操作 而後門訪...
UVM暫存器篇之七 暫存器模型的常規方法(下)
本文 mem與reg的聯絡和差別 uvm暫存器模型也可以用來對儲存建模。uvm mem類可以用來模擬rw 讀寫 ro 唯讀 和wo 只寫 型別的儲存,並且可以配置其模型的資料寬度和位址範圍。而uvm mem不同於uvm reg的地方在於,考慮到物理儲存一旦對映到uvm mem會帶來更大的資源消耗,因...