本博客为本人学生时代的技术博客,工作后10年已经不再更新,需要关注可以访问geekpm.com,点击访问!

连载-第2章 嵌入式系统工程设计概述

由于Live writer排版差异,文中编号始终从1开始,对于文章内容欢迎通过评论或者邮件emouse2010@163.com与我交流。

文章目前仅是初稿,编写仓促比较粗糙,欢迎各位积极提出改正意见,我本人也将在初稿完成后进行完善和修改。

 

 

 

嵌入式系统工程设计概述

1.1 嵌入式系统设计的基本流程

不知各位读者是否记得在小学学过的一篇课文,说的是统筹方法,课文中举了泡茶喝这个例子。比方,想泡壶茶喝。当时的情况是:开水没有;水壶要洗,茶壶茶杯要洗;火生了,茶叶也有了。怎样办?

方法甲:洗好水壶,灌上凉水,放在火上;在等候水开的时间里,洗茶壶、洗茶杯、拿茶叶;等水开了,泡茶喝。

方法乙:先做好一些准备工作,洗水壶,洗茶壶茶杯,拿茶叶;一切就绪,灌水烧水;坐待水开了泡茶喝。

方法丙:洗净水壶,灌上凉水,放在火上,坐待水开;水开了之后,急赶忙忙找茶叶,洗茶壶茶杯,泡茶喝。

哪一种方法省时间?我们能一眼看出第一种方法好,后两种方法都窝了工。

例子虽然比较简单,但是却对统筹方法进行了一个直观的诠释。同样在嵌入式系统的设计过程中,只有遵循一定的设计流程,才能保证最终产品的顺利实现。采用设计流程的设计方法有以下几个优点:

a)         在设计之初就可以明确设计目标,找出面临的主要并进行评估。

b)        通过设计流程的细化,可以方便的评估系统的工作量,易于任务划分。

c)         易于多部门协同工作,提高工作效率。

d)        有利于控制项目的进度。

本节就重点叙述在嵌入式系统的设计过程中的各个基本过程,并对每个过程所需要考虑的内容进行分析。第7章将针对具体工程应用进行分析说明。

1.1.1 需求分析

(1)需求分析的任务

需求分析师嵌入式系统设计的根本,即:我要做什么?需要完成那些功能?达到什么样的要求?该阶段的任务就是确定用户对应用系统的设计要求和设计指标。其考虑问题主要是是整个系统需要“做什么,不做什么”,不考虑具体“怎样做”。

需求一般由用户提出,很多情况下,用户并不是专业的开发人员,因此设计者必须在需求分析阶段与用户反复讨论、协商,充分交流信息。为了是开发人员与用户对将要开发的系统打成一致的理解,必须要建立相应的需求文档。确定需求的过程有时需要反复多次,并最终得到用户和开发者的共同确认。

确定需求对于嵌入式系统设计至关重要,否则后面的工作就南辕北辙,没有任何意义了。需要说明的是,在嵌入式系统的开发过程中,开发者可以根据系统的设计的情况在得到用户确认的前提下对需求进行局部调整,因为很多时候需求的实现方式并不是唯一的,开发者可以在与用户进行沟通确认的前提下对需求进行调整,从而方便项目的进行。

(2)需求分析要素

一般在需求分析阶段至少需要包括以下几个内容:

l  系统的设计目的

l  系统的主要功能

l  系统的成本要求

l  系统的功耗要求

l  系统的主要参数要求

l  系统的尺寸和重量要求

1.1.2 详细说明

详细说明是对需求分析的进一步细化,如果说需求分析主要是面向用户,那么详细说明就是给开发人员看的。由于功能需求往往只是功能上的一个概括,因此需要通过详细说明将系统设计需求进行进一步的说明和细化,一方面在系统的设计过程中有一个统一的方向,另一方面详细说明也便于团队合作开发。

详细说明应当尽可能的罗列可能的参数需求,例如针对模拟量AD采样这一功能需求,在详细说明中可以包括:

l  模拟量类型,电压量还是电流量?电流量可以转换成电压量采集?

l  采样的精度与速度要求

l  采样数据是否需要滤波、存储

l  模拟量输入是否需要和CPU隔离

1.1.3 结构设计

结构设计时在需求分析和详细说明之后对整个系统进行整体架构上的设计,结构设计可以从软件和硬件两个方面入手,硬件方面需要考虑的问题有:

l  选择什么样的CPU

l  选择那些相应的外围芯片;

l  系统的主要I/O分配;

l  系统的电源要求;

l  硬件的尺寸要求、外壳设计;

在软件方面,需要考虑的问题有:

l  是否需要嵌入式系统,选择什么样的嵌入式系统,硬件资源能够满足嵌入式系统的需求;

l  软件主要包括哪些功能模块,对CPU有什么要求;

l  使用什么软件开发平台;

在结构设计阶段,根据详细说明,要能够确定硬件部分的主要组成结构并选定主要元器件如:CPUAD、运放、电源芯片等都可以在结构设计阶段进行确定,相应的设计电路也应该有一个设计雏形。

芯片的选择与初步电路设计是结构设计的主要内容之一,然而从成千上万种芯片中选择出自己合适的芯片并不是一件容易的事情,对于芯片的选择与主要电路设计可以遵从以下几个原则。

a)         在实现功能的基础上可以尽量选择比较常用的芯片与方案,可以参考类似的设计,找出对本项目有效的设计方案。选用较为常用的芯片与设计方案,一方面这些方案经过多人的验证不会有太大的漏洞,同时也可以减轻设计的工作量。另一方面常用的设计方案在元器件采购等方面会容易的多,性价比也比较高。

b)        对于侧重于成本的嵌入式系统设计可以将部分功能进行分解,使用分立元件完成,或者对主要电路进行重新评估在保证参数达到的前提下使用更为廉价的方案。对于侧重于性能和稳定性的设计可以较多的使用集成电路芯片,一方面可以提高系统的稳定性,另一方面可以降低后期调试等方面的难度。

在选择元器件的时候可以充分参考主要半导体厂家提供选择工具,例如,需要选择一款AD芯片时,可以考虑美国著名的模拟半导体公司ADI公司的产品,通过搜索引擎可以很方便的找到亚德诺半导体(Analog Devices)公司的官方网站http://www.analog.com如所示。

clip_image002

21亚德诺半导体(Analog Devices)公司的官方网站主页

由于需要查找的是AD,属于数据转换器系列,因此选择数据转换器,进入之后选择ADC产品列表,这时网站会列出所有ADC芯片的信息如所示。然而这里列出的信息量很大,如果直接查找仍然需要很大的工作量,因此可以进一步使用网站提供的工具,点击图中的clip_image003可以进行进一步的限定条件。如所示。点击添加/移除参数即可选择自己需要关心的参数,在下方的参数选择框中即可以选择需要筛选的条件,如:精度、速度、接口、价格等。

clip_image005

22 ADC清单

clip_image007

23筛选条件设置

由于各公司的网站不尽相同,网站也可能不断改版,但是类似的工具在主要的几家半导体公司网站上却是普遍存在的,可以通过这种方法进行元件的选择。元件选定后需要下载芯片的应用手册,详细了解芯片内容,看看是否符合项目需求,芯片手册中一般都会给出典型应用电路,有的芯片甚至会单独给出实验电路板的应用电路可以作为系统电路设计的主要参考。需要说明的是并不一定找到符合要求芯片之后就是可以使用的,一方面需要考虑在国内市场元件有无供货,放不方便购买,另一方面如果是大批量的产品还需要考虑元件的供货能否满足需求。

1.1.4 组件设计

(1)功能模块与原理图设计

在结构设计完成之后,系统的主要框架和已经建立,接下来就需要集中精力在系统的硬件模块和软件模块的设计上。根据系统的主要结构,将系统划分成若干组件,分别进行调试。一般的设计原则是先设计硬件,后设计软件。由于有的系统功能模块较多,相对比较复杂,开发人员在初期可能并不清楚,因此在组件设计阶段可以单独设计一些验证性的功能板,对主要的电路进行验证和测试,以确保电路正确并符合要求。在设计过程中也可以使用相应的最小系统板或者开发板进行功能验证和前期的软件编写,以加快开发进度。

在结构设计一节中已经有所提及,相应元件的Datasheet是设计的重要参考,绝大多数的Datasheet中都给出了元件的典型应用电路和相关参数,因此无论是硬件设计还是软件设计,Datasheet始终是重要参考。然而很多Datasheet中的典型应用电路只是一个基本的功能演示,并无法满足实际应用需求,因此应在充分理解Datasheet的基础之上,广泛参考其他类似的电路设计,结合项目的实际需求从而得到最优的电路设计。

虽然在设计的过程中一个系统按照功能的划分被为若干功能模块分别进行设计,然而在设计过程中应时刻注意各功能模块之间的协调,如:电平匹配、信号方向、端口占用等情况。否则,很容易出现模块功能实现而系统却无法协同工作的情况。

(2)PCB设计

PCB是硬件设计中必不可少的一部分,常用的设计软件有Altium Designer(Protel)Candence(包括AllegroOrCAD Capture)Mentor PADS (POWER PCB)等,其中Protel在国内的普及率较高,使用也比较方便,这里不做过多介绍,然而Protel在设计多层电路板的时候有点力不从心,因此多用于单层板及两侧板的设计,对于四层及以上电路板目前国内使用OrCAD CapturePADS组合的较多。

OrCAD Capture是被称为全球最多人使用的线路图绘图程序+画原理图的最厉害的软件,之所以被推荐是应该它的库比较多,元件不需要你建,而且易与其它软件(如:AnsoftMentor的软件)集成,各种工具交互比较容易。可利用OrCAD Capture来连结Cadence OrCAD PCB EditorAllegro或其它的Layout软件,来完成PCB设计。

PowerLogicPowerPCB产品被Mentor Graphics公司收购后,更名为 PADS系列,版本升级升的非常快,先前的有PADS2005PADS2007PADS,目前最新的版本PADS 9.4,不过也有工程师反映运行最稳定还是PADS 2005,包括:原理图工具PADS LogicPCB工具PADS Layout和自动布线工具PADS RouterPADS系列低端的PCB软件中最优秀的一款,其界面友好、容易上手、功能强大而深受中小企业的青睐,在中小企业用户占有很大的市场份额。PADS最大的优势就是手机产品设计,虽然说他功能简单,但是山寨机基本上都是用它搞定的,国内的设计公司有80%都是用它。不足是其本身没有仿真,做高速板时,要结合其他专用仿真工具,如hyperlynx,另外原理图绘制元件库很少。总的来说这些只是设计工具,工具的优劣并不能决定最终的设计水平,更重要的还是在于设计者的水平,以上对主要的设计软件进行了简单的介绍,感兴趣的读者可以有选择的进行学习。

(3)软硬件调试

PCB设计完成之后由PCB生产厂家制作样板,得到样板之后就要进行调试电路板的焊接与调试。电路板的焊接这里不做过多叙述,普通的DIPSOPTQFP等封装均可以方便的手工焊接,BGA等封装则需要专业的设备。在手工焊接的时候可以分块进行,即焊接一部分,测试一部分,测试正常后再进行下一步。例如:可以按照电源-CPU相关-外设的方式来进行焊接。因为电源是整个系统运行的基础,先进行电源模块的焊接与测试,确保系统各部分的供电满足要求。如果电源部分没有测试稳定贸然焊接其他部分,极有可能会因为电源原因导致系统无法运行甚至损坏相关芯片。电源测试完成后可以继续焊接CPU相关的部分电路,如CPU、时钟电路、复位电路、下载线接口等,先测试开发系统能否下载程序并正确运行,测试通过后即可继续焊接其他相关电路。硬件设计及焊接是嵌入式系统设计中极易出错的一个环节,如果不掌握合理的方法有可能会在这一环节耗费大量时间,这种分模块逐步焊接调试的方法最大的好处就是能够方便的发现问题所在。如果一次性焊接完毕出现问题则很难排查。

软件设计也是一样,无论多么复杂的程序或者软件都是从最基础的功能逐步完善起来的。在软件功能的设计上同样需要遵循循序渐进的设计方法,可以有效的节省时间。

1.1.5 系统集成

系统集成的主要目的是在系统的各个组件设计完成之后,得到一个可以运转的原始系统,并利用这个原始系统,进行集成测试。

系统集成的主要任务是:测试系统各模块建的连接是否正确,系统或子系统的正确处理能力、容错能力、输入/输出处理能否达到需求分析的设计需求。虽然经过组件的设计,可能已经实现了系统需求的各个子功能,然而在组件设计阶段,无论是软件还是硬件,各模块之间仍然是独立的,并不能保证个模块在软硬件集成上没有冲突,同时有些功能需要各模块之间的配合才能够实现,因此在系统集成阶段的第一步就是将各功能模块进行集成和测试。

 

 

 

1.2 嵌入式系统设计的流程模型

在上一节中介绍了嵌入式系统工程设计的基本流程,按照上一节中的介绍顺序的流程模型即是最常见的瀑布模型。然而在实际设计中这种模型过于理想化,并不完全适应。例如,在进行结构设计时可能会根据实际的软硬件情况对详细说明进行一定调整,在进行组件设计的时候也由可能发现结构设计的不合理之处,从而在对结构设计进行一定调整,因此很多时候这个设计过程是反复进行的,从而产生了不同的设计流程,这些流程就是“流程模型”,本节就介绍一些常见的流程模型。

1.2.1 瀑布模型

(1)定义

瀑布模型(Waterfall Model)是一种理想的设计流程,即按照需求分析→详细说明→结构设计→组件设计→系统集成的设计流程依次完成设计。整个设计过程自上而下,如同瀑布一样,因此被称为瀑布模型。

(2)特点

瀑布模型具有时间上的顺序性和依赖性。相邻两个流程之间具有因果关系。

瀑布模型的优点是开发流程简单明确,可以明确每阶段的目标,便于定制开发计划。瀑布模型的缺点也非常明显,由于每个流程之间具有很强的依赖性,因此对每个流程要求较高,如果对于项目缺乏整体的认识,而在开发初期又缺乏很好的规划,则很容易导致某一环节的失误。同时很多设计并不是在开发初期就能够认识清楚的,在开发过程中可能会暴露很多问题,因此瀑布模型缺乏灵活性,不能适应用户需求和发现问题所做出的改变。

也正是瀑布模型的这种缺点,因此在实际的开发过程中很少被采用,往往是结合其他流程混合使用。

(3)适用对象

a)         系统需求明确。在设计之前对系统的整体设计就有一个较为完整的认识和大致的方案。

b)        用于已有的产品升级或开发。

c)         开发采用较为成熟的技术或者方案,开发过程中不会出现难以解决的问题。

1.2.2 逐步求精模型

(1)定义

逐步求精模型(Successive Refinement Model)的主要设计流程是开发人员根据用户提出的基本需求快速开发一个产品原型,利用这个原型,一方面想用户展示系统的部分或者全部功能和性能,征求用户意见,进一步了解用户需求;另一方面开发人员可以对这一原型进行测试、修改,评估系统的功能和性能。开发者根据用户反馈意见和测试结果修改原型设计,如此反复,不断完善和丰富系统功能,直到系统最终完成。

(2)特点

逐步求精模型的优点主要有:

a)         比瀑布模型更符合人们认识事物的过程和规律,是一种较为实用的开发流程。

b)        开发者与用户交流充分,可以澄清模糊需求。

c)         原型的开发和评审是开发者和用户共同参与的过程,开发过程与用户培训同步。

d)        为用户需求的改变提供了充分的余地。

e)         开发风险低,不会出现最终产品不符合用户需求的情况。

逐步求精模型也有以下缺点:

a)         开发过程不断反复,因此整体开发周期较长。

b)        开发过程需要不断反复验证,较为耗费硬件资源,增加了开发成本。

c)         资源规划和管理不便。

逐步求精模型首先开发的是核心系统,当核心系统成型之后,根据与用户的使用反馈以及开发者自己的测试情况,对系统进行增量开发,此模型一定程度上减少了系统开发活动的盲目性,降低了开发风险。

(3)适用对象

逐步求精模型适合于那些不能预先确定系统具体需求的系统开发。同时开发者并不熟悉的相关的领域时这个模型也比较实用。

1.2.3 螺旋模型

(1)定义

螺旋模型(Spiral Model)B.Boehm1988年提出的。它综合了瀑布模型和逐步求精模型的优点,并加入了两者所忽略的风险分析所建立的一种开发模型。开发流程眼螺旋模型的顺时针方向,依次经历需求、设计、测试三个阶段。螺旋模型的基本框架如 24所示。

clip_image008

24螺旋模型的基本框架

螺旋模型需要建立系统的多个版本,初始系统只是一个简单的实验模型用于帮助设计者和用户建立感性认识,随着设计的深入,对系统进行不断的改进和更新,逐步完善系统功能提升性能。通过一步步的完善完成系统的最终版本。

(2)特点

螺旋模型的主要优点有:

a)         支持用户需求的动态变化。

b)        原型可看做可执行形式的需求规格说明,可易于用户和开发人员共同理解需求,还可以作为继续开发的基础,微用户参与所有关键决策提供了方便。开发者和用户共同参与,可以早日发现系统设计中存在的问题。

c)         螺旋模型特别强调原型的可扩充性和可修改性,原型的进化贯穿者整个开发周期,这将有助于目标产品的适应能力。既能保持瀑布模型的系统性、阶段性,又可以利用原型评估降低开发风险。

相应的,螺旋模型也存在如下缺点:

a)         如果每次迭代效率不高,就会导致迭代次数增多,将会增加成本并延长开发时间。

b)        使用此模型需要可开发队伍具有丰富的风险评估经验和相关专业知识。

(3)适用对象

螺旋模型适用于需求不明确以及大型复杂系统的开发,模型支持面向过程、面向对象等多种开发方法,是一种具有广阔前景的模型。

1.3 嵌入式系统的开发模式

嵌入式系统的开发主要有两种模式,一种是面向应届的开发模式,这种模式往往针对一些任务简单、功能单一的应用。开发过程直接面向系统硬件。另一种是面向操作系统的开发模式,此模式一般面向需要复杂的人机交互、需要运行多任务处理的应用。两种开发模式的本质是一样的,但是在开发的时候侧重点有所不同,本节将介绍这两种不同的开发模式。

1.3.1 面向硬件的开发模式

顾名思义,面向硬件的开发模式就是指在开发过程中直接面向底层硬件进行开发的模式,目标机上一般没有系统或者运行一些轻量级的嵌入式系统。开发者需要了解底层硬件的操作方式,并直接针对相关硬件进行操作。

面向硬件的开发模式一般是针对任务相对简单、功能固定、人机交互较为简单的情况。绝大多数的单片机开发就是面向硬件的开发模式,主要特点有:

a)         使用的处理器功能一般比较简单,绝大多数是8位或者16位的单片机。

b)        一般不带有操作系统或带有轻量级嵌入式系统(如μC/OS等)。

c)         不具有人机交互功能或者人机交互功能较为简单。

d)        一旦程序写入之后,系统功能就相对固定。

对于一个嵌入式系统的开发者来说面向硬件的开发是其他开发的基础,要求开发者必须具有较为扎实的硬件功底。开发者只有在对系统硬件比较了解的情况下才又可能完成相应的软件开发。

既然是面向硬件,一般来说对嵌入式微处理器进行编程就需要专用的开发工具,不同的嵌入式处理器都由对应的硬件调试工具,如开发AVR单片机的JTAG ICE,开发ARM使用的Jlink等。通过开发环境的支持多数的硬件调试工具都支持对程序实时仿真和测试,这也是面向硬件开发最大的优点之一。

1.3.2 面向软件的开发模式

当面向一个内部已经装好了操作系统的目标系统开发时,就可以使用面向软件的开发模式,也叫面向操作系统的开发模式。

嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议等。操作系统能够把硬件虚拟化,使得开发人员能够不用关心底层硬件,从繁忙的驱动程序移植和维护中解脱出来;能够提供库函数、标准设备驱动程序以及工具集等。因此面向软件的开发模式就可以使开发人员不用关心底层硬件,只需要关心操作系统所提供的接口和库函数即可实现需要的功能。

由于需要运行操作系统,因此和面向硬件的开发模式相比,此种模式往往需要消耗更多的硬件资源,一般应用于对系统功能要求较高、人机交流丰富、需要处理复杂任务且功能经常变化的场合。

 

posted @ 2011-10-02 21:54  emouse  阅读(799)  评论(0编辑  收藏  举报