下载
第1章数字系统的概念
数字系统已经成为日常生活的组成部分。我们的周围可以发现无数个数字硬件的例子:
自动播音器, C D播放机,电话系统,个人计算机以及视频游戏等等,这样的例子似乎无穷无
尽!
本章首先从讲解组成数字系统基础的一些基本概念入手,开始我们对数字网络世界的探
索。我们将学习二进制数制系统和数字系统的构成。
1.1 什么是数字系统
二进制数制系统只使用0和1这两个数字。这些二进制数字称为比特
精确地解释数字系统的组成可以很简单,也可以是一件很困难繁杂的事情,这因我们的
谈话的对象不同而不同。从基本的意义上讲,我们可将其定义为:
• 数字系统是仅仅用数字来“处理”信息以实现计算和操作的电子网络。但是,数字系统
中所用的数字是来自于特别的数制系统,该数制系统只有两个可能的值:该值要么是0,
要么是1。此特征定义了二进制或基-2的数制系统,数字的本身( 0和1 )称为( b i t s )比特,简
称为“二进制数字”。虽然这似乎十分简单,但是由于只使用0和1来完成所有的计算和操
作,所有数字系统的设计实际上是相当复杂的。特别地,数字系统必须完成如下任务:
1. 将现实世界的信息转换成数字网络可以理解的二进制“语言”。
2. 仅用数字0和1完成所要求的计算和操作。
3. 将处理的结果以我们可以理解的方式返回给现实世界。
本书的内容就是讨论我们应该如何完成这些任务。虽然到目前为止此过程听起来似乎很复
杂,但我们将看到,数字系统总可以分解成用来表征和设计系统的小单元(或模块)。图1 - 1将这
图1-1 层次设计的级别
原语单元
用于产生
较复杂的单元
用于产生
更复杂的单元
个观点概念性地表示出来。图中原语单元是系统的基本构成模块。通过对原语单元进行组合可
以构成较大、较复杂的A、B、C单元,而A、B、C单元进一步用于构成更大的X单元和Y单元。
所有具体单元的规模是任意的:其内部可以很简单,也可以很复杂,并且可以由所需的任何
简单的单元组成。这里讲述的方法就是人们所称的层次设计方法,其中简单的数字单元用于
构成较复杂的单元。为了使最终的系统具备所期望的特征,系统的复杂性将会随之增加。
1.2 数字系统的概况
数字系统有几种等效的描述方法。本书将自始至终强调数字系统可以用不同的方式来看
待的观点。而采用的方式是否适合且方便则由手头上的问题来决定。
1.2.1 层次
我们已经注意到,层次概念对于设计复杂的数字系统是很有用的,它使得我们可以从简
单的单元入手,然后逐步构成庞大而复杂的系统。数字系统可以用十分明确定义的层次级别
的集合来描述,而层次级别是独立的值得认真研究的论题。但是,根据我们的方法,我们将
把每个层次级别当成手头上问题的一个可供选择的观察点。这有利于我们理解数字系统的运
算和设计。本书用到的主要层次级别将在下面各段落中加以讨论。
逻辑网络
数字逻辑网络是以二进制数制的行为为基础的。由于二进制变量实际上可以用来表示任
何数据集,因此用二进制来描述任何数字网络是可能的。例如,可以用二进制数来表示音频
的音迹(比如在C D中)、物理计算中的科学数字、基因代码、星系信息或用于古埃及废墟中考
古发掘发现的分类,等等。可以用二进制来描述的场合是无穷无尽的。虽然这在开始时听起
来有一点抽象,但我们将很快学会如何用二进制数来描述逻辑网络,以代替用代数类型描述
的方法。
电子电路
硬件这一术语表示的是数字系统的物理构成。数字系统的物理实现是用电子器件来完成
的。而电子器件用实现逻辑运算的方式控制着电路中电流的流向。这是数字网络在日常生活
中人们最熟悉的形式。比如,当提及计算机系统时,我们通常想象到的是一块电子器件。
实际的数字系统是用数字逻辑设计的,其硬件是用电子器件来实现的。这些概念的融合
起来加以理解是很重要的,因为它表明了理论如何用于构造实际的系统。
形式描述
仅仅采用“语言”范围内定义的描述性的措词来描述数字系统的行为是可能的。此概念
在硬件描述语言( H D L )的发展中已经被正式化。H D L允许我们采用与预定义的规则和语法相
一致的语句来定义逻辑运算。H D L的概念与高级编程语言,如J a v a或C + +等,使用的概念是相
同的,除了它是应用于数字系统的设计和分析的问题不同外。
1.2.2 个人计算机
桌面个人计算机是数字系统的一个极好的例子。当我们把计算机作为一个完整的系统来
描述时,它通常由以下单元或部分组成:
• 主机它包括作为计算机心脏的C P U (中央处理单元)芯片在内的主板。另外,主板上还
2 数字系统设计基础教程
下载
有存储程序和数据的系统存储器,以
及与其它部分进行通信的输入输出电
路。主机的本身包括磁盘存储设备,
主电源及其它辅助部分,比如调制解
调器。
• 键盘键盘是计算机输入的主要设
备,例如命令和数据的输入。只要安
装了合适的软件,鼠标也可以实现输
入的目的。
• 显示器显示器就是计算机用于提供可视化输出的C RT (阴极射线管)。
计算机系统的外观可能类似于图1 - 2。虽然计算机还可能会有其它的外设,但这三个部分
完成了计算机的主要功能。
总体而言,我们可以在多个不同的层次级别上观察此系统。我们可以将它当作一个程序
运行的单个部件,或者我们可能想进一步深入了解其硬件的工作情况。若打开主机,你将看
到组成计算机的许多构成模块。其中较为重要的部分是中央处理单元( C P U )、系统存储部件、
电源、存储设备比如磁盘驱动器,及许多其它的部件。C P U是计算机的“心脏”,它完成了计
算机所有主要的操作。我们可能选择进一步深入地研究每个部件是如何制造出来的。经过艰
苦的跋涉我们将最终进入C P U的内部,在C P U中我们将发现微小的硅片实际上是一个极其复
杂的电子开关的集合。
到目前为止,我们可以做出的最为重要的结论是,构造计算机所用的概念与构造数字通
信系统、宇宙飞船导航系统、工厂生产线的控制、或银行或商业记录的维护等场合所用的概
念是相同的。一旦我们学会了数字逻辑,一个复杂系统的全新世界将在我们的掌握之中。因
此我们将从作为所有数字系统基础的简单的数制系统入手,开始我们对数字系统的研究。
1.3 二进制数的介绍
二进制变量表示的是没有预定义值的二进制数
二进制数制系统是数字设计的基础。本节我们来讨论有关二进制数的属性和用法的一些
基本概念。
首先我们介绍二进制变量A的概念。由于只有两个二进制数字, 0和1,根据定义,我们很
容易理解二进制变量A只能有如下的值
A=0 或A= 1 ( 1 - 1 )
A等于其它的任何值都是不允许的。二进制变量的这种属性使得我们可以定义一个有用的
运算。我们来考虑变量A的值。如果A不等于0,那么A必须为1;与之相反,如果A不等于1,
那么A必须为0。这个简单的论述可用于定义N O T运算,该运算用上划线符号来表示
NOT (A) = -A ( 1 - 2 )
因此有
NOT (0) = 1
( 1 - 3 )
NOT (1) = 0
N O T运算也称为取反,
-A
称为A的补码。
第1章数字系统的概念3
下载
系统主机
显示器
键盘
图1-2 个人计算机的组成部分
一个二进制位只允许我们描述两种可能的值(例如, Y E S或N O ),所以单个二进制变量本
身的应用是很有限的。但是,我们可以用一组二进制位来描述较为复杂的情形。为了理解其
工作原理,假设我们有四个独立的二进制位( b i t ),这四位数分别标识为a3,a2,a1,a0。每个
数据位ai有两个可能的值,0和1,其中i= 0 , 1 , 2 , 3。这样我们就可以构造出一段4 b i t的数据d a t a:
d a t a =a3a2a1a0, ( 1 - 4 )
其中各个数据位的顺序是很重要的,比如a3必须放在左边, a0必须在右边,正如顺序的下标所
示的那样。写成这种形式,我们就把参数d a t a当作具有1 6个不同值一个对象来看待。这1 6个
值为:
data= 0000, 0001, 0010, 0011
0100, 0101, 0110, 0111
1000, 1001, 1010, 1011
1100, 1101, 1110, 1111 ( 1 - 5 )
若我们记住每个数据位的顺序十分重要这一点,所使用的标识是很容易理解的,例如,
d a t a = 0 1 0 1表示的是
a3=0 a2=1 a1=0 a0= 1 ( 1 - 6 )
这些组合可以通过检查加以验证。注意到此数是由四个数据位组成的,而每个数据位有两个
可能的值,所以共有24= 1 6种不同的排列,这样我们就得到了组合的数目。综上所述,虽然每
个数据位只能是0或1,但一段4 b i t的数据d a t a可以用于描述具有1 6种不同可能性的情形。
这种方法可以用于构造任意位数的数组。例如, 8 b i t数据段
Info = X7X6X5X4X3X2X1X0 ( 1 - 7 )
定义了一个具有28= 2 5 6种可能组合的单个对象。类似地,一个1 6 b i t的数组有21 6=65 536个不同
的值,以此类推。只要用足够多位的二进制数组成数组,该二进制数组就可用于表示任何情
形。这就是用二进制数解决现实世界问题的关键所在。
引进一些术语来处理一些二进制数组是很有用的。一组二进制数通常被称为字,而不考
虑它使用的二进制数的位数。在前面的例子中, d a t a是4 b i t的字,而I n f o是8 b i t的字。根据系统
的不同,一个字中b i t的位数可能很重要,也可能不重要。在微计算机领域,字节指的是8 b i t
字。
讨论二进制系统时,我们经常引进一些2的幂次方的缩写,概括如下。
由于这些缩写是以二进制数制系统为基础的,因此这些数的前缀与使用在通常的基- 1 0的
数所对应的值不同。例如,二进制数制系统中, 1 K b表示1 0 2 4 b i t,而在常规的用法中(比如在
4 数字系统设计基础教程
下载
字长数值的数目数值的缩写
物理学和电子学中),1 K = 1 0 0 0 = 1 03。与之相类似,在二进制数制系统中
1Mb = 1024 Kb
而在常规的用法中, 1 M等于1 06=1 000 000,简称为1 0 0万。虽然现在可能会混淆这些概念,
但你很快会习惯的。另一个需要指出来值得我们注意的是比特( b )和字节( B )之间的区别。由
于
1B = 8b
所以将它们区别开来是很重要的。例如个人计算机中的主系统存储器的容量是以它含有的字
节数来确定的。
1.4 数据的表示
通过将二进制字定义为合适的方式,我们可以用二进制字来表示我们想要表示的任何事
物。例如,假设我们想用二进制字来描述左、右、前、后四个方向,由于22= 4,所以只要用
2 b i t字就可以描述这四个方向。我们可以用二进制字D = D1D0来产生方向,其中D1和D0是独立
的数据位。一旦定义了二进制字D,我们就可以定义如下关系:
D = 00 => 左
D = 01 => 右
D = 10 => 前
D = 11 => 后
这些关系的定义完全是随机的。但是,一旦定义完成后,我们就希望能够保持其一致性,
这样我们就知道了D的不同值的含义。例如D= 0 1解释成“右”。即使这些数据位本身与方向之
间没有联系,但这种定义为两者提供了合适的联系。
给二进制数组定义特定含义的过程称为编码。它可用于我们所希望的任何场合。我们
可以通过定义来表征任何对象的集合,但数字和字母最常用于编码。与之相反的过程,即
把二进制数解释成应用的过程称为解码。在此操作中,解码的信息可用于提取二进制字的
含义。我们必须用编码的方案来对二进制字进行解码,否则解码得到的将是一组毫无意义
的数据位。
编码和解码可以看成是有一本字典在英语和二进制字之间进行翻译。对某一对象进行
编码时,你将在字典中找到二进制的等效物。当你想把该对象返回其原始的形式时,你必
须查找它的二进制字并找出它在英语中的含义。这是一个十分乏味的过程,所以编码/解
码的信息通常包含在可以完成自动翻译的数字逻辑网络中。编码和解码的过程用图形的方
式表示在图1 - 3中。在编码单元中,信息被转换成二进制字,数字网络用二进制来处理数
据并产生二进制的输出。此输出被传递到解码器,解码器对其进行翻译并返回用户可以识
别的形式。
图1-3 编码和解码的过程
第1章数字系统的概念5
下载
处理数据的
数字网络
输入的二进
制表示
二进制输出
1.5 二进制数及十进制数
虽然我们生活在十个数字( 0到9 )的世界中,但我们可以很容易地将这些数字转换成可以用
逻辑门进行基本算术运算的二进制形式。在运算完成之后,最终的结果必须转换回其原来的
数字形式。这些转换是通过数制理论来完成的。
首先我们来考虑数制系统的第一个概念,即基或基数r;r表示的是可以用来计数的数字个
数。我们说平常的数制系统是基- 1 0的,因为该系统包含有1 0个数字:0、1、2、3、4、5、6、
7、8、和9。由于二进制数制只有两个二进制数字, 0和1,因此该性质定义了一个基- 2 (或二
进制)的数制系统。为了将一个数从十进制转换为基- 2的数,以及将基-2的数转换成十进制数,
我们必须使两个数制系统之间有一个固定的关系。为了避免产生混淆,我们用下标把基- 1 0的
数N1 0与基-2的数b2区别开来。但是,如果从数的本身长度就可以清楚地看出其基的值时,下
标就可以忽略。例如,我们立即可以认出数字4 2不是基-2的数,因为它的两个数字都超出了
二进制的范围。
1.5.1 二进制到十进制的转换
现在我们来仔细地讨论如何用二进制数字来表示日常的基- 1 0的数字0到9如果你想用不同
的二进制数来分别表示每一个十进制数,那么至少需要用4 b i t二进制字;因为23< 10 < 24。至
此我们可以构造4 - b i t二进制字
N = N3N2N1N0
来表示基-1 0的数字。虽然在编码过程中二进制字定义的分配是随机的,但是两个数制系
统之间的转换必须遵循特定的规则以便与我们所设置的理论相一致。特别地,在基- 2的数到
基-1 0的数的转换的过程中,我们必须按照如下的表达式来解释此二进制数:
N = N3N2N1N0
= N3×23+ N2×22+ N1×21+ N0×20 (十进制) ( 1 - 8 )
= N3×8 + N2×4 + N1×2 + N0×1 (十进制)
上式表示二进制数Nj有一个基-1 0的加权值2j。
例1 - 1
将4 b i t二进制数N = 011 0转换成基-1 0的等效值。应用上面的公式可以给出:
N = 011 0
= (0×8)+ (1×4)+ (1×2)+ (0×1) (十进制)
= 4+2 (十进制) ( 1 - 9 )
= 6 (十进制)
上式表示二进制数0 11 0等于十进制的6。作为另一个例子,采用相同的过程,二进制字
N= 1 0 11可以有如下所示的十进制值
N = 1011
= (1×8)+ (0×4)+ (1 ×2)+ (1×1) (十进制)
= 8+2+1 (十进制) ( 1 - 1 0 )
= 11 (十进制)
这个通用的公式可用于转换任何4 b i t的二进制字。特别地,我们可以直接用此公式构造出
6 数字系统设计基础教程
下载
从0到1 5的计数序列,如图1 - 4所示。注意在数制系统中我们总是从数字0开始的。
将这种关系扩展到字长更大的二进制字十分简单。一个n比特的二进制字有2n种不同的
组合,所以它可用于表示从0到( 2n- 1 )的十进制数。第k位数在十进制中的加权值为2k。例如,
一个8 b i t的二进制字共有28 = 256个不同的排列,根据下面的方程,它可以表示基- 1 0的数0
到2 5 5。
B = b7 b6 b5 b4 b3 b2 b1 b 0
= b7×27+b6×26+b5×25+b4×24 + ( 1 - 11 )
b3×23+ b2×22+ b1×21+ b0×20
其中我们注意到加权因子为2的幂次方:
27= 1 2 8;26= 6 4;25= 3 2;24= 1 6;23= 8;22= 4;21= 2;20= 1 ( 1 - 1 2 )
由于十进制数是通过首先将二进制字中0或1乘以各自的加权因子然后再相加而得到的结
果,因此我们设计出一种将十进制数转换成二进制数的简便方法,该方法如下面的表格所示。
加权值1 2 8 6 4 3 2 1 6 8 4 2 1
二进制位b7 b6 b5 b4 b3 b2 b1 b0
使用该表格只需简单地注意到在给定的位置中0对十进制的值没有影响,而位置为1时应
加上其加权值,所以十进制数就是二进制字中所有“ 1”的位置对应的十进制加权值之和。
图1-4 十进制与二进制系统中的部分等效数
例1-2
考虑8 b i t二进制数
X = 010111 0 0
为了得出它的十进制等效值,我们使用上面的表格并将求和得到
X = 0+64+0+16+8+4+0+0
= 92 ( 1 - 1 3 )
此方法可用于任何8 b i t二进制字。对于较长的二进制字,较高阶的加权因子29、21 0等必须计算
出来以扩展上面的表格,一般而言,对于n - b i t的二进制字
A = An- 1An- 2 ... A2A1A0 ( 1 - 1 4 )
第1章数字系统的概念7
下载
十进制二进制
它的十进制等效值可以由下面的公式计算得出
A = An- 1×2n- 1+An- 2 ×2n- 1+ ... + A2×22+A1×21+A0×20 ( 1 - 1 5 )
这种将二进制字转换成基- 1 0的值的方法使得我们可以对数字系统的输出进行解码。编码过程
提供了与解码过程相反的功能。
1.5.2 十进制到二进制的转换
将基-1 0 (十进制)的数编码成等效的二进制数比将二进制数转换成十进制数需要做更多的
工作。本节将介绍一种可以完成这种操作的称为“逐次相除”的方法。
考虑十进制数N。为了求出它的等效的二进制字b,我们将它逐次除以2,并且在每次除法
后查看其余数R;此余数将是b中的一个二进制位。这很容易用例子来说明。
例1 - 3
我们来讨论“逐次相除”方法如何用于将基- 1 0的数1 91 0转换成它的二进制等效值。首先,
我们将1 9除以2得到
余数R0= 1在二进制表示中是最低有效位( L S B );根据定义, L S B是加权值最低的位,其加权值
为20= 1。
下一步,我们将第一步的结果除以2并查看其余数R1:
以同样的方式继续相除,我们得到如下结果
当除的结果为0时,此算法结束;其余数定义了二进制字的最高有效位( M S B ),M S B的加权值
最大,在此例中, M S B的加权值为24。那么1 91 0的等效的二进制表示采用余数的各位来构造,
写出为
b = R4R3R2R1R0
= 1 0 0 11 ( 1 - 1 9 )
此结果可以通过将1 0 0 112逆变换(解码)回基-1 0的数来加以验证。这种方法十分常用,也很容
易记忆。该方法有两点很重要,它们是
• 第一个余数为二进制字中的L S B (最低有效位)。
• 最后的余数为M S B (最高有效位)。
例1 - 4
我们来将十进制数5 6转换为二进制的形式。转换步骤的顺序为
8 数字系统设计基础教程
下载
余数R ( 1 - 1 6 ) 0=1
余数R ( 1 - 1 7 ) 1=1
( 1 - 1 8 )
余数R2=0
余数R3=0
余数R4=1
余数R ( 1 - 2 0 ) 0=0
上述结果表示5 610 = 111 0 0 02,这可通过逆运算来验证。
1.5.3 小数
虽然许多程序中只使用整数值,但很多计算却用到小数。为了讨论小数,我们将二进制
小数写成如下形式。
b= 0 .b- 1b- 2b- 3. . . ( 1 - 2 1 )
通过整数解码公式进行扩展,我们可将其转换成基- 1 0的小数F1 0,其解码方法是:用相应的2
的负次幂来对小数点右边的各位进行加权。其通常的形式的转换形式为:
F = b- 1×2- 1+b- 2×2- 2+b- 3×2- 3+ . . .
= b- 1×( 0 . 5 ) +b- 2×( 0 . 2 5 ) +b- 3×( 0 . 1 2 5 ) + . . . ( 1 - 2 2 )
由于2-x小于1,我们容易知道上式的值F1 0<1也成立。
例1 - 5
将二进制小数b= 0 . 1 0 11 0转换成基-1 0的相等值。我们有
F = b- 1×2- 1+b- 2×2- 2+b- 3×2-3+ b- 4×2- 4+ b- 5×2- 5
= 1×( 0 . 5 ) + 0×( 0 . 2 5 ) + 1×(0.125)+ 1×( 0 . 0 6 2 5 ) + 0×( 0 . 0 3 1 2 5 )
= 0.5+0.125+0.0625
= 0.6875 ( 1 - 2 3 )
故0 . 1 0 11 02 = 0.68751 0。
为了将十进制小数转换成二进制数,我们对用于整数的方法进行改造,采用逐次相乘方
法。我们从基- 1 0的数F开始,将其乘以2并检查其结果,其形式为m=b . x x x x x,其中b= 1或b= 0
即为二进制数字。如果m< 1,那么我们再将其乘以2并将其作为下一个结果。另一方面,如果
m≥1,那么我们先将其减1并将差值乘以2。
例1 - 6
考虑十进制数0 . 6 8 7 51 0,将它乘以2得
( 0 . 6 8 7 5 )×2=1.375 所以b- 1= 1 ( 1 - 2 4 )
由于1 . 3 7 5大于1,将其减1得到( 1 . 3 7 5 - 1 . 0 0 0 ) = 0 . 3 7 5,接着在下一步中我们用此数得到
( 0 . 3 7 5 )×2=0.75 所以b- 2= 0 ( 1 - 2 5 )
继续上述步骤,我们得到
( 0 . 7 5 )×2=1.5 所以b- 3= 1 ( 1 - 2 6 )
这样必须再将上面的结果减去1,( 1 . 5 0 - 1 . 0 0 ) = 0 . 5,以进行下一步运算:
第1章数字系统的概念9
下载
( 1 - 2 0 )
余数R1=0
余数R3=1
余数R4=1
余数R5=1
余数R2=0
( 0 . 5 )×2=1.00 所以b- 4= 1 ( 1 - 2 7 )
若将其减去1,其差值为0,表明转换的算法已完成。所以
0 . 6 8 7 51 0 = 0.b- 1b- 2b- 3b- 4
= 0.1011 ( 1 - 2 8 )
即为最后的答案。
舍入误差
虽然二进制数可用于表示基- 1 0的十进制值,但十进制到二进制的转换精度由基- 2字中所
用的位数来决定。由此引出的问题称为舍入误差。
为理解此问题,考虑形式为0 .x- 1x- 2x- 3x- 4的4 b i t小数。通常,它可用于表示基- 1 0的数X:
X = 0.x- 1x- 2x- 3x- 4
= x- 1×(0.5)+ x- 2×(0.25)+ x - 3×(0.125)+ x- 4×( 0 . 0 6 2 5 ) ( 1 - 2 9 )
而其实际值与x3到x0的各位值有关。用上面的公式来计算两个二进制字Xa= 0 . 111 0和Xb= 0 . 1111
相应的十进制数。这两个二进制字的等效值为:
Xa = 0.8750
Xb = 0.9375 ( 1 - 3 0 )
所允许的最小分辨率为0 . 0 6 2 5,故用4 b i t二进制小数不可能表示出这两个十进制值之间的数。
例如,十进制小数0 . 9 2 7 0不能用0 .x- 1x - 2x- 3x- 4形式精确表示出来。其可能的最接近的值将为
Xb= 0 . 1111 = 0 . 9 3 7 5>0 . 9 2 7 0,由此引入的误差为:
克服这种误差的唯一的办法是增加用于表示的二进制数的位数。但是,这将导致二进制字很
长和/或字太长不方便使用。为理解此论述,考虑一个5 b i t的二进制字Xc= 0 . 111 0 1。它的十进制
值为0 . 9 0 6 2 5,仍小于0 . 9 2 7 0。在此二进制字上再加上一个二进制位构成Xa= 0 . 111 0 11,其十进
制值为0 . 9 2 1 8 7 5,如此往复。由于此类型的舍入误差在某些应用中是个问题,其他处理小数
的方法已经被发展起来。最为常用的方法是采用一种称为浮点表示的二进制组;浮点表示有
些复杂,我们将在第11章中加以讨论。
1.5.4 十六进制数
十六进制数制系统是一个基- 1 6的系统。它使用以下1 6个符号作为基本数字:
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , A , B , C , D , E , F ( 1 - 3 2 )
注意这里的A , B , C , D , E和F是用作数字,而不是一般情形的字母。在实际应用中也使用
其小写形式(a , b , c , d , e , f)。为简单起见,在通常用法中这些数字常被当作“十六进制”数字。
一个基-1 6字由按特定顺序排列的十六进制数字组成,其最高有效位在左边,而最低有效位
在右边。例如, H = 304E是一个有效的十六进制字,其中3是最高有效位数字, E是最低有
效位数字。为得到4-数字的十六进制字H = h3h2h1h0的基-1 0(十进制)的相等值N,我们采
用公式:
N=h3×1 63+ h2×1 62+ h1×1 61+ h0×1 60 ( 1 - 3 3 )
此公式可扩展到任意长的十六进制字的情形。为了将基- 1 0的数转换成十六进制,采用逐次除
以1 6的方法。图1 - 5所示的表格提供了十六进制、十进制和二进制数之间的转换关系。
10 数字系统设计基础教程
下载
( 1 - 3 1 )
图1-5 十六进制数制系统使用数字0到F
在数字逻辑的讨论中,我们通常限制用十六进制数来表示4位二进制字的用法。这种用法
将极大地地简化数的标识,所以值得我们努力去掌握。从表中我们容易看出十六进制数字和4
位二进制字之间的等效值。还有,通过从右边开始每4位分成一组,此方法可应用于任意长度
的二进制数。
例1 - 7
我们以1 6位二进制字1 0 0 111 0 0 111 0 0 1 0 1为例入手。将此数分割成4位一组,通过将每组直
接转换成独立的十六进制数字,我们得到
1001 1100 1110 01012 = 9C E51 6
= 0x9CE5 ( 1 - 3 4 )
上式中我们引进了另一种标识“ 0x nnnn”将n n n n标识为十六进制数。
1.6 单元和层次
为构成数字系统,我们将采用称为单元( c e l l )的基本构造模块。通常,单元提供了系统设
计中所需的一些有用的运算。系统的本身通过将单元按适当的顺序连结来构成以完成所有希
望得到的性能。
在表示数字网络所使用的单元及单元连结关系上,采用图形表示是很有用的。这种表示
的图形称为逻辑图,它们为数字网络的分析和设计提供了一个有用的观察点。单元的概念如
图1 - 6所示,它以二进制变量为A,B和C为输入,而产生的输出函数为f (A,B,C)。单元的输入
和输出点称为端口;单元通过端口同其他单元相连。
作为函数的例子,假设我们希望有一个单元,如果该单元有且只有一个输入为1,其输出
为f= 1,否则f= 0。此函数可描述为:
f=1 如果A= 1或B= 1或C= 1;
f=0 其他
第1章数字系统的概念11
下载
十六进制十进制二进制
标识十六进制的标志0 x是C语言中使用的规范。
正如后面我们将看到的,布尔代数可用于产生实现这种函数的方程式。
为产生较大的数字系统,我们用小的单元构成具有较复杂功能的较大的单元。在逻辑图
中单元间的互连用表示信号流向路径的连线来表示。该连线也称为传输线或简称为互连。当
我们用电子器件构造系统时,信号流向线等效为导
线。图1 - 7表示的是信号流路径的用法。单元A的输
出标号为X,通过传输线传到单元B的输入。图中
各比特从单元A发送到单元B在时间上是以顺序的
方式进行的。我们称之为串行传输方式。
图1-7 连接两个单元的串行数据流路径
在许多系统中,我们的主要任务是处理二进制数。在此类型的设计中,同时传输一个字
中所有各个数据位会很方便,我们称之为并行传输方式。并行信号流路径只是简单地由几个
分开的串行路径组成,每个串行线用于传输一个b i t。4 b i t的并行传输链的主要概念如图1 - 8所
示。此概念可扩展到任意位数。
图1-8 并行数据流连接
当我们画信号流程图时,两根信号流向线常常相互交叉,所以有必要将两根信号线相连
与两根信号线完全隔离的情况区分开。这是通过图1 - 9所示的“点”来实现的。图1 - 9 a中,两
根线是隔离的,其中X在水平线上, Y在垂直线上。图1 - 9 b表示的是两根线相连接的情形,所
以两根线的信号都是变量X。
图1-9 连线画法规则
在数字系统设计中,我们将小的单元连接起来产生较大的功能单元。图1 - 1 0所示的图片
表示的是一个商用的集成微处理器芯片。每一块芯片都设计成来实现某一特定的功能集;
整个系统通过将各块芯片联结在一起而产生。
12 数字系统设计基础教程
下载
输入A , B , C
单元
输出f( A , B , C )
图1-6 单元的概念
单元A
传输线
单元B
单元A的输出单元B的输入
单元1 单元2
a )没有连接b) 两线相连
这是由IDR(Integrated Device Te c h n o l o g i e s )公司为本书提供的其O r i o nT M6 4位微处理器的显微照片。
图1-10 微处理器芯片的照片
此概念的另一个例子如图1 - 11所示,图中
几个单元用于产生一个多输入、多输出的系
统。注意到它还包括一系列控制信号(位于
图的顶部);控制位使我们可以在不同的情
况下改变单元的功能。用单元作为构造模块
的概念称为层次设计。此概念为我们分析和
设计复杂的数字系统提供了一种构造技术。
数字网络的设计有两个不同的方法:
• 自顶向下设计。此方法首先确定大规模
系统的技术要求,然后选择构造系统所
需的单元。这些单元可能很复杂,并且
通常由较小的、更基本的单元组成。
• 自底向上设计。正好与自顶向下设计相反。此方法用基本的单元构成比较复杂的单元,
较复杂的单元又为更为复杂的功能的实现提供基础。
我们将讨论位于自顶向下及自底向上方法之间某处,就是所说的“半路”。我们将不采用
任何特别的基本原理,但采用的方法将针对于目标的各个方面并有利于理解整个领域的背景。
学好二进制数和代数的详细内容是至关重要的,因为它构成所有数字系统的基础。然而,现
代数字系统的结构和运算可能极其复杂。当我们研究大系统时,新的变化和条件将超过许多
对底层而言是很重要的条件。
层次关系如图1 - 1 2所示。在最高(系统)层次中,逻辑框内部结构是无关紧要的。在顶层只
有整体功能是我们关心的对象。若我们将范围向下展开一层,我们就可以得到关于系统内部
第1章数字系统的概念13
16KB
数据高速缓存
浮点单元
64-bit
数据路径控制
系统
接口
存储器管理
单元控制
键相环
整数单元
64-bit
数据路径
16KB
标示&控制指含高速缓存
控制信号
输出
输出
输入
输入
图1-11 通过将多个单元连结在一起形成系统
下载
组成的更多信息。在单元层次,图中画出了完成更为基本操作的、比系统更小的模块。在下
一层次中表示,大的单元被分解成更为基本的单元,所以更多的细节变得透明。在器件层次,
我们的兴趣直接关注于用于构成基本单元的基础的“构成模块”。该图表示了层次方法如何工
作。有时你只关心复杂单元的总体功能,而在另一些时候,你可能需要理解构成基本单元的
每个基本元素。不同层次关注的方面不同,并且层次的运算是从底层嵌套到顶层,这就是层
次设计方法功能强大的缘由。值得注意的是图中表示的只是个别的层次。对于特定的问题,
其观察点可根据问题的需要来定义。
图1-12 设计层次中的不同级别
1.7 系统原语
原语是可以多次使用以产生整个单元的基本函数。根据系统复杂度的不同,原语有几个
不同的有用的层次。其中的一些层次简要描述如下,它们用于讲解一些基本概念。不要担心
其细节的操作,这就是本书的任务。
时钟
我们讨论的第一个概念是时钟及时钟信号。此信号周期性地从0变化到1,并从1变化到0,
如图1 - 1 3所示。时钟用于为数字网络内部的定时操作提供参考。它使我们可以同步复杂网络
14 数字系统设计基础教程
下载
控制信号
控制信号
控制信号
控制信号
输出
信号
顶层
系统级
单元
基本单元
器件级
底层
输出
信号
输出
信号
输出
信号
输入
信号
输入
信号
输入
信号
输入
信号
内部的操作,使得数据的移动更易于跟踪。时钟用周期T来定义,而周期是一个完整循环所需
的时间;注意T的单位为s。时钟的频率定义为
是很有用的,它有严格的单位( 1 / s )。频率f
通常用单位H z (赫兹)表示,所以1 H z = 1周期/ s。
时钟频率是个重要的参数。它是系统运
算速度快慢的量度。在许多数字系统中,增
加时钟频率将导致按比例增加系统每秒进行
运算的数目。即使不是这种情形,时钟频率
也是期望一个单元完成某一特定任务速度快慢的量度。
例1 - 8
某一时钟信号的频率为5 0 M H z,其中1 M H z ( 1兆赫)等于1 06H z,或1 0 0万赫兹。计算其时
钟周期T。
时钟周期可从下式得出:
或T= 2 0 n s,其中“ n s”为一个纳秒,而1 n s = 1 0- 9s。其它有用的时钟比例因子有毫秒“ m s”
( 1 m s = 1 0- 3s )和微秒“ms”( 1ms = 1 0- 6s )。
逻辑门
根据逻辑运算的定义,逻辑门有多个“输入”位并产生一位“输出”。图1 - 1 4所示的是一
个逻辑门的例子,其中A和B为输入,f 是输出。数学上,我们将f 写成是A和B的函数,用f =
f(A, B)来表示。其含义是f 的值(要么是0,要么是1)是由输入变量A和B(两者的值也限于0
或1)决定的。数据的“流向”从输入经过逻辑门然后从输出读出。
图1-14 数字逻辑门的例子
存贮器
存储单元用于捕获并保持二进制变量的值。存储单元的简图如图1 - 1 5所示。其输入标为D,
输出标为X。存储单元的操作十分简单。假设输入值为D= 1,那么“1”就会存储在存储单元
中,在术语上这也称为写入这一比特或加载此单元。一旦数据存贮在单元之中,就可从输出X
端进行访问(或读出)。时钟输入用来使操作与系统的其他部分同步。它的含义为,读和/或
写操作只能发生在时钟信号定义的某一时刻进行。
寄存器
寄存器是可用来存储多个字的一个存储单元模块。一种8 b i t的并行寄存器如图1 - 1 6所示。
经过时钟信号的同步,它充许对8 b i t字进行并行的加载和读出。
第1章数字系统的概念15
( 1 - 3 5 )
s ( 1 - 3 6 )
周期
t(秒)
图1-13 时钟信号
输入输出
a) 逻辑门b) 真值表
下载
图1-15 一个存储单元可存储一个数据位的值图1-16 用于存储整个二进制字的寄存器
1.8 量度
数字系统工程涉及到用已经定义的一套输入参数来构造一个完成特定任务的数字网络。
设计的挑战性表现在通常有多种解决问题的方法。但是,由于一个或多个特定的特征,我们
常常发现一种方法优于另外一种方法。
为了比较不同的设计解决方案,我们引入了量度的概念。通常,量度是一个用于不同场
合,并对不同场合作出比较的测量单位。量度的一个常见的例子是米尺测量中所用的长度。
但在解决问题方面还有许多其他有用的量度。
时间量度
高速计算中,完成计算的时间间隔通常是个至关重要的参数。因而在数字逻辑设计领域
时间量度是相当重要的。我们感兴趣的时间间隔与所研究的场合有关。在最低的层次上,时
间量度就是逻辑信号通过一个基本逻辑门的时间延迟,此延迟将影响整个系统的定时。另一
方面,系统设计者更为关心逻辑网络在完成某一特定系列任务的总体速度,比如运行程序。
体积
现代数字系统设计中,大部分电子仪器都是以通常称为计算机芯片的材料为基础。计算
机芯片是集成电路的通俗的名称,它是用微电子领域的技术制造在微小硅片上的电子网络。
通常,我们希望制造出密集封装的数字集成电路。其中的一个例子是微处理器,它是制造在
一边长度通常小于2 c m的硅片上的单个芯片。
体积是一个重要参数有两个原因。首先,高密度的集成使得集成电路物理上更小,故更
容易用这些芯片制造出大的系统。第二个原因是,体积小就更为精巧。电子网络的开关速度
与环绕芯片的移动电子有关。电子的运动速度受限于硅片上的原子,所以我们可以通过缩短
运动路经来加速信号的传输。
电功耗
所有的电子网络都要消耗电能,并由此导致发热。在老式的大型主机中,散热问题十分
严重,以至于需要放置在专门的空气冷却室中。这在计算机的早期是完全可以接受的,因为
早期的计算机是如此巨大因此总是需要整个房间。然而微电子学改变了这一切。现在十分小
的盒子能提供强大计算能力已成为可能。
“上电”,也就是通过电源插座连接到电源后的任何时间,数字电子电路就将消耗电能。
16 数字系统设计基础教程
下载
输入字
输入字
时钟
存诸器
单元
输入(1 bit) 输出
也使用其他材料,但它们相对于硅而言要少见得多。
还有,数字网络每做一个决定就要消耗附加的能量。电功耗至关重要有两个原因。首先,我
们必须关注电子设备的过度发热,因为这将引起系统不稳定并最终导致系统失效。其二,便
携式系统如笔记本计算机是靠电源供电的,低功耗电路可使我们在对电池重新充电之前工作
更长时间。
1.9 本书的层次安排
本章我们讨论了涉及数字逻辑系统的一些概念。其中最基本的观点就是我们采用的是二
进制数制系统,在此数制系统中只有两个数字0和1。为了建造功能强大的数据处理系统,我
们将n b i t 二进制位分成组来构成二进制字,然后通过编码和解码为系统的内部和外部提供字
的意义。
本书以层次设计概念为基础,据此,我们可根据系统在某一时间重要的细节来确定在不
同层次上来对系统进行观察。由于每个复杂的系统是从单个的二进制位开始而产生的,所以
将系统分析分解成多个层次是有意义的。层次方法使我们可以“放大”系统以研究其细节,
并可“缩小”整个系统来检查整个系统的行为。需要记住的重要一点是,层次的每个级别仅
仅是对同一网络的不同观察方法。我们可以从底层开始,并从简单到复杂,逐步向上完成设
计,或者也可以从顶层入手,逐步向下完成设计。每个顶层都可能与其他的所有层次相联系。
有时这种联系很明显;而其他时候这种联系可能因细节问题而变得模糊。
本书选用的作为基准的层次如图1 - 1 7所示。最高的层次级别是系统,我们将其定义为
“顶层”。例如,这一层次级别可以是整个计算机。往下研究,我们到达称为逻辑单元的层次
级别。逻辑单元是完成特定功能的,比如代数加法,相对复杂的逻辑模块。逻辑单元由逻辑
门构成,而逻辑门是层次中的下一个级别。逻辑门常被当作数字网络中最基本的构造模块,
第1章数字系统的概念17
下载
项层
系统
系统
逻辑单元
逻辑门
CMOS电路
硅片IC
底层
图1-17 本书使用的层次级别
我们将学习整个基于逻辑门行为的代数。再往下一层次级别我们将到达C M O S(互补金属氧
化物半导体)电路。在这一层次级别中,我们将看到逻辑门是如何用称为晶体管的电子开关
构成的。最后,最低层次级别就是硅片I C,其中I C是单词首字母的缩写词,表示的是集成电
路(其读法是只重复其字符)。集成电路在通俗的文档中称作“芯片”。硅片I C表示了是我们
所知道的数字网络的物理设计,它是此处所采用的层次描述的“底层”。还有两个其他的观察
点,分别称为V H D L和硬件,都可用于描述所希望的任何层次级别。V H D L是可用于模拟数字
设计的一种形式语言,而硬件指的实际是用于制造电子系统的电子器件和部件。
本书的论述实际上开始于第2章的数字逻辑门及二进制数,此观察点位于层次的中间级别。
它为我们在层次级别中向上或向下进一步研究提供了基础。更为高级的逻辑设计将在第3章阐
述。一般的硬件概念将在第4章介绍,而第5章将介绍V H D L有关的形式体系。前5章主要是讲
述重要的概念。
此类书籍中,第6章的独特之处在于它专门用于描述在称为C M O S的技术中如何用晶体管
来实现逻辑门。C M O S电路常用于设计复杂网络,比如微处理器中所用的逻辑网络,所以值
得认真学习。另外, C M O S提供了到最低层次的简易转换,在最低层次上电路是由小段的硅
片制造的。将逻辑电路转换到硅片的过程称为物理设计,这将在第7章中介绍。这些讨论将把
我们引导向高密度逻辑芯片的学习和理解。这将把我们带到层次的底层。
第8章代表了处理正常情况的变化。本章着重讲述几个在许多系统中很有用的单元的设计
和构成。第9章继续停留该层次级别,这一章对存储器电路进行了详细的论述,也就是说,存
储器是可以存储二进制值的数字单元。虽然这两章都着重论述数字逻辑单元,但V H D L、
C M O S电路及硅片I C的联系在我们讨论中仍是一个完整的部分。本组论题的最后一个部分是
时序电路,它在第1 0章中论述。
本书的最后着重讲述的是系统层次,研究的是计算机及计算机结构,第11章讲述如何用
数字逻辑构造模块构造大的器件,以及这些器件如何相互连接在一起构成计算机。第1 2章将
这些概念向前推进一步,讲述简单系统如何扩展和发展成今天的高性能系统。
为帮助你确定讨论所在的层次级别的大概位置,本书的一些地方提供了代表不同层次级
别的图标。我们的讨论从逻辑层次级别开始,该层次级别用图1 - 1 8所示的逻辑门图标表示。
电路和晶体管层次级别用图1 - 1 9所示图形表示,图中所示的是N O T逻辑门的电路。在最低层
次级别,我们讨论的是硅片上的晶体管,它用图1 - 2 0所示的形状奇特的图标来表示。我们选
择它是因为它是硅晶芯片上的晶体管。
随着向逻辑层次级别上面的层次级别前进,数字网络变得很复杂。在此情形下,所用单
元的图标称为多路复用器( M U X),如图1 - 2 1所示。最后,在最高的层次上,我们将采用图
18 数字系统设计基础教程
下载
图1-18 标识数字逻辑中
一个部件的图标
图1-19 表示电路和CMOS
晶体管论述的图标
图1-20 与芯片相关的材料的
晶体管布局的图标
1 - 2 2所示的系统图标,图中标识C P U是中央处理单元的简称,它是提供所有计算和数据处理
电路的系统的一个部件。值得注意的是,层次的最高级别可观察整个系统的外部特征。它们
是由单元构成的,单元由逻辑门组成,逻辑门用晶体管构成,而晶体管是制造在硅片上的器
件。换句话说,层次各个级别是相互嵌套的。记住层次的特点有助于我们理解数字系统设计
的所有重要的因素。
图1-21 中等复杂单元论述中所用的多路复用的图标图1-22 系统层次论述中的CPU图标
1.10 问题
1. 下面二进制字中,各个组合中最大的数是多少?
(a) X=x1x0
(b) A=a4a3a2a1a0
(c) Y=y5y4y3y2y1y0
2. 个人计算机有如下容量的系统内存,请问各有多少比特存储器?
(a) 16MB
(b) 64MB
(c) 256MB
3. 桌面计算机的磁盘存储设备宣称可保存8 . 1 G B数据,请问:
(a) 它共有多少比特?
(b) 它可保存多少个3 2 b的二进制字?
4. 假设你想建立一个编码方案来表示指南针的如下方向集: N, S, E, W, NE, NW, SE, SW。
请用必需的比特数来定义一个称为d i r e c t i o n的二进制字,并建立一个编码/解码表格。你如果
想在方向集中另外加入N N W, NNE, SSW, SSE四个方向,必须做哪些修改?
5. 一个绘画商店宣称有4 3种不同的素描档板,我们可用来描述这些不同档板的二进制字
s h a d e _ o f _ w h i t e的位数是多少?如何处理没有用上的二进制组合?
6. 将下列4 b i t二进制数转换成十进制值:
(a) W= 0 1 0 1
(b) X= 11 0 0
(c) Z= 1 0 0 1
7. 将下列二进制数转换成十进制值:
(a) 101010
(b) 011 0 11
(c) 11 0 0 0 1
(d) 011 0 11
8. 将下列8 b i t二进制数转换成相应的十进制值。
第1章数字系统的概念19
下载
多路器
中央处
理单元
(a) A=01010101
(b) B=11 0 0 11 0 0
(c) C=10100011
9. 建立一个将16bit 二进制字转换成十进制的通用表格。
10. 将下列1 6 b i t字转换成十进制值:
(a) 0101 1000 1110 1010
(b) 0100 1101 0001 0100
(c) 1000 1000 1000 1000
11. 将下列3 2 b i t字转换成十进制等效值
(a) 0001 1111 0101 1010 1100 1100 0110 1010
(b) 0100 0110 0101 1111 0101 1010 0000 0100
12. 将下列基-1 0的十进制数转换成对应的二进制等效值
(a) 8
(b) 14
(c) 23
(d) 36
(e) 18
(f) 9
(g) 16
13. 将下列十进制数转换成各自的二进制等效值。
(a) 32
(b) 42
(c) 76
(d) 67
(e) 95
14. 将下列十进制数转换成对应的二进制等效值
(a) 103
(b) 155
(c) 225
(d) 187
(e) 283
(f) 384
15. 将下列十六进制数转换成二进制形式,然后求其相等的十进制值(记得0x表示十六进
制值)
(a) 0 x1 F
(b) 0 xA 8
(c) 0 x7 B
(d) 0 x6 7
16. 将下列十六进制数转换成二进制形式,然后求其等效的十进制值:
20 数字系统设计基础教程
下载
(a) 0 x1 F 2 0
(b) 0 x0 A B C
(c) 0 x70D2
(d) 0 x8 6 B A
17. 考虑基-1 0的数1 0 0 0,试确定用来表示小于或等于该数所需的最小的比特数。
18. 一个简单的计算器可显示十进制数的最大位数是6位数字,表示这样数字所需的二进
制字的长度是多少?
19. 求下列二进制小数的相应十进制值:
(a) 0.10010
(b) 0.11 0 1 0
(c) 0.01011
(d) 0.10101
20. 将下列二进制数转换成十进制形式:
(a) 11 0 1 . 0 11 0
(b) 1001.0011
(c) 0101.1001
21. 将下列基-1 0的十进制数转换成二进制形式
(a) 0.500
(b) 0.550
(c) 0.625
(d) 0.650
22. 假设我们想用4 - b i t二进制字表示十进制小数0 . 6
(a) 求出与此值最接近的二进制小数值。
(b) 如果我们采用这种表示,其百分比误差是多少?
(c) 用8位二进制表示,重复上面的问题。
23. 对于基- 1 0的数x= 0 . 3 1 4 1,若要求舍入误差小于0 . 3 %,用于表示此值的最小的二进制
字是什么?
24. 一个时钟的周期T= 0 . 3ms,求其频率。
25. 一个时钟的周期T= 1 5 0 n s,求其频率。
26. 已知一个特别的时钟的频率为f= 4 0 0 M H z,求其时钟周期T,试用合适的比例单位,如
毫秒,来给出答案。
27. 比较两个桌面计算机,一个工作的时钟频率为5 0 0 M H z,而另一个的中心时钟为
5 5 0 M H z。若从5 0 0 M H z的系统移到5 5 0 M H z的系统,其时钟周期长度减少的百分比是多少?
28. 研究一个报纸或杂志上的个人计算机的广告,你能用广告上面提供的信息来识别出主
要系统部件吗?其设计中的层次级别是怎样的?
29. 假设把汽车定义为一个“系统”,我们可把层次概念用于汽车,并将它看成由大的基
本单元组成,比如引擎。而大的基本的单元又由更小的部件组成,例如,引擎中的活塞。请
画出汽车的层次模块图。
第1章数字系统的概念21
下载
第1章数字系统的概念
数字系统已经成为日常生活的组成部分。我们的周围可以发现无数个数字硬件的例子:
自动播音器, C D播放机,电话系统,个人计算机以及视频游戏等等,这样的例子似乎无穷无
尽!
本章首先从讲解组成数字系统基础的一些基本概念入手,开始我们对数字网络世界的探
索。我们将学习二进制数制系统和数字系统的构成。
1.1 什么是数字系统
二进制数制系统只使用0和1这两个数字。这些二进制数字称为比特
精确地解释数字系统的组成可以很简单,也可以是一件很困难繁杂的事情,这因我们的
谈话的对象不同而不同。从基本的意义上讲,我们可将其定义为:
• 数字系统是仅仅用数字来“处理”信息以实现计算和操作的电子网络。但是,数字系统
中所用的数字是来自于特别的数制系统,该数制系统只有两个可能的值:该值要么是0,
要么是1。此特征定义了二进制或基-2的数制系统,数字的本身( 0和1 )称为( b i t s )比特,简
称为“二进制数字”。虽然这似乎十分简单,但是由于只使用0和1来完成所有的计算和操
作,所有数字系统的设计实际上是相当复杂的。特别地,数字系统必须完成如下任务:
1. 将现实世界的信息转换成数字网络可以理解的二进制“语言”。
2. 仅用数字0和1完成所要求的计算和操作。
3. 将处理的结果以我们可以理解的方式返回给现实世界。
本书的内容就是讨论我们应该如何完成这些任务。虽然到目前为止此过程听起来似乎很复
杂,但我们将看到,数字系统总可以分解成用来表征和设计系统的小单元(或模块)。图1 - 1将这
图1-1 层次设计的级别
原语单元
用于产生
较复杂的单元
用于产生
更复杂的单元
个观点概念性地表示出来。图中原语单元是系统的基本构成模块。通过对原语单元进行组合可
以构成较大、较复杂的A、B、C单元,而A、B、C单元进一步用于构成更大的X单元和Y单元。
所有具体单元的规模是任意的:其内部可以很简单,也可以很复杂,并且可以由所需的任何
简单的单元组成。这里讲述的方法就是人们所称的层次设计方法,其中简单的数字单元用于
构成较复杂的单元。为了使最终的系统具备所期望的特征,系统的复杂性将会随之增加。
1.2 数字系统的概况
数字系统有几种等效的描述方法。本书将自始至终强调数字系统可以用不同的方式来看
待的观点。而采用的方式是否适合且方便则由手头上的问题来决定。
1.2.1 层次
我们已经注意到,层次概念对于设计复杂的数字系统是很有用的,它使得我们可以从简
单的单元入手,然后逐步构成庞大而复杂的系统。数字系统可以用十分明确定义的层次级别
的集合来描述,而层次级别是独立的值得认真研究的论题。但是,根据我们的方法,我们将
把每个层次级别当成手头上问题的一个可供选择的观察点。这有利于我们理解数字系统的运
算和设计。本书用到的主要层次级别将在下面各段落中加以讨论。
逻辑网络
数字逻辑网络是以二进制数制的行为为基础的。由于二进制变量实际上可以用来表示任
何数据集,因此用二进制来描述任何数字网络是可能的。例如,可以用二进制数来表示音频
的音迹(比如在C D中)、物理计算中的科学数字、基因代码、星系信息或用于古埃及废墟中考
古发掘发现的分类,等等。可以用二进制来描述的场合是无穷无尽的。虽然这在开始时听起
来有一点抽象,但我们将很快学会如何用二进制数来描述逻辑网络,以代替用代数类型描述
的方法。
电子电路
硬件这一术语表示的是数字系统的物理构成。数字系统的物理实现是用电子器件来完成
的。而电子器件用实现逻辑运算的方式控制着电路中电流的流向。这是数字网络在日常生活
中人们最熟悉的形式。比如,当提及计算机系统时,我们通常想象到的是一块电子器件。
实际的数字系统是用数字逻辑设计的,其硬件是用电子器件来实现的。这些概念的融合
起来加以理解是很重要的,因为它表明了理论如何用于构造实际的系统。
形式描述
仅仅采用“语言”范围内定义的描述性的措词来描述数字系统的行为是可能的。此概念
在硬件描述语言( H D L )的发展中已经被正式化。H D L允许我们采用与预定义的规则和语法相
一致的语句来定义逻辑运算。H D L的概念与高级编程语言,如J a v a或C + +等,使用的概念是相
同的,除了它是应用于数字系统的设计和分析的问题不同外。
1.2.2 个人计算机
桌面个人计算机是数字系统的一个极好的例子。当我们把计算机作为一个完整的系统来
描述时,它通常由以下单元或部分组成:
• 主机它包括作为计算机心脏的C P U (中央处理单元)芯片在内的主板。另外,主板上还
2 数字系统设计基础教程
下载
有存储程序和数据的系统存储器,以
及与其它部分进行通信的输入输出电
路。主机的本身包括磁盘存储设备,
主电源及其它辅助部分,比如调制解
调器。
• 键盘键盘是计算机输入的主要设
备,例如命令和数据的输入。只要安
装了合适的软件,鼠标也可以实现输
入的目的。
• 显示器显示器就是计算机用于提供可视化输出的C RT (阴极射线管)。
计算机系统的外观可能类似于图1 - 2。虽然计算机还可能会有其它的外设,但这三个部分
完成了计算机的主要功能。
总体而言,我们可以在多个不同的层次级别上观察此系统。我们可以将它当作一个程序
运行的单个部件,或者我们可能想进一步深入了解其硬件的工作情况。若打开主机,你将看
到组成计算机的许多构成模块。其中较为重要的部分是中央处理单元( C P U )、系统存储部件、
电源、存储设备比如磁盘驱动器,及许多其它的部件。C P U是计算机的“心脏”,它完成了计
算机所有主要的操作。我们可能选择进一步深入地研究每个部件是如何制造出来的。经过艰
苦的跋涉我们将最终进入C P U的内部,在C P U中我们将发现微小的硅片实际上是一个极其复
杂的电子开关的集合。
到目前为止,我们可以做出的最为重要的结论是,构造计算机所用的概念与构造数字通
信系统、宇宙飞船导航系统、工厂生产线的控制、或银行或商业记录的维护等场合所用的概
念是相同的。一旦我们学会了数字逻辑,一个复杂系统的全新世界将在我们的掌握之中。因
此我们将从作为所有数字系统基础的简单的数制系统入手,开始我们对数字系统的研究。
1.3 二进制数的介绍
二进制变量表示的是没有预定义值的二进制数
二进制数制系统是数字设计的基础。本节我们来讨论有关二进制数的属性和用法的一些
基本概念。
首先我们介绍二进制变量A的概念。由于只有两个二进制数字, 0和1,根据定义,我们很
容易理解二进制变量A只能有如下的值
A=0 或A= 1 ( 1 - 1 )
A等于其它的任何值都是不允许的。二进制变量的这种属性使得我们可以定义一个有用的
运算。我们来考虑变量A的值。如果A不等于0,那么A必须为1;与之相反,如果A不等于1,
那么A必须为0。这个简单的论述可用于定义N O T运算,该运算用上划线符号来表示
NOT (A) = -A ( 1 - 2 )
因此有
NOT (0) = 1
( 1 - 3 )
NOT (1) = 0
N O T运算也称为取反,
-A
称为A的补码。
第1章数字系统的概念3
下载
系统主机
显示器
键盘
图1-2 个人计算机的组成部分
一个二进制位只允许我们描述两种可能的值(例如, Y E S或N O ),所以单个二进制变量本
身的应用是很有限的。但是,我们可以用一组二进制位来描述较为复杂的情形。为了理解其
工作原理,假设我们有四个独立的二进制位( b i t ),这四位数分别标识为a3,a2,a1,a0。每个
数据位ai有两个可能的值,0和1,其中i= 0 , 1 , 2 , 3。这样我们就可以构造出一段4 b i t的数据d a t a:
d a t a =a3a2a1a0, ( 1 - 4 )
其中各个数据位的顺序是很重要的,比如a3必须放在左边, a0必须在右边,正如顺序的下标所
示的那样。写成这种形式,我们就把参数d a t a当作具有1 6个不同值一个对象来看待。这1 6个
值为:
data= 0000, 0001, 0010, 0011
0100, 0101, 0110, 0111
1000, 1001, 1010, 1011
1100, 1101, 1110, 1111 ( 1 - 5 )
若我们记住每个数据位的顺序十分重要这一点,所使用的标识是很容易理解的,例如,
d a t a = 0 1 0 1表示的是
a3=0 a2=1 a1=0 a0= 1 ( 1 - 6 )
这些组合可以通过检查加以验证。注意到此数是由四个数据位组成的,而每个数据位有两个
可能的值,所以共有24= 1 6种不同的排列,这样我们就得到了组合的数目。综上所述,虽然每
个数据位只能是0或1,但一段4 b i t的数据d a t a可以用于描述具有1 6种不同可能性的情形。
这种方法可以用于构造任意位数的数组。例如, 8 b i t数据段
Info = X7X6X5X4X3X2X1X0 ( 1 - 7 )
定义了一个具有28= 2 5 6种可能组合的单个对象。类似地,一个1 6 b i t的数组有21 6=65 536个不同
的值,以此类推。只要用足够多位的二进制数组成数组,该二进制数组就可用于表示任何情
形。这就是用二进制数解决现实世界问题的关键所在。
引进一些术语来处理一些二进制数组是很有用的。一组二进制数通常被称为字,而不考
虑它使用的二进制数的位数。在前面的例子中, d a t a是4 b i t的字,而I n f o是8 b i t的字。根据系统
的不同,一个字中b i t的位数可能很重要,也可能不重要。在微计算机领域,字节指的是8 b i t
字。
讨论二进制系统时,我们经常引进一些2的幂次方的缩写,概括如下。
由于这些缩写是以二进制数制系统为基础的,因此这些数的前缀与使用在通常的基- 1 0的
数所对应的值不同。例如,二进制数制系统中, 1 K b表示1 0 2 4 b i t,而在常规的用法中(比如在
4 数字系统设计基础教程
下载
字长数值的数目数值的缩写
物理学和电子学中),1 K = 1 0 0 0 = 1 03。与之相类似,在二进制数制系统中
1Mb = 1024 Kb
而在常规的用法中, 1 M等于1 06=1 000 000,简称为1 0 0万。虽然现在可能会混淆这些概念,
但你很快会习惯的。另一个需要指出来值得我们注意的是比特( b )和字节( B )之间的区别。由
于
1B = 8b
所以将它们区别开来是很重要的。例如个人计算机中的主系统存储器的容量是以它含有的字
节数来确定的。
1.4 数据的表示
通过将二进制字定义为合适的方式,我们可以用二进制字来表示我们想要表示的任何事
物。例如,假设我们想用二进制字来描述左、右、前、后四个方向,由于22= 4,所以只要用
2 b i t字就可以描述这四个方向。我们可以用二进制字D = D1D0来产生方向,其中D1和D0是独立
的数据位。一旦定义了二进制字D,我们就可以定义如下关系:
D = 00 => 左
D = 01 => 右
D = 10 => 前
D = 11 => 后
这些关系的定义完全是随机的。但是,一旦定义完成后,我们就希望能够保持其一致性,
这样我们就知道了D的不同值的含义。例如D= 0 1解释成“右”。即使这些数据位本身与方向之
间没有联系,但这种定义为两者提供了合适的联系。
给二进制数组定义特定含义的过程称为编码。它可用于我们所希望的任何场合。我们
可以通过定义来表征任何对象的集合,但数字和字母最常用于编码。与之相反的过程,即
把二进制数解释成应用的过程称为解码。在此操作中,解码的信息可用于提取二进制字的
含义。我们必须用编码的方案来对二进制字进行解码,否则解码得到的将是一组毫无意义
的数据位。
编码和解码可以看成是有一本字典在英语和二进制字之间进行翻译。对某一对象进行
编码时,你将在字典中找到二进制的等效物。当你想把该对象返回其原始的形式时,你必
须查找它的二进制字并找出它在英语中的含义。这是一个十分乏味的过程,所以编码/解
码的信息通常包含在可以完成自动翻译的数字逻辑网络中。编码和解码的过程用图形的方
式表示在图1 - 3中。在编码单元中,信息被转换成二进制字,数字网络用二进制来处理数
据并产生二进制的输出。此输出被传递到解码器,解码器对其进行翻译并返回用户可以识
别的形式。
图1-3 编码和解码的过程
第1章数字系统的概念5
下载
处理数据的
数字网络
输入的二进
制表示
二进制输出
1.5 二进制数及十进制数
虽然我们生活在十个数字( 0到9 )的世界中,但我们可以很容易地将这些数字转换成可以用
逻辑门进行基本算术运算的二进制形式。在运算完成之后,最终的结果必须转换回其原来的
数字形式。这些转换是通过数制理论来完成的。
首先我们来考虑数制系统的第一个概念,即基或基数r;r表示的是可以用来计数的数字个
数。我们说平常的数制系统是基- 1 0的,因为该系统包含有1 0个数字:0、1、2、3、4、5、6、
7、8、和9。由于二进制数制只有两个二进制数字, 0和1,因此该性质定义了一个基- 2 (或二
进制)的数制系统。为了将一个数从十进制转换为基- 2的数,以及将基-2的数转换成十进制数,
我们必须使两个数制系统之间有一个固定的关系。为了避免产生混淆,我们用下标把基- 1 0的
数N1 0与基-2的数b2区别开来。但是,如果从数的本身长度就可以清楚地看出其基的值时,下
标就可以忽略。例如,我们立即可以认出数字4 2不是基-2的数,因为它的两个数字都超出了
二进制的范围。
1.5.1 二进制到十进制的转换
现在我们来仔细地讨论如何用二进制数字来表示日常的基- 1 0的数字0到9如果你想用不同
的二进制数来分别表示每一个十进制数,那么至少需要用4 b i t二进制字;因为23< 10 < 24。至
此我们可以构造4 - b i t二进制字
N = N3N2N1N0
来表示基-1 0的数字。虽然在编码过程中二进制字定义的分配是随机的,但是两个数制系
统之间的转换必须遵循特定的规则以便与我们所设置的理论相一致。特别地,在基- 2的数到
基-1 0的数的转换的过程中,我们必须按照如下的表达式来解释此二进制数:
N = N3N2N1N0
= N3×23+ N2×22+ N1×21+ N0×20 (十进制) ( 1 - 8 )
= N3×8 + N2×4 + N1×2 + N0×1 (十进制)
上式表示二进制数Nj有一个基-1 0的加权值2j。
例1 - 1
将4 b i t二进制数N = 011 0转换成基-1 0的等效值。应用上面的公式可以给出:
N = 011 0
= (0×8)+ (1×4)+ (1×2)+ (0×1) (十进制)
= 4+2 (十进制) ( 1 - 9 )
= 6 (十进制)
上式表示二进制数0 11 0等于十进制的6。作为另一个例子,采用相同的过程,二进制字
N= 1 0 11可以有如下所示的十进制值
N = 1011
= (1×8)+ (0×4)+ (1 ×2)+ (1×1) (十进制)
= 8+2+1 (十进制) ( 1 - 1 0 )
= 11 (十进制)
这个通用的公式可用于转换任何4 b i t的二进制字。特别地,我们可以直接用此公式构造出
6 数字系统设计基础教程
下载
从0到1 5的计数序列,如图1 - 4所示。注意在数制系统中我们总是从数字0开始的。
将这种关系扩展到字长更大的二进制字十分简单。一个n比特的二进制字有2n种不同的
组合,所以它可用于表示从0到( 2n- 1 )的十进制数。第k位数在十进制中的加权值为2k。例如,
一个8 b i t的二进制字共有28 = 256个不同的排列,根据下面的方程,它可以表示基- 1 0的数0
到2 5 5。
B = b7 b6 b5 b4 b3 b2 b1 b 0
= b7×27+b6×26+b5×25+b4×24 + ( 1 - 11 )
b3×23+ b2×22+ b1×21+ b0×20
其中我们注意到加权因子为2的幂次方:
27= 1 2 8;26= 6 4;25= 3 2;24= 1 6;23= 8;22= 4;21= 2;20= 1 ( 1 - 1 2 )
由于十进制数是通过首先将二进制字中0或1乘以各自的加权因子然后再相加而得到的结
果,因此我们设计出一种将十进制数转换成二进制数的简便方法,该方法如下面的表格所示。
加权值1 2 8 6 4 3 2 1 6 8 4 2 1
二进制位b7 b6 b5 b4 b3 b2 b1 b0
使用该表格只需简单地注意到在给定的位置中0对十进制的值没有影响,而位置为1时应
加上其加权值,所以十进制数就是二进制字中所有“ 1”的位置对应的十进制加权值之和。
图1-4 十进制与二进制系统中的部分等效数
例1-2
考虑8 b i t二进制数
X = 010111 0 0
为了得出它的十进制等效值,我们使用上面的表格并将求和得到
X = 0+64+0+16+8+4+0+0
= 92 ( 1 - 1 3 )
此方法可用于任何8 b i t二进制字。对于较长的二进制字,较高阶的加权因子29、21 0等必须计算
出来以扩展上面的表格,一般而言,对于n - b i t的二进制字
A = An- 1An- 2 ... A2A1A0 ( 1 - 1 4 )
第1章数字系统的概念7
下载
十进制二进制
它的十进制等效值可以由下面的公式计算得出
A = An- 1×2n- 1+An- 2 ×2n- 1+ ... + A2×22+A1×21+A0×20 ( 1 - 1 5 )
这种将二进制字转换成基- 1 0的值的方法使得我们可以对数字系统的输出进行解码。编码过程
提供了与解码过程相反的功能。
1.5.2 十进制到二进制的转换
将基-1 0 (十进制)的数编码成等效的二进制数比将二进制数转换成十进制数需要做更多的
工作。本节将介绍一种可以完成这种操作的称为“逐次相除”的方法。
考虑十进制数N。为了求出它的等效的二进制字b,我们将它逐次除以2,并且在每次除法
后查看其余数R;此余数将是b中的一个二进制位。这很容易用例子来说明。
例1 - 3
我们来讨论“逐次相除”方法如何用于将基- 1 0的数1 91 0转换成它的二进制等效值。首先,
我们将1 9除以2得到
余数R0= 1在二进制表示中是最低有效位( L S B );根据定义, L S B是加权值最低的位,其加权值
为20= 1。
下一步,我们将第一步的结果除以2并查看其余数R1:
以同样的方式继续相除,我们得到如下结果
当除的结果为0时,此算法结束;其余数定义了二进制字的最高有效位( M S B ),M S B的加权值
最大,在此例中, M S B的加权值为24。那么1 91 0的等效的二进制表示采用余数的各位来构造,
写出为
b = R4R3R2R1R0
= 1 0 0 11 ( 1 - 1 9 )
此结果可以通过将1 0 0 112逆变换(解码)回基-1 0的数来加以验证。这种方法十分常用,也很容
易记忆。该方法有两点很重要,它们是
• 第一个余数为二进制字中的L S B (最低有效位)。
• 最后的余数为M S B (最高有效位)。
例1 - 4
我们来将十进制数5 6转换为二进制的形式。转换步骤的顺序为
8 数字系统设计基础教程
下载
余数R ( 1 - 1 6 ) 0=1
余数R ( 1 - 1 7 ) 1=1
( 1 - 1 8 )
余数R2=0
余数R3=0
余数R4=1
余数R ( 1 - 2 0 ) 0=0
上述结果表示5 610 = 111 0 0 02,这可通过逆运算来验证。
1.5.3 小数
虽然许多程序中只使用整数值,但很多计算却用到小数。为了讨论小数,我们将二进制
小数写成如下形式。
b= 0 .b- 1b- 2b- 3. . . ( 1 - 2 1 )
通过整数解码公式进行扩展,我们可将其转换成基- 1 0的小数F1 0,其解码方法是:用相应的2
的负次幂来对小数点右边的各位进行加权。其通常的形式的转换形式为:
F = b- 1×2- 1+b- 2×2- 2+b- 3×2- 3+ . . .
= b- 1×( 0 . 5 ) +b- 2×( 0 . 2 5 ) +b- 3×( 0 . 1 2 5 ) + . . . ( 1 - 2 2 )
由于2-x小于1,我们容易知道上式的值F1 0<1也成立。
例1 - 5
将二进制小数b= 0 . 1 0 11 0转换成基-1 0的相等值。我们有
F = b- 1×2- 1+b- 2×2- 2+b- 3×2-3+ b- 4×2- 4+ b- 5×2- 5
= 1×( 0 . 5 ) + 0×( 0 . 2 5 ) + 1×(0.125)+ 1×( 0 . 0 6 2 5 ) + 0×( 0 . 0 3 1 2 5 )
= 0.5+0.125+0.0625
= 0.6875 ( 1 - 2 3 )
故0 . 1 0 11 02 = 0.68751 0。
为了将十进制小数转换成二进制数,我们对用于整数的方法进行改造,采用逐次相乘方
法。我们从基- 1 0的数F开始,将其乘以2并检查其结果,其形式为m=b . x x x x x,其中b= 1或b= 0
即为二进制数字。如果m< 1,那么我们再将其乘以2并将其作为下一个结果。另一方面,如果
m≥1,那么我们先将其减1并将差值乘以2。
例1 - 6
考虑十进制数0 . 6 8 7 51 0,将它乘以2得
( 0 . 6 8 7 5 )×2=1.375 所以b- 1= 1 ( 1 - 2 4 )
由于1 . 3 7 5大于1,将其减1得到( 1 . 3 7 5 - 1 . 0 0 0 ) = 0 . 3 7 5,接着在下一步中我们用此数得到
( 0 . 3 7 5 )×2=0.75 所以b- 2= 0 ( 1 - 2 5 )
继续上述步骤,我们得到
( 0 . 7 5 )×2=1.5 所以b- 3= 1 ( 1 - 2 6 )
这样必须再将上面的结果减去1,( 1 . 5 0 - 1 . 0 0 ) = 0 . 5,以进行下一步运算:
第1章数字系统的概念9
下载
( 1 - 2 0 )
余数R1=0
余数R3=1
余数R4=1
余数R5=1
余数R2=0
( 0 . 5 )×2=1.00 所以b- 4= 1 ( 1 - 2 7 )
若将其减去1,其差值为0,表明转换的算法已完成。所以
0 . 6 8 7 51 0 = 0.b- 1b- 2b- 3b- 4
= 0.1011 ( 1 - 2 8 )
即为最后的答案。
舍入误差
虽然二进制数可用于表示基- 1 0的十进制值,但十进制到二进制的转换精度由基- 2字中所
用的位数来决定。由此引出的问题称为舍入误差。
为理解此问题,考虑形式为0 .x- 1x- 2x- 3x- 4的4 b i t小数。通常,它可用于表示基- 1 0的数X:
X = 0.x- 1x- 2x- 3x- 4
= x- 1×(0.5)+ x- 2×(0.25)+ x - 3×(0.125)+ x- 4×( 0 . 0 6 2 5 ) ( 1 - 2 9 )
而其实际值与x3到x0的各位值有关。用上面的公式来计算两个二进制字Xa= 0 . 111 0和Xb= 0 . 1111
相应的十进制数。这两个二进制字的等效值为:
Xa = 0.8750
Xb = 0.9375 ( 1 - 3 0 )
所允许的最小分辨率为0 . 0 6 2 5,故用4 b i t二进制小数不可能表示出这两个十进制值之间的数。
例如,十进制小数0 . 9 2 7 0不能用0 .x- 1x - 2x- 3x- 4形式精确表示出来。其可能的最接近的值将为
Xb= 0 . 1111 = 0 . 9 3 7 5>0 . 9 2 7 0,由此引入的误差为:
克服这种误差的唯一的办法是增加用于表示的二进制数的位数。但是,这将导致二进制字很
长和/或字太长不方便使用。为理解此论述,考虑一个5 b i t的二进制字Xc= 0 . 111 0 1。它的十进制
值为0 . 9 0 6 2 5,仍小于0 . 9 2 7 0。在此二进制字上再加上一个二进制位构成Xa= 0 . 111 0 11,其十进
制值为0 . 9 2 1 8 7 5,如此往复。由于此类型的舍入误差在某些应用中是个问题,其他处理小数
的方法已经被发展起来。最为常用的方法是采用一种称为浮点表示的二进制组;浮点表示有
些复杂,我们将在第11章中加以讨论。
1.5.4 十六进制数
十六进制数制系统是一个基- 1 6的系统。它使用以下1 6个符号作为基本数字:
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , A , B , C , D , E , F ( 1 - 3 2 )
注意这里的A , B , C , D , E和F是用作数字,而不是一般情形的字母。在实际应用中也使用
其小写形式(a , b , c , d , e , f)。为简单起见,在通常用法中这些数字常被当作“十六进制”数字。
一个基-1 6字由按特定顺序排列的十六进制数字组成,其最高有效位在左边,而最低有效位
在右边。例如, H = 304E是一个有效的十六进制字,其中3是最高有效位数字, E是最低有
效位数字。为得到4-数字的十六进制字H = h3h2h1h0的基-1 0(十进制)的相等值N,我们采
用公式:
N=h3×1 63+ h2×1 62+ h1×1 61+ h0×1 60 ( 1 - 3 3 )
此公式可扩展到任意长的十六进制字的情形。为了将基- 1 0的数转换成十六进制,采用逐次除
以1 6的方法。图1 - 5所示的表格提供了十六进制、十进制和二进制数之间的转换关系。
10 数字系统设计基础教程
下载
( 1 - 3 1 )
图1-5 十六进制数制系统使用数字0到F
在数字逻辑的讨论中,我们通常限制用十六进制数来表示4位二进制字的用法。这种用法
将极大地地简化数的标识,所以值得我们努力去掌握。从表中我们容易看出十六进制数字和4
位二进制字之间的等效值。还有,通过从右边开始每4位分成一组,此方法可应用于任意长度
的二进制数。
例1 - 7
我们以1 6位二进制字1 0 0 111 0 0 111 0 0 1 0 1为例入手。将此数分割成4位一组,通过将每组直
接转换成独立的十六进制数字,我们得到
1001 1100 1110 01012 = 9C E51 6
= 0x9CE5 ( 1 - 3 4 )
上式中我们引进了另一种标识“ 0x nnnn”将n n n n标识为十六进制数。
1.6 单元和层次
为构成数字系统,我们将采用称为单元( c e l l )的基本构造模块。通常,单元提供了系统设
计中所需的一些有用的运算。系统的本身通过将单元按适当的顺序连结来构成以完成所有希
望得到的性能。
在表示数字网络所使用的单元及单元连结关系上,采用图形表示是很有用的。这种表示
的图形称为逻辑图,它们为数字网络的分析和设计提供了一个有用的观察点。单元的概念如
图1 - 6所示,它以二进制变量为A,B和C为输入,而产生的输出函数为f (A,B,C)。单元的输入
和输出点称为端口;单元通过端口同其他单元相连。
作为函数的例子,假设我们希望有一个单元,如果该单元有且只有一个输入为1,其输出
为f= 1,否则f= 0。此函数可描述为:
f=1 如果A= 1或B= 1或C= 1;
f=0 其他
第1章数字系统的概念11
下载
十六进制十进制二进制
标识十六进制的标志0 x是C语言中使用的规范。
正如后面我们将看到的,布尔代数可用于产生实现这种函数的方程式。
为产生较大的数字系统,我们用小的单元构成具有较复杂功能的较大的单元。在逻辑图
中单元间的互连用表示信号流向路径的连线来表示。该连线也称为传输线或简称为互连。当
我们用电子器件构造系统时,信号流向线等效为导
线。图1 - 7表示的是信号流路径的用法。单元A的输
出标号为X,通过传输线传到单元B的输入。图中
各比特从单元A发送到单元B在时间上是以顺序的
方式进行的。我们称之为串行传输方式。
图1-7 连接两个单元的串行数据流路径
在许多系统中,我们的主要任务是处理二进制数。在此类型的设计中,同时传输一个字
中所有各个数据位会很方便,我们称之为并行传输方式。并行信号流路径只是简单地由几个
分开的串行路径组成,每个串行线用于传输一个b i t。4 b i t的并行传输链的主要概念如图1 - 8所
示。此概念可扩展到任意位数。
图1-8 并行数据流连接
当我们画信号流程图时,两根信号流向线常常相互交叉,所以有必要将两根信号线相连
与两根信号线完全隔离的情况区分开。这是通过图1 - 9所示的“点”来实现的。图1 - 9 a中,两
根线是隔离的,其中X在水平线上, Y在垂直线上。图1 - 9 b表示的是两根线相连接的情形,所
以两根线的信号都是变量X。
图1-9 连线画法规则
在数字系统设计中,我们将小的单元连接起来产生较大的功能单元。图1 - 1 0所示的图片
表示的是一个商用的集成微处理器芯片。每一块芯片都设计成来实现某一特定的功能集;
整个系统通过将各块芯片联结在一起而产生。
12 数字系统设计基础教程
下载
输入A , B , C
单元
输出f( A , B , C )
图1-6 单元的概念
单元A
传输线
单元B
单元A的输出单元B的输入
单元1 单元2
a )没有连接b) 两线相连
这是由IDR(Integrated Device Te c h n o l o g i e s )公司为本书提供的其O r i o nT M6 4位微处理器的显微照片。
图1-10 微处理器芯片的照片
此概念的另一个例子如图1 - 11所示,图中
几个单元用于产生一个多输入、多输出的系
统。注意到它还包括一系列控制信号(位于
图的顶部);控制位使我们可以在不同的情
况下改变单元的功能。用单元作为构造模块
的概念称为层次设计。此概念为我们分析和
设计复杂的数字系统提供了一种构造技术。
数字网络的设计有两个不同的方法:
• 自顶向下设计。此方法首先确定大规模
系统的技术要求,然后选择构造系统所
需的单元。这些单元可能很复杂,并且
通常由较小的、更基本的单元组成。
• 自底向上设计。正好与自顶向下设计相反。此方法用基本的单元构成比较复杂的单元,
较复杂的单元又为更为复杂的功能的实现提供基础。
我们将讨论位于自顶向下及自底向上方法之间某处,就是所说的“半路”。我们将不采用
任何特别的基本原理,但采用的方法将针对于目标的各个方面并有利于理解整个领域的背景。
学好二进制数和代数的详细内容是至关重要的,因为它构成所有数字系统的基础。然而,现
代数字系统的结构和运算可能极其复杂。当我们研究大系统时,新的变化和条件将超过许多
对底层而言是很重要的条件。
层次关系如图1 - 1 2所示。在最高(系统)层次中,逻辑框内部结构是无关紧要的。在顶层只
有整体功能是我们关心的对象。若我们将范围向下展开一层,我们就可以得到关于系统内部
第1章数字系统的概念13
16KB
数据高速缓存
浮点单元
64-bit
数据路径控制
系统
接口
存储器管理
单元控制
键相环
整数单元
64-bit
数据路径
16KB
标示&控制指含高速缓存
控制信号
输出
输出
输入
输入
图1-11 通过将多个单元连结在一起形成系统
下载
组成的更多信息。在单元层次,图中画出了完成更为基本操作的、比系统更小的模块。在下
一层次中表示,大的单元被分解成更为基本的单元,所以更多的细节变得透明。在器件层次,
我们的兴趣直接关注于用于构成基本单元的基础的“构成模块”。该图表示了层次方法如何工
作。有时你只关心复杂单元的总体功能,而在另一些时候,你可能需要理解构成基本单元的
每个基本元素。不同层次关注的方面不同,并且层次的运算是从底层嵌套到顶层,这就是层
次设计方法功能强大的缘由。值得注意的是图中表示的只是个别的层次。对于特定的问题,
其观察点可根据问题的需要来定义。
图1-12 设计层次中的不同级别
1.7 系统原语
原语是可以多次使用以产生整个单元的基本函数。根据系统复杂度的不同,原语有几个
不同的有用的层次。其中的一些层次简要描述如下,它们用于讲解一些基本概念。不要担心
其细节的操作,这就是本书的任务。
时钟
我们讨论的第一个概念是时钟及时钟信号。此信号周期性地从0变化到1,并从1变化到0,
如图1 - 1 3所示。时钟用于为数字网络内部的定时操作提供参考。它使我们可以同步复杂网络
14 数字系统设计基础教程
下载
控制信号
控制信号
控制信号
控制信号
输出
信号
顶层
系统级
单元
基本单元
器件级
底层
输出
信号
输出
信号
输出
信号
输入
信号
输入
信号
输入
信号
输入
信号
内部的操作,使得数据的移动更易于跟踪。时钟用周期T来定义,而周期是一个完整循环所需
的时间;注意T的单位为s。时钟的频率定义为
是很有用的,它有严格的单位( 1 / s )。频率f
通常用单位H z (赫兹)表示,所以1 H z = 1周期/ s。
时钟频率是个重要的参数。它是系统运
算速度快慢的量度。在许多数字系统中,增
加时钟频率将导致按比例增加系统每秒进行
运算的数目。即使不是这种情形,时钟频率
也是期望一个单元完成某一特定任务速度快慢的量度。
例1 - 8
某一时钟信号的频率为5 0 M H z,其中1 M H z ( 1兆赫)等于1 06H z,或1 0 0万赫兹。计算其时
钟周期T。
时钟周期可从下式得出:
或T= 2 0 n s,其中“ n s”为一个纳秒,而1 n s = 1 0- 9s。其它有用的时钟比例因子有毫秒“ m s”
( 1 m s = 1 0- 3s )和微秒“ms”( 1ms = 1 0- 6s )。
逻辑门
根据逻辑运算的定义,逻辑门有多个“输入”位并产生一位“输出”。图1 - 1 4所示的是一
个逻辑门的例子,其中A和B为输入,f 是输出。数学上,我们将f 写成是A和B的函数,用f =
f(A, B)来表示。其含义是f 的值(要么是0,要么是1)是由输入变量A和B(两者的值也限于0
或1)决定的。数据的“流向”从输入经过逻辑门然后从输出读出。
图1-14 数字逻辑门的例子
存贮器
存储单元用于捕获并保持二进制变量的值。存储单元的简图如图1 - 1 5所示。其输入标为D,
输出标为X。存储单元的操作十分简单。假设输入值为D= 1,那么“1”就会存储在存储单元
中,在术语上这也称为写入这一比特或加载此单元。一旦数据存贮在单元之中,就可从输出X
端进行访问(或读出)。时钟输入用来使操作与系统的其他部分同步。它的含义为,读和/或
写操作只能发生在时钟信号定义的某一时刻进行。
寄存器
寄存器是可用来存储多个字的一个存储单元模块。一种8 b i t的并行寄存器如图1 - 1 6所示。
经过时钟信号的同步,它充许对8 b i t字进行并行的加载和读出。
第1章数字系统的概念15
( 1 - 3 5 )
s ( 1 - 3 6 )
周期
t(秒)
图1-13 时钟信号
输入输出
a) 逻辑门b) 真值表
下载
图1-15 一个存储单元可存储一个数据位的值图1-16 用于存储整个二进制字的寄存器
1.8 量度
数字系统工程涉及到用已经定义的一套输入参数来构造一个完成特定任务的数字网络。
设计的挑战性表现在通常有多种解决问题的方法。但是,由于一个或多个特定的特征,我们
常常发现一种方法优于另外一种方法。
为了比较不同的设计解决方案,我们引入了量度的概念。通常,量度是一个用于不同场
合,并对不同场合作出比较的测量单位。量度的一个常见的例子是米尺测量中所用的长度。
但在解决问题方面还有许多其他有用的量度。
时间量度
高速计算中,完成计算的时间间隔通常是个至关重要的参数。因而在数字逻辑设计领域
时间量度是相当重要的。我们感兴趣的时间间隔与所研究的场合有关。在最低的层次上,时
间量度就是逻辑信号通过一个基本逻辑门的时间延迟,此延迟将影响整个系统的定时。另一
方面,系统设计者更为关心逻辑网络在完成某一特定系列任务的总体速度,比如运行程序。
体积
现代数字系统设计中,大部分电子仪器都是以通常称为计算机芯片的材料为基础。计算
机芯片是集成电路的通俗的名称,它是用微电子领域的技术制造在微小硅片上的电子网络。
通常,我们希望制造出密集封装的数字集成电路。其中的一个例子是微处理器,它是制造在
一边长度通常小于2 c m的硅片上的单个芯片。
体积是一个重要参数有两个原因。首先,高密度的集成使得集成电路物理上更小,故更
容易用这些芯片制造出大的系统。第二个原因是,体积小就更为精巧。电子网络的开关速度
与环绕芯片的移动电子有关。电子的运动速度受限于硅片上的原子,所以我们可以通过缩短
运动路经来加速信号的传输。
电功耗
所有的电子网络都要消耗电能,并由此导致发热。在老式的大型主机中,散热问题十分
严重,以至于需要放置在专门的空气冷却室中。这在计算机的早期是完全可以接受的,因为
早期的计算机是如此巨大因此总是需要整个房间。然而微电子学改变了这一切。现在十分小
的盒子能提供强大计算能力已成为可能。
“上电”,也就是通过电源插座连接到电源后的任何时间,数字电子电路就将消耗电能。
16 数字系统设计基础教程
下载
输入字
输入字
时钟
存诸器
单元
输入(1 bit) 输出
也使用其他材料,但它们相对于硅而言要少见得多。
还有,数字网络每做一个决定就要消耗附加的能量。电功耗至关重要有两个原因。首先,我
们必须关注电子设备的过度发热,因为这将引起系统不稳定并最终导致系统失效。其二,便
携式系统如笔记本计算机是靠电源供电的,低功耗电路可使我们在对电池重新充电之前工作
更长时间。
1.9 本书的层次安排
本章我们讨论了涉及数字逻辑系统的一些概念。其中最基本的观点就是我们采用的是二
进制数制系统,在此数制系统中只有两个数字0和1。为了建造功能强大的数据处理系统,我
们将n b i t 二进制位分成组来构成二进制字,然后通过编码和解码为系统的内部和外部提供字
的意义。
本书以层次设计概念为基础,据此,我们可根据系统在某一时间重要的细节来确定在不
同层次上来对系统进行观察。由于每个复杂的系统是从单个的二进制位开始而产生的,所以
将系统分析分解成多个层次是有意义的。层次方法使我们可以“放大”系统以研究其细节,
并可“缩小”整个系统来检查整个系统的行为。需要记住的重要一点是,层次的每个级别仅
仅是对同一网络的不同观察方法。我们可以从底层开始,并从简单到复杂,逐步向上完成设
计,或者也可以从顶层入手,逐步向下完成设计。每个顶层都可能与其他的所有层次相联系。
有时这种联系很明显;而其他时候这种联系可能因细节问题而变得模糊。
本书选用的作为基准的层次如图1 - 1 7所示。最高的层次级别是系统,我们将其定义为
“顶层”。例如,这一层次级别可以是整个计算机。往下研究,我们到达称为逻辑单元的层次
级别。逻辑单元是完成特定功能的,比如代数加法,相对复杂的逻辑模块。逻辑单元由逻辑
门构成,而逻辑门是层次中的下一个级别。逻辑门常被当作数字网络中最基本的构造模块,
第1章数字系统的概念17
下载
项层
系统
系统
逻辑单元
逻辑门
CMOS电路
硅片IC
底层
图1-17 本书使用的层次级别
我们将学习整个基于逻辑门行为的代数。再往下一层次级别我们将到达C M O S(互补金属氧
化物半导体)电路。在这一层次级别中,我们将看到逻辑门是如何用称为晶体管的电子开关
构成的。最后,最低层次级别就是硅片I C,其中I C是单词首字母的缩写词,表示的是集成电
路(其读法是只重复其字符)。集成电路在通俗的文档中称作“芯片”。硅片I C表示了是我们
所知道的数字网络的物理设计,它是此处所采用的层次描述的“底层”。还有两个其他的观察
点,分别称为V H D L和硬件,都可用于描述所希望的任何层次级别。V H D L是可用于模拟数字
设计的一种形式语言,而硬件指的实际是用于制造电子系统的电子器件和部件。
本书的论述实际上开始于第2章的数字逻辑门及二进制数,此观察点位于层次的中间级别。
它为我们在层次级别中向上或向下进一步研究提供了基础。更为高级的逻辑设计将在第3章阐
述。一般的硬件概念将在第4章介绍,而第5章将介绍V H D L有关的形式体系。前5章主要是讲
述重要的概念。
此类书籍中,第6章的独特之处在于它专门用于描述在称为C M O S的技术中如何用晶体管
来实现逻辑门。C M O S电路常用于设计复杂网络,比如微处理器中所用的逻辑网络,所以值
得认真学习。另外, C M O S提供了到最低层次的简易转换,在最低层次上电路是由小段的硅
片制造的。将逻辑电路转换到硅片的过程称为物理设计,这将在第7章中介绍。这些讨论将把
我们引导向高密度逻辑芯片的学习和理解。这将把我们带到层次的底层。
第8章代表了处理正常情况的变化。本章着重讲述几个在许多系统中很有用的单元的设计
和构成。第9章继续停留该层次级别,这一章对存储器电路进行了详细的论述,也就是说,存
储器是可以存储二进制值的数字单元。虽然这两章都着重论述数字逻辑单元,但V H D L、
C M O S电路及硅片I C的联系在我们讨论中仍是一个完整的部分。本组论题的最后一个部分是
时序电路,它在第1 0章中论述。
本书的最后着重讲述的是系统层次,研究的是计算机及计算机结构,第11章讲述如何用
数字逻辑构造模块构造大的器件,以及这些器件如何相互连接在一起构成计算机。第1 2章将
这些概念向前推进一步,讲述简单系统如何扩展和发展成今天的高性能系统。
为帮助你确定讨论所在的层次级别的大概位置,本书的一些地方提供了代表不同层次级
别的图标。我们的讨论从逻辑层次级别开始,该层次级别用图1 - 1 8所示的逻辑门图标表示。
电路和晶体管层次级别用图1 - 1 9所示图形表示,图中所示的是N O T逻辑门的电路。在最低层
次级别,我们讨论的是硅片上的晶体管,它用图1 - 2 0所示的形状奇特的图标来表示。我们选
择它是因为它是硅晶芯片上的晶体管。
随着向逻辑层次级别上面的层次级别前进,数字网络变得很复杂。在此情形下,所用单
元的图标称为多路复用器( M U X),如图1 - 2 1所示。最后,在最高的层次上,我们将采用图
18 数字系统设计基础教程
下载
图1-18 标识数字逻辑中
一个部件的图标
图1-19 表示电路和CMOS
晶体管论述的图标
图1-20 与芯片相关的材料的
晶体管布局的图标
1 - 2 2所示的系统图标,图中标识C P U是中央处理单元的简称,它是提供所有计算和数据处理
电路的系统的一个部件。值得注意的是,层次的最高级别可观察整个系统的外部特征。它们
是由单元构成的,单元由逻辑门组成,逻辑门用晶体管构成,而晶体管是制造在硅片上的器
件。换句话说,层次各个级别是相互嵌套的。记住层次的特点有助于我们理解数字系统设计
的所有重要的因素。
图1-21 中等复杂单元论述中所用的多路复用的图标图1-22 系统层次论述中的CPU图标
1.10 问题
1. 下面二进制字中,各个组合中最大的数是多少?
(a) X=x1x0
(b) A=a4a3a2a1a0
(c) Y=y5y4y3y2y1y0
2. 个人计算机有如下容量的系统内存,请问各有多少比特存储器?
(a) 16MB
(b) 64MB
(c) 256MB
3. 桌面计算机的磁盘存储设备宣称可保存8 . 1 G B数据,请问:
(a) 它共有多少比特?
(b) 它可保存多少个3 2 b的二进制字?
4. 假设你想建立一个编码方案来表示指南针的如下方向集: N, S, E, W, NE, NW, SE, SW。
请用必需的比特数来定义一个称为d i r e c t i o n的二进制字,并建立一个编码/解码表格。你如果
想在方向集中另外加入N N W, NNE, SSW, SSE四个方向,必须做哪些修改?
5. 一个绘画商店宣称有4 3种不同的素描档板,我们可用来描述这些不同档板的二进制字
s h a d e _ o f _ w h i t e的位数是多少?如何处理没有用上的二进制组合?
6. 将下列4 b i t二进制数转换成十进制值:
(a) W= 0 1 0 1
(b) X= 11 0 0
(c) Z= 1 0 0 1
7. 将下列二进制数转换成十进制值:
(a) 101010
(b) 011 0 11
(c) 11 0 0 0 1
(d) 011 0 11
8. 将下列8 b i t二进制数转换成相应的十进制值。
第1章数字系统的概念19
下载
多路器
中央处
理单元
(a) A=01010101
(b) B=11 0 0 11 0 0
(c) C=10100011
9. 建立一个将16bit 二进制字转换成十进制的通用表格。
10. 将下列1 6 b i t字转换成十进制值:
(a) 0101 1000 1110 1010
(b) 0100 1101 0001 0100
(c) 1000 1000 1000 1000
11. 将下列3 2 b i t字转换成十进制等效值
(a) 0001 1111 0101 1010 1100 1100 0110 1010
(b) 0100 0110 0101 1111 0101 1010 0000 0100
12. 将下列基-1 0的十进制数转换成对应的二进制等效值
(a) 8
(b) 14
(c) 23
(d) 36
(e) 18
(f) 9
(g) 16
13. 将下列十进制数转换成各自的二进制等效值。
(a) 32
(b) 42
(c) 76
(d) 67
(e) 95
14. 将下列十进制数转换成对应的二进制等效值
(a) 103
(b) 155
(c) 225
(d) 187
(e) 283
(f) 384
15. 将下列十六进制数转换成二进制形式,然后求其相等的十进制值(记得0x表示十六进
制值)
(a) 0 x1 F
(b) 0 xA 8
(c) 0 x7 B
(d) 0 x6 7
16. 将下列十六进制数转换成二进制形式,然后求其等效的十进制值:
20 数字系统设计基础教程
下载
(a) 0 x1 F 2 0
(b) 0 x0 A B C
(c) 0 x70D2
(d) 0 x8 6 B A
17. 考虑基-1 0的数1 0 0 0,试确定用来表示小于或等于该数所需的最小的比特数。
18. 一个简单的计算器可显示十进制数的最大位数是6位数字,表示这样数字所需的二进
制字的长度是多少?
19. 求下列二进制小数的相应十进制值:
(a) 0.10010
(b) 0.11 0 1 0
(c) 0.01011
(d) 0.10101
20. 将下列二进制数转换成十进制形式:
(a) 11 0 1 . 0 11 0
(b) 1001.0011
(c) 0101.1001
21. 将下列基-1 0的十进制数转换成二进制形式
(a) 0.500
(b) 0.550
(c) 0.625
(d) 0.650
22. 假设我们想用4 - b i t二进制字表示十进制小数0 . 6
(a) 求出与此值最接近的二进制小数值。
(b) 如果我们采用这种表示,其百分比误差是多少?
(c) 用8位二进制表示,重复上面的问题。
23. 对于基- 1 0的数x= 0 . 3 1 4 1,若要求舍入误差小于0 . 3 %,用于表示此值的最小的二进制
字是什么?
24. 一个时钟的周期T= 0 . 3ms,求其频率。
25. 一个时钟的周期T= 1 5 0 n s,求其频率。
26. 已知一个特别的时钟的频率为f= 4 0 0 M H z,求其时钟周期T,试用合适的比例单位,如
毫秒,来给出答案。
27. 比较两个桌面计算机,一个工作的时钟频率为5 0 0 M H z,而另一个的中心时钟为
5 5 0 M H z。若从5 0 0 M H z的系统移到5 5 0 M H z的系统,其时钟周期长度减少的百分比是多少?
28. 研究一个报纸或杂志上的个人计算机的广告,你能用广告上面提供的信息来识别出主
要系统部件吗?其设计中的层次级别是怎样的?
29. 假设把汽车定义为一个“系统”,我们可把层次概念用于汽车,并将它看成由大的基
本单元组成,比如引擎。而大的基本的单元又由更小的部件组成,例如,引擎中的活塞。请
画出汽车的层次模块图。
第1章数字系统的概念21
下载