第1章绪论
1.1软硬件协同设计技术简介
近年来,随着以ABC(即人工智能(Artificial Intelligence)、大数据(Big-Data)、云计算(Cloud Computing))为代表的新型计算技术的不断发展,嵌入式系统应用不断普及,包括移动计算设备、穿戴设备等在内的各种嵌入式系统产品已经成为生产、生活及科学研究中不可或缺的重要组成部分。嵌入式系统产品功能不同、形态各异,其主要功能部件也相差很大,其中具备复杂功能的嵌入式系统产品往往既包含硬件平台,也包含丰富的软件组件。
传统的嵌入式系统开发是从概念设计开始的,在分析系统功能和性能需求的基础上,将系统分成硬件部分和软件部分,然后由硬件工程师和软件设计师分别进行硬件、软件系统的设计、验证等,*后将两部分集成到一起,并进行集成测试。
嵌入式系统的软件部分运行在相应的硬件平台上,其功能、性能很大程度受硬件部分结构、功能和性能的影响,因此在系统设计时往往采取“硬件优先”(Hardware First)策略。按照这一策略,可以选择在硬件部分设计完成之后再进行相应的软件部分的开发,但是如此一来必将导致研发周期增加,影响嵌入式系统产品的上市时间。另一种方法是基于模拟仿真进行软件系统的开发。在这种方法下,先通过软件的方式“造”一个硬件平台,刻画不同操作下硬件系统的响应以及相应的技术参数等,并基于这一模拟仿真平台进行软件部分的设计,待真正的硬件部分完成设计之后再把软件系统集成到硬件系统中进行系统测试。这种方法能够很大程度缩短产品研发周期,但是其对于模拟器的依赖程度较大,而事实上由于硬件系统也在研发中,此时很难保证模拟器参数与*终产品的完全一致。
这种分开设计软件部分和硬件部分的系统开发方法隐含的一个突出问题是系统设计之初所进行的软硬件功能划分完全依靠先验定义,由于缺乏软硬件之间的有效交互,不能够及早发现系统在概念设计中存在的“先天”不足,也无法发现软件、硬件之间可能存在的如不兼容、不匹配的问题,不能及时评估软件、硬件之间的性能影响。同时,因为软件部分设计和硬件部分设计是独立进行的,所以不能够在设计中进行系统验证,只有等软件部分和硬件部分均分别设计完成并验证通过以后才能进行集成测试,这在很大程度上影响了产品上市时间。特别地,传统的软硬件分开设计的系统开发模式中所采用的“硬件优先”策略使得软件部分必须“顺从”硬件部分的“假定”,但是事实上在系统设计之初往往不能保证硬件部分满足在功能、结构或者性能方面的全部要求,这就有可能需要更改硬件部分的设计,其必将导致软件部分设计的相应更改,增加了软件部分的设计开销。当然,也可以不更改硬件部分的设计,而是通过软件的方式来弥补硬件部分设计中存在的缺陷或不足,这同样会增加软件部分的设计开销。
传统的软硬件分开进行系统设计的方法之所以会带来如设计质量差、设计修改难、设计周期长等问题,其根本原因在于在进行软件部分和硬件部分设计的过程中缺乏有效的交互。软硬件协同设计通过各种手段实现系统设计全周期中高效及时的软硬件交互与协同以满足系统性能标准与功能参数要求,从而获得更好的设计效果、更低的设计成本、更短的设计周期。
实现软硬件协同设计首先需要统一的软硬件描述方式,包括统一的设计、分析工具和集成的仿真、评估环境,从而支持系统任务在软硬件设计间相互移植;还需要具备交互式软硬件功能划分能力,允许对多个不同的软硬件划分设计进行仿真和比较,并提供辅助*优系统实现方式决策;此外还要求具备完整的软硬件模型基础,支持不同阶段的模拟仿真与评估,并提供正确且快速的验证方法以确保*终设计目标的快速实现。
为了实现软硬件协同设计,需要构建一种软硬件协同设计平台,它为软硬件协同描述、验证、综合提供一种集成环境。这种平台一般都是由硬件开发系统供应商(如Xilinx)提供的,它不仅包含可编程芯片(或者安装有相应芯片的开发板)等物理平台、基于对应物理平台进行产品设计和软硬件系统研发的完整的开发系统,往往还提供大量的典型应用实例和完备的服务与技术支持。
需要特别指出的是现代嵌入式系统设计中所使用的软硬件协同设计技术与早期的协同设计技术概念有所不同。早期的软硬件开发是在软硬件功能划分之后分开独立进行的,其中的协同设计指的是针对一个特定的硬件进行软件开发,或根据一个已有的软件实现具体的硬件结构。前者是一个经典的软件开发问题,它揭示了电子系统中一个颠扑不破的真理,即软件性能的好坏不仅仅取决于软件开发人员的技术水平,更依赖于所使用的硬件平台。后者则是一个软件固化的问题。为了提升系统性能,可以采用一个与原有软件平台相同的硬件处理器,并将软件代码存储于(只读)存储器当中,即用固件方式实现原有软件的功能;当然也可以在充分理解软件内在功能后完全使用硬件的方式实现相应软件的功能。
当代的软硬件协同设计技术中,软硬件使用统一的设计方法同时并发进行设计,而且在开发过程中,软件部分、硬件部分通过充分交互实现协同设计、协同评估、协同验证以达到性能和功能要求,主要涉及系统任务描述、软硬件划分、软硬件协同综合、软硬件协同仿真等问题,并且对系统设计师提出了新的更高的要求,即软件设计师必须懂硬件语义,硬件设计师必须懂软件语义。
基于软硬件协同的方法进行嵌入式系统设计的基本框架如图1-1所示。
大体上,基于软硬件协同的嵌入式系统设计可以分为以下4个阶段。
1)系统说明与功能验证
在这个阶段,主要进行概念设计,确定系统的功能以及相关性能要求。基于上述功能与性能要求,进行软硬件需求分析,并使用硬件描述语言(HDL)或者高级语言(如C语言或者System C等)对系统进行高层次建模与描述,使用模拟仿真或者形式化验证等方法确认系统功能与参数能够满足设计要求。如果满足,则进入下一阶段;否则重新进行概念设计。
2)软硬件功能划分
一个完整的嵌入式系统往往是由硬件部分和软件部分共同组成的。虽然从逻辑功能上讲,软件与硬件是等价的,但是对于一个确定的系统而言,某项功能使用软件实现还是硬件实现,在速度、功耗等方面的性能差异很大,需要结合系统参数需求进行合理的功能划分,以满足系统要求。与此同时,嵌入式系统设计进行软硬件功能划分还需要充分考虑市场、用户使用习惯、消费者心理以及系统扩展性、可移植性等诸多因素,同时需要尽量降低成本。因此,在嵌入式系统软硬件协同设计过程中,软硬件功能划分尤为重要。合适、恰当的软硬件功能划分方法不仅能够在满足功能要求的基础上提升性能、降低成本,而且能够给系统的*终设计实现提供便利;反之,不成功的软硬件功能划分将导致系统性能损失,或者成本增加,或者增加系统设计实现的难度。
图1-1软硬件协同设计框架
一般地,在进行软硬件划分时遵循的基本原则是:系统中要求高速度、追求低功耗的功能通过硬件实现,而那些面向多品种、小批量的功能则通过软件来实现。具体的功能实现与软硬件功能划分策略,大体上可以分为两种:一种是面向软件的方法;另一种是面向硬件的方法。前一种方法中,系统的主要功能用软件实现,但是将其中的部分功能从通过软件实现改成使用硬件实现,例如,通过这种方法以满足时序的要求,从而提高系统速度等;后一种方法中,主要功能用硬件实现,但是将其中的部分功能从使用硬件实现改成通过软件实现,例如,通过这种方法减少硬件部件、降低系统成本等。
一般地,进行嵌入式系统软硬件功能划分是一个反复迭代、求精的过程,每一次功能划分以后,需要基于划分结果对系统性能进行预测,检验其功能的完备性,以及在关键性能指标上的满足情况,并适当考虑未来技术、市场以及应用的需求情况,如果性能预测结果表明当前的划分结果能够达到预期,则进入下一步的具体设计实现阶段,否则需要重新进行系统的软硬件功能划分。如果发现无论怎样进行软硬件功能划分都无法满足系统性能设计要求,则可能需要退回到上一步重新进行系统设计,确定系统的功能和性能参数。
3)设计与综合
在电子系统设计中,综合其实就是将通过较高级别描述方式描述的设计结果转化为通过较低级别描述方式描述的设计结果的过程。例如,可以通过综合,把硬件描述语言描述的设计结果转化成门级或晶体管级描述的设计结果。因此,可以把综合简单地理解成使用较低一级的描述结果“具体实现”较高一级的描述结果的过程。从这个意义上讲,电子系统设计中的综合实际就是对设计结果逐步求精并*终实现它。
在软硬件协同设计中,需要分别完成硬件部分设计与综合、软件部分设计与综合和接口设计与综合。
从电子系统设计的角度看,硬件部分设计与综合的概念*为简单,可以认为硬件部分*后的综合结果就是硬件部分的*终表现形式,例如,其可以是一个或多个中央处理器(CPU)(或CPU核),或者一个专用集成电路(ASIC)、一个数字信号处理器(DSP)等。硬件部分设计与综合中需要考虑的主要问题跟传统的集成电路设计与综合一样,主要是面积、速度、功耗等,这些因素都与系统的*终性能参数要求密切相关。除此之外,跟传统的集成电路设计与综合一样,硬件部分设计与综合过程中还需要考虑复用(Reuse)的问题。
软件部分设计与综合过程可以简单地理解为编写调试相应的软件,例如,将有限状态机(FSM)描述的过程程序化等,只不过这里编写的软件可能是基于特定硬件结构或操作系统的,因此需要面向一个定制的操作系统,甚至没有操作系统支持。在软硬件协同设计中,软件部分设计与综合面临的主要问题在于缺乏实际硬件的支持。因为软硬件协同设计中软件和硬件是同步开发的,在进行软件部分开发的时候,其面向或依托的硬件系统并没有开发完成,因此只能通过模拟仿真的方式进行系统调试,而且,一旦硬件部分设计有修改,可能需要软件部分做出相应的改动(与此对应,软件部分设计的调整也有可能需要硬件部分做出必要的改动)。此外,如何估算软件部分的性能和如何让在不同模块软件中线性执行的命令满足系统时序约束条件(如频率要求、操作的并发与同步、信号的先后次序等)也是软件部分设计与综合需要着重考虑的问题。
嵌入式系统中的接口包括接口软件和接口硬件。跟传统的接口设计方法类似,软硬件协同设计中接口设计与综合遵循以下原则:通用接口标准化(例如,接口硬件中采用标准总线接口,如PCI、VME接口等)、专用接口定制化(例如,接口硬件中的传感器接口需要结合具体的功能以及系统需求进行设计)、接口通信简单化(例如,尽量使接口硬件中的连线更少,尽量将子模块直接连接而不采用胶合逻辑,等等)。
4)系统模拟与协同仿真
软硬件系统设计需要通过系统模拟与协同仿真来确认系统功能、预估系统性能。在此过程中,如果发现功能或性能方面不能满足系统要求,需要立即诊断问题原因,回退到相关设计环节加以修正。有些情况下,简单的设计修改已经不能达到修正错误的目的,可能需要进一步完善系统功能、修正性能参数,或者重新进行软硬件功能划分,甚至重新进行系统顶层设计。
系统模拟与协同仿真可以利用仿真器参数配置模拟构建真实环境从而通过仿真器完成,也可以借助形式化验证、高层次综合等技术,在(部分或全部)子模块尚未完成的情况下进行。相比较而言,后一种方法能够更早地发现可能存在的问题,而形式化验证、高层次综合等一直以来也是电子设计自动化(EDA)技术研究的重点和难点。
一般地,软硬件协同设计平台会提供相应的系统模拟与协同仿真系统。从使用者的角度__来看,除了对其模拟仿真结果正确性的要求之外,还需要系统提供足够便利的交互性,允许用户快速改变结构参数,并且能够通过直观的图形化界面等多种方式呈现便于分析与调试的模拟仿真结果。当然,用户同时希望模拟仿真系统能够具备较高的速度,在不同结构下均能快速测试不同输入激励的响应,但是模拟仿真系统往往很难同时满足用户在交互性和模拟仿真速度上的要求。
1.2 Zynq全可编程SoC基础
早期的嵌入式系统是通过
展开