一种基于测试序列分析的UVM验证加速方法与流程

文档序号:18741184发布日期:2019-09-21 01:47阅读:220来源:国知局
一种基于测试序列分析的UVM验证加速方法与流程

本发明涉及芯片功能验证领域,具体地说是一种基于测试序列分析的UVM验证加速方法。



背景技术:

近年来,随着集成电路的高速发展和系统芯片复杂度的大幅提升,对系统芯片的验证也越来越复杂,验证工作占据了整个芯片设计周期的70%-80%,因此提高验证效率至关重要,从而对验证技术和方法提出越来越高的要求。

传统的验证平台依赖于定向测试,利用定向测试直接翻译出验证人员想要的场景,但是每一个定向测试用例在通过后的重复仿真是冗余的,无法产生新的测试序列,也不会带来更多的覆盖率。在新一轮验证时,又需重新编写定向测试用例,大大增加验证过程的耗时和成本,无法满足越来越苛刻的产品面市时间。

UVM验证平台利用带约束的随机测试使得验证朝向合理的状态空间进行。带约束的随机化测试虽然可以有效避免一些不符合条件的测试序列生成,但是随着随机化次数的增多,会出现一些冗余的测试序列,并且某些边界情况一直无法被覆盖到,从而使得覆盖率趋于稳定无法进一步提升,难以满足验证的要求。



技术实现要素:

本发明为解决上述现有技术问题,提出一种基于测试序列分析的UVM验证加速方法,以期通过分析已发送测试序列是否达到预设比重来切换测试序列类型,从而减少发送冗余随机测试序列,及时进行边界条件测试,进而提高验证效率。

为实现上述目的,本发明采用如下技术方案:

本发明一种基于测试序列分析的UVM验证加速方法,是应用于由激励产生器、序列发生器、驱动器、监测器A、监测器B、参考模型以及记分板所组成的UVM基础框架中,其特点是,所述UVM验证加速方法是按如下步骤进行:

步骤1、将所述序列发生器、驱动器以及监测器A封装成输入Agent类In_agent,将所述监测器B封装成输出Agent类Out_agent;

步骤2、利用Class类创建输入虚拟接口In_VI、输出虚拟接口Out_VI和一个系统配置类Sys_cfg;且所述系统配置类Sys_cfg中包含测试序列的信息;

步骤3、利用Class类创建序列分析器,并在所述序列分析器中创建一个Callback回调接口以及读写标记语言文件的句柄;

步骤4、在所述序列分析器中创建一个从所述系统配置类Sys_cfg中派生的配置类Analyzer_cfg;

步骤5、将所述输入Agent类In_agent、所述输出Agent类Out_agent、所述序列分析器、所述参考模型以及所述记分板封装成一个环境类Env;

步骤6、在所述激励产生器中设置一个用于控制测试序列切换的开关变量Switch,并初始化开关变量Switch为0;

将所述系统配置类Sys_cfg、所述输入虚拟接口In_VI、输出虚拟接口Out_VI、所述激励产生器以及待测设备封装在顶层Top中,从而形成UVM验证平台;

步骤7、在所述UVM验证平台中,定义测试序列的当前序号为t,并初始化t=1;在所述配置类Analyzer_cfg中设置测试序列的总数为Tmax;

步骤8、利用所述激励产生器产生第t个随机测试序列并发送至所述序列发生器,由所述序列发生器将所述第t个随机测试序列分别发送至所述序列分析器和驱动器;

步骤9、所述驱动器将所述第t个随机测试序列通过所述输入虚拟接口In_VI传递给待测设备,并由所述监测器A采样输入虚拟接口In_VI上第t个随机测试序列并发送至所述参考模型;

步骤10、所述待测设备根据所接收到的第t个随机测试序列产生第t个响应输出;

所述参考模型将接收到的第t个随机测试序列进行处理后,得到第t个期望测试结果并发送至所述记分板;

步骤11、所述监测器B通过所述输出虚拟接口Out_VI采样待测设备输出端的第t个随机测试序列并发送至所述记分板;

步骤12、所述记分板判断所述第t个响应输出与第t个期望测试结果是否一致,若一致,则表示所述待测设备的功能正常,否则,表示所述待测设备的功能异常;

步骤13、所述序列分析器利用所述Callback回调接口以及读写标记语言文件的句柄将所接收到的第t个随机测试序列存储到标记语言文件中,并统计所接收到的随机测试序列的数量Cont1,从而根据所述数量Cont1和总数Tmax来计算已发送的随机测试序列所占的随机比重,若所述随机比重达到所述配置类Analyzer_cfg中所设置的随机比重阈值时,则将相应的随机比重通过uvm_config_db机制反馈给所述激励产生器后,执行步骤14;否则,将t+1赋值给t,并返回步骤8执行;

步骤14、所述激励产生器解析所述标记语言文件,并将所述第t个随机测试序列切换为第t个边界测试序列后,将所述开关变量Switch置为“1”,再通过所述序列发生器将所述第t个边界测试序列分别发送给所述序列分析器和所述驱动器;

步骤15、所述驱动器将所述第t个边界测试序列通过输入虚拟接口In_VI传递给待测设备,并由所述监测器A采样输入虚拟接口In_VI上第t个边界测试序列并发送至所述参考模型;

步骤16、所述待测设备根据所接收到的第t个随机测试序列产生第t个响应输出;

步骤17、所述参考模型将接收的第t个边界测试序列进行处理,得到第t个期望测试结果并发送至所述记分板;

步骤18、所述监测器B通过所述输出虚拟接口Out_VI采样待测设备输出端的第t个边界测试序列并发送至所述记分板;

步骤19、所述记分板判断所述第t个期望测试结果与第t个响应输出是否一致,若一致,则表示所述待测设备的功能正常,否则,表示所述待测设备的功能异常;

步骤20、统计所述序列分析器所接收到的边界测试序列的数量Cont2,并据所述数量Cont2和总数Tmax来计算边界测试序列所占的边界比重,若所述边界比重达到所述配置类Analyzer_cfg中所设置的边界比重阈值时,则将相应的边界比重通过uvm_config_db机制反馈给所述激励产生器,以使得所述激励产生器停止产生边界测试序列;否则,将t+1赋值给t后,利用所述激励产生器产生第t个边界测试序列,并返回步骤15执行。

与现有技术相比,本发明的有益效果体现在:

本发明通过序列分析器分析测试序列,使得随机测试序列个数维持在合理的范围内,解决了由于随机测试次数增加而导致的测试序列冗余的问题,增强了发送至待测设备测试序列的有效性,同时通过激励产生器将随机测试序列切换为边界测试序列,解决了边界情况难以覆盖的问题,使得覆盖率在较短的时间内获得较大的提升,从而提高了验证效率。

附图说明

图1是本发明UVM验证平台结构示意图。

具体实施方式

本实施例中,如图1所示,是一种基于测试序列分析的UVM验证加速方法,是应用于由激励产生器、序列发生器、驱动器、监测器A、监测器B、参考模型以及记分板所组成的UVM基础框架中,其步骤是按如下步骤进行:

步骤1、引入两个容器类:输入Agent类In_agent和输出Agent类Out_agent,将序列发生器、驱动器以及监测器A封装成输入Agent类In_agent,将监测器B封装成输出Agent类Out_agent,在输入Agent类In_agent中实例化序列发生器、驱动器以及监测器A,在输出Agent类Out_agent中实例化监测器B;

步骤2、利用Class类创建输入虚拟接口In_VI、输出虚拟接口Out_VI和一个系统配置类Sys_cfg;且系统配置类Sys_cfg中包含测试序列的信息,输入虚拟接口In_VI、输出虚拟接口Out_VI取代了绝对路径,增强了UVM验证平台的可移植性,系统配置类Sys_cfg增强了UVM验证平台的可配置性;

步骤3、利用Class类创建序列分析器,并在序列分析器中创建一个Callback回调接口以及读写标记语言文件的句柄,Callback接口可实现序列分析器与标记语言文件的通信,标记语言文件可存储序列分析器接收到的测试序列;

步骤4、在序列分析器中创建一个从系统配置类Sys_cfg中派生的配置类Analyzer_cfg,Analyzer_cfg中的信息可由用户根据验证需求自行配置;

步骤5、引入一个容器类:环境类Env,将输入Agent类In_agent、输出Agent类Out_agent、序列分析器、参考模型以及记分板封装成环境类Env,在环境类Env中实例化输入Agent类In_agent、输出Agent类Out_agent、序列分析器、参考模型以及记分板;

步骤6、在激励产生器中设置一个用于控制测试序列切换的开关变量Switch,并初始化开关变量Switch为0,开关变量Switch的状态决定了测试序列的类型,当开关变量Switch置“0”时,激励产生器发送随机测试序列,当开关变量Switch置“1”时,激励产生器发送边界测试序列;

将系统配置类Sys_cfg、输入虚拟接口In_VI、输出虚拟接口Out_VI、激励产生器以及待测设备封装在顶层Top中,从而形成UVM验证平台;

步骤7、在UVM验证平台中,定义测试序列的当前序号为t,并初始化t=1;在配置类Analyzer_cfg中设置测试序列的总数为Tmax;

步骤8、利用激励产生器产生第t个随机测试序列并发送至序列发生器,由序列发生器将第t个随机测试序列分别发送至序列分析器和驱动器。在序列分析器中定义一个派生自uvm_seq_item_pull_port的端口seq_analyzer_item_port,在序列发生器中定义一个派生自uvm_seq_item_pull_imp的端口seq_item_port,在环境层将seq_analyzer_item_port和seq_item_port进行连接;序列分析器和序列发生器之间通过TLM进行通信,序列分析器通过端口uvm_seq_item_pull_port内含的get_next_item任务从序列发生器获取测试序列,并通过调用端口uvm_seq_item_pull_port内含的item_done函数通知序列发生器当前测试序列已经接收完毕,可获取下一个测试序列,序列分析器与序列发生器之间的通信构成一种反馈握手机制。

步骤9、驱动器将第t个随机测试序列通过输入虚拟接口In_VI传递给待测设备,并由监测器A采样输入虚拟接口In_VI上第t个随机测试序列并发送至参考模型;

步骤10、待测设备根据所接收到的第t个随机测试序列产生第t个响应输出;

参考模型将接收到的第t个随机测试序列进行处理后,得到第t个期望测试结果并发送至记分板;

步骤11、监测器B通过输出虚拟接口Out_VI采样待测设备输出端的第t个随机测试序列并发送至记分板;

步骤12、记分板判断第t个响应输出与第t个期望测试结果是否一致,若一致,则表示待测设备的功能正常,否则,表示待测设备的功能异常;

步骤13、序列分析器利用Callback回调接口以及读写标记语言文件的句柄将所接收到的第t个随机测试序列存储到标记语言文件中。具体实施时,创建一个uvm_xml_writer类,通过uvm_xml_writer类可创建一个标记语言文件并对其进行读写操作。以标记语言文件是XML类型为例,对应的标记语言文件为XML文件,在序列分析器中创建一个Callback回调类,Callback回调类中包含操作XML文件的句柄xml_writer,通过此句柄可将测试序列的标识信息Id、长度信息Length等按照XML语言标准格式写入XML文件中。并统计所接收到的随机测试序列的数量Cont1,从而根据数量Cont1和总数Tmax来计算已发送的随机测试序列所占的随机比重,若随机比重达到配置类Analyzer_cfg中所设置的随机比重阈值时,则将相应的随机比重通过uvm_config_db机制反馈给激励产生器后,执行步骤14;否则,将t+1赋值给t,并返回步骤8执行;

步骤14、激励产器解析标记语言文件,并将第t个随机测试序列切换为第t个边界测试序列后,将开关变量Switch置为“1”,再通过序列发生器将第t个边界测试序列分别发送给序列分析器和驱动器。

本实施例中,以待测设备的路由信息为例,若验证平台共包含4个待测设备,并由Port_id表示待测设备的路由信息,激励产生器发送随机测试序列时,约束Port_id的范围为0到3。当Port_id被随机化为2和3,序列分析器将Port_id为2、3的信息写入标记语言文件中,当激励产生器的开关变量Switch置“1”后,激励产生器读取标记语言文件的Port_id信息,修改随机测试激励外部约束,使其随机化时Port_id不等于2、3,从而形成边界测试序列,边界测试序列被发送至序列产生器,再由序列产生器将边界测试序列分别发送至序列分析器和驱动器;

步骤15、驱动器将第t个边界测试序列通过输入虚拟接口In_VI传递给待测设备,并由监测器A采样输入虚拟接口In_VI上第t个边界测试序列并发送至参考模型;

步骤16、待测设备根据所接收到的第t个随机测试序列产生第t个响应输出;

步骤17、参考模型将接收的第t个边界测试序列进行处理,得到第t个期望测试结果并发送至记分板;

步骤18、监测器B通过输出虚拟接口Out_VI采样待测设备输出端的第t个边界测试序列并发送至记分板;

步骤19、记分板判断第t个期望测试结果与第t个响应输出是否一致,若一致,则表示待测设备的功能正常,否则,表示待测设备的功能异常;

步骤20、统计序列分析器所接收到的边界测试序列的数量Cont2,并据数量Cont2和总数Tmax来计算边界测试序列所占的边界比重,若边界比重达到配置类Analyzer_cfg中所设置的边界比重阈值时,则将相应的边界比重通过uvm_config_db机制反馈给激励产生器,以使得激励产生器停止产生边界测试序列;否则,将t+1赋值给t后,利用激励产生器产生第t个边界测试序列,并返回步骤15执行。

综上,本发明通过序列分析器对激励产生器的控制,可以有效减少冗余测试序列的发送,另外可以根据用户预设比重实现随机测试序列到边界测试序列的切换,覆盖到一些边界的情况,加速了UVM验证平台的收敛,提高了验证效率。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1