Phase机制之-phase_jump的使用场景

Phase机制之-phase_jump的使用场景
应用场景:在验证复位时,需要对正在运行的测试平台进行复位,再次拉高复位信号后,DTU输出的信号是否正确?
采用phase_jump可以使整个测试平台复位,并且再次复位后,可以使得复位后的DUT输出结果继续自动比对。
首先在driver中使用phase_jump,使得整个测试平台进行reset_phase

bit rst_flag;		//启动再次复位的标志,在随机约束的tc中进行配置
int cnt=0;			//用于停止phase_jump,目前该方法的使用不纯属,暂时采用此方法。不然仿真会发生循环。
task my_driver::main_phase(uvm_phase phase);
	fork
		driver_one_pkt(u_xaction);
		if(u_xaction.rst_flag == 1'b1) begin
			cnt++;
			`uvm_info(get_type_name(), $sformatf("cnt value:%d", cnt), UVM_MEDIUM)
			if(cnt == 2) beign
			$finish;
			end
			else beign
				//jump reset phase
				phase.jump(uvm_reset_phase::get());
			end
		end
		else begin
			#(CLK_PERIOD)
			bus.rst_n = 1'b1;
		end
	join
endtask: main_phase

在monitor里的reset_phase中删除reference model的遗留数据

task my_monitor::reset_phase(uvm_phase phase);
	super.reset_phase(phase);
	u_dout.delete();		//用于收集DUT输出的队列,进行删除遗留数据
	g_dout.delete();		//用于收集RM输出的队列,进行删除遗留数据
	//还有一些算法过程中会产生遗留的数据,在此一并删除或初始化。
endtask: reset_phase

在sequencer中加入stop_sequence,目的是为了再次复位后会有两个激励发送给sequencer,产生报错,此操作可以清除之前的激励发生动作。

class my_sequencer extends uvm_sequencer #(dtc_cal_xaction);
	task reset_phase(uvm_phase phase);
		phase.raise_objection(this);
		stop_sequences();
		phase.drop_objection(this);
	endtask
endclass: my_sequencer

在xaction中声明rst_flag信号

class my_xaction extends uvm_sequence_item;
	rand bit 			rst_flag;
	constraint rst_constr {	soft rst_flag == 1'b0; };		//软约束,优先级比较低,如果与TC中的约束发生冲突,以TC中的为主。
	
	
endclass: my_xaction

编写一个复位验证的TC,在正常发生数据包后,某一时刻进行复位,然后再继续发送数据包。

在test-case中,在正常数据包中间插入复位动作。

begin 
	repeat(100) begin
		`uvm_dp(req)
	end
	begin 
		`uvm_do_with(req,{	req.rst_falg == 1'b1;
							})
	end
	repeat(100) begin
		`uvm_do(req)
	end
end

参考文章:
https://ziqiangt.github.io/2019/11/07/UVM-%E9%AA%8C%E8%AF%81%E9%9A%8F%E6%9C%BAreset%EF%BC%88phase-jump%EF%BC%89/
https://zhuanlan.zhihu.com/p/412956948
https://zhuanlan.zhihu.com/p/60576096

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值