2.1 软硬件协同设计
SoC通常被称作系统级芯片或者片上系统,作为一个完整的系统,其包含了硬件和软件两部分内容。这里所说的硬件指SoC芯片部分,软件是指运行在SoC芯片上的系统及应用程序。既然它是由软件和硬件组合而成,则在进行系统设计时,就必须同时从软件和硬件的角度去考虑。
在传统的设计方法中,设计工程师通常在“纸上”画出系统结构图。这使得设计工程师很难定量地评估特定的结构设计。一旦设计工程师选定了一种特定的结构,他们就试图用硬件描述语言Verilog或VHDL来进行详细的设计。这种方法使得设计工程师很快就忙于细节的设计而没有对结构进行系统层次上的详细评估。随着设计的细节化,要改变系统结构就变得更难。另外,由于仿真速度的限制,软件开发没有可能在这种详细的硬件设计平台上进行。所以采用传统的设计流程进行SoC设计可能会存在产品设计周期长,芯片设计完成后发现系统结构存在问题等。
图2-1 软硬件协同设计的SoC设计流程
软硬件协同设计指的是软硬件的设计同步进行,如图2-1所示,在系统定义的初始阶段两者就紧密相连。近年来,由于电子系统级设计(ESL,Electronic System Level Design)工具的发展,软硬件协同设计已被逐渐采用。这种方法使软件设计者在硬件设计完成之前就可以获得软件开发的虚拟硬件平台,在虚拟平台上开发应用软件,评估系统结构设计,从而使硬件设计工程师和软件设计工程师联合进行SoC芯片的开发及验证。这样并行设计不仅减少了产品开发时间,同时大大提高了芯片一次流片成功的概率。这种设计方法与传统的硬件与软件开发分离的设计方法差别非常大。具体过程如下。
1.系统需求说明
系统设计首先从确定所需的功能开始,包含系统基本输入和输出及基本算法需求,以及系统要求的功能、性能、功耗、成本和开发时间等。在这一阶段,通常会将用户的需求转换为用于设计的技术文档,并初步确定系统的设计流程。
2.高级算法建模与仿真
在确定流程后,设计者将使用如C和C++等高级语言创建整个系统的高级算法模型和仿真模型。目前,一些EDA工具可以帮助我们完成这一步骤。有了高级算法模型,便可以得到软硬件协同仿真所需的可执行的说明文档。此类文档会随着设计进程的深入而不断地完善和细化。
3.软硬件划分过程
这一环节包括软硬件划分和任务分配,是一个需要反复评估和修改直至满足系统需求的过程。设计者通过软硬件划分来决定哪些功能应该由硬件完成,哪些功能应该由软件来实现。软硬件划分的合理性对系统的实现至关重要。通常,在复杂的系统中,软件和硬件都比较复杂。有些功能既可以用软件实现也可以用硬件实现,这取决于所要达到的性能指标与实现的复杂程度及成本控制等因素。对比而言,两者各有千秋。
采用硬件作为解决方案的好处有:由于增加了特定的硬件实现模块,(通常是硬件加速器),因而可使系统的性能提升,仅就速度而言可以提高10倍,甚至100倍;增加的硬件所提供的功能可以分担原先处理器的部分功能,这一点有助于降低处理器的复杂程度,使系统整体显得简单。
硬件解决方案也存在一些不利的地方:添加新的硬件必然会提高成本,主要花费在购买IP和支付版权费等方面;硬件的研发周期通常都比较长,中等规模的开发团队开发一套复杂程度一般的硬件系统至少需要3个月的时间;要改正硬件设计存在的错误,可能需要再次流片;相比于软件设计工具,硬件设计工具(EDA)要昂贵许多,这也使得设计成本增加。
采用软件实现作为解决方案的好处有:软件产品的开发更灵活,修改软件设计的错误成本低、周期短;受芯片销量的影响很小,即使所开发的软件不用在某一特定芯片上,也可以应用到其他硬件设备上,因而市场的风险比较低。软件解决方案也存在着难以克服的不足之处:软件实现从性能上来说不及硬件实现;采用软件实现对算法的要求更高,这又对处理器的速度、存储器的容量提出了更严格的条件,一般还需要实时操作系统的支持。
表2-1列出了软件和硬件实现各自的优缺点。
软硬件划分的过程通常是将应用一一在特定的系统结构上映射,建立系统的事务级模型,即搭建系统的虚拟平台,然后在这个虚拟平台上进行性能评估,多次优化系统结构。系统结构的选择需要在成本和性能之间折中。高抽象层次的系统建模技术及电子系统级设计的工具使得性能的评估可视化、具体化。
4.软硬件同步设计
由于软硬件的分工已明确,芯片的架构及同软件的接口也已定义,接下来便可以进行软硬件的同步设计了。其中硬件设计包括RTL设计和集成、综合、布局布线及最后的流片。软件设计则包括算法优化、应用开发,以及操作系统、接口驱动和应用软件的开发。
表2-1 软件和硬件实现的优缺点
5.硬件系统测试
协同设计的最后一步是硬件系统的测试。系统测试策略是根据设计的层次结构制定的。首先是测试子模块的正确性,接着验证子模块的接口部分及总线功能,然后在整个搭建好的芯片上运行实际的应用软件或测试平台。这一步通常也称为软硬件协同仿真验证,软件将作为硬件设计的验证向量,这样不仅可以找出硬件设计中的问题,同时也验证了软件本身的正确性。可以说验证仿真贯穿于整个软硬件协同设计的流程中,为了降低设计风险,在流程的每一步都会进行不同形式的验证和分析。
总之,协同设计方法的关键是在抽象级的系统建模。目前,对该领域的研究非常活跃,将来可以预见描述语言、结构定义及算法划分工具会被广泛使用。