其他分享
首页 > 其他分享> > (27)UVM 寄存器模型的预测(prediction)

(27)UVM 寄存器模型的预测(prediction)

作者:互联网

UVM 寄存器模型的预测(prediction)

文章目录


mirror、desired和actual value
我们在应用寄存器模型的时候,除了利用它的寄存器信息,也会利用它来跟踪寄存器的值。寄存器模型中的每一个寄存器,都应该有两个值,一个是镜像值(mirrored value),一个是期望值(desired value)。

镜像值有可能与硬件实际值(actual value)不一致。例如状态寄存器的镜像值就无法与硬件实际值保持同步更新,另外如果其它访问寄存器的通路修改了寄存器,那么可能由于那一路总线没有被监测,因此寄存器的镜像值也无法得到及时更新。

接下来,讨论寄存器模型的预测方式,与上面的三种值相关,这是因为预测行为会直接影响到如何更新镜像值和期望值。在介绍之前需要区别的是,mirrored value与desired value是寄存器模型的属性,而actual value对应着硬件的真实数值。

prediction的分类

自动预测(auto prediction)

显示预测(explicit prediction)

在这里插入图片描述
更为可靠的一种方式是在物理总线上通过监视器来捕捉总线事务,并将捕捉到的事务传递给外部例化的predictor,该predictor由UVM参数化类uvm_reg_predictor例化并集成在顶层环境中。

在集成的过程中需要将adapter与map的句柄也一并传递给predictor,同时将monitor采集的事务通过analysis port接入到predictor一侧。

这种集成关系可以使得,monitor一旦捕捉到有效事务,会发送给predictor,再由其利用adapter的桥接方法,实现事务信息转换,并将转换后的寄存器模型有关消息更新到map中。

默认情况下,系统将采用显示预测的方式,这就要求集成到环境中的总线UVC monitor需要具备捕捉事务的功能和对应的analysis port,以便于同predictor连接。

class mcdf_bus_env extends uvm_env;
	mcdf_bus_agent agent;
	mcdf_rgm rgm;
	reg2mcdf_adapter reg2mcdf;
	uvm_reg_predictor #(mcdf_bus_trans) mcdf2reg_predictor;
	`uvm_component_utils(mcdf_bus_env)
	...
	function void build_phase(uvm_phase phase);
		agent=mcdf_bus_agent::type_id::create("agent",this);
		if(!uvm_config_db#(mcdf_rgm)::get(this,"","rgm",rgm))begin
			`uvm_info("GETRGM","no top-down RGM handle is assigned",UVM_LOW)
			rgm=mcdf_rgm::type_id::create("rgm",this);
			`uvm_info("NEWRGM","created rgm instance locally",UVM_LOW)
		end
		rgm.build();
		reg2mcdf=reg2mcdf_adapter::type_id::create("reg2mcdf");
		mcdf2reg_predictor=uvm_reg_predictor#(mcdf_bus_trans)::type_id::create("mcdf2reg_predictor",this);
		mcdf2reg_predictor.map=rgm.map;
		mcdf2reg_predictor.adapter=reg2mcdf;
	endfunction
	function void connect_phase(uvm_phase phase);
		rgm.map.set_sequencer(agent.sequencer,reg2mcdf);
		agent.monitor.ap.connect(mcdf2reg_predictor.bus_in);
	endfunction
endclass

关注作者

标签:27,预测,prediction,predictor,UVM,寄存器,rgm,uvm
来源: https://blog.csdn.net/qq_42419590/article/details/121471186