基于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 ++ 语言的自动化测试框架,保证各个阶段测试活动的自动化运行。
评论