数字IC验证23915--寄存器方法

镜像值与期望值

寄存器模型中的每一个寄存器,都应该有两个值,一个是镜像值(mirrored value) ,一个是期望值(desired value) :

  • 期望值是先利用寄存器模型修改软件对象值,而后利用该值更新硬件值;镜像值是表示当前硬件的已知状态值。
  • 镜像值往往由模型预测给出,即在前门访问时通过观察总线或者在后门访问时通过自动预测等方式来给出镜像值。

predication的分类

UVM提供了两种用来跟踪寄存器值的方式,我们将其分为自动预测(auto prediction)和显式预测(explicit) 。

  • 如果用户想使用自动预测的方式,还需要调用函数uvm_reg _map::set_auto_predict()。
  • 两种预测方式的显著差别在于,显式预测对寄存器数值预测更为准确,我们可以通过下面对两种模式的分析得出具体原因。

自动预测

  • 如果用户没有在环境中集成独立的predictor,而是利用寄存器的操作来自动记录每一次寄存器的读写数值,并在后台自动调用predict()方法的话,这种方式被称之为自动预测。
  • 这种方式简单有效,然而需要注意,如果出现了其它一些sequence直接在总线层面上对寄存器进行操作(跳过寄存器级别的write()/read()操作,或者通过其它总线来访问寄存器等这些额外的情况,都无法自动得到寄存器的镜像值和预期值。

显示预测

  • 更为可靠的一种方式是在物理总线上通过监视器来捕捉总线事务,并将捕捉到的事务传递给外部例化的predictor,该predictor由UVM参数化类uvm_reg _predictor例化并集成在顶层环境中。
  • 在集成的过程中需要将adapter与map的句柄也一并传递给predicttor一侧,同时将monitor采集的事务通过analysis port接入到predictor—侧。
  • 这种集成关系可以使得,monitor一旦捕捉到有效事务,会发送给predictor,再由其利用adapter的桥接方法,实现事务信息转换,并将转化后的寄存器模型有关信息更新到map中。
  • 默认情况下,系统将采用显式预测的方式,这就要求集成到环境中的总线UVC monitor需要具备捕捉事务的功能和对应的analysis port,以便于同predictor连接。
    prediction在环境中的使用:
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 _predcitor" ,this) ;
		mcdf2reg predictor.map = rgm.map;
		mcdf2reg predictor.adapter = reg2mcdf ;
	endfunqtion
	function void connect _phase (uvm _phase phase) ;
		rgm. map.set_sequencer(agent.sequencer,reg2mcdf);
		agent.monitor.ap. connect(mcdf2reg_predictor.bus_in) ;
	endfunction
endclass

uvm_reg的访问方法

在这里插入图片描述

uvm_reg_sequence提供的方法
在这里插入图片描述

寄存器健康检查在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值