(1.1) FRONTDOOR write操作最终会转换为uvm_reg_map的do_write任务; (1.2) uvm_reg_map的do_write任务会查看系统是否设置了adapter,如果没有设置,就直接启动sequence, 让sequencer发送uvm_reg_item类型的transaction;如果设置了,那就调用do_bus_write任务. (1.3) uvm_reg_map的do_write完成后,如果auto predict功...
uvm_reg的read和write(注明UVM_BACKDOOR),uvm_reg_sequced的read_reg、write_reg(注明UVM_BACKDOOR),uvm_regd的peek和poke 前面访问通过drv,后门访问没有。调用内部的库。 期望值与镜像值 二者都位于寄存器模型中,期望值是预备要更新到DUT中的值,而镜像值是为了与DUT保持同步的值。镜像值若未得到及时更新,获得...
uvm_reg中的poke()和peek()也会自动调用do_predict()函数,类似于do_write()/do_read()的UVM_BACKDOOR行为,区别我们在[UVM源代码研究] 聊聊寄存器模型中的期望值(desired value)、镜像值(mirrored value)以及DUT中的实际值(actual value)的相关概念及方法已经讲的很清楚了。
我们需要将该寄存器包含的所有uvm_reg_field以uvm_hdl_path_slice的形式通过add_hdl_path的形式配置给该寄存器,这样我们在执行backdoor_read和和write的时候才能正确执行,否则就会报对应backdoor hierarchy不存在的warning信息,转而使用frontdoor实现,关于这一点可以参考文章最后代码示例中的jb_recipe_reg寄存器的...
在UVM中,uvm_reg有自带的一些方法read()和write()用来对design进行初始化读写操作。 classreg_ctrlextendsuvm_reg;...endclass m_reg_ctrl.write(status,addr,wdata);m_reg_ctrl.read(status,addr,rdata); 这些寄存器的读/写函数会创建一个类型为uvm_reg_bus_op的内部通用寄存器项(internal generic register...
t.cmd = (rw.kind == UVM_WRITE) ? `WRITE : `READ; t.addr = rw.addr; t.wdata = rw.data; return t; //返回t是子类,会隐式转换为父类 endfunction function void bus2reg(uvm_sequence_item bus_item, ref uvm_reg_bus_op rw); ...
rgm.chnl0_ctrl_reg.read (status, data, UVM_BACKDOOR, .parent(this)); if(rstval != data) `uvm_error ("RSTERR", "reset value read is not the desired reset value") mirror()方法与 read()方法类似, 也可以选择前门访问或后门访问, 不同的是,mirror()不会返回读回的数值, 但是会将对应的...
UVM寄存器模型的 read会更新期望值真实值镜像值吗 寄存器模型 update,一、 UVM_PREDICT_DIRECT功能与mirror操作UVM提供mirror操作,用于读取DUT中寄存器的值并将它们更新到寄存器模型中。它的函数原型为:taskuvm_reg::mirror(outputuvm_status_estatus,inputuvm_chec
与uvm_reg相比,uvm_mem不但拥有常规的访问方法read()、write()、peek()、poke(),也提供了burst_read()和burst_write()。之所以额外提供这两种方法,不但是为了可以更高速通过总线BURST方式连续存储,也是为了贴合实际访问存储中的场景。 要实现BURST访问形式,需要考虑以下因素: ...
uvm_reg本质就是通过reg中的write,read等API,将读写请求,数据等通过API启动sequence发送给driver,...