传统的先硬件后软件嵌入式系统的系统设计模式需要反复修改、反复试验,整个设计过程在很大程度上依赖于设计者的经验,设计周期、开发成本高,在反复修改过程中,常常会在某些方面背离原始设计的要求。
软硬件协同设计为解决上述问题而提出的一种全新的系统设计思想。他依据系统目标要求,通过综合分析系统软硬件功能及现有资源,最大限度地挖掘系统软硬件之间的并发性,协同设计软硬件体系结构,以便系统能工作在最佳工作状态。种设计方法,可以充分利用现有的软硬件资源,缩短系统开发周期、降低开发成本、提高系统性能,避免由于独立设计软硬件体系结构而带来的弊端。
将一设计思想应用在实际产品开发上离不开EDA工具的帮助,本文也将对几种比较成熟的协同设计EDA工具加以简单介绍。
协同设计与传统设计方法的比较
嵌入式系统是由若干个功能模块组成的,这些功能模块按照其性质可以分为软件模块和硬件模块两类。在过去几十年内,系统的设计方法经历了很大的变化,有自上向下的设计方法,也有模块化设计方法,他们总体上都是硬件模块优先的设计方法,将其统称为传统的设计方法。
这种设计方法将硬件和软件分为两个独立的部分。
在整个设计过程中,通常采用“硬件优先的原则”,即在粗略估计软件任务需求的情况下,首先进行硬件设计,然后在此硬件设计平台上进行软件设计。由于在硬件设计过程中缺乏对软件构架和实现机制的清晰了解,硬件设计工作带有一定的盲目性。他的系统优化由于设计空间的限制,只能改善硬件/软件各自的性能,不可能对系统做出较好的综合优化,得到的最终设计结果很难充分利用硬软件资源,难以适应现代复杂的、大规模的系统设计任务。
而嵌式系统软硬件协同设计是让软件设计和硬件设计作为一个整体并行设计,找到软硬件的最佳结合点,从而使系统高效工作。
软硬件协同设计最主要的一个优点就是在设计过程中,硬件和软件设计是相互作用的,这种相互作用发生在设计过程的各个阶段和各个层次。
设计过程充分体现了软硬件的协同性。在软硬件功能分配时就考虑到了现有的软硬件资源,在软硬件功能的设计和仿真评价过程中,软件和硬件是互相支持的。这就使得软硬件功能模块能够在设计开发的早期互相结合,从而及早发现问题及早解决,避免了(至少可以减少)在设计开发后期反复修改系统以及由此带来的一系列问题,而且有利于挖掘系统潜能、缩小产品的体积、降低系统成本、提高系统整体性能。
软硬件协同设计的过程
总的来说,软硬件协同设计的系统设计过程可以分为系统描述、系统设计、仿真验证与综合实现4个阶段。
系统描述是用一种或多种系统级描述语言对所要设计的嵌入式系统的功能和性能进行全面的描述,建立系统的软硬件模型的过程。系统建模可以由设计者用非正式语言,甚至是自然语言来手工完成,也可以借助EDA工具实现。手工完成容易导致系统描述不准确,在后续过程中需要修改系统模型,从而使系统设计复杂化等问题,而优秀的EDA工具可以克服这些弊端。
对于嵌人式系统来说,系统设计可以分为软硬件功能分配和系统映射2个阶段。软硬件功能分配就是要确定哪些系统功能由硬件模块来实现,哪些系统功能由软件模块来实现。硬件一般能够提供更好的性能,而软件更容易开发和修改,成本相对较低。由于硬件模块的可配置性,可编程性以及某些软件功能的硬件化、固件化,某些功能既能用软件实现,又能用硬件实现,软硬件的界限已经不十分明显。此外在进行软硬件功能分配时,既要考虑市场可以提供的资源状况,又要考虑系统成本、开发时间等诸多因素。因此,软硬件的功能划分是一个复杂而艰苦的过程,是整个任务流程最重要的环节。
系统映射是根据系统描述和软硬件任务划分的结果,分别选择系统的软硬件模块以及其接口的具体实现方法,并将其集成,最终确定系统的体系结构。具体地说,这一过程就是要确定系统将采用哪些硬件模块(如全定制芯片、MCU,DSP,FPGA、存储器、I/O接口部件等)、软件模块(嵌入式操作系统、驱动程序、功能模块等)和软硬件模块之间的通讯方法(如总线、共享存储器、数据通道等)以及这些模块的具体实现方法。
仿真验证是检验系统设计正确性的过程。他对设计结果的正确性进行评估,以达到避免在系统实现过程中发现问题时再进行反复修改的目的。在系统仿真验证的过程中,模拟的工作环境和实际使用时差异很大,软硬件之间的相互作用方式及作用效果也就不同,这也使得难以保证系统在真实环境下工作的可靠性。因此,系统模拟的有效性是有限的。
软硬件综合就是软件、硬件系统的具体制作。设计结果经过仿真验证后,可按系统设计的要求进行系统制作,即按照前述工作的要求设计硬件软件,并使他们能够协调一致地工作,制作完成后即可进行现场实验。