1taskuvm_reg::read(outputuvm_status_e status,2outputuvm_reg_data_t value,3inputuvm_path_e path =UVM_DEFAULT_PATH,4inputuvm_reg_map map =null,5inputuvm_sequence_base parent =null,6inputintprior = -1,7inputuvm_object extension =null,8inputstringfname ="",9inputintlineno =0);10Xatomi...
(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功...
这边仅仅从一个小的方面进行切入,主要研究下我们实际的sequence_item在register model、adapter以及sequencer之间是如何调度传播的,这里选择的切入点就是使用寄存器模型里的寄存器调用write/read方法前门访问时数据包是如何在寄存器模型、adapter、sequencer中传递的,我们自然就联想到了adapter内的两个函数reg2bus和bus2reg。
寄存器无论读写,都应知道总线操作后的状态返回,对于读操作也需要知道总线返回的读数据,因此uvm_reg_adapter::bus2reg()是从mcdf_bus_driver()将数据写回至mcdf_bus_sequence,而一直保持监听的reg2mcdf_adapter一旦从sequencer获取了RSP(mcdf_bus_trans)之后,就将自动调用bus2reg()函数。 bus2reg()函数的功能与...
uvm_reg的read()总结 至此,通过以上的学习我们得到如下结论:1、我们需要在寄存器模型创建的组件的...
uvm reg的设计 项目中的reg_model一般只有一份,set到reg_sequence上,所以多个sequence并行启动结束的时候,reg model会成为一个共享资源。 uvm_reg_field中的volatile,主要来设置m_check的变量, m_check,主要用在uvm_reg的mirror task,以及read task,(需要map中配置check_on_read) ...
uvm_reg本质就是通过reg中的write,read等API,将读写请求,数据等通过API启动sequence发送给driver,...
rw.kind = (tr.bus_op == BUS_RD) ? UVM_READ : UVM_WRITE; rw.addr = tr.addr; rw.byte_en ='h3; rw.data = (tr.bus_op == BUS_RD) ? tr.rd_data : tr.wr_data; rw.status = UVM_IS_OK; endfunction : bus2reg endclass : my_adapter ...
uvm_reg常用的读写方式 uvm_reg常⽤的读写⽅式⾸先创建register model ral_model_h;可以使⽤下⾯的⽅式来读写寄存器:uvm_reg temp_reg;uvm_status_e status;$cast(temp_reg, ral_model_h.get_reg_by_name("REG_NAME"));temp_reg.write(status, write_data);temp_reg.read(status,read_...
• uvm _reg_ sequence: :read _reg()/write _reg(), 在使用时也需要注明 UVM_BACKDOOR 的访问方式。 • 另外, uvm_reg: :peek()/poke()两个方法,也分别对应了读取寄存器 (peek) 和修改寄存器 (poke) 两种操作, 而用户无须指定访问方式为 UVM_BACKDOOR, 因为这两个方法本来就只针对于后门访问的...