在之前简单介绍了uvm_reg_predic是怎么实现显示预测的,连上map,连上adapter,连上bus_in即可,下面我们要详细的解释原因
先解释uvm_reg_predict中重要变量的作用
uvm_reg_map map : 从bus总线上上采样到addr信息之后,有map根据addr寻找到RAL中相关寄存器句柄
uvm_reg_adapter adapter:从bus总线上上采样到addr信息之后,调用adapter.bust2reg实现transaction 转换
uvm_analysis_imp#(BUSTYPE,uvm_reg_predict#(BUSTYPE)) bus_in :TLM 端口
核心方法write(),下面总结了这个方法具体做的事情
(1) 判断adapter是否为null
(2) 应该增加判断map是否为null(虽然UVM源码中没有实现,严谨的角度应该判断)//注意这里挂载的map的必须是root_map。
(3) adapter.bus2reg// transaction转换
(4) map.get_reg_by_offset //获取RAL中reg句柄
(5) 获取reg所在local_map的map_info//获取reg的直连map的map_info信息
(6) 根据map_info信息调用uvm_reg::do_predict//实现预测,包的括多地址的处理情况
上面即为实现显示预测的全步骤
下面介绍一下当register 位宽大于bus_width的时候,uvm_reg_predict是如何处理的
这种情况比较特殊,具体看下面的流程。
(