林炳生,刘君圣
(闽江学院 物理学与电子信息工程系,福建 福州 350108)
基于UML-SystemC的协同设计方法
林炳生,刘君圣
(闽江学院 物理学与电子信息工程系,福建 福州 350108)
系统级SoC的设计包括硬件和软件的协同设计,涉及物理约束、实时性和并发等关键问题.本文应用UML建模和SystemC语言软硬件协同开发技术,阐述一种有效的Soc的设计模式,并通过一个录音芯片的软硬件描述,进行仿真实验.实验表明这种方法保证了芯片在多组协同设计下的兼容性和稳定性,很大程度上提高了Soc设计效率.
UML;SystemC;Soc
嵌入式系统技术已进入SoC(片上系统,System on a Chip)时代,原有的硬件设计语言难以满足新的芯片设计要求.如何提高设计的对象层次,在较短时间内设计出较高性能的芯片,以及保证芯片在多组协同设计下的兼容性和稳定性,已经成为当前最受关注的问题.目前综合运用UML的建模能力和高效的软硬件设计语言SystemC开发SoC正成为主要方法.
在传统SoC设计中,系统被划分为软件和硬件两大部分,软件和硬件独立进行开发设计.这样就无可避免地隐含一些问题,如软硬件之间的交互受到很大限制、软硬件之间的相互性能影响造成很难评估和系统集成相对滞后,导致设计质量差、设计修改难和研制周期不能有效保障,软件设计师和硬件设计师要分别在不同的环境下对系统测试,影响整个产品的设计效率.
本文所研究的SoC设计基于UML和System C,其设计流程见图1.在这种设计模式中,软硬件在设计过程中可以随时进行共同验证,有效的避免了传统设计流程上的问题.System C软硬件协同语言是一种系统级描述语言,偏向于高阶设计,避免了SoC设计中前级设计方法与系统验证策略的缺乏,而低阶RTL设计则可以通过开发工具将System C代码转为Verilog或System Verilog代码,再将Verilog可综合代码转为电路设计.UML的每一类图形都与System C代码一一对应,大大减少代码出错率,代码可以分成多组协同设计,大大提高了设计效率;系统模块与HDL随时可以进行共同验证,联系紧密;软硬件设计师使用同种环境进行测试,提高产品设计效率.
本文对基于UML的SoC设计方法进行了剖析,给出了新式设计的整体理念.最后通过一个实例验证新式设计模式在片上系统设计中的科学性与实用性,证明了该种设计模式可以保证芯片在多组协同设计下的兼容性和稳定性,并在很大的程度上提高了设计效率.
2.1 UML在SoC设计中的应用
UML(统一建模语言)是一种可视化的建模语言,用来描述复杂的系统结构.它具有定义良好、易于表达并支持各个级别的抽象综合等优势,可以对几乎任何静态结构或动态行为的系统进行建模,弥补传统SoC设计方法的不足,使设计者能够专注于较高层次上的整体规划,而不必过于关注底层代码实现细节.
UML主要由事物、关系和图三者构造而成.这里的事物主要有类、接口、协作和用例等,它们是对模型中最具有代表性的成分的抽象;关系则把各事物结合起来,在面向对象技术中,主要有依赖、关联、泛化和实现等关系;而图是UML建模的最终成果,是聚集了相关事物的图形表示,它们能够清晰地表达系统分析设计中的复杂概念,能够反映不同视角上的系统模型的投影.UML提供了5类图,其中包括9种图形,如表1所示:
表1 UML图的种类
(1)用例图(use case diagram)从用户的角度描述系统功能,展现了参与者(人、事物、其他系统等)、用例及他们之间的关系,将每个系统中的用户分离并抽象,防止功能重复和出现多余的类.
(2)静态图包括类图(class diagram)和对象图(object diagram).类图是最常用的UML图,显示出类、接口的内部结构以及它们之间的关系,主要用在系统结构的描述.对象图则实例化了类图,从实际的或原型化的情景来表达系统的静态过程,一般使用它来说明数据结构、类图中的类或组件等的实例的静态快照.
1.无限制说。该学说认为监听与搜查均属于干预隐私权的强制处分措施,因此可以类推适用《德国刑事诉讼法典》第108条第1款规定:“在搜查时发现的物品虽与本案侦查无关,但却表明发生了其他犯罪行为的,要将物品临时扣押。扣押后应当通知检察院。”[5]以该条为依据,偶然监听所得材料应当允许作为证据。该观点的理由为,法律虽未对偶然监听所得材料能否作为证据使用作出规定,但由于法律将通讯监听与搜查、扣押并列规定,而监听与搜查、扣押都是对相对人隐私权进行干预或侵害的侦查措施,两者具有相同的法律构造,可作相同的解释,因此,对于偶然监听所得的材料可类推适用搜查、扣押的规定,允许其作为证据使用[7]。
(3)行为图有状态图(statechart diagram)和活动图(activity diagram)两种.状态图展现一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应的.活动图是状态图的一种特殊形式.其中所有或多数状态都是活动状态,而且所有或多数转移都在源状态中的活动完成时立即触发.
(4)交互图用于描述对象间的交互关系.其中序列图(sequence diagram)用来描述对象之间消息发送的先后次序,阐明对象之间的交互过程以及在系统执行过程中的某一具体时刻将会发生什么事件.协作图(collaboration diagram)强调收发消息的对象的组织结构.协作图和序列图是可以相互转换的.
(5)实现图包括构件图(component diagram)和实施图(deployment diagram).构件图描述系统构件及各构件之间的依赖关系.实施图展现了运行时物理节点以及其中的构件的配置等.
将抽象建模结合到SoC设计当中,大大改进了SoC设计流程.使用UML对系统进行整体建模,可以对系统的需求、功能和相应的行为以图形化的形式详尽地描绘,使得系统设计人员提前对整体设计有感性认识.这种通过UML图来描述系统软件模块,再通过工具生成相应C++代码的SoC设计方法,使得电路设计从传统的代码编写提升到系统级建模的层次,改善了SoC设计的流程,提高了团队小组间的协调合作效率,从而进一步提升SoC的研发速度.
2.2 SystemC在SoC设计中的应用
SystemC是一种系统级设计语言,它在C++基础上添加了硬件扩展库和仿真核,使之可以建模包括软件和硬件的电子系统.
SystemC以C++作为底层标准,为了具有硬件描述能力,SystemC一方面扩充了核语言,包括Module(模块)、Process(进程)、Interface(接口)、Port(端口)、Channel(信道)、Signal(信号)、Time(时间)、Event (事件)等;另一方面扩展了12种数据类型(DataType),包括有 2个值的逻辑变量(sc_bit,sc_bv
下面阐述SystemC的几个重要名词:
(2)进程(process):进程是包含在模块中的用于描述功能的元素,在系统设计中可以使用进程描述并发行为.SystemC中有三种进程:Thread Process、Method Process、Clocked Thread Process.它们是相对独立的线程,通过事件触发执行,可在指定执行点挂起或恢复.
(3)通道(channel):通道是通信和同步的一个容器,它实现了一个或者多个接口(interface),接口是访问通道的方法.同个模块下不同进程间可以直接使用通道进行通信.
(4)端口(port):不同模块间的数据通过端口传递,两个模块的端口指向同一个通道时,便可以利用该通道共享数据.它有三种模式:sc_in,sc_out, sc_inout.
(5)信号(signal):信号可以连接各个模块的端口.
SystemC支持软硬件协同设计,支持在C++的环境下对软硬件及相关接口的描述,支持门级、RTL级、系统级等抽象层次上硬件的建模与仿真.
SystemC语言的特点使得系统设计人员可以在设计过程中高效快捷地对软硬件部分进行协同验证,以及时地分析评估系统性能和设计的正确性,成熟的C++技术使得协同验证速度大幅的提高.如图2展现了基于SystemC的软硬件协同设计过程.
在一个SoC设计中,首先进行系统描述,定义系统功能.接着根据系统功能特点对各个功能模块的实现方式进行分析,完成软硬件功能模块的划分.划分后,软硬件模块可以并行开发,软件模块用C++实现,硬件模块由SystemC实现.开发过程中,软硬件模块可一同在SystemC库的支持下随时进行验证或仿真,若发现问题,可以及时作出相应调整或重新划分软硬件模块,直到验证仿真满足系统需求.因此,使用SystemC使得设计人员仅需使用一种开发环境,一种开发语言自由地完成SoC软硬件总体设计,不仅缩短了设计周期,而且降低了硬件设计部分的复杂度、减少了代码量与工作量,总体上提高了开发设计的效率.
UML与SystemC的巧妙配合能够提高SoC设计效率,缩短开发周期,提高产品质量.在节中,将以一个录音芯片为实例,完整的介绍从UML建模到SystemC代码实现的整个SoC设计流程.
3.1 UML设计
一个简单录音芯片功能需求有两个,一是录制一段声音,二是播放上次录制的声音,据此即可画出系统用例图.对芯片进行系统分析、结构设计,将系统划分设计为多层级的组合结构,为直观展现这种层级关系可以用UML的组合结构图来设计,如图3:
图3 录音芯片组合结构图
Recorder模块设计就是一个大模块,其内部含有次层级的Microcontroller、Memory和Keypad三个子模块,而其中的Mircocontroller子模块内部又含有次层级更小的模数/数模转换子模块.我们还可以用UML的类图呈现出另一种有空间感的层级关系.
接着将各模块进一步细分,进行线程设计,在UML中以活动图来体现线程设计.将5个模块进行分解,制作对应的活动图.使用活动图来表示两类进程的状况:一是一个模块内几个进程的并发执行状况,另一种是单条进程的执行细节,这些细节对应的就是一段SystemC程序.如图4、5分别展示了这两种图.
经过以上的几个步骤后,我们已经将一个芯片由顶而下细分成了进程,在这种设计模式下,由于有了UML建模图,我们可以直观的知道各个模块之间的关系与数据流向.例如负责Mircocontroller模块的小组,他们不需要知道Memory模块如何实现.从结构图中可以知道,他们只需关心如何从Memory模块获得信号、如何向Memory传递信号.负责ADCDAC模块的小组则只需实现模拟数字信号之间的转换.同样的,负责Memroy模块的小组只是要将数字信号进行存储与送出而已.UML建模保证了芯片在多组协同设计下的兼容性与稳定性,在SoC设计中发挥了它的特色.
执行各自不同功能的模块要拼搭成某个具有新功能的模块,必然少不了相互之间的通信,明确各个模块、进程之间在执行过程中信号的流动对于设计SystemC代码来说是很重要的.UML通信图可以很好的表现出模块内部某一群对象在执行过程中的传递状况.
3.2 SystemC代码实现
有了UML建模后,就可以将程序与图形一一对应,最后拼装成一个完整的芯片.每个小组独立进行设计,只要实现自己负责的功能即可,他们唯一关心的就是与其他模块之间的通信,有了UML建模的图形,模块间的通信就一目了然了.例如Memroy模块,它与Controller模块间只有2个相连的端口In与Out,那么在SystemC代码中,Memroy模块的头文件里有这么一段声明
而在Memroy.cpp文件中,要做的就是获取In端口传来的数据并存储以及将存储的数据写到Out端口.
上诉代码将读取In口,如果有数据就放到DataBuff数组中,而最后DataBuff将被综合成一个存储器,实际上就是完成了将In口输入的数据存储的功能.
3.3 芯片仿真
通过SystemC编写测试平台进行了芯片仿真.实验证明,在多个小组独立设计的情况下,编写的main函数顺利的执行,实验能仿真成功.如图6,展示了播放过程的仿真结果,Memory模块将之前录好存储的数字信号通过端口输出,DAC模块接收数字信号并将其转换为音频模拟信号输出,给Recorder外层结构接收.
图6 实验仿真结果
UML的图形表示法不仅直观性强而且抽象度高,便于隐藏细节,凸显重点,配合SystemC程序语言来填补细节,在提高系统效率的同时还保证了系统的创新性,此外系统的设计与开发效率也能得到大幅度提高.在UML建模后,可将芯片分成多个模块给不同小组进行协同设计,不同组间可以不受其他小组约束进行模块设计,使用SystemC能够在设计开发过程中对多个不同模块进行协同验证与仿真,以及时发现问题、解决问题,减小返工率.
〔1〕邱郁惠.Soc设计UML实务手册[M].机械工业出版社,2008.
〔2〕Bhasker J.SystemC入门[M].北京航空航天大学出版社,2008.
〔3〕郑人杰.UML建模大赛专家视角[EB/OL].http: //www.chinauml.org/index.aspx.
〔4〕陈燕.基于UML的嵌入式系统系统级设计方法研究[D].上海复旦大学,2005.
〔5〕欧阳坚,沈海斌,颜晓浪.系统级芯片设计与SystemC[J].微电子学,2002,32(6):453-456.
〔6〕王建新,姚放吾.基于UML的软硬件协同设计方法[J].计算机技术与发展,2006,16(1):96-98.
〔7〕罗娟,曹阳,李德识.基于模式的SOC设计方法研究[N].北京优点大学学报,2004(12).
〔8〕张海涛,龚龙庆.基于UML的SoC建模设计方法研究[J].计算机技术与发展,2008,18(3):145-147.
T P 391.7
A
1673-260X(2012)07-0023-04
福建省2010大学生创新性实验计划资助项目(mjcx1001)