1 概述
20世纪90年代初,电子产品的开发出现两个显著的特点:产品深度复杂化和上市时限缩短。基于门级描述的电路级设计方法已经赶不上新形势的发展需要,于是基于系统级的设计方法开始进入人们的视野。随着半导体工艺技术的发展,特别是超深亚微米(VDSM,<0.25 μm)工艺技术的成熟,使得在一块硅芯片上集成不同功能模块(成为系统集成芯片)成为可能。这种将各种功能模块集成于一块芯片上的完整系统,就是片上系统SoC(System on Chip)。 SoC是集成电路发展的必然趋势。
SoC设计技术始于20世纪90年代中期,它是一种系统级的设计技术。如今,电子系统的设计已不再是利用各种通用集成电路 IC(Integrated Circuit)进行印刷电路板PCB(Printed Circuit Board)板级的设计和调试,而是转向以大规模现场可编程逻辑阵列 FPGA (FieldProgrammable Gate Array)或专用集成电路 ASIC (ApplicationSpecific Integrated Circuit)为物理载体的系统级的芯片设计。使用ASIC为物理载体进行芯片设计的技术称为片上系统技术,即SoC;使用FPGA作为物理载体进行芯片设计的技术称为可编程片上系统技术,即SoPC(System on Programmable Chip)。SoC技术和SoPC技术都是系统级的芯片设计技术(统称为广义SoC)。
到目前为止,SoC还没有一个公认的准确定义,但一般认为它有三大技术特征:采用深亚微米(DSM)工艺技术,IP核(Intellectual Property Core)复用以及软硬件协同设计。SoC的开发是从整个系统的功能和性能出发,利用IP复用和深亚微米技术,采用软件和硬件结合的设计和验证方法,综合考虑软硬件资源的使用成本,设计出满足性能要求的高效率、低成本的软硬件体系结构,从而在一个芯片上实现复杂的功能,并考虑其可编程特性和缩短上市时间。使用SoC技术设计的芯片,一般有一个或多个微处理器芯片和数个功能模块。各个功能模块在微处理器的协调下,共同完成芯片的系统功能,为高性能、低成本、短开发周期的嵌入式系统设计提供了广阔前景。
SoPC技术最早是由美国Altera公司于2000年提出的,是现代计算机辅助设计技术、电子设计自动化EDA(Electronics Design Automation)技术和大规模集成电路技术高度发展的产物。SoPC技术的目标是将尽可能大而完整的电子系统在一块FPGA中实现,使得所设计的电路在规模、可靠性、体积、功能、性能指标、上市周期、开发成本、产品维护及其硬件升级等多方面实现最优化。SoPC的设计以IP为基础,以硬件描述语言为主要设计手段,借助以计算机为平台的EDA工具,自动化、智能化地自顶向下地进行。
系统级芯片设计是一种高层次的电子设计方法,设计人员针对设计目标进行系统功能描述,定义系统的行为特性,生成系统级的规格描述。这一过程中可以不涉及实现工艺。一旦目标系统以高层次描述的形式输入计算机后,EDA系统就能以规则驱动的方式自动完成整个设计。为了满足上市时间和性能要求,系统级芯片设计广泛采用软硬件协同设计的方法进行。
2 SoPC设计中的软硬件协同设计
2.1 软硬件协同设计的背景
系统级芯片设计是微电子设计领域的一场革命,它主要有3个关键的支撑技术:
① 软、硬件的协同设计技术。主要是面向不同目标系统的软件和硬件的功能划分理论(Functional Partition Theory)和设计空间搜索技术。
② IP模块复用技术。IP是指那些集成度较高并具有完整功能的单元模块,如MPU、DSP、DRAM、Flash等模块。IP模块的再利用,除了可以缩短芯片的设计时间外,还能大大降低设计和制造的成本,提高可靠性。IP可分为硬IP和软IP。SoPC中使用的IP多数是软IP。软IP可重定制、剪裁和升级,为优化资源和提高性能提供了很大的灵活性。
③ 模块以及模块界面间的综合分析和验证技术。综合分析和验证是难点,要为硬件和软件的协同描述、验证和综合提供一个自动化的集成开发环境。
过去,最常用的设计方法是层次式设计,把设计分为3个域:行为域描述系统的功能;结构域描述系统的逻辑组成;物理域描述具体实现的几何特性和物理特性。采用自顶向下的层次式设计方法要完成系统级、功能级、寄存器传输级、门级、电路级、版图级(物理级)的设计,经历系统描述、功能设计、逻辑设计、电路设计、物理设计、设计验证和芯片制造的流程,是一个每次都从头开始的设计过程。传统的IC设计方法是先设计硬件,再根据算法设计软件。在深亚微米设计中,硬件的费用是非常大的。当设计完成后,发现错误进行更改时,要花费大量的人力、物力和时间,且设计周期变长。
现在,芯片的设计是建立在IP复用的基础之上的,利用已有的芯核进行设计重用,完成目标系统的整体设计以及系统功能的仿真和验证。一般采用从系统行为级开始的自顶向下设计方法,把处理机制、模型算法、软件、芯片结构、电路直至器件的设计紧密结合起来,在单个芯片上完成整个系统的功能。同IC组成的系统相比,由于采用了软硬件协同设计的方法,能够综合并全盘考虑整个系统的各种情况,可以在同样的工艺技术条件下实现更高性能的系统指标。既缩短开发周期,又有更好的设计效果,同时还能满足苛刻的设计限制。
2.2 软硬件协同设计的发展过程
嵌入式系统设计早期,主要有两种方式:一是针对一个特定的硬件进行软件开发;二是根据一个已有的软件实现其具体的硬件结构。前者是一个软件开发问题;后者是一个软件固化的问题。早期的这种设计没有统一的软硬件协同表示方法;没有设计空间搜索,从而不能自动地进行不同的软硬件划分,并对不同的划分进行评估;不能从系统级进行验证,不容易发现软硬件边界的兼容问题;上市周期较长。因此,早期的设计存在各种缺陷和不足。使用软硬件协同设计后,从系统功能描述开始,将软硬件完成的功能作全盘考虑并均衡,在设计空间搜索技术的支持下,设计出不同的软硬件体系结构并进行评估,最终找到较理想的目标系统的软硬件体系结构,然后使用软硬件划分理论进行软硬件划分并设计实现。在设计实现时,始终保持软件和硬件设计的并行进行,并提供互相通信的支持。在设计后期对整个系统进行验证,最终设计出满足条件限制的目标系统。以FPGA为基础的SoPC的软硬件协同设计,为芯片设计实现提供了更为广阔自由的空间。
2.3 软硬件协同设计涉及的内容
目前,SoPC中的软硬件协同设计主要涉及到以下内容:系统功能描述方法、设计空间搜索(DSE)支持、资源使用最优化的评估方法、软硬件划分理论、软硬件详细设计、硬件综合和软件编译、代码优化、软硬件协同仿真和验证等几个方面,以及同系统设计相关的低压、低功耗、多布线层数、高总线时钟频率、I/O引脚布线等相关内容。
系统功能描述方法解决系统的统一描述。这种描述应当是对软硬件通用的,目前一般采用系统描述语言的方式。在软硬件划分后,能编译并映射成为硬件描述语言和软件实现语言,为目标系统的软硬件协同工作提供强有力的保证。
设计空间搜索提供了一种实现不同设计方式、理解目标系统的机制,设计出不同的软硬件体系结构,使最优化的设计实现成为可能。
最优化的评估方法解决软硬件的计量和评估指标,从而能够对不同的设计进行资源占用评估,并进而选出最优化的设计。
FPGA的评估可以做到以引脚为基本核算单位。软硬件划分理论从成本和性能出发,决定软硬件的划分依据和方法。基本原则是高速、低功耗由硬件实现;多品种、小批量由软件实现;处理器和专用硬件并用以提高处理速度和降低功耗。划分的方法从两方面着手:一是面向软件,从软件到硬件满足时序要求;二是面向硬件,从硬件到软件降低成本。在划分时,要考虑目标体系结构、粒度、软硬件实现所占用的成本等各种因素。划分完后,产生软硬件分割界面,供软硬件沟通、验证和测试使用。
软硬件详细设计完成划分后的软件和硬件的设计实现。硬件综合是在厂家综合库的支持下,完成行为级、RTL以及逻辑级的综合。代码优化完成对设计实现后的系统进行优化,主要是与处理器相关的优化和与处理器无关的优化。与处理器相关的优化受不同的处理器类型影响很大,一般根据处理器进行代码选择、主要是指令的选择;指令的调度(并行、流水线等)、寄存器的分配策略等;与处理器无关的优化主要有常量优化、变量优化和代换、表达式优化、消除无用变量、控制流优化和循环内优化等。
软硬件协同仿真和验证完成设计好的系统的仿真和验证,保证目标系统的功能实现、满足性能要求和限制条件,从整体上验证整个系统。
2.4 软硬件协同设计的系统结构
软硬件协同设计在实际应用中表现为软硬件协同设计平台的开发。从系统组成的角度,可以用图1来表述软硬件协同设计平台的系统组成。其中设计空间搜索部分由体系结构库、设计库、成本库、系统功能描述和系统设计约束条件组成。设计空间搜索的任务是对不同的目标要求找到恰当的解决办法。体系结构库是存放协同设计支持的各种体系结构数据库,一般是通过不同的模型表现出来。到目前为止,使用较多的模型有状态转换模型(有限状态机)、事件驱动模型、物理结构组成模型、数据流程模型和混合模型等。体系结构的丰富程度决定了对目标系统的软硬件协同设计的支持力度。设计库中包含可以使用的程序或网表的设计执行数据库,为新的设计提供参考依据。成本库中提供设计成本的计算方法以及由目标系统的资源消耗、电源消耗、芯片面积、实时要求等组成的数据库,是工作在给定平台上的明确界定。在设计空间搜索中还有一个比较重要的步骤,是对一个给定设计进行评估,主要有评估目标系统的成本、性能、正确性等。经过评估后的设计可以进行软硬件划分,产生硬件描述、软件描述和软硬件界面描述三个部分,以及各个部分的具体实现并优化。最后进行硬件综合、软硬件集成和系统仿真和测试。
图1 软硬件协同设计平台的组成
2.5 软硬件协同设计流程
面向SoPC的软硬件协同设计流程从目标系统构思开始。对一个给定的目标系统,经过构思,完成其系统整体描述,然后交给软硬件协同设计的开发集成环境,由计算机自动完成剩余的全部工作。一般而言,还要经过模块的行为描述、对模块的有效性检查、软硬件划分、硬件综合、软件编译、软硬件集成、软硬件协同仿真与验证等各个阶段。软硬件协同设计流程如图2所示。其中软硬件划分后产生硬件部分、软件部分和软硬件接口界面三个部分。硬件部分遵循硬件描述、硬件综合与配置、生成硬件组建和配置模块;软件部分遵循软件描述、软件生成和参数化的步骤,生成软件模块。最后把生成的软硬件模块和软硬件界面集成,并进行软硬件协同仿真,以进行系统评估和设计验证。
图2 软硬件协同设计流程
3 SoPC的软硬件协同设计的优势
同SoPC相比,SoC具有如下缺点:首先,使用ASIC的试制和流片风险大、成本高、成功率不高,一旦制片后就不能再进行修改。其次,使用ASIC设计芯片系统时,由于微控制器、功能模块等IP是根据目标系统性能进行选择的,一旦选定,所选择的IP的性能就不能再修改,也就基本上决定了目标系统的性能,使得目标系统的性能优化空间相当狭窄,同时也使得设计完成后的目标系统的硬件升级变得不可能。再有,就是这种方式的硬件设计只能是流于拼装和连接选定的硬件系统结构,指令不可更改,根据指令系统来进行编程。设计人员的创造发挥自由度狭小,限制了人的能动性在设计中应有的作用。
SoPC的可编程特性对这些问题没有限制。SoPC技术在电子设计上给出了一种以人的基本能力为依据的软硬件综合解决方案;同时涉及到底层的硬件系统设计和软件设计,在系统化方面有了广大的自由度。开发者在软硬件系统的综合与构建方面可以充分发挥创造性和想象力,使得多角度、多因素和多结构层面的大幅度优化设计成为可能,使用其可编程特性与IP核相结合,可以快速、低廉地开发出不同的协处理器,从而真正实现硬件编程、升级和重构。随着FPGA制造工业的发展,这种优势将会更加明显。
4 支持SoPC软硬件协同设计的工具
(1) Cadence Virtual Component Codesign (VCC)
第一个为IP复用所设计的工业系统级HW/SW co-design开发平台环境。在早期设计时就可以确认软硬件划分的临界体系结构。它通过电子供给链进行交流和交换设计信息,为系统库和SoC提供必要的框架。
(2) System C
一种通过类对象扩展的基于C/C++的建模平台,支持系统级软硬件协同设计仿真和验证,是建立在C++基础上的新型建模方法,方便了系统级设计和IP交换。在System C语言描述中,最基本的构造块是进程。一个完整的系统描述包含几个并发进程,进程之间通过信号互相联系,且可以通过外在时钟确定事件的顺序和进程同步。System C源码可以用来综合硬件,把System C写的硬件描述综合成门级网表,以便IC实现或综合成一个Verilog HDL;或VHDL的RTL描述,以便FPGA综合。用System C开发的硬件模型可以用标准的C++编译器来编译,经编译后形成一个可执行的应用程序,设计人员可以通过console来观察系统的行为,验证系统功能和结构。
(3) 美国Altera公司的Quartus II软件
集成良好的工具。它具有不寻常的综合结构及平面规划和布局布线能力,可以进行时序和资源优化;强有力的验证功能是业内惟一支持在系统更新RAM/ROM和常量的软件,可以方便地在系统执行试验而不必重新编译设计或重新配置FPGA的其余部分,大大减小了设计周期;容易使用,保持了可编程逻辑器件领域上的性能领导地位。作为系统生成工具的SoPC Builder,集成在Quartus II软件的所有版本中。SoPC Builder提高了FPGA设计人员的工作效率。以其新特性及面向SoPC Builder知识产权的IP内核,设计人员采用PCI接口和DDR/DDR2外部存储器,可以迅速生成系统,进行引脚分配,提高设计集成度和可重用性。
结语
软硬件协同设计作为系统级设计的支持技术,理论上和技术上还在不断地发展和完善中。研究开发功能强大的软硬件协同设计平台,是这一技术逐渐走向成熟的标志,而基于FPGA实现的SoPC技术,比基于ASIC实现的SoC技术提供了一种更灵活而成本低廉的系统级芯片设计方式。国内外都在研发支持SoPC技术的软硬件协同设计平台。在国内,这方面的研究开发已经展开并取得了初步的成果。北京大学计算机系杨芙清院士和程旭教授等人,已经开发成功国内第一个微处理器软硬件协同设计平台;上海嵌入式系统研究所开发的基于FPGA实现处理器的ECNUX开发平台,1.0版本已经完成,功能强大的2.0版本正在开发过程中。在不久的将来,随着软硬件协同设计技术研究的深入,支持FPGA设计实现的功能强大的软硬件协同设计平台将会出现,并加速推进嵌入式系统的设计开发进程。