电子大神的日记本,供应链专家的功夫茶盘,在这里记录、分享与共鸣。

登录以开始

验证方法学必须跟上复杂IP的发展

如今,IP核的验证越来越复杂,而且非常耗时,特别是像CPU、浮点运算单元、数字信号处理器这类的处理器内核。目前在性能上显著强过前代处理器的这些新型嵌入式矢量处理器的设计和验证方面存在艰巨的挑战。恩智浦半导体公司的Adelante VD3204x嵌入式矢量DSP系列器件就是这样的处理器。

为了在DSP-IC上改进DSP技术的质量,恩智浦半导体(其前身为飞利浦半导体)的一个部门将验证方面的经验转换成了推进验证工艺发展的工具和技术。后续章节将分享这些经验。

创建新的验证解决方案

恩智浦公司的嵌入式矢量处理器内核以超长指令字(VLIW)架构为基础,支持高并行度的标量和矢量操作,目标是各种多标准的通信技术,如3G-3.5G、WLAN和数字视频广播(手机电视)等。于是,在验证过程中需要测试许多边界条件将成为一个前提条件(pre-condition)。冒着陈述事实的风险,DSP技术的用户可以依赖于接收具有最高质量的健壮内核,因此他们能够将精力全部集中到SoC设计上。

在目前DSP架构的复杂性下,采用随机生成测试并且只有少量功能覆盖点的传统方案已经过时。因此,从计划到收敛(plan-to-closure)的完整方法将选用覆盖率驱动的随机约束验证架构。为了做到这一点,我们将贯彻Cadence公司的plan-to-closure方法学,包括该公司的Specman Elite测试平台自动解决方案和验证管理平台。

计划的利用

选用的方法要求采用可执行的验证计划(vPlan)作为旧式基于纸张的测试计划的替代方案。其中心思想是在过程早期就确定验证和覆盖率目标,然后贯穿项目的整个过程,并按设立的目标报告进度。vPlan业已证明是非常好用的,它不仅可以用来验证独立的功能块,还能将这些功能块集成到一个主要的子单元或完整的芯片中。

计划阶段判断需要验证的特定功能,包括边界案例。这一过程是在测试台中编写功能覆盖代码(采用e语言),用以判断与每个功能覆盖点相关的特性。

在整个验证过程中产生的报告指明了被覆盖(和尚未覆盖)的点。针对每种情况,覆盖率参数都将被返回给原始的vPlan。

多级验证策略

为了避免研发过程中的依赖性,可以选用多级验证策略,该策略专门将内核验证与其他的DSP子系统(DSS)分隔开。在e语言中,总线功能模型(BFM)是专门为了内核开发的。BFM具有DSS验证所需的足够功能,可以与RTL代码和内核自身的验证同时产生。通过运行实际的软件,最后的验证阶段重点将放在RTL内核和其它DSS部件的集成上。

内核的验证

为了在验证内核之前验证基本的功能,RTL设计师通过激励输入并检查输出的方式对一些单独的功能区进行基本的测试。这种方法主要用于接口功能模块。大多数独立功能块是利用内核测试环境的一个子集进行测试的。

完整内核的独立验证广泛地依赖于指令集仿真器(ISS),它是Adelante软件开发套件(SDK)中的一个组件。ISS包括全部寄存器的管线执行周期精度,这些寄存器是在DSP的指令集架构(ISA)中定义的。这意味着在每一个执行周期的末尾,这些寄存器的状态与RTL中相应寄存器是精确匹配的。逐个周期地比较ISS和RTL寄存器的状态是内核验证中使用的最重要的方法。

如图1所描述的那样,所有的内核测试是随着程序在DSP核上的运行来实现的。程序可通过测试生成器创建,用的是e语言,它能产生一序列的指令去试图用不同的操作数来执行所有不同的DSP矢量和标量运算。


图1.内核验证流程利用e编写的组件链接RTL和ISS仿真。

针对测试生成的约束(也用e表达)被分为如下两类:

  1. 捕获有关DSP指令集基本规则的“硬“约束,例如哪些运算可以并行执行。

  2. 指明被测子单元中的子单元和运算的“测试”约束。

多路测试功能允许我们在仿真服务器阵列上并行执行任务,从而减少了每次回归运行的总时间。测试生成阶段的输出是一个程序映像,可以直接下载到DSP的程序存储器中,并在RTL仿真中执行。

尽管硬约束能够捕获绝大部分依赖于结构的问题,但在执行的不同阶段多指令间还会偶尔出现许多微妙的资源冲突。与试图利用约束捕获所有这些规则相反,可以利用ISS及其详细的指令集架构模型。

解决冲突

除了计算每条指令的预期结果,ISS还检查该指令针对管线内其他指令的有效性。如果发现资源冲突,一个错误条件将会报告给测试生成器。该测试生成器具有“备份”和重发指令的能力,因此可以避免这些冲突。事实上,在最终测试程序中只包含无冲突的指令。

当在内核验证环境中执行每个测试程序时,ISS是与DSP RTL并行运行程序的。这两种表述经对齐后再被包含进一个e检查代码,该代码在每个管线执行周期的末端比较所有ISA定义的寄存器状态。这种能够发现主要缺陷的方法已被证明是行之有效的。在针对ISS验证RTL的过程中,也能够检测出ISS中的错误。

应用覆盖率指标

自动测试台为每项测试收集了具体的覆盖率指标。其结果是产生针对计划的全过程扫描。

除了功能覆盖点外,传统的代码覆盖方法也可用来帮助识别无法被充分测试的部分RTL代码。仿真器的本地代码覆盖功能可用来收集每次仿真测试的结果并对结果进行合并。为了产生单个的顶层覆盖视图,可以书写脚本将功能覆盖与仿真器的代码覆盖报告结合到一起。

第一步集中于进入DSS验证之前的独立内核验证过程期间指令的单独正确执行上。当然,DSP运算的其他方面,例如中断处理,是在DSS验证过程中测试并在集成验证阶段期间确认的。

转到DSS组件

在对整个子系统进行验证之前,我们先用独立的测试台对几个DSS RTL组件进行了验证,这将简化一些边界案例的执行。此外,组件的并行测试避免了验证过程中由于一定的依赖性所产生的延迟。

为了执行测试序列,采用了一个经典的基于e的测试台。记录板对结果进行跟踪以验证三个独立的DSS功能块。

在组件级验证过程的同时,DSP-IC验证工程师还开发出了用于内核的BFM,从而允许提前启动DSS验证。另外,BFM还提供了对约束随机激励的精密控制,其仿真速度快过完全的RTL实现。

图2描述了BFM的主要功能以及整个DSS验证环境。与组件级测试台类似,该环境采用eVCs和记录板来生成流量和跟踪结果。


图2.DSS的绝大多数验证利用了DSP内核的一个BFM。

复用优势

这种随机约束并以覆盖驱动的环境采用e编写的面向对象的功能,允许高度的验证复用。在完整的DSS验证过程中,组件级eVCs、记录板和序列都已得到复用。另外,还采用了一个商用的AXI eVC和共享的APB eVC软件,从而可以充分利用前人所做的验证工作。

就DSP内核验证而言,业已证明覆盖方法对DSS验证是非常重要的。DSS vPLAN包括一个基于架构师、设计师和验证工程师推荐的具体功能列表。当进行测试时,用于全部RTL DSS组件的代码覆盖参量被收集到一起,此外,功能覆盖结果也被收集和合并。

一项好投资

DSP-IC的验证策略在每一层都具有通用的主题:即广泛地利用随机约束激励,复杂的自动测试台环境,可执行的验证计划,以及一个对能够度量验证过程的覆盖率参量的依赖性。能够自动执行回归运行并精确地报告测试结果也很有用处。

用于开发DSP-IC先进方法的投资将会取得丰厚的汇报。Adelante VD3204x嵌入式矢量DSP核已被证明是一款高质量的DSP,极具灵活性,并且易于集成,至今已经用于多个SoC设计中。该方法被证实有助于我们目标的实现,其复用能力对VD3204x嵌入式矢量DSP系列产品的进一步发展来说也是至关重要。

*作者:

*  高级验证工程师Roger Witlox,

*  高级验证工程师Ronald Heijmans,

*  验证工程师Chris Wieckardt

*NXP Semiconductors

博主
jerryzhang8023@163.com
jerryzhang8023's Blog
jerryzhang8023
点击跳转