《嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜》——01-03 老调重弹:何谓嵌入式系统?...

本节书摘来自异步社区《嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜》一书中的第1章,第01-03节,作者 邱毅凌,更多章节内容可以访问云栖社区“异步社区”公众号查看。

01-03 老调重弹:何谓嵌入式系统?

PM:“别急!工作内容我会慢慢告诉你。在此之前,你先说说对嵌入式系统的了解,何谓嵌入式系统?”

菜鸟:“按照书上的定义,嵌入式系统是一种用于特定用途的计算机系统。例如,汽车里的ABS刹车系统就是一个小型的计算机系统,有一个CPU执行着内存里的程序,不断地接收外界的输入,计算后输出结果。在ABS这个例子里,输入是轮子的状况与驾驶员踩下刹车的急促程度,输出则是对刹车器的控制。”

PM:“不错嘛!你的概念还蛮清楚的!有一本教科书是这么说的:

嵌入式系统是计算机软件与硬件的综合体,也包括机器或其他的附属装置,而这个综合体设计的目的,在于满足某种特殊功能。

还有另一个定义也颇传神:

以应用为中心、以计算机技术为基础,软硬件可裁剪,系统对功能、可靠性、成本、体积、耗电量和应用环境,有特殊要求的专用计算机系统。是将应用程序、操作系统和计算机硬件集成在一起的系统。

IEEE定义为:嵌入式系统是‘用于控制、监视或者辅助操作的机器、设备或装置’(原文为devices used to control、monitor or assist the operation of equipment, machinery or plants),其特性为:

  • 通常执行特定功能
  • 内含嵌入式微处理器
  • 严格的时序和稳定性要求
  • 全自动操作循环

而维基百科的定义则是:嵌入式系统是一种完全嵌入受控器件内部,为特定应用设计的专用计算机系统。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求预先定义的任务。由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。由于嵌入式系统通常进行大量生产,所以单一个的成本节约,能够随着产能进行成千上万的放大1。

我觉得这些定义都太绕舌。简单地说,就是那句我们常听到的口号:软件加值硬件(通过软件,为硬件提高价值)。图1-2所示为一个CPU,加上不同的设备,再配合不同的系统与应用程序,就可以开发出完全不同用途的电子产品——这就是嵌入式系统。”

screenshot

笔者比较喜欢的定义如下,嵌入式系统的特性都表现在粗体字上。

Embedded System use general or specialized{![原始定义中并没有“Specialized”这个形容词,但随着IC设计与半导体制造的进步,市面上已有无数的特定用途CPU可供选择。若有必要,你也很容易找到帮您量身定做主控IC的厂商。]} purpose CPUs running custom software along with specialized hardware to perform applica-tion-specific functions.

基本上,这些定义大同小异,主要是范围的差别,最大的范围可以包含硬件设计,甚至时下最流行的SoC(System On Chip)都可以纳入嵌入式系统的范畴。但万变不离其宗,说穿了,嵌入式系统的本质就是以下两点而已。

  • 计算机系统
  • 特定应用

1-3-1 嵌入式系统本质(I):计算机系统

首先,嵌入式系统必然是一个计算机系统,计算机系统的定义如图1-3所示,由4个主要部分组成。

  • CPU
  • 内存
  • 输入设备
  • 输出设备

screenshot

无论个人计算机、超级计算机或者任一嵌入式系统,至少有一个或一个以上的CPU;而CPU的计算能力根据其应用领域相差何止千万里远,在一般PC的CPU运行速度已达3 GHz大关的今日,诸如8051、Z80、80186等历史悠久的CPU仍隐身在许多你我身边的产品内,如图1-47所示;更别提一些在特定的领域中大放异彩的CPU,恐怕你连听都没听过。

screenshot

除了CPU之外,计算机系统的程序必须存储于内存之中。同样的,根据产品的特性,所使用内存大小与种类都大不相同,而嵌入式系统内的内存使用更是一门学问。说穿了,无非就是成本与性能的抉择。在许多应用中,成本的重要性出乎意外的占了上风2,本书会于专门的章节讨论内存。

计算机系统必定是为了解决某种特殊的问题而设计,复杂的PC是如此,嵌入式系统更是如此。解决问题的过程包含数据的输入与结果的输出,在嵌入式系统的领域中,除了处理数据的算法随产品应用领域而不同之外,输入与输出的种类更是无奇不有,其中大部分直接牵涉了硬件的操作。举例来说,冷气恒温控制器的输入是来自检测温度的芯片,输出则是对冷气强弱的控制;Wii的无线游戏杆,输入是来自使用者操作导致的方位变化或被按下的按钮,输出则是通过红外线将这些处理信息打包后送回Wii主机。这样的例子不胜枚举,有些产品可能没有明显的输入,但肯定要有某种形式的输出,否则就失去制作这个产品的意义了。

附带一提,随着IC代工业的兴起,IC设计公司也如雨后春笋般一家家成立,上述所谓的计算机系统几乎已可做到一个IC里面,如图1-5虚线框起来的部分所示(没被完全框起来的方块表示内存、输入/输出设备可以整合到CPU内部,也可外挂在CPU外部)。对电子产品开发者而言,硬件设计的复杂度与出问题的机会当然都会大幅度降低,但对软件系统来说,所开发系统的基本原理与可能要面对的挑战则是完全一致的。

screenshot

举例来说,图1-6所示的IC功能是将输入的字符串转为音频流并输出,这样的功能称为TTS(Text To Speech),可以看到这个IC的内部有CPU与内存(用以存储与执行TTS转换程序),并且有明确的输入(字符串)与输出(声音),根本就是一个不折不扣的嵌入式系统。

screenshot

1-3-2 嵌入式系统本质(II):特殊应用

再来谈到嵌入式系统的第二个本质—特殊应用,这一点可引申出嵌入式系统更多的特质。嵌入式系统应用范围何其广大,从家里的微波炉、男厕的自动冲水系统、现在流行的游戏机、学生用的电子辞典、汽车里的行车控制系统(如图1-7和图1-8所示),到宇宙飞船的燃料控制、核电厂的监控系统等。在一个大系统中,往往包含很多小型的嵌入式系统,以个人计算机为例,键盘、光驱和显示器里都包含着一个计算机系统,CPU执行内存里的程序,处理着不同性质的输入,并输出不同性质的结果。

screenshot

screenshot

因为电子产品性质的各有不同,嵌入式系统的开发很难有一套统一的标准,没有一个国际标准组织或学术单位,规定嵌入式系统一定要用什么CPU、一定要使用什么程序语言开发、一定要用什么操作系统(有时候要不要用“操作系统”都还是个问题)、一定要用哪套开发工具,实际上,开发者并不需要因此而感觉无所适从,因为无论开发什么电子产品,基本的开发技巧与思想是一致的。

用一个比较传神的说法,嵌入式系统的开发很像太极拳,需要的是思想、基本功及实战经验,拘泥于招式与规定只会做出一个四不像的产品。简单的说,在开始设计某个系统时,弄清楚产品的应用范围与详细规格是最重要的事情,因为产品规格必然会影响以下项目的设计。

  • 开发进度规划
  • 预算与成本规划
  • 资源调配
  • CPU的选择
  • 硬件的设计
  • 软件的架构
  • 测试计划
  • 生产流程

举例来说,汽车的ABS刹车控制器,可能使用运算能力一般的CPU就可以了,但因为牵涉到人身安全,系统必须稳定且要求有严谨的测试计划,如太阳能电子计算机,除了计算结果的正确性之外,成本及省电却是更重要的考虑。每个产品都可以说出它和其他产品的不同处。在此不妨做个简单的练习,找一个你随手可得的电子产品,如MP3随身听或智能型洗衣机,如果是你来设计这个产品,最重要的考虑是什么?

实际上,许多项目都是在规格尚未确定的状态下就开工,这就如同只知道客户要你做一辆车,但却不知要做牛车、马车还是汽车;或者即使知道要做汽车,却又不知道客户要你做双B跑车、国产房车、还是火柴盒小汽车等。听起来很荒谬,但这种闹剧却在业界不时上演。

PM:“我希望你能对嵌入式系统开发有正确的概念,试着训练自己对产品设计的敏锐度,我要你选出10个身边的电子产品,分别列出它们的输入与输出是什么?并且以设计者的角度,列出设计这个产品时的重要考虑。以下是一些在产品设计阶段必须考虑的事情,你也可以试着思考还有哪些不在清单内的影响因素。”

  • 成本
  • 外观
  • 预计销售市场与消费群体
  • CPU计算能力
  • 内存大小
  • 省电需求
  • 稳定度
  • 反应实时性(Real-Time)
  • 软件复杂度
  • 测试复杂度

PM:“等正式报到当天交给我,这是你第一个任务,也是很好的岗前培训。”

菜鸟:“是。”

1-3-3 何谓嵌入式系统?

PM:“谈了那么多嵌入式系统的概念,考你一个问题,个人计算机算不算是嵌入式系统?”

菜鸟:“PC是个开放式系统,以Windows或Linux操作系统来说,它并不是专用于某种特定用途,使用者可以在上面执行任何程序。在某些时候,它可能是一台多媒体影音播放器;在另一个时候,它又像是一台上网机、打字机、游戏机,甚至是电子计算机。因为个人计算机的通用特性,所以它应该不是嵌入式系统。”

PM:“其实我这个问题是有陷阱的。刚刚说过,PC里的键盘、显示卡等就是一个个嵌入式系统,如果我们只看主机板,当主机板上电后,CPU执行的第一行程序是什么?存储在哪里?”

菜鸟:“这我知道,在操作系统启动之前,BIOS会先被执行,BIOS会去做self-test的动作,检测硬件有没有问题,如果使用者有按下特殊键(如F2键)的话,就会进入BIOS的设定功能,否则就会到硬盘、光驱或USB设备的特定地址加载操作系统。至于BIOS存储在哪里我就不清楚了,但应该不在硬盘里才对。”

PM:“不错!很有概念,以前的BIOS是存在Mask ROM里面,后来为了让使用者可以自己更新BIOS,现在的BIOS都是存在可擦写的Flash里面。看一下如图1-9所示的主机板,除了零件多一点外,它和一般电子产品的电路板有什么不同?主机板加上CPU以及内存后,即使没有硬盘,BIOS也会被执行,而BIOS是有特定用途的程序,它负责检测硬件以及加载硬盘里的操作系统。所以我说PC的主机板就是一个嵌入式系统。”

screenshot

PM:“举个简单的例子你会更了解。假设我能改写BIOS程序,我可以更改它的用途为当使用者按下某个键,就会从PC喇叭播放生日快乐歌,那么,同样这块主机板就变成了特定用途的嵌入式系统。当然实际上不会有人设计那么贵、计算能力那么强的硬件平台,只为了播放一首歌!”

菜鸟点头:“的确是蛮无聊的应用。”

PM:“如果我稍微改变一下应用你可能就不会觉得无聊了,你知道大部分的测量仪器,如示波器,就是一片PC主机板加上精确的测量设备,以及分析信号的程序所组成的吗?你可以看一下这台逻辑分析仪,开机时你甚至可以看到Windows的执行画面如图1-10所示;因为它具有特定用途,我们也可以说它是嵌入式系统。此外,你不妨研究一下工业用PC,这类的产品除了特定用途,必须能在恶劣环境运行、对稳定性要求甚高之外,就是一台PC。当然,它是一种嵌入式系统,而且是很贵的嵌入式系统。再看如图1-11所示的这台公用电话,虽然里面执行的是Windows XP,但它也是一种嵌入式系统。”

screenshot

screenshot

菜鸟:“没错!我曾看过银行自动提款机死机后重启的画面,就是我们熟悉的Windows画面。我懂了,一个产品是否为嵌入式系统,和价格、大小、CPU计算能力与使用地点都无关,必须视其是否为了特定用途量身定做。”

PM:“没错!你要记住其实某项产品是否符合嵌入式系统的定义并不重要,重要的是开发者必须完全了解嵌入式系统的本质,以避免在设计开发阶段做出错误的判断与决定。”

1-3-4 电子产品的核心:CPU、MCU、DSP、SoC、ASIC

菜鸟:“计算机系统里一定会有个主控IC,刚才的图里都称其为CPU,但我们常看到一些不同的名字,最常见的是MCU或SoC,此外,我记得还有专长于运算与信号处理的DSP,以前报章杂志也经常看到ASIC产业相关新闻,这些名词我常常搞混,但它们在计算机系统里的地位有差异吗?”

PM:“其实这也没什么大不了,只是在说明嵌入式系统的多样性罢了!举例来说,如果要选个Power IC,你会考虑什么?”

菜鸟:“这个问题对我来说似乎太难了!细节我无法讲清楚,但我觉得市面上可选择的Power IC一定很多,因为每个产品需要的电源状况都不相同,可能有的只需要一组3 V的电源,有的需要两组1.8/3.3 V的电源,有的产品对电源的误差要求很高,有的则要求转换效率等,再加上成本因素,看来要考虑的事情还真不少。”

PM:“既然Power IC都必须根据产品特性而有不同的选择,更何况对电子产品最重要的主控IC?所以市面上有general purpose的CPU、有计算能力没那么强的MCU、有整合了许多装置的SoC、有强于计算的DSP、有专为客户设计的ASIC,这么说你应该可以理解了吧?至于各个名词的定义你去问Google或查维基百科就会知道了。”

我们经常会混用这些名词,笔者认为这不伤大雅,只要在产品设计时,能正确地选择真正适合此产品的主控IC即可,在此仍节录这些名词的定义如下。

  • CPU:中央处理器(Central Processing Unit,CPU)是计算机系统的主要设备之一。其功能主要是解释内存中的指令,并处理内存中的数据,所谓CPU就是遵循冯 • 诺依曼架构(Von Neumann Architecture)设计的装置。CPU的运行原理可分为4个阶段:取指(Fetch)、译码(Decode)、执行(Execute)和写回(Write-Back)。简单地说,CPU是一个概念性的名词,但用CPU称呼任何种类的主控IC都算妥当。
  • MCU:微控制器(目前在中国仍多沿用“单片机”的称呼),是把中央处理器、内存、定时/计数器、输入/输出接口等都整合在一块集成电路芯片上的微型计算机。与应用在个人计算机中的通用型微处理器相比,它更强调自供应(不用外接硬件)和节约成本。其最大优点是体积小、整合性高,但存储量小,输入/输出接口简单,功能较低。图1-6所示就是MCU的典型架构,IC内整合了一个CPU core,以及其他的装置或I/O接口。
  • SoC:是将一个完整的计算机系统,加上部分的电路,放入一个芯片内。这个芯片可能会包含数字电路、模拟电路、混合信号及射频电路等在内。SoC通常也会整合一块非挥发性内存(如ROM或One Time Programming Memory,OTP)在内,包含在其中的程序也会被称为嵌入式系统。
  • ASIC:特殊应用集成电路(Application-Specific Integrated Circuit,ASIC),是指根据特定用途而设计的特殊规格逻辑IC。品种多、批量少,要求设计和生产周期短,作为集成电路技术与特定用户的整机或系统技术紧密结合的产物。与通用集成电路相比,具有体积更小、重量更轻、功耗更低、可靠性提高、性能提高、保密性增强、成本降低等优点。
  • FPGA:主控IC的另一个选择是直接在产品上使用“具有可程序化(Programmable)特性的FPGA”出货,相较于专门客制化的ASIC,FPGA在性价比上越来越具竞争力,且已致力于最为人所非议的耗电量的改进,对ASIC产业是不小的打击3。
  • DSP:数字信号处理器(Digital Signal Processor),简单的说,DSP就是一种专用于数字信号处理的微处理器。相较于一般微处理器,DSP具有特殊硬件及指令设计,以及分开的程序和数据存储器(Harvard Architecture,哈佛结构),可使其更有效率地存取数据。一般我们说CPU擅于控制,而DSP则擅于运算。DSP的应用领域如表1-1所示。

screenshot

此外,MCU和DSP在应用上不一定是互斥的。图1-12所示是一个MP3 IC,IC里包含了一个8 bit MCU以及一个DSP。MCU负责NAND管理与流程控制,而DSP则负责处理MP3数据,MCU与DSP都只执行其最擅长的事情,所以,当然可以用最低的成本以最有效率的方式完成工作。

screenshot

1-3-5 案例研究(I):使用与PC同等级CPU的嵌入式系统

菜鸟:“既然谈到CPU,就不能不让人想起PC上的X86系列CPU。X86应该是个十分稳定的平台,相关的研发资源也相当丰富,想到可以执行Windows、Linux以及无数的应用程序,相信就让无数开发商垂涎三尺了。虽然X86 CPU比较贵、耗电也较高,难道就真的只能用来做工业计算机或测量仪器之类的产品吗?”

PM:“X86背负着CISC架构的原罪,而一般研发人员早就被灌输CISC不适合用来当作电子产品CPU的观念,然而,这个观念并不一定在每个情况都适用。对了,你应该知道CISC和RISC的分别吧?”

菜鸟:“以前在学校学过,CISC与RISC主要是指令集长度上的差异。CISC的指令较具多样性,而为了支持更多特殊功能的指令,指令长度就无法一致。所以CISC需大量晶体管支持各种指令,并且需要高频率才能拥有不错的性能,但相对大量晶体管与高频率,却会带来高耗电。”

PM:“没错!耗电就是CISC最大的致命伤,但厂商仍不断的设法改善架构(例如,为提高性能,会把x86架构下的CISC指令先译码成类似RISC指令,再利用各种方式同步处理、加速执行),使CISC与RISC理论上的差距不再那么遥不可及。此外,通过对X86进行SoC化(即将x86所需的所有外部功能,与处理器运算核心(Core)封装在同一IC内),如图1-13所示,使得用这些SoC进行产品设计不像做PC主机板那么复杂,目前已有相当多SoC化x86处理器,应用在诸如健保IC卡片阅读机、停车管理系统、电子式水电表、超市查价机、心电图设备、CNC控制、PLC、网通设备、终端机、交通号志控制系统等领域。

而且换个角度想,在部分应用领域中,主控IC的单价与耗电量不见得是其最重要的考虑因素,而且如你所说,Windows与Linux上开发环境的便利性与现成的资源,对某些领域的产品开发商有着极大的诱惑力,所以采用X86核心的SoC目前也在某些领域被广为使用。”

screenshot

菜鸟:“这又符合了您刚刚说的思想,进行嵌入式系统或电子产品开发,一定要先彻底分析最终产品的特性,在主控IC或零件的选择上,千万不可固步自封。”

1-3-6 案例研究(II):“藏”在IC内部的嵌入式系统

菜鸟:“讲到这里,嵌入式系统真的是无处不在,除了我们日常会碰到的3C商品、家电、玩具、手持式装置等小玩意外,还有逻辑分析仪等测量仪器这种价值不斐的大东西。此外,我们刚刚说到那个可以做TTS(Text To Speech)的IC也是一个具体而微的嵌入式系统,如图1-6所示。我比较好奇的是,这种被‘封印’在IC里的嵌入式系统是怎么开发出来的?它不像一般嵌入式系统有个开发板,可以外接一些debug装置,而且在开发阶段,程序怎么‘烧’到IC里的ROM?ROM应该是只读的啊!”

PM:“其实开发的流程与原理是一样的,但在这个开发流程中,软硬件工程师必须和IC designer一起co-work。嵌入式系统开发团队的开发环境当然不会是一个IC,而是一个以FPGA为主控的板子,你可以从图1-14所示看到,FPGA的板子和一般硬件板子没什么太大的不同,但FPGA中电路是可程序化的。”

screenshot

PM:“IC designer以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速地烧录至FPGA上进行测试,就好像一个电路试验板被放在了一个芯片里,对软件工程师而言,这个FPGA的功能应该与最终要开发的IC完全相同,只是在IC设计阶段,FPGA的行为难免会有些bug,而软/硬件工程师也必须负责从系统应用的观点,帮这个开发中的IC找出潜在的问题4。

言归正传,以图1-6所示这个TTS IC为例,利用FPGA平台进行IC内嵌入式系统开发的流程如下。

Step01: 如同一般电子产品项目,硬件工程师进行硬件板子设计,主控IC为FPGA,除了这个IC在应用时需要的外部装置之外(如喇叭、ICE接口、UART传输接口等),还必须包含用以更新FPGA内部电路(程序)的接口。

Step02: IC team必须先提供一个功能与实际IC几乎完全相同,但ROM(in FPGA)中没有数据的FPGA版本,并协同硬件工程师确认FPGA与板子共同运行无误。

Step03: 软件工程师将编译好程序,使用ICE下载程序到SRAM(in FPGA)执行与调试。开发中碰到任何问题时,必须考虑可能是FPGA内电路设计有误,并与IC designer密集讨论。

Step04: 当软/硬件工程师在FPGA板子上完成系统开发后,将程序复位后交付IC designers(在开发阶段,程序是在SRAM上执行,但实际IC在运行时,程序必须在ROM里执行),IC designer会再提供一版FPGA,待软/硬件工程师验证无误后,才可进入IC制造流程。

Step05: IC里的ROM不是用烧的,而是在IC设计阶段,将程序或数据写入ROM的电路。”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值