Phase机制之-phase_jump的使用场景

news/2024/11/29 9:54:58/

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);forkdriver_one_pkt(u_xaction);if(u_xaction.rst_flag == 1'b1) begincnt++;`uvm_info(get_type_name(), $sformatf("cnt value:%d", cnt), UVM_MEDIUM)if(cnt == 2) beign$finish;endelse beign//jump reset phasephase.jump(uvm_reset_phase::get());endendelse begin#(CLK_PERIOD)bus.rst_n = 1'b1;endjoin
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)endbegin `uvm_do_with(req,{	req.rst_falg == 1'b1;})endrepeat(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


http://www.ppmy.cn/news/380588.html

相关文章

phaser

phaser 常见的资源资源加载回调事件显示对象**Image****Sprite****Text****Graphics**常用显示对象属性Phaser中的显示对象容器组的创建Phaser如何渲染显示对象camera state (类似vue中的router)state使用方式state实现多页面原理state生命周期与工作原理…

UVM世界观之七:phase机制(上)

本文转自:http://www.eetop.cn/blog/html/28/1561828-2331501.html 在之前SV的篇章中,读者可以看到,传统的硬件设计模型在仿真开始前,已经完成例化和连接了;而SV的软件部分,类的例化则需要在仿真开始后完成…

UVM内phase的执行顺序

phase间的执行顺序 UVM内所有的phase如下图所示,不同phase间的执行顺序从时间上讲是从上往下执行,而run_phase和下图最右边的12个phase是并行执行的。 所有conponent的相应phase结束了,验证平台才会进入下一个phase。只有所有componennt的r…

UVM的phase机制(Ⅰ)

uvm存在phase机制,每个phase完成对应的功能。将所有的程序分解在不同的phase中执行,保证了验证环境的验证代码的执行顺序。并且每个phase完成对应的功能,使验证环境运行仿真层次化,让各种组件的例化次序正确,环境的执行…

Phase机制

目录 一.Phase机制的意义? 二.Phase图表 三.phase的执行顺序 1.UVM中不同phase的执行顺序 2.兄弟关系component的phase执行顺序 3.叔侄关系component的phase执行顺序 4. task phase的执行顺序 四.phase的其他知识 1.super.phase 2.uvm_error 3.phase的跳转 …

mybatis的一级缓存和二级缓存

目录 1、简介 2、Mybatis缓存 3、一级缓存 3.1、初体验测试 3.2、一级缓存失效的四种情况 4、二级缓存 4.1、使用步骤 4.2、结论 5、缓存原理 1、简介 什么是缓存 [ Cache ]? 存在内存中的临时数据。将用户经常查询的数据放在缓存(内存&…

IDEA中类模板注释和方法注释模板

类注释 /* *ClassName ${NAME} *Author --你的别名 *Description //TODO *Date ${DATE} ${TIME} *Version 1.0 **/ 把上面的代码粘贴到settings-editor-file and code templates下的class的“public class”和#parese的中间 2.方法注释 /* *Author --你的别名 *Description …

tmux常用操作

文章目录 功能结构操作 功能 分屏。允许断开Terminal连接后,继续运行进程。 结构 一个tmux可以包含多个session,一个session可以包含多个window,一个window可以包含多个pane。 实例: tmux:session 0:windo…