文献标识码: A
文章编号: 0258-7998(2013)05-0128-04
随着集成电路制造工艺技术水平不断进步,芯片设计规模越来越大,验证所花费的时间占据了整个产品设计周期的70%,而且随着设计复杂度的提高呈指数性增加[1]。芯片一次流片的成功率从很大程度上取决于功能验证是否充分[2]。因此,验证已经成为制约芯片开发的瓶颈问题。
传统的验证平台主要依赖验证人员观察波形的方法进行验证,验证效率低,不能满足当今验证规模的需求。VMM验证方法学[3]的出现极大程度上提高了验证的效率,进而出现了一批借鉴VMM验证方法学的验证平台[4-7],如参考文献[4]所设计的验证平台就采用了VMM验证技术。但是其设计的验证平台只产生了随机激励,验证时仅使用随机激励很难测试到电路的边界情况,而且验证过程收敛性差。
为了快速定位设计中的问题及边界情况,同时提高验证效率,本文拟采用System Verilog语言,根据VMM验证方法学中的分层设计思想,搭建一个可重用的验证平台,以求同时提供定向测试、受约束的随机测试和错误激励测试。
1 平台框架
验证平台可分为4层,即测试层、建立层、事务层和物理层,如图1所示。
(1)物理层:包括被测设计模块(DUT)集合和电路模型。
电路模型用来与被测代码进行比较,以实现自检验的验证。采用Verilog语言或者System Verilog语言模拟与设计代码等价的功能。
(2)事务层:包括激励产生器、监视器、和覆盖率统计器等。
激励产生器的主要功能是驱动DUT和电路模型的接口信号。本平台的激励产生器能够产生定向测试向量、错误测试向量和受约束的随机向量。
监视器的主要功能是监视DUT和电路模型输出的信号,并对两者进行比较。当DUT的输出信号和电路模型的输出信号不一致时,仿真可能被强迫结束,同时打印出当时出错的时间和出错的信号名称及内容。
覆盖率统计器的主要功能是根据激励产生器产生的测试向量、DUT输出信号以及覆盖点的要求统计出电路功能的覆盖概率。覆盖点是一种有效的验证机制[8],它的编写根据具体的测试对象而定,可以对单个信号进行功能覆盖率统计,也可以统计多个信号的交叉覆盖率。
以上介绍了事务的类型,根据不同的测试需求可以创建各种平台所需的事务,如随机事务、各种回调函数事务等。
(3)建立层:包括验证框架的建立和电路初始配置。
验证框架建立的主要功能是利用事务层的各种事务构建出整个平台的框架。包括平台环境的配置及参数的设定;激励产生器和监视器的句柄定义和对象声明;与覆盖率相关的回调函数类的句柄定义和对象声明;激励产生器和监视器与回调函数的通信建立。本平台还研发了面向通信交换设备的配置软件和专用的图形界面。
(4)测试层:包括配置文件和测试用例。
在平台搭建好之后,测试层的主要功能是提供定向测试的测试实例和与DUT相关的一些配置信息。例如对高性能路由器转发单元进行验证时,需要通过微机接口对转发单元进行配置,不同的配置参数DUT将会提供不同的功能。本文设计开发了面向定向测试的数据块/包的软件辅助工具。测试人员可以使用辅助工具来产生所需要的数据。
2 通信交换设备验证平台
2.1 交换功能介绍
本文假定所测试的交换设备具有N个输入/输出端口,这里N通常是2的整数次幂,考虑到内部复用,这N个端口可以映射到k组总线,每m=N/k个端口分时复用一组总线,k<N,而且通常也是一个2的整数次幂。交换设备可以接受数据块(如ATM cell)或者数据包(如IP packet),根据数据包的类型、包长、优先级、源端口、目的端口以及其他参数和等信息,通过相应的流量控机制决定数据包或数据块是否被转发传送。交换设备还要负责转发存储管理,将信息数据存入到基于输出端口的缓存队列中等待调度;同时,在队列不空的情况下,根据网络中链路的忙/闲状态,通过一定的调度算法,采用分时复用的方法,依次从不同的输出端口调度出一个数据包发送到网络中。
2.2 验证平台
验证平台需要按照数据包/块格式的要求提供各种不同类型、包长、优先级、源端口和目的端口,以及包含其他参数和配置的网络数据包,同时能够根据各个端口输出的数据包个数计算出该端口的速率,以此来产生链路的忙/闲状态,模拟配置规定的速率和其他要求。
根据层次化结构,并结合交换设备的功能,对验证平台进行了详细的设计。
(1)物理层:DUT采用Verilog语言编写,电路模型采用System Verilog编写,编写过程不是设计的重点,所以这里不再进行叙述。
(2)事务层:根据功能描述可知,如果要从端口处进行验证,本验证平台需要N个激励产生器,用于产生来自N个输入端口的数据包/块,还需要N个监视器来观察N个输出端口的数据包/块。如果要从总线处进行验证,则需要k个激励产生器和k个监视器用于监视来自电路模型和DUT的k组总线上的输出数据。这里,每个激励产生器需要模仿m=N/k个端口及其速率,每个监视器需要记录m个端口的输出。同时还需要一个覆盖率统计器用于统计激励产生器产生的所有情况下的数据包。
①激励产生器:将激励产生器定义为一个类,该类的属性包含了虚接口的定义、待发送包的队列定义、激励发生器编号和回调函数队列定义等,此外还包含了运行方法、定向测试、随机测试、端口速率配置方法、定向包入队方法、定向包驱动方法、随机包产生方法、随机包入队方法、随即包驱动方法和丢弃概率计算方法等。
其中定向测试的测试流程如图2所示。
首先调用端口速率配置方法对所有N个端口的速率进行配置,然后调用定向包/块入队方法,根据测试层的测试实例进行定向包/块的入队操作。按照发送时序要求将定向包依次驱动到DUT的输入端口上,直到发送完所有的定向包,并触发随机包产生事件,然后宣告定向测试结束。测试中在包与包或者块与块之间引入了受约束的随机时延。随机时延的范围采用辅助工具进行配置。在测试层不仅能使用随机数据,还能使用随机时延,从而最大限度地验证被测电路的功能和时延正确性,保证了被测模块的鲁棒性。
随机测试流程如图3所示。首先为每个端口或者总线设置一个数据结构和包/块的队列。产生的数据包/块先被送入相应的队列。然后为每个输入端口的队列预存入一个数据包,等待随机事件被触发。当随机事件被触发后,程序分为两个分支:分支一用于产生随机数据包并进行入队操作;分支二用于调用回调函数,产生错误指示信号,根据错误指示信号丢弃该包、或者发送错误的数据信息、又或者正常发送该包。当发送完一个数据包后再次调用回调函数进行覆盖率的统计;最后判断是否结束随机测试,如果结束,则退出测试。否则重复上述操作。分支一和分支二之间通过事件进行同步通信。
②监视器:监视器的类结构与激励产生器相近,其中包含了属性(虚接口的定义、监视器编号、回调函数队列等)和方法(数据结果比较、端口速率计算)。数据结果比较方法将DUT和行为模型的有效输出数据信号进行比较,如果输出结果不一致,则可能停止仿真,并打印出当前仿真的时间和错误数据信息;如果输出结果一致,则调用回调函数进行覆盖率的统计。端口速率计算方法的主要功能是统计每个端口输出的数据包,根据数据包个数产生相应的链路空/闲指示信号。
③覆盖率统计器:覆盖率统计器的类结构与激励产生器的类有所不同,其结构由属性、方法和覆盖组构成。属性主要是为进行覆盖率统计而定义的一些中间变量;方法为进行覆盖率统计准备数据,这些数据涉及到相应的覆盖点,并调用采样函数,进行覆盖率统计操作;覆盖组由多个覆盖点组成,首先定义多个独立的覆盖点。然后根据具体的情况将这些独立的覆盖点进行交叉覆盖率计算定义,如cross packet_type、packet_dport等。
(3)建立层:建立层定义为一个类,该类由属性和方法构成。属性包含了m个激励产生器和m个监视器的句柄定义、m组总线的虚接口定义、覆盖率类的句柄声明等。其方法包含了建造方法、DUT配置方法和运行方法。其中建造方法用于对m个激励产生器和m个监视器进行对象声明,同时将回调函数压入激励产生器和监视器的回调函数队列中。DUT配置方法的主要功能是按照微机接口时序利用测试层提供的配置文件,对电路进行初始配置。运行方法主要的功能是启动m个激励产生器和m个监视器的线程,这里采用fork join_none语句实现。
(4)测试层:按照数据包的格式要求编写定向测试向量文件,同时提供电路的各种配置参数文件。
最终搭建好的验证平台如图4所示。
3 验证结果和分析
本文的验证平台搭建在Sysnopsys公司的VCS仿真平台上,使用了DVE环境。运行结果如图5所示。可以看出本平台能够按照DUT输入数据信号的要求产生正确的输入信号,并能够按照一定的概率产生错误的数据。同时,当DUT和电路模型输出的数据不一致时,验证平台能够强行停止仿真过程,并打印错误信息。该错误信息包括了错误信号及错误信号产生的时刻等,这些信息能够帮助设计人员快速地定位错误,从而提高验证效率。
最后在覆盖率结果的引导下,通过增加覆盖点以及修改随机信号约束条件和产生随机信号的权重值,最终功能覆盖率能够达到100%。
采用System Verilog语言,借鉴VMM层次化的验证技术,设计了一个可重用的验证平台。与其他的验证平台相比,该可重用验证平台能够提供多种形式的激励,包括定向测试激励、受约束的随机测试以及错误激励;采用了一套十分有效的算法来产生激励并真实地模仿配置好的端口设施;能产生随机数据和受约束的随机时延,模仿真实的环境,对被测模型进行完备的验证。
同时采用了自动对比结果技术。构建不同设计对象的验证平台时,在不修改本验证平台框架的情况下,仅需修改功能覆盖率类中的覆盖点和激励产生器中的一些方法,新的验证平台即可搭建而成。与采用纯手工编写测试向量的验证技术相比较,本文设计的验证平台极大地提高了验证效率,缩短了设计周期。
参考文献
[1] 闫沫,张媛.基于System Verilog语言的设计验证技术[J].现代电子技术,2008,31(6):8-11.
[2] 马宁,李玲,田泽,等. ARINC659总线协议芯片的仿真验证[J].计算机技与发展,2010,20(1):205-208.
[3] 张春,麦宋平,赵益新. System Verilog验证[M].北京:科学出版社,2009.
[4] 刘兆勇, 王进祥, 李清波. 基于VMM的外部存储器接口验证[J].微处理机, 2009(4):1-4.
[5] 段乘超,徐金甫. 基于VMM构件可重用验证平台[J]. 现代电子技术,2011,34(8):127-129.
[6] 林健,杨志家.利用VMM建立基于事务的层次化验证平台[J].微计算机信息,2010,26(4-2):97-98.
[7] 段青亚,黄士坦,靳荣利,等. SoC自动化验证方法的研究与实现[J].吉林大学学报:信息科学版, 2010,28(3):231-237.
[8] KEAVENEY M, MCMAHON A, O’KEEFFE N, et. al. The development of advanced verification environments using system verilog[C]. The 16th Irish System and Signals Conference. ISSC2008, Galway, Ireland,2008.