路科验证的个人空间 https://blog.eetop.cn/1561828 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

SV及UVM接口应用篇之五(终):脚本语言与UVM的交互

已有 2194 次阅读| 2018-6-29 18:34 |个人分类:验证系统思想|系统分类:芯片设计

脚本语言在验证日常中是一位好帮手,除了在不同工具、环境和流程之间可以起到粘合剂的作用,也可以提高验证的灵活性。我们在验证激励的产生和控制上面谈到过,验证序列的产生可以分为:

  • 线下生成(offline generation),即在仿真之前产生

  • 线上生成(online generation),即在仿真过程中产生


同时控制也可以类似地分为线下控制和线上控制。如果将这两种测试元素组合在一起,那么会有下面的几种组合:

  • 线下生成控制和激励,这部分往往由脚本语言来实现决定测试场景和激励数据,而在仿真时由SV/UVM解析文本继而发起激励。

  • 线下生成控制而线上产生激励,这是典型的SV/UVM测试场景,线上生成激励是由每一个周期内新产生的随机数完成的,而每次的测试所需要的参数往往是在测试之前固定下来的。

  • 线上生成控制和产生激励, 为了提供测试控制更多的灵活性,脚本可以在仿真时对SV/UVM环境发起命令控制,即线上控制的方式。

  • 线上生成控制和线下产生激励,这一交互方式会由SV/UVM一端首先发起仿真,在线生成随机配置模式,而在需要激励数据时与Python交互,要求Python生成激励数据文本,再分析该文本发送激励。




本节主要针对脚本语言与UVM的交互场景,即主要介绍上面的线上控制和线下激励、以及线上控制和线上激励两种场景介绍它们交互的各种可能,同时会有实际的应用场景来启发读者们的思路。


线上控制和线下激励的交互应用

SV语言的长处在于随机控制,而对于一些在信号处理、浮点运算的应用在使用上面并不想传统的C和脚本语言那么得心应手。譬如其它的软件语言对于信号处理有着专业的库,可以在提供底层支持的同时,方便用户构建更上层的算式,这一点对于SV而言就是一个门槛。那么对于数据运算有着更高要求的应用在随机测试时,如果使用SV来生成相关的数据,则意味着需要先开发类似的数据计算库,进而才能创建一些可用的随机数据。除了这种增加额外成本的选择,我们还可以考虑用其它语言的数据计算优势来弥补SV这一点的不足。

另外,对于后期的数据采样比较时,由于也需要高等数据计算的结束,也可以由外部的语言完成数据比较。这样一来,数据的生成和比较由外部语言完成,而数据的激励和采样由UVM完成。下面我们给出一个运用Python语言来实现生成测试数据的用例,而在仿真开始UVM一侧会在线生成配置数据,进而影响测试数据的参数传入。由UVM调用Python来生成测试数据并,通过文本的方式由UVM一侧来分析并且生成激励。同时,在仿真过程中,环境中的monitor会采样数据,写入到采样文本中,待仿真结束后,由Python一侧的线下scoreboard完成复杂的数据比较。



在下面的例码中,我们主要摘出了跟数据生成的例码。通过这段例码,读者们可以看到,借助了Python丰富的库和文本处理,我们可以很方便地运用高等计算来生成需要的数据和相应的配置参数,而这一点在后期的数据比较中也同样重要。







上面这段剪出的例码中,读者们可以观察到Python与SV的交互形式如下:

  • Python提供复杂数据的生成类,同时等待外部的参数传递,并将数据最终生成文本

  • UVM一侧提供生成测试数据源的参数,继而通过$system()系统函数来调用Python脚本,利用Python脚本生成测试数据

  • UVM接下来会继续解析生成的数据文本,并且将其送往DUT的数据接口,这一部分文本解析的代码我们在文中省略了。


这段例码主要解释了数据生成的流程,可以看到触发端是由UVM一侧发起的,而在发起之前,用于呼叫Python脚本的配置参数则是UVM随机生成的。这便是线上控制(UVM)和线下激励(Python)的交互方式。而要注意的一点是,生成的数据可能并不是一次全部生成的,会伴随着仿真和调用Python次数,每次生成新的数据以供UVM的激励使用。另外,可以从这个测试DSP的用例看到,关于数据的比较部分也是在仿真结束时来调用的比较脚本,这一交互关系也是由UVM来呼叫Pytyon部分的。至于数据比较的部分,还有一种可行的方案时,为了保证数据检查的实时性,可以在两侧采样文本都达到一定要求时,就采用周期性地比较,这种比较方式可以更好地“保鲜”,在第一时间将错误和“案发地点”锁定,也便于调试。



线上控制和线上激励的交互应用

在通常的UVM测试中,往往在测试中就会给定UVM环境的配置参数。无论是给固定值的配置方式,还是给随机限定条件的方式,都无法在仿真时做动态改变。那么有没有场景需要动态调整测试时的配置情况呢?

  • 如果需要在测试时可以动态地控制测试结构和场景,而又在不重新编译的情况下,如何实现呢?如果有的时候,由于修改了测试代码而需要额外编译和链接的时间过久,又或者加载大型SoC仿真对象过久,那么在已启动的仿真环境中,可以不做二次编译,且能够修改测试结构和配置参数的话,那是一种更好的选择。

  • 如果环境面对的是UVM新手,让他们写UVM测试代码可能会需要额外的学习时间。那么有没有其它好的方法呢?在之前的测试平台自动化生成一章中我们就提到过一个良好结构化的测试平台Pangu。该平台除了会自动生成测试平台,同时也支持标准化的测试命令,降低了UVM初级用户的使用门槛。而如果可以在仿真时,通过一些简易可读的脚本来控制测试环境,那么这种线上控制的方式也可以使得UVM的验证更容易。


无论是哪一种要求,如果在UVM仿真时,让仿真器和脚本(通常是Tcl)之间构建线上的命令接口,使得从命令窗口(console)给入的Tcl指令也可以控制验证环境,那么这就会让测试变得更容易和更灵活。Tcl是各种仿真器的命令语言,用来控制仿真的开始、结束、打印报告信息和更多复杂的操作。Tcl同时也是一种非常强大的脚本语言,一般在Perl和Python中可以做的处理Tcl也可以代劳。为了让Tcl可以在线地对UVM环境和DUT进行控制,我们需要修改原有的UVM环境,添加一个面向Tcl的代理。通过这个代理,可以一方面接收Tcl的命令,继而解析和执行,同时也能够返回一些数据,通过Tcl命令接口来返回到仿真器一侧。




点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 253

    粉丝
  • 25

    好友
  • 33

    获赞
  • 45

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-25 16:33 , Processed in 0.020788 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部