微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于RVM的层次化SoC芯片验证平台设计及应用

基于RVM的层次化SoC芯片验证平台设计及应用

时间:07-18 来源:互联网 点击:
测试层

测试层用于对DUT的逻辑功能进行验证。这一层主要是用户为了验证DUT的逻辑功能而编写的不同测试例,在测试例中可以对各个模块的限制条件进行修改。通过对不同测试例运行结果的统计,可以查看DUT的功能覆盖率,只有功能覆盖率达到一定要求,才能够认为该DUT已经被完备的验证通过。

SlMC模块的功能验证

SIMC是SIM卡控制器的简称,通过SIMC可以在手机基带处理芯片上外接SIM卡,实现数据的发送和接收。SIMC模块连接在系统的APB总线上,ARM微控制器通过APB总线对SIMC进行访问。该模块主要包括波特率产生部分、接收数据的串并转换部分、发送数据的并串转换部分、发送FIFO的控制部分、接收FIFO的控制部分等。发送数据时,SIMC模块会将发送数据寄存器的数据先放到发送FIFO中,再将FIFO中的数据发送出去;接收数据时,SIMC模块将接收到的数据放到接收FIFO中,再由处理器从接收数据寄存器中读取数据。如果接收数据后,判断校验位或停止位出错,则数据不会被放人接收FIFO中,SIMC模块的状态寄存器会有相应的指示。

本文将以一款基带处理芯片的SIMC为例,详细介绍RVM验证方法学的应用。其中DUT的RTL代码用Verilog编写,验证平台的代码用Open Vera编写。Open Vera语言是一种新型的高阶验证语言(HLV)。用0penVera编写的代码中调用了RVM的基类和库函数,充分应用了面向对象技术。

SIMC模块的RVM分层验证平台结构

SIMC模块的验证平台利用Synopsys公司Vera验证工具搭建,验证平台的搭建遵循RVM验证方法学,代码的编写过程调用了RVM基类库。SIMC模块验证平台结构如图2所示。


信号层

信号层包括定义的虚端口,用于和SIMC模块RTL代码的接口相连。首先定义一个interface变量,该变量中定义的接口对应于SIMC模块的接口信号,interface变量的定义语句中用hdl_node关键字和RTL代码的接口信号相连。定义的虚端口再和interface中的信号绑定。

命令层

命令层包括ARM端的驱动器和监视器、SIM卡端的驱动器和监视器。ARM端的驱动器模仿APB总线,按照协议的规定对DUT进行驱动,SIM卡端的驱动器模仿一个SIM卡对DUT进行驱动。两端的监视器检测DUT的输出数据和驱动到DUT中的数据,将数据保存在自核对模块中进行比较,通过比较来检查DUT传输数据是否正确。

编程实现时,可以通过继承RVM基类库中的rvm_xactor类得到所需要的子类,在子类的代码中加入需要实现的功能。

功能层

功能层包括将SIM卡事务转化为ARM事务的事务处理器、实现中断服务功能的事务处理器、自核对模块。编程实现时,事务处理器可以通过继承R V M基类库中的rvm_xactor得到,在子类的代码中加入需要实现的功能。自核对模块用于比较DUT的激励和响应是否符合要求。

激励产生层

激励产生层包括两个Atomic产生器,两个产生器是同一个类的两个对象。产生器为DUT产生随机激励,激励封装在一个事务中,通过事务通道传到下层模块中。两端的产生器都是产生SIM卡事务的,ARM端有一个将SIM卡事务转化为ARM事务的事务处理器来完成SIM卡事务向ARM事务的转化。通过产生器可以随机产生符合协议规范的激励。编写代码时,产生器可以通过调用R V M 的宏rvm_atomic_gen很方便地实现。

测试层

在测试层,用户可以编写不同的测试例对DUT的功能进行验证。在测试例中,通过对约束的限制、环境类的例化、配置类的约束来实现对DUT的功能覆盖,以达到100%的功能覆盖率。

验证平台的重用对单个模块验证完毕之后可以进行系统级的验证。根据RVM验证方法学搭建的层次化验证平台可以被重用到系统级的验证中。系统级验证侧重于检查各模块间的接口和数据交互是否符合设计规范,某些模块级验证的模块可以被复用到系统级验证中。对SIMc模块来说,系统级验证时,ARM端的驱动器、监视器以及激励产生器都可以被APB总线代替,SIM卡端的各模块可以继续使用,达到重用的目的。

应用RVM验证方法的 注意事项与技巧

RVM验证方法学由synopsys公司提出,利用RVM验证方法学首选的编程语言是openVera硬件验证语言。笔者在应用RVM验证方法学搭建验证平台过程中的一些技巧和注意事项归纳如下:

1、验证某个模块前,首先要阅读相关文档,熟悉模块的功能特性,然后搭建验证平台的基本框图,选择RVM的相关技术,在验证平台基本框图指导下编程实现。

2、验证平台中功能覆盖点的定义是验证成败的关键,验证过程中利用RVM的覆盖率驱动技术,分析所定义的覆盖点的覆盖情况,改善该验证平台,每个功能覆盖点都必须被覆盖到。

3、RVM基类库提供了丰富的函数,但是synopsys没有开放RVM基类的源代码,所以验证代码的编写过程中应随时查阅RVM文档,尽量使用RVM基类提供的函数,而不是自己去重新开发一个函数。

4、RVM验证平台中各个模块之间通信有很多种方法,可以用RVM的callbacks类,也可以使用双通道等。 5、RVM为验证平台中的进程间通信提供了多种数据结构,例如semaphore、region、mailbox等,编程时应根据需要进行选择。例如,在某一时刻有多个并行的进程对同一个信号进行驱动,仿真工具会停止仿真并打印出错信息。解决的方法是应用semaphores数据结构,每个进程得到semaphore才可以驱动信号,对信号驱动后再释放semaphore供其他进程使用。

6、如果要打印信息,应使用rvm_log类而不是printf()函数。rvm_log类除了将信息打印出来,还可以显示出信息来源于验证平台中的哪个模块以及该模块的仿真时间,便于编程人员调试代码。

7、随机激励的产生不是真正意义上的随机,而是一种伪随机。编程人员在多次运行同一个测试例时应改变验证平台的随机种子,可通过调用srandom()函数来实现。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top