下冰雹 · 2022年09月19日

SystemVerilog | UVM | 事务级激励Sequence item这样构建才实用

作者:JK ZHAN,本文首发于微信公众号“芯片学堂”(ID:HelloICTalking),芯片技术文章分享平台。

UVM sequence机制提供了生成和控制事务级(transaction level)测试激励的方式,这种方式来源于工程实践,让测试用例的开发更加高效,同时也提高了测试激励的可重用性。

在UVM框架下,测试激励从产生到最终作用于DUT接口的这一过程,遵守Sequence-Sequencer-Driver这一基本结构。这其中就有非常多的话题可以讨论,本系列文章也将就这些话题逐一展开。

image.png

Sequence item是游走在Sequence-Sequencer-Driver这一基本结构中的数据结构类型,在有些地方也直接叫transaction,可以说是UVM的必用品。本文不做为基础篇介绍sequence item是什么,而会介绍sequence item是实际应用中应该包含哪些东西。

01 Seq Item 框架

Sequence item作为事务级测试激励中的数据结构,自然承载着上下游赋予它的使命。

对于上游,用户通常对sequence item有控制的需求,比如将某些成员变量限制在某个合理的范围内,或者传递延迟控制信息给下游的driver,或者对整个sequence item做比较操作等等。

对于下游,sequence item需要包含当前事务所有必要的信息,这些信息最终会通过driver驱动到接口信号上;另一方面,sequence item可以收集接口返回来的信息,比如总线返回数据或响应类型等。

基于以上这些需求,在UVM类库提供的代码示例基础上,整理成以下一般框架,可用于指导日常开发。

image.png

02 用户自定义方法

在上面定义的sequence item框架中,有一部分是Utility方法。这些方法主要是提供给用户使用的,用于对sequence item本身的一些操作,包括复制、比较、打印、打包等等。

本来我们可以用UVM提供的uvm_field\_*宏去做配置,然后使用默认的功能,这样就不需要用户自己去实现这些方法了。不过默认的方法执行比较低效,同时也不好调试,所以有条件的话建议用户自己实现。

下面列举几个用户常用的方法:

image.png

上表中“用户调用接口”指的是,在UVM环境开发或调试的时候,用户通过sequence item对象可以调用的方法名,比如seq_item_demo.print()。

“对应可自定义的虚函数”指的是,在开发sequence item本身的时候,我们可以通过重载该虚函数来实现自定义功能,比如print()方法被调用之后,它会间接地调用到do_print()。

下面举几个函数实现的示例代码(还没有经过编译):

参考资料

[1] Accellera Systems Initiative. "Universal Verification Methodology (UVM) 1.2 Class Reference" (2014).

[2] Accellera Systems Initiative. "Universal Verification Methodology (UVM) 1.2 User's Guide" (2015).

作者:JKZHAN
文章来源:芯片学堂

推荐阅读

更多IC设计技术干货请关注IC设计技术专栏。
迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
19301
内容数
1296
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息