刘 玮,李翔宇,殷树娟
(1.清华大学 微电子学研究所,北京100084;2.北京信息科技大学 理学院,北京100192)
近年来,无线传感器越来越广泛的利用在环境监测、军事侦查、目标定位等领域,因此相关领域的研究也引起了广泛关注,并且发展非常迅速[1]。随着集成电路制造技术的发展,无线传感器网络节点的电子系统变得越来越复杂,人们已经提出系统芯片即SoC作为无线传感网络节点[2]。这样复杂的系统对设计自动化的要求越来越高,为了提高SoC集成电路的设计效率,往往采用基于高层次的设计方法[3]。
无线传感器网络节点具有低功耗、低成本、使用寿命长等特点[4],其中功耗优化是无线传感器节点设计中的重要课题。为了使节点有更长的使用寿命,采用由太阳能电池等能量采集器件配合储能电池的电源形式[5],这是一项具有吸引力的供电方式。如何在有限和实时变化的能量供给下,通过调整系统运行状态和调度任务,使系统的能量利用率最高,这个问题是近年来相关领域的研究热点之一。
目前,无线传感器节点系统仿真器多用于功能模拟[6],缺少对系统的功耗行为进行仿真的快速仿真器。而带有功耗管理的异质多核架构使系统的功耗问题变得越来越复杂,能够执行的任务复杂度也越来越高。针对无线传感器网络节点SoC设计中存在的软硬件系统设计的功耗问题和任务调度优化问题研究,本文提出一个利用SystemC搭建的异质多核传感器节点SoC仿真器,它面向本课题组提出的传感器节点SoC架构,对系统任务的运行时间和功耗行为进行事务级建模,使我们能够评估片上系统功耗情况,使系统的功耗和性能优化。
本文的目标是搭建一个无线传感器网络节点片上系统的高层次仿真器,采用SystemC面向对象的方式,描述硬件架构和软件行为,用于本课题提出的一种异质多核传感节点SoC结构的任务调度和功耗管理方法研究。
目标SoC的结构如图1所示,为了充分降低SoC的功耗,同时满足对工作性能的要求,平台中提供了用于实现传感器节点功能的不同实现方式的功能单元,既有通用处理器、又有专用的协处理器、硬件加速引擎,所以是一个异质多核的系统。每个功能单元一般提供几种工作模式——对应不同的工作频率和电源电压,单元在不同工作模式下具有不同的功耗和性能。除此之外,系统内还配备了运行任务调度和功耗管理程序的调度控制器,这也是目标架构中的关键特殊IP。功能单元之间通过普通的片上总线互连,调度控制器则通过控制总线和所有受控功能单元连接,进行命令和消息的交换。需要建模的硬件对象除了上述单元外,还有传感器输入、通信模块、存储器、总线等。
图1 无线传感器节点异质多核SoC仿真器整体架构
为了不让能量问题制约无线传感器网络节点系统发展,本论文研究的节点能量单元普遍采用从工作环境中采集能量,工作时功耗管理的目标是适度利用实时采集到的能量,使得系统能量能够满足系统永久的工作 (在硬件资源能够维持工作的条件下)[7]。
对在节点SoC运行的程序进行基于功耗管理的任务调度,这里任务是指在一个功能单元上完成的最大化的相连操作的集合,是构成应用程序的基本组件,也是调度的基本单位。与单核系统的任务调度不同,多核系统的任务调度存在任务分配、调度、仲裁及负载均衡问题[8],本论文研究的异质多核传感节点SoC通过静态调度和动态调度相结合的方式,静态调度是指首次分配方案,主要用在初始化平台。动态调度是指,根据当前系统能量消耗和实时能量采集情况,运行动态调度算法,算法调度结果是将每个任务分配到适合的执行单元,确定执行单元的功能、工作模式、工作时间,使得所有任务都满足时间约束、硬件资源约束和功耗约束。
本文仿真器用来模拟在给定任务调度和功耗管理方法下,系统中各个任务执行过程的时间和功耗信息,从而能对设计模块和模块工作模式的选择做出评估,因此需要考虑实时能量供给情况、实时任务请求情况对系统的影响——既包含能量供给模型、任务请求模型。
采用面向对象的方式首先要对系统中各类软硬件事物进行类的定义和划分,将系统不同模拟对象抽象成不同的类,在事务级层面上,刻画出我们关心的特性。根据刻画事物的不同属性,定义仿真器基本类,主要包含3种类型:实体类、功能类和信息类。
实体类对应系统中各类硬件模块的实体,包含处理器类、存储器类、控制器类和互联类4个基类。在用SystemC建模中,每个实体类可以刻画成一个模块,通过进程、通道、端口来模拟模块的行为[9]。关于处理器单元的功能,由于具体功能对于系统的功耗和延时分析没有影响,因此在本模型中不进行无关的功能描述。建立抽象通用处理器类作为各种处理器单元的父类,通用处理器类、专用处理器类、可重构处理器类都是它的子类,将继承了父类中刻画的处理器的基本属性,并添加模型需要的新属性,如可重构处理器需要添加功能属性和重构方法。
仿真器模拟目标是对节点SoC进行功耗、延时评估,据此,我们定义处理器模块的基本属性参数有工作模式、功耗、功能、速度。不同工作模式代表不同工作电压、时钟频率,功能标记处理器能够执行的不同操作,速度代表性能。处理器类的成员函数刻画处理器行为,如初始化函数initialization()、配置函数 be_config()、工作函数process()。处理器的主进程是SC_THREAD类型,当处理器上电或收到重置信号时,执行初始化,即设定处理器的工作模式和功能参数。当接收到调度器发送的配置命令时,执行配置函数,按配置信息设置处理器工作模式、功能参数。当接收到调度控制器发来的工作命令时,处理器执行工作函数。工作函数的主要用处是触发单元间的数据读写操作、操作按照功能执行的时序触发,模拟处理器的行为。处理器工作延时则是根据处理器当前功能和工作量决定的,即工作延时为功能和工作量 (任务的属性)的乘积。虽然刻画的仿真器没有包含处理器功能模拟功能,但是通过重载处理器执行工作函数process(),用其描述单元的功能,即可以实现事务级的功能模拟。
存储器类,刻画系统中共享存储器模块,定义了一系列读写数据接口 (sc_interface)描述存储器行为,如read(),write()等函数,可以方便实现对存储器的读写操作。存储器的属性是起始地址、结束地址,刻画存储器的大小,成员函数read()执行读取给定的地址的数据,如果当前存储器为空,则停止读操作。而write()函数根据给定地址写数据,如当前存储器为满,则写操作停止。
控制器类是调度控制器及其运行的软件的功能模型,仿真器需要对调度控制器进行功能建模,使其拥有运行调度和功耗管理算法与生成对各个处理器单元、互联控制和管理的调度信息的功能。控制器类模拟控制器功能,主要完成以下3种功能:第一,可以描述实时能量采集、电池剩余电量模型;第二,使基于信息感知的能量动态调度算法能够在控制器内运行;第三,能够将算法实现的调度信息发送给指定的处理器。
对于功能一的实现,定义平台属性参数:实时获得的能量,能量消耗,储能电池的当前电量等电池参数,这些参数能够反映一个实时能量采集的SoC系统的能量供给情况。对于功能二,定义动态调度算法函数,由主进程调用。函数的基本输入是刚才定义的平台属性参数和实时的能量信息、电池电量信息、任务请求,还有预先建立的功耗预测数据,基本输出是当前时间步的调度结果,即每个任务在指定处理器上的工作模式、运行时间。对于功能三,定义发送调度信息函数,将函数分为两类,一类是处理器配置命令发送函数send_config(T),配置信息用一个结构体描述,其中包含了将要传输给处理器的工作模式、功能参数。另一类是调度命令send_process(),调度信息同样用结构体描述,包含读写数据的地址、工作量参数。
仿真器还需要对通信操作进行功能模拟,因为通信操作会引起互联部分和其它单元的动作和状态变化,通信模拟的方法是构建总线模型,对总线进行功能描述。互联类是抽象总线模型,对总线的功能进行描述,下节将会对总线建模做详细介绍。
信息类,是对系统中抽象信息进行定义,其中包括模块之间传递的各类数据、消息、命令,和仿真器调度的任务、程序。系统在交易级建模,因此模块之间的信息交互是在命令层次上。定义模块之间传递的命令、消息和数据结构体 (struct),便于修改和规范化设计。控制器发给处理器的配置命令的属性是传递执行任务的优先级、工作周期和处理器的工作模式、功能。数据命令的属性是传递数据量,数据地址,但不包括具体数值——只是记录数据的通信开销。消息的属性是各个处理器反馈回来执行任务的功耗、时间参数。任务是调度的基本单位,程序是最大化的彼此相连的一组任务,任务也定义为结构体,属性有任务类型标识,在每个处理器的每种工作模式下的等效工作量——可以反映任务在功能单元上的执行效率。程序信息则以任务流图的形式存储。
仿真器的功能类,主要是系统工作信息的跟踪器,记录系统工作时用户关心的功耗、时间信息,给用户提供系统工作报告。首先实现跟踪器记录系统信息的功能,定义读取函数,只要处理器的工作模式、功能、状态3个参数中任意一个参数发生改变,跟踪器就记录当前系统中每个模块的状态。其次,跟踪器记录系统总线的延时情况,总线根据传输数据量不同延时不同计算传输功耗和通信时间。最后,实现跟踪器给用户汇报系统功耗、时间信息的功能。当处理器返回工作模式值时,跟踪器通过查表得到处理器当前模式下的功耗,系统的总功耗则是通过每个模块的平均功耗相加得到。这样跟踪器就可以向用户提供SoC的功耗、时间信息。
对总线进行事务级建模,两模块之间的一次数据或者事件的传输,模块间通信通过函数调用来进行[10]。模块之间的通信通过分层通道 (channel),通道连接口 (interface),模块通过端口 (port)连接到通道,如图2所示。
图2 接口、通道、端口的连接
整个仿真器采用两套总线模型,一个是仿真器平台各模块之间联系的功能总线,另一个是直接传输控制器调度结果给处理器的控制总线。从片上总线的角度来看,主要功能单元是总线主设备、总线从设备、仲裁器,如图3所示。主设备是指能够向总线发请求的模块,根据本设计要求将其分成3种类型,命令型主设备、数据型主设备、直接型主设备,每一种主设备有唯一的优先级。其中,命令型主设备主要特征是传输数据字和操作指令,模块处理器类为命令型设备。数据型主设备的主要特征是传输数据块,对大块数据进行数据处理,数字信号处理器、ASIC类模块为数据型主设备。而一些调试模块则定义成为直接型主设备。
不同主设备通过不同接口和总线进行通信,命令型接口要实现两种操作:读命令操作和写命令操作,读写函数每次操作一个数据字。读写完立即返回状态函数get status()。接口读写函数中包含锁定lock信号,如果lock=true,则表示总线下一个请求锁定在同一个主设备,如图4所示命令型接口定义的成员函数。
图3 基于总线整体架构
图4 命令型接口类定义
数据型接口也定义了两种操作:成组读操作和成组写操作。通过端口调动总线的成组读写操作,形成一次数据块读写交易,在成组模式下的锁定lock信号,主要有两个功能:一是总线下一个请求锁定在同一个主设备,二是总线通信不能被打断。如图5所示数据型接口类定义。
图5 命令型接口类定义
直接型接口同样定义了两种操作:直接读总线操作和直接写总线操作,不用仲裁,不用遵守总线协议。主要用于软件程序调试模块,如图6所示直接型接口类定义。
图6 所示直接型接口类定义
从设备是指能够对总线请求做出响应的模块,典型的从设备主要指的是存储器类模块。从设备接口描述了总线和从设备之间的通信。根据不同的主设备的定义,对从设备收到总线请求,对应有3种不同的响应,读写命令操作读取指定的数据字或命令,成组读写操作能够读写数据块,调试程序接口函数为调试提供接口,如图7所示。
图7 从设备接口类定义
平台各模块之间联系的总线,是多对多的连接,所以在数据、命令传输过程中会产生冲突,因此单独刻画了仲裁器模块。总线通道定义一个特定的通道和接口方法arbitrate()函数,总线仲裁器能够直接连接到总线,仲裁器类 (通道)具体实现通过继承仲裁器接口定义的arbitrate()函数,完成判定优先级的操作。仲裁器被连接到总线通道中专门定义的一个端口,总线可以通过特定端口访问仲裁器。仲裁规则是依据优先级和锁住 (lock)两个信号判断执行优先级。
直接传输调度控制器的总线,直接向主设备传输调度结果,不会出现冲突,直接用简单的握手协议通道类进行刻画。
实际SoC系统芯片的功耗和输入数据有依赖关系,系统程序的具体操作和实际的数据输入有关,即实际数据输入会影响模块整体的功耗。因为功耗仿真不能脱离功能仿真,如果对系统进行功能仿真,仿真速度慢,设计周期长[11]。因此,本文采用了功耗仿真和功能仿真分离的架构,一方面通过单纯的功能仿真器 (可按软件实现,但是功能划分要与硬件实现的功能划分一致)对系统的功能仿真,记录特定输入数据下的操作轨迹,其中包括了数据相关分支处的分支条件判断结果。仿真器每个涉及数据相关分支的功能单元的process()函数中都包含分支判断语句,功耗仿真时,仿真器根据记录的操作轨迹中的判断结果选择相应的分支运行,从而得到相应的延时、输入输出数据流,实现功耗仿真。
采用功能仿真和功耗仿真分离的架构具有以下优点:第一,实现简单,功耗仿真器中不需要进行复杂的功能描述,而功能可以按照软件实现的方式描述,可以快速建模;第二,仿真速度快,因为功耗仿真和功能仿真的程序都得到了简化,因此可以提高仿真速度,而且在对前一条操作轨迹进行功耗仿真的时候,可以同时运行后面输入数据的功能仿真;第三,提高了功耗仿真器的通用性,因为功耗仿真器与被仿真系统的功能之间的耦合降低了,因此,当系统功能改变,功耗仿真器程序仅需进行很少改动。
利用仿真器基本类搭建节点SoC系统,方法如下:第一,功能单元进行实例化,每个功能单元都是多重继承类的对象,继承处理器或存储器的属性,同时根据总线系统中的角色继承主或从设备接口,并和总线端口连接,使主设备能够向总线发送请求;第二,根据系统设计,连接各个模块,检查调度器、跟踪器的连接,使其系统能够正常通信;第三,对任务、程序等软件内容的实例化,对将要完成的程序生成静态调度方案,确定每个任务分配给适合的处理器,处理器完成任务的工作模式、功能、数据量,确定系统实时能量采集和电池电量,编写动态调度算法程序嵌入到控制器的算法函数中。
本文采用仿真器搭建测试SoC,系统由3个主设备、两个从设备构成,3个主设备分别是数据型、命令型、直接型主设备,两个从设备为全局存储器,如图8所示。
图8 仿真器搭建平台
已知3种主设备运行不同任务的功耗、将要执行的任务流图,测试任务主要是让3种主设备完成从存储器读写数据,最后平台回到空闲状态。调度控制器根据实时能量供给产生调度结果跟踪器记录系统能量——时间信息,如图9所示。
图9 系统功耗——时间
功耗分析是传感节点芯片设计的重要内容,目前缺少适用的高层次SoC功耗仿真器,本文介绍了一种基于SystemC的传感节点SoC的功耗行为事务级仿真器构成方法,该仿真器因为尽量减少对功能的描述,采用事务级建模,具有程序简单、运行速度快的优点。用该仿真工具对一个异质多核传感器节点进行了建模仿真、功耗评估,缩短系统开发的时间。
[1]YU Kai,XIE Zhijun,JIN Guang,et al.Design and implementation of low-power wireless sensor network node [J].Microelectronics & Computer,2012,29 (9):157-159 (in Chinese).[于凯,谢志军,金光,等.低功耗无线传感器网络节点设计与实现 [J].微电子学与计算机,2012,29 (9):157-159.]
[2]Mark Hempstead,David Brooks,Wei Gu-Yeon.An accelerator-based wireless senor network processor in 130nm CMOS[J].IEEE Transactions on Emerging and Selected Topics in Circuits and Systems,2011,1 (2):193-202.
[3]LI Hui,CHEN Xi.SystemC electronic system level design[M].Beijing:Science Press,2010:130-131 (in Chinese).[李挥,陈曦.SystemC电子系统级设计 [M].北京:科学出版社,2010:130-131.]
[4]Sonavane S S,Kumar V,Patil B P.Designing wireless sensor network with low cost and low power[C]//Proceeding of the 16th International Conference on Networks,2008:1-5.
[5]HONG Danlong.Research of low power technology for WSN node with environmental energy replenishing [D].Changsha:Central South University College of Information Science & Engineering,2011:1-3 (in Chinese).[洪丹龙.适应环境能量补给的无线传感器网络节点低功耗技术研究 [D].长沙:中南大学控制科学与工程专业,2011:1-3].
[6]Lui S,Gopalakrishnan S,Liu Xue,et al.Cyber-physical systems:A new frontier[C]//IEEE International Conference on Sensor Networks,Ubiquitous,and Trustworthy Computing,2008:1-9.
[7]Amankansal,Jason Hsu,Sadaf Zahedi,et al.Power management in energy harvesting sensor network [J].ACM Transaction on Embedded Computing Systems,2007,6 (4):32-35.
[8]GAO Jinhua.Research and implementation of task scheduling based on multicore[D].Changsha:Central South University College of Computer Application,2011:10-15 (in Chinese).[高金华.基于多核的任务调度研究与实现 [D].长沙:中南大学计算机应用技术专业,2011:10-15.]
[9]Bhasker J.A SystemC primer[M].XIA Yuwen,GAN Wei,transl.Beijing,Beihang University Press,2008:203-206 (in Chinese).[Bhaskef J.SystemC入门 [M].夏宇闻,甘伟,译.北京:北京航空航天大学出版社,2008:203-206.]
[10]Chris Rowen.Engineering the complex SOC [M].WU Wuchen,HOU Ligang,transl.Beijing:China Machine Press,2006:102-110 (in Chinese).[Chris Rowen.复杂SoC设计 [M].吴武臣,侯立刚,译.北京:机械工业出版社,2006:102-110.]
[11]XU Hui,WANG Zhuqiang,WANG Zhaojun.Co-design and co-simulation on the system level [J].Engineering Science,2006,8 (4):86-88 (in Chinese).[徐辉,王祖强,王照君.软硬件协同设计和系统级仿真探索 [J].中国工程科学,2006,8 (4):86-88.]