现代数字逻辑电子技术概论
二十一世纪,数字化浪潮席卷了电子工业领域,与传统的模拟电子系统相比,数字系统具备更加优异的精确与可靠性,逐步取代了许多模拟电路的应用场景。数字逻辑电路是对数字信号进行算术与逻辑运算的电路,以逻辑门作为基本电路单元(最早采用 TTL 工艺,伴随半导体工艺技术的不断进步,目前已经逐步被 CMOS 工艺取代),数字电路可以分为组合逻辑电路(基本逻辑门)和时序逻辑电路(逻辑门 + 反馈逻辑回路)两大类。
本篇文章讲解了数字逻辑电路的分析与设计所涉及到的基础理论,首先讲解了数制
、码制
和逻辑代数
等基础知识,接着重点描述组合逻辑电路
和时序逻辑电路
的分析与设计方法,然后讨论了各种数字集成电路
(
含门电路、可编程逻辑元件、半导体存储器)的原理以及使用方法,并且介绍了硬件描述语言
与可编程逻辑器件
的相关知识,最后一部分讲解AD/DA
转换以及脉冲波形
的产生和转换电路。
数字逻辑概论
数字信号
模拟信号的电压或者电流在幅值和时间上都是离散的:
数字信号的电压或者电流的幅值随着时间连续变化:
数字信号可以采用高、低电平来表示,它们统称为逻辑电平:
- 低电平:电压值位于
范围内,通常表示逻辑0
; - 高电平:电压值位于
范围内,通常表示逻辑1
; - 电压值位于
范围内没有定义,不能使用;
CMOS 元器件电压值范围与数字逻辑电平之间的对应关系:
电压范围 | 逻辑值 | 逻辑电平 |
---|---|---|
1 |
高电平 H | |
0 |
低电平 L | |
无定义 | 无定义 |
数字波形是信号的逻辑电平相对于时间的图形化表达方式:
实际脉冲波形在高、低电平跳变时,边沿不是陡直的,都需要经历一个过渡过程:
- 脉冲幅值
:脉冲电压的最大变化幅度,即图中高电平的电压值,单位为伏特V
; - 上升时间
:指矩形脉冲上升沿从 上升到 时所经历的时间,单位为纳秒ns
; - 下降时间
:指矩形脉冲下降沿从 下降到 时所经历的时间,单位为纳秒ns
; - 周期
:周期性重复的矩形脉冲中,两个相邻脉冲之间的时间间隔。有时也用频率来表示,即 ; - 脉冲宽度
:从矩形脉冲上升沿的中间点 开始,到脉冲下降沿的中间点 为止的一段时间; - 占空比
:表示矩形脉冲宽度(高电平)占据整个周期的百分比;
▶【例题】假设周期性矩形脉冲波形的高电平持续时间为
6ms
,低电平的持续时间为 10ms
,求解占空比
q
和频率 f
?
▶【解答】根据条件可以得到脉动宽度
数制
数制是一种计数规则,主要是指每一位的构成,以及从低位向高位的进位。例如:十进制是以
10
为基数的计数体制,采用
0
、1
、2
、3
、4
、5
、6
、7
、8
、9
十个数值,其进位的规则是逢十进一。
二进制则是以 2
为基数,采用
0
和 1
两个数值,其进位规则是逢二进一,其中左侧是最高有效位(MSB),右侧为最低有效位(LSB)。
注意:二进制数中的每 1 个二进制数称为
1 bit
位,而 8 位二进制数被称为1 Byte
字节。
下面的表格对照了 十(Decimal)、二(Binary)、八(Octonary)、十六(Hexadecimal)进制的特点:
下面的表格展示了常用进制数值的换算关系:
二进制 ➔ 十进制
二进制数转换为十进制的方法,按照按权展开公式进行计算。即将每个位上的数值与相应位置的权相乘,最后再求和。
▶【例题】将二进制整数
▶【例题】将二进制小数
十进制整数 ➔ 二进制
十进制整数转换为二进制数主要有加权求和法、除二取余法两种方式。
加权求和法
加权求和法是通过确定一组二进制权,让它们的和等于已知十进制数。
▶【例题】将十进制整数
▶【例题】将十进制整数
▶【例题】将十进制整数
除二取余法
除二取余法是将十进制整数除以 2
取其余数,所得之商再除以 2
,再取其余数,如此重复直到商为
0
,每次得到的余数就构成了二进制数的对应位。其中,第一个余数为二进制数的最低位,最后一个余数为二进制数的最高位。
▶【例题】将十进制数
十进制小数 ➔ 二进制
十进制小数转换为二进制数同样可以选择加权求和法、除二取余法两种方式。
加权求和法
加权求和法是通过确定一组二进制权,让它们的和等于已知十进制数。
▶【例题】将十进制小数
除二取余法
除二取余法是将十进制整数除以 2
取其余数,所得之商再除以
2
,再取其余数,如此重复直至小数部分为 0
或者小数部分的位数满足误差要求,然后四舍五入为止,每次得到的整数就构成了二进制数的对应位。
▶【例题】将十进制小数
▶【例题】将十进制小数
如果误差要求小于
接下来校对上面得到二进制结果
由于
二进制 ➔ 十六进制
由于 4 位二进制数恰好拥有 16 个状态,如果将这 4
位二进制数看作整体,其进位输出正好是逢十六进一,所以可以采用分组转换法,即以二进制数的小数点为基准,整数部分从右至左每
4 位分成一组,而小数部分从左至右每 4 位也分成一组,不足 4 位的以
0
进行补足,然后将每一组数以一个十六进制数代替。
▶【例题】将二进制小数
所以,最终的转换结果为
十六进制 ➔ 二进制
将每个十六进制数改写为等值的 4 位二进制数即可,并且保持高低位的次序不变。
▶【例题】将十六进制小数
所以,最终的转换结果为
十六进制 ➔ 十进制
可以根据按权展开公式进行计算,即将每个数与相应位置上的权相乘,然后再进行求和运算。
▶【例题】将十六进制小数
所以,最终的转换结果为
十进制 ➔ 十六进制
将十进制转换为十六进制,可以先转换为二进制数,然后再将得到的二进制数转换为等值的十六进制数。
当然,也可以采用除以十六取余法直接从十进制整数转换为十六进制。
▶【例题】将十进制整数
对于十进制小数转换为十六进制,则需要使用乘以十二取整法。
▶【例题】将十进制小数
二进制算术运算
当两个二进制数表示两个数量大小时,它们之间可以进行数值运算,这种运算称为算术运算。
加法
二进制数加法的运算规则与十进制数加法类似,只是其进位规则为逢二进一。
对于一位二进制数的相加运算,会向左侧相邻的高位产生进位:
对于多位二进制数的加法从最低位(最右侧)开始,每次取被加数和加数的一位相加,然后逐一向左侧相邻的高位进位。
减法
二进制减法运算当中,当 0
减去 1
不够减时,需要向左边高位进行借位,借的这一位作为 10
处理(即十进制数 2
),也称为借一为二。
当两个一位二进制数相减时,如果低位向本位的借位一直为
1
,那么计算的四种情况为:
当两个多位二进制数相减时,从最低位(最右边)开始,每次取被减数与减数的
1
位相减;同时还要考虑低位向本位的借位,如果被减数小于减数,就要将减数与被减数交换位置,用减数减去被减数,然后在差值的前面添加负号-
。
乘法
被乘数与乘数中某一位相乘的结果,称为部分积。
▶【例题】计算两个四位二进制数
所以,多位二进制数
注意:计算机当中,乘法运算是通过左移被乘数、加法两种运算共同完成的。
除法
从被除数的最高位开始,逐位向低位不断减去除数,够减时商为
1
,不够减时商为
0
,这样不断减下去就可以求得商。在二进制除法当中,每一位商的值为
0
或者 1
。
注意:类似于十进制的除法,二进制的除数不能为
0
,否则没有意义。
▶【例题】计算两个四位二进制数
注意:计算机当中,除法运算是通过右移被除数、减法两种运算共同完成的。
有符号数
日常生活当中,通常在一个数的前面采用 +
号表示正数,减号
-
表示负数。由于数字系统只能识别和处理 0
和
1
表示的二进制数据,因此通常将正号 +
用 0
表示负号用 1
表示。将数的符号和值分别用 0
和 1
进行编码,所表示出来的二进制数称为机器数,机器数真正的值(即用正负符号表示的十进制或二进制数值)称为真值。机器数可以分为有符号和无符号两种类型:
- 无符号数:所有二进制位全部用来表示数值,例如 8
位无符号整数的 8 位全部都是用来表示数值的数值位:
- 有符号数:符号和数值分别采用二进制数进行表示,例如
8
位无符号整数左边的最高位作为符号位,其余位为数值位:
有符号数可以进一步分为原码、反码、补码形式:
原码
原码就是将正数的符号位用 0
表示,负数的符号位用 1
表示,数值用绝对值的二进制数形式表示。
因此,真值 0
也会拥有 +0
和 -0
两种不同的表示形式:
注意:计算机当中,位
bit
是二进制数据的最小单位,一位二进制数就是1
比特(bit
),通常将8
位二进制数称为1
字节(Byte
),而4
位二进制数称为半字节(Nibble
/ˈnɪbl/)。
反码
原码简单易懂且便于转换为真值,但是实现加、减运算较为麻烦。为了简化计算机的处理过程,通常会将减法运算转换为加法运算,于是引进了补码的概念。由于补码与反码之间存在一定的换算关系,所以这里首先对反码进行介绍。
- 正数的反码与原码相同;
- 负数的反码是其正数的反码,但是符号位保持为
1
,数值部分则按位取反;
反码当中 0
同样拥有 +0
和 -0
两种不同的表示形式:
补码
减法运算 10 – 5
可以用 10 + 7
的加法运算来代替,而 5
和 7
相加正好是进位的模数 12
,所以称 7
为
-5
对模 12
的补数,
也称为补码。
模是指一个计量系统的量程,例如时钟能够表示 16
,同理八位二进制数的模为
所以,在舍弃进位的条件下,减去某数的计算可以采用加上这个数补码的计算来代替,该结论同样适用于二进制数的减法运算。
例如减法 16
,而
9
恰好就是 -7
对模 16
的补码。
- 正数的补码与原码相同;
- 负数的补码是符号位为
1
的负数,数值部分为其绝对值按位取反,并在最低位加1
,即负数的补码等于其反码加上一;
注意,补码当中,真值 0
的表示是唯一的,即:
负数补数的简便求解方法:从右侧最低位向左侧最高位扫描,保留出现第一个
1
的位,后续的其它位全部按位取反,符号位保持不变。
▶【例题】使用八位二进制数,将 -90
用补码表示出来:
▶【例题】使用八位二进制数,将 -1
用补码表示出来:
求解一个补码的补码,就可以将补码转换成原码,即
▶【例题】求解
将补码当中所有等于 1
的位的权值相加(包括符号位,负数的符号位的权值被赋予负值),就可以得到其十进制数。
▶【例题】确定补数
二进制代码
逻辑代数
组合逻辑电路
硬件描述语言 Verilog HDL
锁存器和触发器
时序逻辑电路
逻辑门电路
半导体存储器
可编程逻辑器件
脉冲波形的产生与变换
数模与模数转换器
现代数字逻辑电子技术概论