利用RVM搭建TD-SCDMA终端芯片的高效验证平台


陈辉
重庆重邮信科股份有限公司3G研究所

摘要

随着片上系统(SOC)设计复杂度的不断提高和设计规模的不断增大,验证工作已经成为一大挑战,目前验证工作已经占到整个项目工作量的40%~70%。验证分为前端验证和后端验证。在前端验证过程中使用好的验证工具和验证方法学,可以提高验证的效率,能及早发现芯片代码和功能上的缺陷,大大缩短项目开发的周期,提高芯片设计的成功率。
在TD-SCDMA终端芯片的开发过程中,使用SYNOPSYS的VERA验证工具和RVM验证方法学搭建的验证平台对此芯片进行了充分的前端验证,确保了芯片的功能正确性。

1.引言

随着芯片设计复杂度的不断提高和设计规模的不断增大,验证已成为芯片设计的瓶颈。在验证过程中,验证方法学扮演越来越重要的角色,高效的验证方法学可以提高验证的效率,加快验证的进程。目前,RVM验证方法学脱颖而出,它是基于分层结构验证方法学,通过将验证平台分成功能不同的几个层面,提高了验证平台的重用性和抽象层次,更好的支持了激励随机产生,DUT输出结果自动检查,覆盖率驱动等技术。此外,RVM验证方法学引入面向对象验证编程语言(OPENVERA)搭建验证平台,有效的结合了RVM验证方法学的分层结构,增强了验证平台的封装性和结构性,全面提升了验证工程师的设计能力,开发出的验证平台结构性强,流程清晰。

2.RVM验证方法学概述

2.1 验证平台的分层结构

RVM验证方法学的关键就是验证平台的分层结构,分层结构如下,主要包括5层:

图1: RVM分层结构

Signal layer定义了验证平台与DUT连接的接口(Interface)。验证平台通过此接口,驱动DUT的输入信号或者监听DUT的端口信号。

Command layer包含Drive,Assertion和Monitor模块。Driver从Channel中获得Transaction,并将Transaction封装的激励通过Signal layer提供的接口写入到DUT中;Monitor监听Signal layer的接口,并将接口的变化封装到Transaction中,通过Channel传入上层的Checker模块。Assertion用于判断DUT的接口协议及其内部行为是否正确。

Functional layer包含Transactor和Checker模块。Transactor处理高层传下来的Transaction, 可以修改Transaction的内部变量,或者根据Transaction封装的 DUT激励模拟DUT的功能产生期望的输出,并将处理后的Transaction通过Callback调用传到Self-Check 中。Self-Check和Checker用于验证DUT的输出和响应的正确性。

Generation layer包括Generator模块。Generator随机产生Transaction,并将Transaction通过Channel传到下层模块。

Test layer包括需要完成的随机测试例和直接测试例。除了Test layer,其他各层的模块都包含在Verification Environment中,不同的测试例可以复用同一个Verification Environment对DUT进行测试,实现了代码重用。

Verification Environment中还包括一个重要的模块Functional Coverage。此模块中包含验证工程师定义的功能覆盖点,功能覆盖点可以分为激励覆盖点和行为覆盖点,激励覆盖点用来记录和反馈验证平台向DUT施加的激励,而行为覆盖点用来记录和反馈DUT的内部和输出行为。在验证过程中,仿真器根据定义的功能覆盖点统计出功能覆盖率,验证工程师在功能覆盖率的指引下添加测试例,直到功能覆盖率达到期望的要求,从而取保DUT的功能得到充分的验证。

2.2 RVM的基类

RVM自带了非常丰富的基类,为编写验证平台提供了一个很好的框架,同时也减少了编写的代码量。在编写RVM验证平台的各个模块时,可以继承这些基类,然后在继承类中加入自己的功能性代码。RVM自带的基类主要包括构造transaction的rvm_data类,构造transactor的rvm_xactor类,构造channel的rvm_channel类,构造verification environment的rvm_env类,和消息类rvm_log等。有了这些基类后,验证工程师很容易实现验证平台各个模块间的同步关系和模块间的通信等,不仅使得验证工程师能容易的编写一些较复杂的验证平台,而且还使得编写出的验证平台更容易理解,调试和重用。

3.TD-SCDMA项目介绍

TD-SCDMA标准是近百年来我国通信史上第一个具有完全自主知识产权的国际通信标准,它的出现在我国通信发展史上具有里程碑的意义,极大地提高了我国在移动通信领域的技术水平,是整个中国通信业的重大突破。对于全球的运营商和通信设备制造商,TD-SCDMA更是提供了一个难得的发展机遇。重邮信科股份有限公司抓住机遇,刻苦钻研,成功研制出了世界上第一颗0.13微米工艺的TD-SCDMA手机芯片“通芯一号”,“通芯一号”的研制成功,标志着中国3G通信的关键技术达到了世界领先水平,将极大地促进3G手机的商业化,促进中国民族通信产业的发展。芯片结构简图如图2。

“通芯一号”采用ARM9+双DSP内核架构, 加上具有自主知识产权的专用电路,支持384kbps,处理能力非常强大。在芯片的研发过程中,我们采用了RVM方法学搭建验证平台,在较短的时间内对芯片进行了充分的前端验证,确保芯片的功能正确性。

图2:“通芯一号”结构简图

4.结合RVM方法学搭建验证平台

芯片的前端验证过程包括模块级验证和系统级验证,模块级验证专注于待验证模块的功能性验证,需要设计较多测试例,使的功能覆盖率达到要求。而系统级验证专注于芯片中各个模块间的互连是否正确,可通过查看波形或Assertion来确认连接的正确性。

4.1 模块级验证方法

在模块级验证过程中,传统的芯片开发周期是制定Specification,然后设计人员进行各个设计模块的设计,等设计模块的RTL设计结束,验证人员再设计验证平台,并且通过直接测试的方法来对RTL设计进行验证,这种验证方法,不仅拖长了整个芯片的开发周期,而且不能保证对芯片进行了完备的验证。传统的芯片开发周期如图3。

图3:传统的芯片开发周期

引入RVM验证方法学后,在设计模块没有完成时就可以搭建设计模块的验证平台。首先验证人员与设计人员进行交流,阅读模块设计文档,并制定模块验证文档。验证人员可以根据设计模块的接口说明来编写Interface和Port,然后根据设计模块的功能和协议标准编写Generator,Transactor,Self-Check,Functional coverage等模块,并可以编译调试修改验证平台的语法错误,最后根据验证文档编写相应的测试例。当设计模块的RTL设计结束,将DUT整合到验证平台中进行验证。在验证过程中采用约束随机测试,输出结果自动确认,功能覆盖率驱动等技术,提高了验证效率,缩短了芯片的开发周期。整个芯片开发周期如图4。

图4:引入RVM的芯片开发周期

另一个提高效率的方法就是预先为验证平台中的各个模块建立模板,这样避免验证工程师写重复的代码。例如:在验证“通芯一号”的APB总线上的模块时,都需要搭建一个Driver来模拟APB总线的读写操作,且这些读写操作都是一样的,同时RVM方法学中Driver的基本结构也是确定的,因此建立APB端Driver的模板如图5:

同时还可以为Transactor,Monitor,Environment编写模板,验证工程师在搭建RVM验证平台时,只需在模板中替换相应的名字和添加功验证工程师在熟悉和理解DUT的功能和协议后,可以编写验证需求分析,然后在验证需求分析和模块级验证方法学的指引下搭建验证平台。下面以“通芯一号”中USB模块的验证为例,说明模块级验证平台的搭建过程。

图5:Driver 模板
4.2 模块级验证平台

验证工程师在熟悉和理解DUT的功能和协议后,可以编写验证需求分析,然后在验证需求分析和模块级验证方法学的指引下搭建验证平台。下面以“通芯一号”中USB模块的验证为例,说明模块级验证平台的搭建过程。
在USB的验证需求分析文档中,确定USB模块的验证平台如图6。此验证平台中,绿色的模块将在系统级中被ARM和APB总线所代替,而蓝色的部分则可以重用到系统级的验证平台中。在搭建验证平台时,由于USB的RTL设计模块还没有完成,因此使用虚线表示。

在USB的验证需求分析文档中,确定USB模块的验证平台如图6。此验证平台中,绿色的模块将在系统级中被ARM和APB总线所代替,而蓝色的部分则可以重用到系统级的验证平台中。在搭建验证平台时,由于USB的RTL设计模块还没有完成,因此使用虚线表示。

4.2.1 Transaction

Transaction理解为事务对象,基类是RVM_DATA。Transaction中封装了DUT的激励、验证平台中各个模块的操作类型,以及模块间交互的数据。如果数据变量被定义为rand类型,在Generator中会随机产生这些变量的值,可以为随机变量加constraint来限制变量的值,使之在有效范围以内。RVM_DATA基类中提供了一系列虚函数,在Transaction中可以根据需要实现这些虚函数完成相关功能,同时也可以在Transaction中自行添加和定义虚函数,完成一些特殊的功能。USB验证平台中HOST端的Transaction定义如图7。

4.2.2 Channel

Channel理解为事务级接口,基类是RVM_Channel。Channel用于模块间的连接,在模块间传输Transaction对象。可以调用宏rvm_channel(transaction)生成Channel类。如图7中,调用宏rvm_channel(hosttousb_trans)将产生传输hosttousb_trans对象的通道

图6:USB验证平台
图7:HOST 端 transaclion 的定义

类hosttousb_trans_channel。Channel类中封装了很多实用的事件(FULL, EMPTY等)和函数(put_t, get_t等),简化了模块间的同步和传输过程。在USB的验证平台中,APB端的apbtousb_xactor和apbtousb_drv间使用了双Channel技术如图8,依靠Channel类中的事件和函数,非常简单和快速的实现了两个模块间的连接。在使用通道过程中,最好在Channel中传输Transaction的Copy,而不是直接传Transaction本身,否则会遇到同步失败等问题。

图8:双Channel

4.2.3 Transactor

Transactor理解为处理器,基类为RVM_XACTOR. Generator,Driver,Monitor,Check都属于的Transactor。Transactor根据DUT的功能和协议处理Transaction对象,处理过程在main_t()函数中完成,当调用start_xactor(),Transactor会调用main_t()函数完成相关功能,当调用stop_xactor函数时,Transactor会停止运行。有了RVM_XACTOR基类,验证工程师无需关心这些控制上具体的细节,只需关心如何实现main_t()完成对Transaction的处理。

在USB的验证平台中,Generator可以调用宏rvm_scenario_gen(hosttousb_trans, “hosttousb_trans_scenario_gen”)自动生成,而apbtousb_xactor,apbtousb_drv等Transactor都可以修改模板来实现,减少代码量。同时,Transactor在功能上模拟USB协议,因此在USB的RTL实现前都可以根据USB的协议完成Transactor的编写。

4.2.4 Interface和Port

Interface理解为物理接口,用于建立验证平台与DUT间的连接。在DUT的设计文档中说明了DUT的输入输出端口,因此可以在DUT设计完成前定义Interface。
Port理解为虚拟端口,通过bind操作将port和interface捆绑在一起。在command layer中每个模块都定义了各自的虚拟端口,这样做的好处是提高验证平台的重用性,当验证平台从模块级重用到系统级,或重用到其他项目,只需修改interface中的连接,而无需修改port和被重用模块的内容。在USB的验证平台中,部分Interface和port定义如图9。

图9:Interface和Port的定义

4.2.5 Self_Check

Self_Check完成DUT输出数据的对比功能。在Self_Check中包含了存放DUT期望输出的数组和完成对比功能的函数。这样可以把数据对比的任务交给验证平台完成,而不用人为的进行数据对比,提高了验证的效率。

4.2.6 Functional Coverage

Functional Coverage中包含验证工程师定义的功能覆盖点,功能覆盖是验证平台的核心,因为在验证过程中,仿真器根据定义的功能覆盖点统计出的功能覆盖率,将直接反映验证任务的完成程度,如果功能覆盖率很低,那么需要增加进一步测试例来触发DUT的功能,提高功能覆盖率。直到功能覆盖率达到期望的要求,才能取保DUT的功能得到充分的验证。

USB验证平台中Functional Coverage的需求分析如表1:

激励覆盖点:
行为覆盖点:
表1:USB验证平台功能覆盖的需求分析

4.2.7 Verification Environment

Verification Environment理解为验证环境,基类是RVM_ENV。Verification Environment中包含了例化各个模块,产生DUT的配置,启动验证平台等操作,而这些操作都是通过继承并实现RVM_ENV中的虚函数来完成。图10列出了RVM_ENV中的虚函数并简单介绍了基本功能。在测试例中只需调用run_t()函数,就可以触发验证环境的各个函数,按照流程对DUT进行验证。

图10:RVM_ENV中的虚函数

通过RVM方法学搭建USB模块级验证平台,验证平台有非常好的结构性,方便调试和重用,同时验证平台支持激励约束随机产生,结果自动检查,覆盖率驱动等技术,提高了验证的效率。USB模块级验证平台与USB的RTL设计同时进行,当USB的RTL设计完成后,将USB设计整合到验证平台中,并在2个周左右的时间(其中还包括设计人员修改bug的时间)对USB进行了完备的验证,有效的缩短了芯片的开发周期。

4.3 系统级验证平台

在系统级验证中,重点不再是设计模块的功能验证,而是整个芯片中各个设计模块间的连接是否正确。引入RVM方法学后,可以将模块级验证平台的部分模块复用到系统级验证平台中,实现激励随机产生,输出结果对比等功能,减轻了验证工程师的工作量和提高了验证的效率。在“通芯一号”芯片中,集成了ARM公司的IP核ARM926和LSI公司的IP核ZSP,在系统级验证中使用ADS1.2和ZSP500编程工具产生芯片端的激励,而其他功能模块使用模块级验证平台中被复用的Generator产生芯片外激励,验证芯片中的各个模块在系统级功能和模块间的连接是否正确。以“通芯一号”系统级验证平台中ARM部分为例(如图11)。

图11:系统级验证模型

在进行USB的系统级验证时,原来模块级验证平台的apbtousb_trans_scenario_gen, apbtousb_xactor和apbtousb_drv被APB BRIDGE所替代,APB端的激励从ARM送出。而USB模块级验证平台的其他模块被复用到系统级,起到模拟USB HOST和输入输出结果比对的功能。在进行I2C的系统级验证时,同样可以按照上述方法进行验证。

5.总结

在RVM方法学的指引下在较短时间内搭建了模块级验证平台和系统级验证平台,并对“通芯一号”进行了完备的前端功能验证,提高了验证的效率,缩短了芯片的开发周期,确保了“通芯一号”一次性流片成功。使用RVM验证方法学搭建的验证平台结构性强,方便重用和修改,目前重邮信科正在致力于下一块TD_SCDMA终端芯片的研发工作,我们可以将已开发的验证平台复用到下一块芯片中,缩短验证平台的搭建周期。

参考文献:

1. Synopsys Inc. Reference Verification Methodology User Guild
2. Synopsys Inc. OpenVera Language Reference Manual
3. CHEN Jason. Application of RVM for Vera on a Networking Design Case Study
4. PRATT Nancy,CANFIELD Quinn. Optimizing the development of a Random-Constrained Self-Check- ing verification environment by using a supported methodology