基于SystemC描述的嵌入式系统的自动化验证
都是可测试的。具有可测试性对于需要迭代的开发过程是十分必要的。然而要做到可测试性,就要求设计人员在考虑设计本身逻辑的同时,必须考虑测试问题。设计代码和测试代码的交织,正是目前软件领域关注的所谓“横切关注点”(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 级提高了100~1 000 倍,每秒钟能仿真至少10 万个交易。TLM 的一个重要用途,是可以作为RTL 级验证的黄金参考模型,系统级测试用例可以重用;另外, TLM 模型对于软件开发已足够精确,因此可以在硬件RTL 级设计的同时,并行在TLM 模型上进行嵌入式软件的开发,加速开发流程。
TLM 模型包含了事件之间的正确顺序,而没有底层的物理延时,可以为软件设计者提供一些初步的性能分析。另外,含有时间信息的TLM 模型可对系统结构做出一些评价,从而探索和优化系统结构。TLM 的嵌入式系统设计一般都带有一个总线通信结构, 完成各个功能模块之间的相互通信。TLM 的主要任务就是相应的通信抽象,实现通信机制。一个简单片上的总线系统包括主从设备接口、快/ 慢速存储器通道、通用串口通道、仲裁器接口和仲裁器模块等。测试的目的一是验证各个模块之间通信实现的正确性,为软硬件协同设计提供正确的TLM 模型;二是可以评估系统的体系结构,如确定系统的资源如储存器和
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- 为什么嵌入式开发人员要使用FPGA(05-13)
- VxWorks几种常用的延时方法介绍(05-16)