(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的do_w
2.调用regmodel前门配置寄存器的过程中,发生了hang的情况,hang在uvm_reg_map do_bus_write函数内的bus_req.end_event.wait_on()处; (1) hang的原因是define了UVM_DISABLE_AUTO_ITEM_RECORDING; (2) 具体原因为: (2.1) bus_req.end_event.wait_on()需要在bus_req.end_event的触发下,才能结束; 而bus_req...
我们这里就不通过grep来寻找调用的文件了,我们选择顺藤摸瓜,例如我们知道调用寄存器模型里某个寄存器的write方法是可以实现reg2bus的行为的,那么就从这个write入手来摸出来reg2bus在哪里调用的,这样我们队reg2bus的数据流向就会有个比较清晰的认识。 uvm_reg的write 我们先看看uvm_reg中write任务内容 write操作主要是...
uvm_reg_predictor extends uvm_component predictor集成 1.4. 前门访问流程(以write为例) 2. 后门访问 建立映射 有了模型了,那么如何对寄存器模型进行访问以实现对dut的硬件寄存器进行访问呢?包括两种访问模式,前门访问与后门访问 前门访问和后门访问最大的区别就在于协议时序。 后门仿真不参照协议,所以读写数据不占用...
uvm_reg的write()uvm_reg的read()总结 至此,通过以上的学习我们得到如下结论:1、我们需要在寄存器模型...
寄存器模型将事务对象进一步转换为uvm_reg_bus_op事务对象,传入adapter,再将其转换为sequencer可以接受的事务对象(用户自定义,adapter也需自行编写) sequencer接收到该事务对象后通过driver驱动到dut,最终返回相应的值,操作的结果在寄存器模型中体现; 寄存器模型将操作的结果返回给sb,一次操作结束 ...
第一种即uvm_reg:: read()/write()。在传递时,用户需要注意将参数path指定为UVM_ FRONTDOOR。uvm_reg: :read()/write()方法可传入的参数较多,除了status和 value两个参数需要传入,其他参数如果不指定,可采用默认值。 第二种即uvm_reg_ sequence: :read _reg()/write _reg()。在使用时,也需要将path指定...
uvm_config_db #(top_reg_model)::get(null, get_full_name(),"reg_model",m_regmodel); 1.sequence虽然不在树形结构上,但是其内部成员变量m_sequencer在树形结构上,可以通过m_sequencer间接访问资源。 # env top_reg_model m_regmodel; m_regmodel = top_reg_model::create("m_regmodel"); ...
extern virtual task write(output uvm_status_e status, input uvm_reg_data_t value, 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, ...
前文中介绍的所有的操作都无法完成这个事情,无论是set,还是write,或是poke;无论是后门访问还是前门访问。这个问题的实质是想人为地更新镜像值,但是同时又不要对DUT进行任何操作。 UVM提供predict操作来实现这样的功能: function bit uvm_reg::predict (uvm_reg_data_t value, ...