1class uvm_predict_s;2bit addr[uvm_reg_addr_t];3uvm_reg_item reg_item;4endclass56//---7//8//CLASS: uvm_reg_predictor9//10//Updates the register model mirror based on observed bus transactions11//12//This class converts observed bus transactions of type ~BUSTYPE~ to generic13//re...
1functionbit uvm_reg::predict (uvm_reg_data_t value,2uvm_reg_byte_en_t be = -1,3uvm_predict_e kind =UVM_PREDICT_DIRECT,4uvm_path_e path =UVM_FRONTDOOR,5uvm_reg_map map =null,6stringfname ="",7intlineno =0);8uvm_reg_item rw =new;9rw.value[0] =value;10rw.path =path;...
predict操作:人为的根据DUT来更新寄存器模型中的镜像值。但同时又不对DUT进行任何操作。此时的uvm_path_e是UVM_PREDICT_DIRECT。 可以通过加monitor在寄存器总线上。检测到uvm_reg_item操作,便通过TLM传送到uvm_reg_predict模块来更新mirror值。 函数内部主要有do_predict操作,这是主要的实现函数。还有一个post_predict...
(1.3) uvm_reg_map的do_write完成后,如果auto predict功能打开了, uvm_reg的do_write会根据写入的值更新register model中寄存器的值; 1taskuvm_reg::write(outputuvm_status_e status,2inputuvm_reg_data_t value,3inputuvm_path_e path =UVM_DEFAULT_PATH,4inputuvm_reg_map map =null,5inputuvm_sequence...
} uvm_predict_e;//Enum: uvm_coverage_model_e///Coverage models available or desired.//Multiple models may be specified by bitwise OR'ing individual model identifiers.///UVM_NO_COVERAGE - None//UVM_CVR_REG_BITS - Individual register bits//UVM_CVR_ADDR_MAP - Individual register and memory...
(1) 主要是调用backdoor_wr task与do_predict(UVM_PREDICT_WRITE); (2) 本质上采用的是deposit函数; (3)poke与backdoor write的区别在于后者在调用backdoor_write操作前,先使用backdoor的read读出原来寄存器的值,把读出来的值以及要写入的数值通过调用uvm_reg_field的XpredictX,得到一个新的值,这个值其实就完全...
regmodel = block_reg::type_id::create("block", this); regmodel.build(); regmodel.set_coverage(UVM_CVR_FIELD_VALS); regmodel.lock_model(); regmodel.default_map.set_auto_predict(0); //从DUT更新寄存器模型的一种方式 至此后门访问已经可以通过...
1.2 register seq using mirror (1) mirror操作会引起读访问,会对register model中的镜像值进行更新,但不会返回read data; (2) mirror操作可以用于register model与硬件状态的再同步; (3) mirror操作可以和predict操作一起执行,用于检测register的读返回值与期望值是否匹配;只需在调用mirror操作时,将check field设置...
5.4 set_auto_predict(); 5.5 do_bus_write()与do_bus_read()(与register前门访问相关); 5.6 set_base_addr(); 1functionvoid uvm_reg_map::set_base_addr(uvm_reg_addr_t offset);2if(m_parent_map !=null)begin3m_parent_map.set_submap_offset(this, offset);4end5elsebegin6m_base_addr =offs...
1functionbit uvm_reg::predict (uvm_reg_data_t value,2uvm_reg_byte_en_t be = -1,3uvm_predict_e kind =UVM_PREDICT_DIRECT,4uvm_path_e path =UVM_FRONTDOOR,5uvm_reg_map map =null,6stringfname ="",7intlineno =0);8uvm_reg_item rw =new;9rw.value[0] =value;10rw.path =path;...