在寄存器模型中,比如读写操作,我们是怎么进行预测的,也就是说怎么更新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个值全部更新成要预测的值。