分层验证法在基于AMBA系统中的应用

FPGA/ASIC技术

205人已加入

描述

分层验证法在基于AMBA系统中的应用

在基于AMBA(Advanced Microcontroller Bus Architecture,先进的微控制器总线体系结构)的系统中,用户设计的模块和第三方IP模块与AMBA AHB(Advanced High-performance Bus)和AMBA APB(Advance Peripheral Bus)总线相连,如图1所示。分层验证方法能够跨越总线边界应用于AHB和APB两种总线系统。同样的方法还可以用于多层设计以及新的先进可扩展接口(Advanced eXtensible Interface,AXI)。下面主要讨论与AHB连接的用户设计的模块。
验证环境目标:
* 支持单一模块级组件验证;
* 支持子系统组件集成和子系统验证;
* 支持全系统范围的集成和全系统验证;
* 全面改善覆盖范围;
* 提供第三方IP模块的快速集成。
验证环境本身也应是可升级的,以便在后续的验证项目重用。

分层验证
为了完成既定目标,需要一种分层的方法验证。分层法用于单个模块级验证以及子系统级和全系统级验证。每一层测试都建立在其它层之上,因此从层与层之间的转移只需做很少的工作。每一层的测试可在后续的层或新的验证项目中重用。
将系统分为三层(见图2),第一层的测试目标是接口协议的验证。第二、三层的目标是用真实数据流验证专用逻辑。
第一层
第一层的目标是测试物理总线接口,确保其不违反总线协议。接口必须遵守在这部分定义的AMBA AHB或APB协议。第一层测试是一组直接测试,它确保所有不同的总线周期都能被正确执行。每一项测试都创建成检查总线协议的专门区域。所有的基本事务都被测试后,就可以进入第二层。
第二层
第二层的目标是产生一个事务序列,不仅重点测试总线接口逻辑,而且还要测试专用逻辑。第二层测试产生真实设计数据流。为了完全实现第二层目标,在验证环境中必须引入条件随机技术(constrained random techniques)。
用条件随机技术实现第二层目标的主要益处是很容易完成第一个测试。用几个简单的功能命令,就能产生总线周期。高位总线周期和功能区完成也很快,并且还能发现更多的难点。将更多的运用统计概念而非仅用直接测试。这种条件随机环境能够从少量的基准测试码中产生大量的激励。由于对设计需求是有条件的,因此仿真周期不会因疏忽而浪费在子系统中无关紧要的部分。条件随机数据流将使验证着重针对设计模块而非直接测试。实际的数据流将完全测试模块专用逻辑,在某种意义上,更接近物理硅的情况。
条件随机激励应用于简单的AMBA AHB周期,也即条件随机事务(CRT)功能(见图3),可以简单而迅速地产生扩展周期。对于一个给定的AHB事务,传输类型、地址、大小和脉冲类型都是有条件的。
例如,AHB主机能产生一个大小和脉冲宽度都可变的读写周期。在这个周期中,读操作占10%,写操作占70%,空闲状态占20%。用传统的HDL语言是很难描述的。
一个完整的条件随机环境定义为一组事务,上面是序列层,中间是选择层,最后是事务条件层。有效载荷反馈进系统中,形成一个自激的激励信号发生器。单个事务综合到一起形成一个序列,多组序列综合到一起形成一个选择,多个选择产生广泛的事务周期和响应。
第三层:专用测试
第三层的测试用于提高设计稳定性。所有部件都将工作起来,包括系统和应用引导序列。在这一层检查软件与软件的接口,测试最终API和驱动,以及更重要的系统性能。至此,一个完整的层次关系被确定下来。第三层测试目标是单个模块或系统的高级功能。第三层还有一个特点,即能够发现错误(bug)。而传统的方法只能在实验室里,产品在投入应用的过程中才会发现。
层目标
第一层的目标是测试模块的接口,第二、三层的目标不仅测试接口,更重要的是测试模块专用逻辑(见图4)。测试时的所有访问都通过AMBA总线。层被应用于设计验证处理的每一级,从模块级验证,到子系统,到最终的全系统验证。

用分层验证方法进行模块级验证
在基于AMBA系统构建之前,每一个模块都必须进行功能测试。每一个模块都在独立的环境中验证,并且在每一层都要进行测试。这就是子系统综合前的设计,它是为了发现基本功能性错误。在这一级,基准测试序列既可以用传统的硬件描述语言如VHDL或Vrilog编写,也可以用硬件验证语言如OpenVera编写。OpenVera在设计时就考虑到易于创建基准测试序列,并且在构建时考虑到便于运用象Synopsys Vera一样的工具进行自动验证,因此很容易完成验证任务。
在模块级验证阶段,第一层测试检查模块能否经由定义的AMBA接口被访问。在子系统集成开始前,模块必须符合AMBA协议要求。所有总线周期必须被检查以确保模块与AMBA系统中的其它模块连接时正确运行。在最短时间内和最大程度上完成这项工作的最好方法就是用验证IP,如Synopsys的DesignWare验证IP,驱动用户逻辑模块。
AHB主机验证IP用于产生直接读写测试,它将全面检查用户模块的AHB总线接口(见图5)。有一个监控器用于检查是否违反AMBA协议,并捕捉总线周期的各种信息。监控器可以让验证工程师知道总线接口已经测试了多少。在第一层,若用直接测试的方法实现100%总线测试是不太可能的。而实际上,第一层的目标就是100%的总线周期或事务范围测试。这个目标确保模块在最短时间内响应绝大多数AMBA周期。
为了实现更广泛的功能范围,第一层的测试环境能迅速扩展到支持第二层测试。在第二层要用更多的真实总线数据流测试模块功能。为了完全实现第二层目标,必须应用条件随机技术。在第二层产生随机数据流是很重要的,因为它特别强调总线操作,能揭示那些被忽视的情况。用直接测试完成这件事情,不仅需要大量的时间,而且并不能仿真真正的AMBA环境。这些事务序列开始测试用户模块的专用功能。
用更完全的形式测试用户模块就是进行大量的AMBA访问,同时检查模块到模块的数据完整性。还应该产生一些事务序列,检查用户模块处在更完全系统中的功能。
当第一层测试与AMBA协议一致时,它在第二层仍然有效。第二层测试将产生更全面的AMBA AHB协议。在条件随机激励作用下,测试将接近100%总线事务目标。
同样的方法可以建立第三层专用测试。创建一个测试,模拟实际的应用功能,如高速缓存接入、DMA传输和器件引导配置。引导和应用配置时唯一的限制因素是仿真周期和时钟时间本身。在第三层用传统的全功能CPU模式测试将需要数百万个时钟周期。用AHB主机验证IP方式则会减少时钟周期,并使测试很容易管理。第三层测试的整体优势是模块接近最终的应用形式。例如,在引导过程中测试寄存器负载能彻底清除在引导中可能导致系统崩溃的功能错误。

用分层验证方法进行子系统级验证
当单个模块全部验证完成后,它们就可以集成到子系统环境中。每一级与模块级验证中的一样,应用于子系统环境中。每一层的验证目标也是一样的,例如第一层的协议检查,第二层的事务序列产生,第三层的专用测试。将每一个模块组合到子系统中,测试的不仅是单个模块,还包括子系统结构本身。
子系统包括实际的数据流发生器,如PCI、USB和物理存储器以及存储器控制模块。图6中第三方IP模块是已经发布的可配置预验证IP。预验证IP模块并不需要单独的模块级验证,因为IP提供者已经完成这项工作,但是它在子系统中还是应验证其与其它模块的连接关系。
第一层测试检查子系统是否正确连接,是否违反AMBA协议。在第一层中为模块级验证任务创建的测试可以在子系统验证中重用。在检查子系统协议时,测试修改很方便,就像检查子系统中的单一单元一样。
第二层的模块级条件随机处理也可以重用。在子系统中,测试的产生是执行同样的AHB主机条件随机任务。增加的AHB主机,如新增加的PCI和USB模块承担着最多的创建总线数据流的任务。这些模块就是DesignWare验证IP,因此在第一次测试前只须花很少的时间。条件随机技术应该用于这些实际的数据流发生器,就象它应用于模块级测试中的AHB主机一样。这个子系统验证环境很快将产生大量的设计数据,这些数据将全面测试每个模块的接口和所有应用。
再次验证在这一级是很重要的。因为所验证的设计越来越大,实现目标变得越来越困难。在子系统级,直接测试几乎是不可能的,即使是最简单的AMBA子系统,也要激励所有可能的系统配置。条件随机事务产生是唯一的方法,只有它能产生足够的子系统测试来完成整个目标。
子系统级是工程师第一个设置监控器的地方,因此可以了解用户模块与其它子系统组件的相互连接关系,发现接口逻辑和专用逻辑中的错误。第二和第三层的测试能迅速发现错误。第一层协议只注意协议规则,第二、三层测试检查所有子系统组件工作正确与否。
第三层专用测试工作在模块级,也可以在子系统内扩展到多个组件。例如通过测试PCI和存储器控制IP的配置,查看PCI接口数据传输情况和外部存储器数据存储情况。开始和末端的数据映像用于验证数据是否被存放在正确的地址里。这种测试还特别注重总线结构和仲裁逻辑。

最终系统级验证
在系统级仍然可以用分层的方法,但是现在相当多的验证负担要由实际的系统级组件承担。已经存在的来自子系统验证环境的第一、二和三层测试都可以在正确创立的系统环境中重用。
在系统级中,已预验证的第三方IP模块可被用来建造一个完整的系统。可重用IP模块减少了创建系统环境的工作量,从而让设计者将更多的时间集中到核心组件上。
在系统级,验证目标是检查为专门应用而设计的整个系统。总线协议的验证不仅要做,更需要注意的是高一级的应用测试。在系统级,实际的应用软件用于测试。这个软件运行在全功能软件模型上,而不是低级别的AHB主机模型上。
运行实际应用编码的优点是创建一个与真实系统尽可能接近的环境。缺点是当执行软件编码时很难控制总线周期。编码不能产生测试所有总线事务协议的一整套总线周期,这是系统级环境中重新运行第一、二层测试的重要原因。第三层测试模拟引导序列和全系统配置。
在系统级仿真环境中运行的测试软件都应在实际的硅级上再运行,以验证其功能。实际硅级的操作都应在系统级仿真中再现,以方便调试。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分