《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 一种基于SystemC的系统级软硬件协同设计新模型
一种基于SystemC的系统级软硬件协同设计新模型
王 泉1, 史维峰1, 田 泽2
1. 西北大学 信息科学与技术学院, 陕西 西安 710127;2. 中国航空计算技术研究所, 陕西
摘要: 分析了SystemC的建模特性,提出了一种基于SystemC的系统级设计新模型,即从系统功能描述开始逐步细化,建立模型间通信抽象的事务模型,对抽象通信具体化,最后形成通信模型。以此为基础进行RTL级综合,完成软硬件协同设计。本方法应用于一款导航芯片的设计,有效地缩短了研制周期,降低了开发成本,提高了系统设计质量。
Abstract:
Key words :

摘   要: 分析了SystemC的建模特性,提出了一种基于SystemC的系统级设计新模型,即从系统功能描述开始逐步细化,建立模型间通信抽象的事务模型,对抽象通信具体化,最后形成通信模型。以此为基础进行RTL级综合,完成软硬件协同设计。本方法应用于一款导航芯片的设计,有效地缩短了研制周期,降低了开发成本,提高了系统设计质量。
关键词: 嵌入式系统; 软硬件协同设计; SystemC语言

  随着嵌入式技术的迅速发展和嵌入式系统在众多领域中的广泛应用,特别是系统级芯片SoC 的诞生,嵌入式系统设计面临许多新的问题。软硬件协同设计是目前嵌入式系统设计的新方法,其方法依据系统目标要求,通过综合分析系统软硬件功能及现有资源,最大限度地挖掘系统软硬件之间的并发性,协同设计软硬件体系结构,使得系统能工作在最佳状态。因此,建立系统级模型对系统功能进行抽象描述是实现软硬件协同设计的关键。目前存在多种建模方法,但是都有其局限性,如采用UML语言建模,可以方便地进行需求分析、系统功能描述,但UML不能对系统硬件进行描述,无法精确和严格地描述模型的行为;采用C/C++等描述语言时,在设计细化阶段,原始的C/C++描述必须手工转换为VHDL或Verilog,容易产生不一致性,使系统综合变得复杂。
  SystemC建模语言是在C++的基础上增加硬件扩展库和仿真内核[1],不仅有支持硬件操作的信号、时序和接口,在不同抽象层次上对设计进行建模,而且还可以通过仿真内核搭建仿真平台,对设计各阶段进行验证。SystemC已经成为事实上的系统级设计语言的标准。本文将讨论SystemC的建模特性,并且提出一种基于SystemC的系统级软硬件协同设计模型。
1  软硬件协同设计方法
  软硬件协同设计是将软件设计和硬件设计作为一个有机的整体进行并行设计,是在系统目标要求的指导下,通过综合分析系统软硬件功能及现有资源,最大限度地挖掘系统软硬件之间的并发性,协同设计软硬件体系结构,以便系统能够工作在最佳状态。其核心问题是在设计过程中如何协调软件系统和硬件系统[2]。协同设计技术强调软件和硬件设计开发是一个并行和相互反馈的过程,也就是使软件设计和硬件设计作为一个整体并行设计,找到软硬件的最佳结合点,使它们能够以最有效的方式相互作用、相互结合,从而获得满足综合性能指标的最佳解决方案[3]。这种相互作用体现在设计过程中的各个阶段和各个层次,设计过程充分实现了软硬件的协同性。在软硬件功能划分时就考虑了现有的软硬件资源,在软硬件功能设计和仿真评价过程中,软件和硬件是互相支持的,这就使得软硬件功能模块能够在设计开发的早期互相结合,从而及早发现和解决系统设计中的问题,避免了在设计开发后期反复修改所带来的一系列问题,有利于充分挖掘系统潜能、缩小体积、降低成本、提高整体性能。
  软硬件协同设计的基本思路如图1所示。

  软硬件协同设计过程可以分为系统描述、系统设计、仿真验证和综合实现4个阶段[4-5]。首先应用独立于任何硬件和软件的功能性规格方法对系统进行整体描述;然后对系统进行软硬件功能划分,将系统行为划分为简单的行为模块,并确定每个模块的软硬件实现方式;最后从抽象描述级进行细化,直至每个模块最终由基本虚元件组成,形成系统原型,接着在系统原型层与厂商提供的虚元件相汇合,完成设计的实现[2]。各个阶段需要完成的工作如下[3,5]:
  (1)系统描述:是用1种或多种描述语言对所要设计系统的功能和性能进行全面描述,是建立系统软硬件模型的过程。采用的方法包括有限态自动机、统一化规格语言或其他基于图形表示工具,其作用是对系统需求统一表示,方便功能划分和综合。
  (2)系统设计:可以分为软硬件功能划分和系统映射2个阶段。软硬件功能划分就是要确定软/硬件模块分别要实现的系统功能。硬件能提供较好的性能,软件则易于开发和修改,成本也较低。由于硬件模块的可配置性、可编程性以及某些软件功能的硬件化、固件化,导致软硬件的界限已经不是很明显。此外,在进行软硬件功能划分时,还要考虑市场可以提供的资源状况、现有软硬件资源、系统成本、开发时间等诸多因素。因此,软硬件功能划分是一个复杂的过程。系统映射是根据系统描述和软硬件任务划分的结果,分别选择系统软硬件模块以及其接口的具体实现方法,并将其集成,最终确定系统的体系结构。在整个细化过程中,应多次进行软硬件协同验证和协同仿真,及时发现细化中的错误。在完成软硬件划分后,要对系统的性能、灵活性等参数进行预测,以评估软硬件划分,甚至功能划分的合理性。如果划分不合理,就需要重新进行软硬件划分。划分的目的主要是满足系统速度、延迟、体积、成本等方面的要求,使整个系统获得最好的功能和性能。划分策略既可以采用人为划分,也可以使用EDA工具自动划分。
  (3)仿真验证:是检验系统设计正确性的过程,对设计结果的正确性进行评估,以达到避免在系统实现过程中发现问题时再进行反复修改的目的。
  (4)综合实现:其过程是软件、硬件系统的具体设计过程。设计结果经过仿真验证后,可按系统设计的要求进行系统研制生产,即按照前述工作的要求设计硬件软件,并使其能够协调一致地工作,而后再进行各种试验。
2 基于SystemC系统级新模型
  SystemC作为系统级建模语言,提供了通道、接口和事件[6-7]的概念,用以描述通信和同步。同时SystemC也提供了动态事件敏感方法,满足对消息传递响应等系统级行为的建模要求。接口和通道的概念将通信和计算分开,提高了设计的重用性。
  通道用来表示设计中的通信机制。在系统级设计中,模块互连通常采用较复杂的总线机制,系统初始设计时,可以仅仿真总线功能而不描述具体实现细节,此时可以用通道方便地描述通信机制。
  接口定义了通道的访问方法,如read( )、write( ),这些方法的实现由通道来完成。模块及其进程需要通过端口来访问一个通道的接口,不同模块的信号端口必须与通道接口绑定。
事件是一种基本的同步对象,主要用于模块内进程间的同步。
  系统级模型主要用于描述系统要实现的功能,系统级模型设计流程如图2所示。首先对系统进行纯功能性结构描述,然后建立描述抽象通信通道的事务模型,最后细化抽象通信通道形成通信模型。整个系统由一系列的模块组成, 每个模块包括许多并发的进程, 进程定义了模块的功能, 进程间通过通道进行通信。

  各模型介绍如下:
  (1)功能模型:是系统纯功能的抽象模型,是设计流程的入口,主要目的是为了描述、验证系统功能。在功能模型中,sc_module的层次性只是反映了系统的功能,不涉及时间概念。功能模型由SystemC的Event和Wait来进行同步。
  (2)事务模型:事务建模的主要任务是利用SystemC进行功能模型相应的通信抽象,实现通信机制。事务模型是SystemC系统级模型中的重要概念。一个系统的事务模型一般具有如下基本特征:
  ①功能模块通过抽象通信通道进行通信。
  ②所有的通信都是事务(数据交换)。
  ③通过功能调用而不是对信号赋值来执行事务。
  SystemC中,通道、接口和事件可方便地进行系统事务级的建模。事务级模型是有时间的模型(Timed Model),对于各个功能模块可以赋予运行时间,以便进行系统的仿真反馈、验证和进一步的综合。
  (3)通信模型:通信模型中,抽象的通信事务被实际的通信通道所代替。通信模型定义了系统的结构框架,包括各功能模块及其之间的连接。系统计算被映射到功能模块上,系统通信被映射到各通信通道上。SystemC拥有接口和通道等,支持基于接口的设计方法,可以方便地进行通信细化过程。从事务模型到通信模型的细化过程可分为如下步骤:
  ①通道细化(Channel Refinement):抽象的通信通道被实际的通信协议所代替,通过协议通道的接口,协议通道对外提供最基本的由协议所支持事务的方法。
  ②适配器插入(Adapter Insert):因为通道插入通信协议后接口已经改变了,必须在模块和协议通道间插入适配器来完成接口之间的转换。适配器相当于协议层上的应用层,利用协议通道提供的协议接口来实现模块间的数据通信。
  ③协议内连(Protocol Inline):通信最终被内连到功能模块中。用来包含应用层和协议层方法的适配器通道被内连进模块内部,使抽象端口消失,模块通过相应端口连接到总线线路上。
  在设计一种导航芯片的过程中,采用软硬件协同设计方法进行设计,有效地降低了设计成本,提高了设计成功率。该芯片主要功能是接收卫星信号后完成数据提取,将有用的数据信息传至处理器,由处理器进行导航处理。
  设计采用SystemC为整个系统建模,其模型如图3所示。系统主要分为4个部分:数字变频器、维特比译码器、数据提取和数据处理。卫星信号进入导航芯片后首先完成数字变频,成为可处理的数字信号,然后对信号进行维特比译码,根据处理器指定要求提取相关数据并完成数据处理,形成有效的导航数据。

  下面给出系统模型的部分SystemC代码。
 

  sc_main函数作为主函数在顶层例化整个系统的每一个硬件模块并绑定。sc_signal定义顶层的各种信号线,用来连接各模块的输入输出信号线并用来跟踪各模块输入输出端口信号变化。sc_clock定义并生成系统的时钟信号,用来同步仿真时每一个模块内触发的事件,sc_trace用来跟踪信号的变化,并以标准的格式输出到跟踪文件。
  在相应的SystemC文件中可以使用sc_module定义各个模块。以数字变频器模块为例,下面是该模块的部分SystemC代码。
  

  sc_module用于声明模块,然后定义端口数据类型。sc_method方法使得对每一个敏感信号的触发都进行处理,其作用相当于Verilog中的always方法,sensitive_pos声明敏感信号触发方式。
  系统设计时根据系统级模型描述功能,同时为模型建立Testbench(仿真测试文件)验证系统方案是否可行,然后使用VC ++6.0和Modelsim进行功能仿真,接着按照系统工作原理进行软硬件划分。软件实现部分采用C++语言描述,同时为硬件部分建立SystemC行为级模型,具体过程:(1)在系统级模型基础上对计算单元进行详细描述和通信组件细化;(2)在SystemC可综合子集的范围内对代码进行约束,形成RTL级模型;(3)将RTL级电路进行综合,生成Verilog文件,将此文件导入ISE中,对代码进行约束,包括时间约束、引脚约束、时钟频率约束等;(4)进行逻辑综合、优化和布局布线,得到二进制配置文件(bit); (5)将配置文件加载到测试板的FPGA(Xilinx公司Virtex4系列FPGA XC4VLX40-10FFG668C)中,验证是否可以实现导航芯片的功能。如果性能不满足要求可以重新建模,进行软硬件划分调整,直至满足系统要求。在整个设计过程中,Testbench始终未改变,这样可以保证系统在被不断完善的过程中不会引入新的错误,使系统始终符合设计要求。经测试,采用基于SystemC的软硬件协同设计模型进行导航芯片设计比传统设计方案节省了30%的时间。
  软硬件协同设计方法是一种新的嵌入式系统设计方法,它消除了传统的嵌入式系统开发方法——“先硬件后软件”的弊端,使得嵌入式系统设计质量得以提高,能够提前进行系统性能评估,验证系统设计方案,大大缩短了系统的研制周期。
  SystemC语言是一种系统级描述语言,它的产生促进了软硬件协同设计技术的发展。本文描述了SystemC语言在系统开发各个阶段的建模特性,提出系统级设计新模型。该模型采用逐步细化流程描述系统功能,为系统软硬件协同设计提供了系统级模型,相对于传统设计方案更加灵活、有效,缩短了开发周期,降低了开发成本,提高了系统设计质量。
参考文献
[1]  张志杰. 林涛.基于SystemC的软硬件协同验证[J].今日电子,20079(2):49-52.
[2]  熊光泽,詹瑾瑜.嵌入式系统软/硬件协同设计技术综述 [J].计算机应用,2006,26(4):757-760.
[3]  徐思刚,桑楠.基于SystemC的软硬件协同设计[J].湖北民族学院学报(自然科学版),2004,22(1):65-68.
[4]  潘新祥,胡习霜,韩立宏.软硬件协同设计分析[J].指挥控制与仿真,2008,30(3):117-119.
[5]  王少平,王京谦,钱玮.嵌入式系统的软硬件协同设计[J].嵌入式与单片机,2005,193(2):83-84.
[6]  刘强.基于SystemC的系统级芯片设计方法研究[EB/OL].  http://www.eepw.com.cn/article/83115.htm. 2008-05-27.
[7]  SystemC介绍[EB/0L].http://www.chinaitpower.com/2005September/201800.html. 2005-09-13.
 

此内容为AET网站原创,未经授权禁止转载。