1.1 信息表示
数字系统存储、转移、处理的对象是信息。信息是对物质世界与人类社会中存在的各种各样现象的表示。物质世界的属性可以用某些参数来表示,如重量、温度、压力、速度、流量以及声音的强度与频率等。绝大多数的物理参数是连续的(continuous),在给定的范围内可以连续取值。相反,在人类社会中,参数本身是离散的,比如商业记录中所采用的单词、数量以及金额,它们分别是字母表中的某些值、某些整数或现金单位。通常,信息系统必须能够表示连续的和离散的信息。温度值是一个连续的量,假设传感器检测温度并将采集的信号转换为电压,这个电压值也是连续的,我们将这种连续的电压值称为模拟信号(analog signal),它可以作为温度信号的一种表示形式。但是,用给定范围内一定数量的离散(discrete)电压值也同样可以表示温度信号,比如摄氏温度在-40~+119℃的整数值,我们将这种电压值称为数字信号(digital signal)。或者,我们可以用多个电压信号来表示这些离散值,其中每一个电压信号取一个离散值。最极端的情况是每一个信号只有两种离散值,但用多个信号组合起来可以表示大量的离散值。比如,前面我们提到的160个温度值中的每一个就可以用8个二值信号按特定的组合方式来表示。当前绝大多数电子数字系统的信号都采用两个离散值,称为二进制(binary),其中用到的两种离散值分别称为0和1,也就是二进制系统中所用到的数字。
我们通常分别用两种一定范围内的电压—高电平(HIGH)和低电平(LOW)来表示这两种离散值。图1-1a举例说明输入输出电平的范围,高输出电平的范围在0.9~1.1V,低输出电平则在-0.1~0.1V,而输入电压在0.6~1.1V被认为是高电平,输入电压在-0.1~0.4V被认为是低电平。输入电压的范围被设计得比输出电压的范围大,是为了保证电路在发生变化和受到干扰的情况下,仍然能正常地工作。
我们可以用其他不同名字来表示输入输出电压范围,比如:HIGH(H)和LOW(L)、TRUE(T)和FALSE(F)、1和0。一般会用HIGH(H)表示高电平,LOW(L)表示低电平,但对于TRUE(T)和FALSE(F)、1和0来说则有不同的对应方式。TRUE和1可以用来表示高电平也可以表示低电平,而FALSE和0只要表示相反的电平即可。除非有其他说明,我们约定TRUE和1表示高电平(H),FALSE和0表示低电平(L),这种约定称为正逻辑(positive logic)。
有趣的是,我们从图1-1a看到一个数字电路中的电压值仍然是连续的,从-0.1~+1.1V。这样说来,电压实际上还是模拟量。图1-1b绘制的是一个高速数字电路的实际输出电压的时间图,这种图称为波形图(waveform)。用不同的电压范围来表示1或0,这样可以将连续的电压转变成两值形式。采用这样一种方法,可将图1-1b中高于0.5V的电压定义为1,低于0.5V的电压定义为0,所得波形如图1-1c所示。这样,输出电压的真实值被去掉,转换成为只有1和0的二进制形式。我们知道,数字电路是由一种叫晶体管的电子器件组成的。数字电路被设计为,只要输出不变,输出就会在图1-1所描述的高电平1(H)或低电平0(L)所对应的电压范围内。相反,模拟电路被设计为,不管有没有变化,输出在限定的范围内可以取连续值。
由于0和1与二进制数字系统相关,它们自然是用来给信号范围命名的最好选择。一个二进制数字称为一位(bit),在数字计算机中信息就是用一组一组的位来表示的。采用不同的编码技术,二进制位的不同组合不仅可以用来表示二进制数字,还可以表示其他离散符号,合理的二进制位组合形式甚至可以成为计算机中可执行的指令或被处理的数据。
为什么要采用二进制呢?为了与图1-1的系统作对比,我们假设有一个采用十进制数字的系统。在这样一个系统中,电压从0~1.0V可以被分成10个区间,每个区间为0.1V,电路的输出电压应该为这10个区间中的一个,电路的输入电压则需要被判断属于这10个区间的哪一个。考虑到存在的噪声干扰,对于每一个刻度来说,输出电压应允许有小于0.05V的上下波动,输入电压间的边界也应允许有小于0.05V的上下波动。识别这种微小的差别需要复杂和昂贵的电路,但即使这样,输出电压仍然会因使用中的噪声以及生产过程产生的电路差异而发生信号紊乱。所以,这种多值电路系统的使用很受限制。相反,在二进制电路中,因为两种输出电压和输入范围的差别非常明显,所以电路能很容易地正常工作。输出不是高电平就是低电平的晶体管电路设计起来简单、容易,工作也更可靠。此外,采用二进制可以使计算是可重复的,也就是说对于同样的计算,同样的输入总是产生同样的输出。在多值系统或模拟系统中,由于噪声干扰以及电路生产或老化导致的差异,同样的计算,其结果往往是有差异的。
1.1.1 数字计算机
图1-2是一个数字计算机的模块图。程序、输入输出数据以及计算过程中的中间数据存储在存储器中,数据通路按程序的设定进行计算和数据处理操作,控制单元监视着各部件间的信息传送。数据通路以及控制器一起构成一个整体部件—中央处理单元(Central Processing Unit,CPU)。
用户程序和数据通过键盘等输入设备送入存储器。输出设备,比如液晶显示器(LCD)显示计算结果,展现给用户看。一台数字计算机可以拥有多种输入输出设备,如DVD光驱、USB闪存驱动、扫描仪、打印机等。这些设备使用数字逻辑电路,同时还采用模拟电路、光学传感器、液晶显示屏以及电子机械部件。
CPU中的控制单元从存储器中的程序存储区将指令一条条地取出,控制单元操控数据通路执行这些指令指定的操作。程序和数据都存储在存储器中。一台数字计算机可以进行算术运算、字符串处理,还可以根据内部或外部条件进行决策。
1.1.2 其他计算机
影响着我们这个世界的计算机不仅仅是PC。体积更小、功能稍弱、单芯片的微型计算机(microcomputer)或微型控制器(microcontroller)以及某些特定领域的计算机如数字信号处理器(Digital Signal Processor,DSP)在我们的生活中占有更为主导的地位。这些类型的计算机隐藏于各种日常生活电器中,我们难以觉察。既然它们总是作为一种内部部件包含在其他产品之中,所以就被称为嵌入式系统(embedded system)。图1-3是一个通用的嵌入式系统的模块图。系统的核心就是一个微计算机或有着类似作用的部件,它拥有很多PC的特性,但区别在于它的软件程序为某种产品专用,并被固化在系统内。这样的软件,作为嵌入系统的一个内部构成部分,对产品的运行至关重要,所以被称为嵌入式软件(embedded software)。而微型计算机的人机界面很简单,甚至没有。大型的数据存储器,如硬盘、存储卡或DVD驱动器在微型计算机中也很少见。微型计算机中有一些存储器,根据需要还可以添加外部存储器。
除外部存储器之外,与嵌入式微型计算机相连的其他硬件用于和产品或外部世界进行信息交换。输入设备将产品和外部世界的输入转换成电信号,而输出设备则将电信号转换成合适的形式送给产品和外部世界。输入输出设备有两种,一种使用模拟信号,另一种使用数字信号。例如,常用的数字输入设备有:手动拨码开关、十进制数字键盘等。常用模拟输入设备有:电阻值可随外部温度变化而变化的热敏电阻、可感受外部压力并产生一定电压的压电晶体等。通常需要额外的电气或电子电路将这些信号转换成嵌入式系统能够处理的形式。常用的数字输出设备有:继电器(可以用电压控制其通断的开关)、步进电机(可以跟随电压脉冲)以及LED数字显示器。常用的模拟输出设备有:扬声器和刻度仪表盘。仪表盘中指针的位置由一个永久磁铁与电磁铁的磁场之间的相互作用决定,而电磁铁的磁场则受施加在其上的电压控制。
下面,我们将用一个无线气象站所使用的温度测量系统来具体解释嵌入式系统。同时,这个例子还将解释模拟与数字信号,以及它们之间的相互转换方法。
例1-1 温度测量与显示
一个无线气象站测量一组室外气象参数,然后将这些参数传送到室内基站并显示。它的工作机制可以用图1-4的温度测量方法以及图1-3的嵌入式系统模块图来说明,其中用到了两个嵌入式微处理器,一个用在室外,一个用在室内基站。
室外的温度一天24小时内在-40~+115℉间连续变动,其波形图如图1-4a所示。一个装有热敏电阻的传感器负责温度检测,热敏电阻的阻值会随外界温度的变化而变化,而电路为热敏电阻提供一个恒定的电流,这样传感器就能将外界温度的变化转换成有相应变化的电压信号。通过信号调节,这个电压会在0~15V间持续波动,如图1-4b所示。
我们采用每小时1次的频率对此电压信号进行采样(这是很低的采样频率,仅为演示而已),其采样点如图1-4b所示。每一个采样值被送到图1-3所示的模/数(A/D)转换器中,被转换成大小在0~15间的二进制形式的十进制数字,如图1-4c所示。这些二进制数字可转换成相应的十进制数,方法是从左到右将每一位分别与其相对应的权8、4、2、1相乘,所得结果相加即可。例如,0101可以这样转换:0×8+1×4+0×2+1×1=5。通过这样的转换,无限个连续变化的温度值就被量化为有限的16个值。比较图1-4a的温度与图1-4b相对应的电压值,我们发现一个实际的温度值往往在它所对应的量化数字的上下5度间波动。例如在-25~-15间的温度模拟值,转换后的量化数字为-20度。这种实际值与量化值间的差别称为量化误差(quantization error)。为了获取更高的转换精度,我们必须将A/D转换器的输出位数提高到4位以上。图1-3中的左上角即为负责传感、信号调节以及A/D转换的硬件模块。
接着,转换后的数据被传送到图1-3右下角所示的一种输出设备—无线发送器。无线发送器将数据发送后,基站中的一个输入设备—无线接收器会将数据接收下来。基站的嵌入式系统获得数据后,会根据热敏电阻的特性对数据进行一定的计算处理,做恰当的调节。最终,数据会显示在图1-4f所示的一种输出设备—模拟仪表上。为了能在模拟仪表上显示温度,图1-4d中量化的离散数据首先要通过一个数/模(D/A)转换器转换成模拟信号。然后,采用低通滤波器对模拟信号进行过滤,去掉可能存在的高频噪声,如图1-4e所示。最后,信号被传送到模拟仪表进行显示。图1-4f中列出的是某24小时内5个时刻的温度显示结果。 ■
你可能会问:“在我们的生活中到底存在多少种嵌入式系统?”你是否有手机、iPod、Xbox、数码相机、微波炉或汽车?所有的这些产品都是嵌入式系统。实际上,新设计的小汽车中会有超过50个的微控制器,每一个控制着一个特定的嵌入式系统,比如引擎控制单元(Engine Control Unit,ECU)、自动刹车系统(Automatic Braking System,ABS)和稳定控制单元(Stability Control Unit,SCU)。而且,这些嵌入式系统可以通过控制局域网总线(Controller Area Network,CAN)进行信息交换。一种叫做FlexRay的最新开发的汽车网络可以提供高速、安全的电子线控技术:线控刹车与线控转向,这样能消除机械与液压装置失效的隐患,减少碰撞发生的概率,从而提高整车安全性。表1-1所示的是按应用领域划分的嵌入式系统例子。
考虑到个人计算机和嵌入式系统的广泛应用,数字系统对我们生活的影响是难以想象的。数字系统在医学诊断与治疗、教育学习与工作、运输迁移、家庭生活、人与人的交流甚至娱乐活动中起着核心的作用。许多这种系统都很复杂,需要在设计抽象的不同层次给予恰当的考虑,以保证系统正常工作。感谢晶体管与集成电路的发明以及成千上万的工程师与程序员的精巧设计和持续努力。在本书的后续篇章中,我们将带你遨游数字系统世界,揭示数字系统的工作机制,并仔细分析、学习如何设计数字系统与计算机。
1.1.3 通用计算机的进一步说明
现在,我们将通用计算机的各种构成部件与图1-2中的模块对应,简洁地讨论一下通用计算机的工作机制。本章开头所示图的左下角是计算机的核心,一种被称为处理器(processor)的集成电路。当前,这样的处理器是非常复杂的,通常由几千万甚至几亿个晶体管构成。处理器有4个功能部件:CPU、FPU、MMU、内部cache(高速缓存)。
我们已经讨论过CPU。FPU(Floating-Point Unit,浮点计算单元)与CPU很类似,但它的数据通路和控制单元经过特殊设计,用于处理浮点数据。实际上,浮点计算就是按科学计数法的形式(如:1.234×107)对数据进行处理,这样计算机就可以处理很大和很小的数。如图1-2所示,CPU和FPU有各自独立的数据通路和控制单元。
MMU的全称为Memory Management Unit,即存储管理单元。MMU、内部cache、外部cache以及RAM(Random-Access Memory,随机访问存储器)都属于图1-2所示的存储器部分。内、外部cache是一种特别设计的高速存储器,用于提高CPU和FPU对数据的存取速度,远高于只有RAM的系统。通常RAM被人们称为内存。MMU的主要功能是可以虚拟出CPU可访问的、容量远大于RAM的实际大小的存储空间。这是通过RAM和硬盘的部分容量结合在一起来实现的,RAM和硬盘之间根据需要进行数据交换。我们今后将要讨论的硬盘本来是一种输入输出设备,在这里就变成既是存储器也是输入输出设备了。
处理器、存储器以及外部cache间所画的连接线是集成电路间的连接通道,由印刷电路板上导电良好的铜导线构成。本章开头所示图中总线接口下面的总线称为处理器总线,上面的总线称为I/O总线。处理器总线和I/O总线上的数据位数以及控制数据传输的方法是不一样的,甚至工作速度也不一样。所以总线接口就负责处理这些差异,以保证两种总线能相互通信。
到这里,通用计算机的其他还没有被提及的部件就是如图1-2中所示的I/O部分。从绝对物理体积来说,这些部件占据计算机体积的大部分。我们要将信息输入计算机就需要一个键盘,要将文字和图片显示出来就需要一块显卡和液晶显示器。而我们前面提及过的硬盘则是一种机电结构的磁性存储设备,其存储载体为涂有一层磁性物质的可旋转盘片,通过改变涂层不同位置的磁通量,可以在磁盘上存储大量的信息。为了对硬盘进行控制以及传送输入输出的数据,需要一个硬盘控制器。键盘、图形显示卡和硬盘控制器都与I/O总线相连。通过总线接口,这些设备就能与处理器以及挂接在处理器总线上的其他部件进行数据通信。