1.uvm mirror 与predict
//predict
virtual function bit predict ( uvm_reg_data_t value,
uvm_reg_byte_en_t be = -1,
uvm_predict_e kind = UVM_PREDICT_DIRECT,
uvm_path_e path = UVM_FRONTDOOR,
uvm_reg_map map = null,
string fname = "",
int lineno = 0)
//mirror
virtual task mirror( output uvm_status_e status,
input uvm_check_e check = UVM_NO_CHECK,
input uvm_path_e path = UVM_DEFAULT_PATH,
input uvm_reg_map map = null,
input uvm_sequence_base parent = null,
input int prior = -1,
input uvm_object extension = null,
input string fname = "",
input int lineno = 0 )
(1) reg model会维护一个镜像值,该镜像值是寄存器模型中用于最大可能与DUT中reg值变量相同;
(2)镜像值并不保证与DUT中的值可能不一样。当DUT中的reg因为DUT的正常行为发生变化,如counter的技术行为,镜像值就不会变化
(3) 可以通过get_mirror_value得到寄存器的镜像值;
(4)mirror可以通过前门或者后门方式进行更新,;
(5) uvm_reg_field::predict()用来更新寄存器的镜像值;
(6)隐式预测:regmodel.default_map.set_auto_predict(1)当read/write/peek/poke操作后,reg model会自动更新,但是可能会漏掉一些不是由register model发起的总线操作;隐式预测即前文提到的auto_predict(auto_predict针对的是寄存器前门访问操作,而非后门访问操作
(7) 显式预测:隐式预测被关闭(set_auto_predict(0)),镜像值由uvm_reg_predictor组件进行更新, predictor显式调用register的predict函数来更新镜像值;;