>
首页 » 技术文章 » 基于SystemC描述的嵌入式系统的自动化验证

基于SystemC描述的嵌入式系统的自动化验证

作者:陈 燕,杜 玄,彭澄廉  时间:2007-01-21 22:31  来源:

摘要: 基于SystemC 的嵌入式系统描述,提出了一种全新的自动化验证方法。 该方法采用面向方面编程技术、分离和封装测试代码,结合自动化测试框架,完成对系统的自动化验证。 此验证方法对被测系统无扰动,能适应测试要求的灵活变化,对嵌入式系统模型可自动、重复地测试,能够满足系统级模型快速验证和评估的要求。

关键词: 嵌入式系统; SystemC 设计语言; 验证; 面向方面编程; 自动化

  嵌入式系统在国民经济和国防各个领域中得到了越来越广泛的应用。随着微电子技术和超大规模集成电路的高速发展,嵌入式系统的规模越来越大,硬件部分的异构程度和软件部分的功能复杂程度都达到了历史最高点。在更高的设计复杂度和更短的面市时间压力下,提高抽象层次进行系统级设计已成为解决问题的必然手段。另外,基于IP (intellectualproperty) 构件的开发方法,IP 的开发、交换和重用上,也亟待系统级开发方法的广泛采用。

系统级开发方法要求在较高的抽象层次上描述系统,并模拟和验证。由于系统的复杂性,一般不能由系统功能级描述直接综合到具体的软硬件实现,需要有多种不同抽象层次的中间级描述。传统的设计方法采用不同的语言描述各种抽象层次,不仅带来系统描述的不一致性,而且难以胜任软硬件的协同验证,不能满足复杂嵌入式系统的设计需求。因此,人们迫切需要用一种单一语言来完成全部设计描述,分析系统体系结构和建立软硬件协同验证平台。这就是所谓的系统级设计语言( system level description language ,SLDL)

基于C + + SystemC 语言主要由众多EDA(electronic design automation) 工具厂商推出,是目前最受瞩目的系统级设计语言。它通过扩展C + + 类库来提供对系统硬件结构的描述能力,不仅可以实现对嵌入式系统软硬件的统一描述,而且支持从寄存器级硬件模型到系统级计算模型等各种不同抽象层次的建模,能产生多种抽象层共存的可执行模型。因其对软件的兼容性,以及支持交易级建模( transactionlevel modeling ,TLM) 所带来的高效模拟速度等特征,近年来迅速成为流行的系统级设计和验证语言,尤其适用于软硬件协同设计、验证以及体系结构分析与优化等方面。

现有的SystemC 2.0 语言标准已经可以进行基本的设计验证,而新近推出的SystemC 验证标准(systemC verification standard) 则通过提供一些应用程序接口( application programming interface ,API) ,如支持基于交易的验证、可约束的随机数产生、异常处理等,更增强了其验证方面的能力。但是在设计过程中,验证方法一般还是采用传统手段,比如手工实现测试代码,然后通过波形图查看工具等人为的验证等,缺乏对断言的支持,整个验证过程的自动化程度低。 考虑到在典型的设计中,验证通常会占用整个设计周期的2/ 3 左右时间,因此亟需采用高效和精确的验证方法。

因为SystemC 的本质是C ++ 的类库,嵌入式系统SystemC 模型的验证就等同于软件领域内的测试,所以可以借鉴C/ C + + 软件领域内大量的经验、工具和新的技术进展。 本文就是如此尝试:一方面,借鉴C + + 语言的自动化测试框架(automated testing f ramework ,ATF) 来实现验证过程的自动化;另一方面,应用面向方面编程技术(aspect oriented programming ,AOP) ,分离和封装测试代码。采用这种验证方法,可按需要随时灵活地进行测试代码到被测系统的动态植入,对被测系统无干扰,并实现验证过程的自动化。

自动化测试框架

目前在软件领域内,测试活动受到了前所未有的重视,主要表现为测试驱动的开发方法 该方法要求在设计系统的同时(甚至之前) 设计相关的测试模型,通过不断测试来反复迭代,得到最后的设计。可见,在目前的软件开发流程中,设计、编码和测试各个阶段的迭代周期变短,需要对代码频繁地重构,这就要求测试活动能够自动、简便、高速地运行,自动化测试框架(ATF) 因此而得到了广泛的采用。

在图1 所示的嵌入式系统开发流程中,系统级开发方法着重在较高抽象级对系统的分析和验证,然后自上而下地细化直到最后的实现。 其间也意味着有频繁的迭代过程,一方面表现为体系结构、软硬件划分上的搜索迭代,另一方面表现为软硬件协同模拟和验证,进行早期嵌入式软件的调试,在更早的阶段发现错误。 在采用SystemC 作为建模语言的情况下,整个系统可以方便地用一种语言描述,然后细化到最后实现;同时可以利用C ++ 语言的自动化测试框架,保证各个阶段测试活动的自动化运行。

  ATF 就是可以自动对代码进行单元测试的框架,它的基本结构如图2 所示。 由多个测试用例(testcase) 组织成一个测试套件( suite) ,套件内还可以包含其他的套件,并能方便地向套件增加新的测试用例。ATF 运行时,由测试套件遍历自己容纳的对象,逐一调用它们的run ( ) 方法,使得多个测试用例可以一次全部运行。 测试输出可以是XML (extensiblemarkup language) 或文本。本文后面提到的自动化验证方法,就采用了C ++ ATF ,CppUnit

应用AOP 的自动化验证方法

测试驱动的开发方法以及ATF 的采用,可以保证每次得到的设计都是可测试的。具有可测试性对于需要迭代的开发过程是十分必要的。然而要做到可测试性,就要求设计人员在考虑设计本身逻辑的同时,必须考虑测试问题。设计代码和测试代码的交织,正是目前软件领域关注的所谓“横切关注点”(crosscutting concern) 的问题。它既干扰了设计人员对设计本身的思考,也造成代码混乱、难以复用和更改。面向方面编程技术(AOP) 正是目前为解决这一问题而提出来的一种较好的编程模式。

AOP 的核心是分离横切关注点,并封装横切关注点为方面(aspect) ,然后通过方面编织器或方面编译器(aspect weaver) ,自动将分离的关注点植入原代码中。 简单地说,AOP 方法是通过定义方面来实现对原代码的一种非侵入性改写,从而增加相应的功能。测试代码的分离、封装和植入原理如图3 所示。

方面主要定义切入点( pointcut ) 和通知(advice) 切入点可以理解为被测系统中关注的测试点,通知是实现测试点约束检验或相关信息采集的具体代码。由方面编译器编译后,测试代码即被植入到与测体相关的测试点中。经验证修改后的正确设计可以通过常规编译器编译后交付使用,使得设计本身不包含任何测试代码。AOP 语言一般是编程语言的扩展,目前应用较好的有基于J ava AspectJ ,以及基于C ++ AspectC ++

AOP 技术应用到验证过程中,是一个非常有意义的尝试。因为该方法使得开发人员可以很容易地更改、插入或除去相关测试点,而不需要重新构架系统和作出侵入性的修改,还可以按需要随时引入新的测试点。设计时,开发人员可以忽略不影响其具体活动的测试要求而专注于设计本身,增强了设计的可复用性,减小了开发的复杂度。

4 给出了采用AOP 技术的自动化测试方法。整个系统包括4 个部分:被测体,AOP 测试探针以及由它建立的测试通道,测试点收集器,期望与响应的自动化测试框架。形象地讲,这个方法好比在被测系统中插入了示波器的探针。其中关键的部分是AOP 建立的测试通道,由这个通道在植入被测体的测试探针和测试点收集器之间建立了联系。测试点的变化,可以被测试点收集器所察觉,并收集测试点的数据。AOP 探针的植入就使测试代码与被测对象建立了联系;取出植入的过程,就切断了二者的联系,从而实现了测试代码的可插拔功能。

  CppUnit 测试框架在这里的职责是对测试过程的自动化封装。基础的CppUnit 测试框架,无法与测试点收集器建立联系,并且不提供连续状态的断言机制。本文的方法,一方面让测试用例引用的测试点收集器对象与AOP 植入的收集器对象保持一致,然后将测试点收集器的数据发送到测试用例中来;另一方面,用锁的形式实现测试输入与测试响应异步过程同步化的机制,以适应测试过程同步化的特点。连续输入输出的测试,可以通过扩展测试点收集器的储存能力,收集全部连续输出,统一通知测试单元,完成连续信号的期望判断。在有黄金模型的联合模拟框架下,连续输入输出的测试,也可以由测试点收集器即时收集响应,即时通知测试单元,与黄金模型输出的即时期望数据比较。

SystemC TLM 和简单片上总线的测试实例

SystemC 语言的一个重要特征是支持系统的交易级建模( TLM) 和验证。在系统级设计与验证中,交易(t ransaction) 成为越来越重要的一个概念。一般来说,交易可以理解为系统模型中2 个模块之间的一次数据交换。这个交换与采用的协议无关,通常不涉及具体的总线时序等细节。最常见的是读交易和写交易,以保证模块之间同步操作是事件交易。另外,模块之间的中断也是一种交易。TLM 模型较RTL (register t ransfer level ) 级容易编写,而且模拟速度较RTL 级提高了1001 000 ,每秒钟能仿真至少10 万个交易。TLM 的一个重要用途,是可以作为RTL 级验证的黄金参考模型,系统级测试用例可以重用;另外, TLM 模型对于软件开发已足够精确,因此可以在硬件RTL 级设计的同时,并行在TLM 模型上进行嵌入式软件的开发,加速开发流程。

TLM 模型包含了事件之间的正确顺序,而没有底层的物理延时,可以为软件设计者提供一些初步的性能分析。另外,含有时间信息的TLM 模型可对系统结构做出一些评价,从而探索和优化系统结构。TLM 的嵌入式系统设计一般都带有一个总线通信结构, 完成各个功能模块之间的相互通信。TLM 的主要任务就是相应的通信抽象,实现通信机制。一个简单片上的总线系统包括主从设备接口、快/ 慢速存储器通道、通用串口通道、仲裁器接口和仲裁器模块等。测试的目的一是验证各个模块之间通信实现的正确性,为软硬件协同设计提供正确的TLM 模型;二是可以评估系统的体系结构,如确定系统的资源如储存器和FIFO(first in first out) 的大小等。5 给出了一个简单片上总线的测试实例。

  在这个例子中, AspectC ++ 实现的Aop Test Probe 直接加在了各通信接口的通信方法上, 各通信方法在调用之前或之后, 都被Aop Test Probe 准确捕获; 然后由TraceRecord 类收集相应的信息,再将信息通过接口NotifyTest 通知测试用例SimpleBusTestCase ;测试用例实例化被测体SimpleBus , 准备输入数据, 然后锁定等待TraceRecord 发过来的响应数据,通过与期望的断言比较, 完成一个测试过程。 这里, SimpleBus TraceRecord 的关联是由方面编译器编译Aop Test Probe 而植入的。测试完毕,就可以不再用方面编译器编译而去掉这个关联。被测体在发布时不会由于测试代码的冗余而影响效率和占用内存。

通过这个实例可以发现,该自动化测试方法虽然由于AOP 的方面编译带来了更长的编译时间,AspectC ++ 实现了与C/ C + + 同样高效的代码同时带来了更加明显的优点,比如消除测试代码的冗余,减少出错的可能,满足测试要求的灵活性和可移植性等;自动化测试框架的结合,更是大大提高了测试过程的效率。所以该方法可为嵌入式系统模型的验证和评估提供十分有效的自动化手段。

结语

本文在对嵌入式系统SystemC 描述的基础上,提出了一种全新的自动化验证方法。该方法采用AOP 技术,并结合ATP 的使用。该方法支持测试自动化,并实现了测试代码的分离和封装,随时可满足被测系统的测试要求;对嵌入式系统的系统模型,可自动化、重复性地验证,能够满足系统模型在较高抽象级的验证和评估要求。面向方面的思想和技术在各方面的应用,已经得到人们越来越多的关注,实际上,可以进一步引用AOP 技术到嵌入式系统的设计过程中,为系统设计提供更好的模块化和复用性。

相关推荐

传感器融合为什么会对制造业有利?

传感器  自动化  2013-12-31

上海航天局新型生产线2秒钟造出1个LED灯

LED  自动化  2013-11-14

从TI“蝗虫战略”到雷军“芯片免费”

芯片  嵌入式系统  2013-11-07

自动化的控制技术引领新的制造业时代

自动化  智慧制造  2013-10-10

自动化程度提升推动嵌入式工控机发展

自动化  嵌入式工控机  2013-07-19

物联网:自动化带来高效生产模式变革

物联网  自动化  2013-07-08
在线研讨会
焦点