王红卫 占杨林 梁利平
(中国科学院微电子研究所,北京 100029)
随着大规模集成电路系统设计的飞速发展,集成规模日益庞大,集成功能日益复杂。芯片验证在芯片研发中所占的比例越来越重,占据了整个研发周期的70%以上[1]。芯片验证已成为整个芯片流程中的瓶颈,验证的完备性和验证效率的提高成为验证的难点,也是目前验证的主要研究方向。
目前,数字芯片设计验证领域在验证技术、验证方法学、验证语言、IP核重用验证、验证流程及评估等方面都取得了巨大的进步。但是,验证技术已经落后于设计和制造能力,成为整个数字芯片领域发展的瓶颈,制约了设计生产率的提高。随着验证技术的逐步发展,现在以测试向量自动生成技术(Testautomation)为代表的高级验证技术[2]已逐步取代传统的基于直接检测(Direct-test)的验证技术,而在高复杂度数字芯片设计中发挥越来越重要的作用。此外,EDA行业也提出了种种新的验证方法,包括基于覆盖率的验证方法,软硬件协同验证的方法,基于断言的验证方法等。针对具体的系统实现,选择合理的验证方法,可以大大减少验证的时间。
本文阐述了Diamond多核DSP处理器系统所采用的将测试向量自动生成的验证技术和基于覆盖率为导向相结合的验证方法[3],并加入了高可观测性的自动检测机制,建立了一个可重用的自动化验证平台。
Diamond 处理器是一种可以和32位通用RISC处理器无缝连接的DSP处理器。整个处理器兼容通用32位CPU指令集,同时具有自己完整功能的DSP扩展指令集,使得整个处理器既可以作为CPU使用,也可以作为DSP使用。
本文中的DUT是Diamond处理器系统的数据通路(Datapass)部分,其结构如图1所示。它内部由Decode_32、ALU、MUL、LDST、DAG、Reg_pool组成。Decode_32模块完成32位指令的译码,转换成11位编码分配给各个运算模块。ALU模块处理加减、移位等逻辑运算指令功能。MUL模块主要处理乘法、乘累加等乘法类指令功能。LDST模块完成memory的数据存储功能。DAG模块主要完成memory地址运算的功能。Reg_pool是系统的寄存器堆,所有指令的数据都要从这里读出,运算结果最终也要写回到这里。
整个系统的数据通路主要是由这几个模块通过分配好的流水级进行指令的译码,数据和地址的运算,最终写回到寄存器堆中相应的寄存器中。
图1 Diamond DSP处理器系统的数据通路简图
根据DSP处理器系统的特性及验证需求,设计的平台结构如图2所示。各个模块的功能如下文描述。
Makefile是用于自动编译并优化程序结构的UNIX统一体。用这个文件来组织我们的验证环境,能够方便地指定仿真库和模式、网表路径、配置仿真模式、控制仿真波形的开关、重命名log文件等功能[4]。DSP自动验证环境集成了两种验证方式:Special方式和Random方式。只需要输入相应的命令make special或make random,自动生成相应的log文件和wave文件,方便快速定位错误并修正bug。
它是一个脚本文件,主要用于设置本地仿真环境、创建目录文件并复制环境、更新模块文件、运行仿真等功能。
向量文件是所有测试激励的集合,在DSP自动化验证平台中,采用受约束的随机激励为主,定向激励为辅的验证策略。我们有两种不同的测试向量:自动生成的随机测试向量[5]和根据DSP指令编写的定向测试向量。随机测试向量是用C语言编写的伪随机生成程序自动产生的32位指令编码,指令之间满足DSP系统中的指令约束关系,测试的覆盖范围比定向测试要全面,比完全随机测试覆盖点准确,有效地缩短达到目标覆盖率的时间。定向测试向量是由我们人为编写,通过对覆盖率的分析,会得出一些验证上的功能“遗漏点”,这些“遗漏点”是伪随机生成程序无法覆盖到的功能点,通过定向测试向量的添加能够提高整体的覆盖率。
它是一个perl脚本[6]文件,主要用于生成固定格式的report文件,重命名及保存生成的log文件和波形文件。
波形控制文件dump.v主要通过调用VCS自带的波形操作函数,保存仿真波形,为方便验证打开或者关闭某些模块的波形保存等等。
主要用于指定覆盖率收集的层级关系,其中包括添加或者删除某些模型的覆盖率收集操作等等。
SDF文件用于后仿,它包括单元延时,设置并保存检测的时序信息,
Model是验证人员根据待测芯片的功能行为描述编写的效仿模型,通过测试激励的输入把Model中的输出作为期望结果与待测芯片中得到的输出结果进行比较,对芯片进行功能验证。
图2 自动化验证平台结构图
该验证环境设置了一个监视器,主要是用来监视DUT输出的数据,这些数据是自动检测机制无法检查到的。比如控制指令之间数据相关的stall信号,如果有问题,就会第一时间被监视器捕捉到并显示在log文件里。
自动检测机制主要有两个功能:
一是检查经过指令译码后的DUT中11位指令编码与验证平台中的编码是否相同,保证进入下层模块的指令正确性。
二是对数据的比较,首先是测试生成程序对寄存器堆的初始化值与验证环境中的寄存器值相比较,这是对输入数据的比较,只有保证输入的正确性,才能进行之后数据的比较。其次是DUT输出的结果与验证环境得到的期望结果之间的比较。这种三方之间的比对机制,保证了DUT功能的正确性。
仿真log文件是仿真的输出,包括了cycle、data、engine控制信息,我们可以通过log文件的信息找到出错的寄存器以及时间点,从而快速定位bug。
以覆盖率为导向的验证方法(Coverage-Driven Verification)[7]是根据功能覆盖点来测量验证进度,这些功能覆盖点可以确定一个功能是否被验证过。这样,验证的目标变为填满设计的功能覆盖模型。以覆盖率为导向的验证方法可以直接测试平台来填满这个功能覆盖率模型,或者可以让一个随机的测试平台生成测试集验证功能。
在自动化验证环境中,我们通过将随机测试生成程序产生的伪随机测试向量作为测试激励,反复不断地进行指令的随机测试,得到覆盖率信息,因为测试向量是根据伪随机序列机制生成的,肯定会有一些功能点没有覆盖到。此时通过对覆盖率的分析可以确定哪些功能点已经覆盖,哪些测试激励是多余的,为功能“遗漏点”添加定向测试向量进行覆盖并消除冗余的测试激励,进而提高覆盖率。图3为以覆盖率为导向的验证方法的流程,整个流程包括两个环路,在实际应用中,可能需要多次迭代才能完成验证。
图3 以覆盖率为导向的验证流程图
验证DSP数据通路(Datapass)仿真出来的存储类指令读写memory操作部分波形如图4所示。自动检测机制会检查DUT的输出结果,将该结果与验证平台中得到的期望结果进行比较,如果相等,说明DUT中存储类指令读写memory的操作功能是正确的。同理可以检查其它操作的验证结果。验证过程中采用了在生成的log文件中根据是否存在错误报告来判断设计时都存在缺陷,免去了直接从仿真波形上查到错误的繁琐性。如果仿真过程中报出错误,但从log文件上看不出错误原因,那么就要通过仿真波形来观察错误发生的原因。根据芯片支持多种类型指令操作的特性,而且指令之间会存在数据相关等问题,为了提高验证的效率,我们开发了自动生成程序,用于生成受约束的随机测试向量,覆盖到了绝大部分指令功能,通过多次回归测试[8],分析覆盖率,为随机测试未覆盖到的指令功能添加定向测试向量,所有的测试向量全部通过并且使覆盖率达到了100%。
图4 存储类指令读写memory操作部分波形图
该验证平台中除了传统的两方对比机制外,还添加了软件模拟器生成的测试结果比较,在仿真运行过程中,通过调用系统指令SystemCall可以在仿真过程中检测测试结果的正确与否,该软件模拟器由SystemC编写完成,同样是根据设计中的约束进行配置,它带来的好处是防止DUT与测试环境产生同样的错误而导致出现同样的错误结果;另一方面也提高了功能验证中的完善性和正确性。第三方结果比较机制的添加,使验证人员能够及时发现验证环境中无法发现的功能遗漏点,缩短了验证周期,节省了人力物力。
本文设计的验证平台结构清晰,模块间相对独立。在验证其它DUT时,验证平台中的监视器,自动检测机制可以直接复用[9],而验证环境中的功能模块可以根据DUT的特性加以修改便可重用。这样可以节省重新编写代码的时间,加速了验证的进程。
以覆盖率为导向的DSP自动化验证平台,借助于随机测试向量生成的自动化,使验证工人员不需要手工编写繁杂的测试向量,数据比对过程完全自动化,省去了人工比对波形的繁复工作。另外,平台中添加以覆盖率为导向的验证策略,保证了功能覆盖的完全。经过分析可以看出,该验证平台模块化强、易于理解和重用,验证过程自动化,能够有效地提高验证效率,确保验证功能的完整性。
[1] 刘燕,王京梅.基于VMM的流量管理芯片验证[J].现代电子技术,2009(12):15-18.
[2] 董杨鑫,郑建宏.基于断言的SoC设计验证方法[J].电子测试,2007(2):52-55.
[3] Qiu Li, Feng Dong-qin. Functional Verification of EPA Chip.[C]// Proc. International Conference on Electric Information and Control Engineering(ICEICE) 2011.[S.l.]:IEEE Press, 2011:1-5.
[4] 陈皓.跟我一起写Makefile. [EB/OL].[2012-06-18].http://www.Cublog.cn/u/19881/upfile /060718103303.pdf.
[5] Carl Pixley, Aruna Chittor, Fred Meyer. Functional Verification 2003:Technology, Tools and Methodology. [C]// Proc. ASIC, 2003.[S.l.]:IEEE Press, 2003:1-5.
[6] Randal L.Scbwartz, Tom Pboenix.Perl语言入门[M] 南京:东南大学出版社,2009.
[7] 褚晓滨,陆铁军.结合断言与覆盖率为导向的验证方法[J].微电子学与计算机,2008(11):40-43.
[8] 侯海军,郭斌林.基于VMM的芯片验证平台设计[J].中国水运,2008(12):22-35.
[9] O.Petlin,A. Genusov, L. Wakeman. METHODOLOGY AND CODE REUSE IN THE VERIFICATION OF TELECOMMUNICATION SOCs [C]// Proc. 13th Annual IEEE International ASIC/SOC Conference, 2000.[S.l.]:IEEE Press, 2000:187-191.