再来回忆一下冯诺依曼的计算机设计方案:
l 二进制表示指令和数据;
l 程序存储,自动运行;
l 由控制器、运算器、存储器和输入输出五大部件构成。
构成计算机的五大部件最终肯定要落实到实际的器件上,否则就只是个设计蓝图,我们当然不会花时间去设计一台巴贝奇式的机械计算机,本书要做的是数字电子计算机。这一章先介绍一下常用的电子元器件和最基本的电路原理,再学习一下Proteus电路仿真软件,最后用三极管一步步的来实现计算机的主要部件。
用导线把电源、电器和开关连接起来组成的电流的回路叫做电路。电和磁的本质要用麦克斯韦方程组来描述和分析,但这里我们从电压、电流这个抽象级别来分析电路。电路的主要功能有两个:一个是传输能量,另一个是信号处理。
1.电源
电路工作都需要电源,电源之于电路就好比心脏之于人,电源是为电路提供电能的设备,有电压源和电流源之分,我们这里使用的是电压源,选择电压源时要考虑输出电压和功率能否达到电器的要求,如果是电池供电,还要考虑电池容量是否满足时间要求。电源和地符号如图3-1所示。
(a)电源符号 (b)地符号
图3-1 电源符号
2.电阻
电阻是一种阻碍电流流过,并把部分电能转化成热能的电子器件,电阻的热量必须合理散发出去,否则可能烧毁。电阻元件实物及符号如图3-2所示。
(a)一种直插式电阻(b)一种贴片式电阻 (c)电阻符号
图3-2 电阻元件及符号
3.电容
电容是一种存储电能的元件,它不会把电能转化成热能散发出去,而是转化成电场能。另外,电容具有“通高频阻低频”的特性,也就是说,电容会阻止直流电流过,而允许交流电流过,当然这个阻止的频率和允许的频率跟电容本身的参数有关,由于这个特性,在信号处理里面电容可以用于制作滤波器。在设计电路时,如果直流里混入了交流,也可以用合适的电容滤除交流成分。电容实物图如图3-3所示,电容电路符号如图3-4所示,注意电解电容是有正负极。
(a)一种瓷片电容 (b)一种电解电容 (c)一种贴片电容
图3-3 电容元件
(a)普通电容符号 (b)电解电容符号
图3-4 电容符号
4.电感
电感也是一种储能元件,它会把电能转化成磁场能,也不散发热量。电感具有“通低频阻高频”的特性,跟电容刚好相反,也可以用来制作滤波器。电感和电容配合就能做出各种参数的低通、高通、带通滤波器,实现信号处理的电路。电感元件实物及符号如图3-5所示。
(a)一种电感 (b)电感符号
图3-5 电感元件及符号
5.二极管
二极管是一种有两个极性的半导体器件,其主要特性是“正向导通,反向截止”。“正向导通”是指外加正向电压超过0.7v时,二极管相当于一个导体;“反向截止”是指外加反向电压(不超过击穿电压)时,二极管相当于一个绝缘体。二极管实物及符号如图3-6所示。
(a)普通二极管 (b)发光二极管 (c)二极管符号
图3-6 二极管元件及符号
6.三极管
三极管是一种在二极管基础上做成的半导体电子元器件,其作用是把微弱电信号放大, 也可用作电控开关,实物图和符号如图3-7所示。
(a) (b)
图3-7 三极管元件及符号
三极管的开关功能,简单的说:当B引脚有电时,C引脚和E引脚接通,当B引脚无电时,C引脚和E引脚断开,好比B是一个单刀开关,能接通或断开C和E,只不过是用电控制的。三极管近似电路如图3-8所示。
图3-8 三极管开关功能近似电路
1. 欧姆定律
导体中的电流,与导体两端的电压成正比,与导体的电阻成反比,即:
可以理解为电压是导致电流产生的原因。
2. 基尔霍夫电流定律
流入任一节点的电流必定和流出此节点的电流相等,也即是说节点上不能存储电能。
3. 基尔霍夫电压定律
在任一个闭合回路中,从一点出发绕回路一周回到该点时,各段电压的代数和恒等于0。
4. 电阻串联
如图3-9所示,电阻R1和R2串联后的总电阻是多少呢?
图3-9 电阻串联电路
由基尔霍夫电流定律可知:由于没有分支节点,流入又和流出相等,所以串联电路中电流处处相等,都为I。
由基尔霍夫电压定律可知:
,,所以根据欧姆定律可知:
,即:
,根据欧姆定律:
,所以
也就是串联后的总电阻等于各串联电阻之和,扩展到多个电阻串联:
5. 电阻并联
如图3-10所示,电阻R1和R2并联后的总电阻又是多少呢?
图3-10 电阻并联电路
根据基尔霍夫电流定律可知:
根据欧姆定律:
,,所以
,即:
,根据欧姆定律:
,也就是,因此
也即是说:并联后的总电阻的倒数等于各并联电阻倒数之和,扩展到多个并联电阻:
Proteus是一种EDA(电子设计自动化)软件,能进行电路仿真。Proteus提供了大量的模拟元器件、数字元器件(单片机、74系列集成电路等)、接插件和虚拟仪器(电压表、电流表、示波器、信号发生器等)资源,特别适合进行单片机等数字电路的仿真。使用Proteus仿真软件不仅可以节省硬件购买的费用,又可以实现接近硬件的效果。
我们看一下,怎样使用Protues软件仿真按键控制LED亮灭的电路。
1. 新建设计
打开“ISIS 7 Professional”,工作界面如图3-11所示。
图3-11 Proteus工作界面
2. 选择仿真元器件
Protues仿真界面的最左侧一栏是模式选择区,主要的模式选择图标介绍如图3-12所示。
图 3-12 模式选择图标简介
l 虚拟仪器:有虚拟示波器、逻辑分析仪、终端等虚拟仪器,可以直观显示信号;
l 电流探针:相当于电流表,但不需要串联,放置在线路上;
l 电压探针:相当于电压表,放置在线路上;
l 图形模式:有多种图形图表分析方法,如模拟信号波形图、数字信号波形图、频率响应图等,比如模拟信号波形图可以生成某一点的一段时间内的电压波形图,比示波器更好用;
l 终端模式:有电源和地等;
l 网络标号:可以在原理图中设置网络标号,网表标号相同代表电气连接在一起;
l 元器件选择:可以用来选择仿真的各种元器件。
点击“元器件选择”模式,再点击“DEVICES”器件浏览器中“p”按钮进入元器件选择窗口,读者可以选择常见的模拟器件、数字器件和部分型号的专用芯片(74系列、单片机等)。
我们要实现开关控制LED亮灭的仿真,可以在“Keywords”里输入元器件名称,也可以到子目录里查找元器件,这里分别输入“LED-BLUE”、“RES”、“SW-SPST”,找到发光二极管、电阻和开关元器件并双击,元器件会自动加载到器件浏览窗口中。
3. 绘制仿真原理图
点击元器件选择模式,在元器件浏览窗口点击其中一个元器件,然后到工作区绘制并摆放元器件;点击终端模式,选择“POWER”电源和“GROUND”地放置到工作区。
对工作区的元器件进行合理布局,双击电阻元件修改阻值为100欧姆,然后连线,完成后的仿真原理图如图3-13所示。
图3-13 开关控制LED灯仿真原理图
4. 仿真
点击左下角“play”按钮开始仿真,按下和抬起按钮能看到LED灯的亮灭,“stop”按钮能停止仿真,“pause”能暂停仿真。
后面章节涉及的电路绝大部分都可以在Proteus平台上仿真,本书配套的电子资料里提供了相应的Proteus仿真工程,读者可以自行仿真实验,通过设置不同的输入信号和参数,查看仿真结果,更好的理解电路。
数字电路系统通常需要一个直流电源,假设需要5V直流电源,那么我们怎样把220V的交流电通转化成5V的直流电呢?
220V、50Hz的交流电通过变压、整流、滤波和稳压流程后,可以转化成5V的直流电,下面我们使用Proteus仿真软件看一下每一步实现了什么功能?
1. 变压
选择“ALTERNATOR”交流电源、“TRAN-2P2S”变压器和“RES”电阻等元器件,完成变压部分的仿真原理图,如图3-14所示。
图3-14 变压仿真原理图
我们通常所说的220V指的是电压的有效值,频率是50Hz的正弦波,最大值约是311V,最小值约是-311V,设置交流电源的“Amplitude”幅度值为622V,“Frequency”为50Hz。设置变压器的“Coupling Factor”为0.05,表示变压为原来的1/20。在电源附近和电阻附近分别放置电压探针。
点击“图形模式”图标,选择“ANALOGUE”模拟图表模式,在工作区绘制两个图表区(左键按住绘制成矩形后松开并单击)。在模拟图表上右键并选择“Edit Graph”,设置“Start time”为0,“Stop time”为100m,表示截取0到100毫秒的信号生成图表。再次在图表上右键并选择“Add Traces”,并在“Probe P1”中选择电压探针“R1”,另一个图表中选择“TR1”。最后,在每个图表上右键并选择“Simulate Graph”,完成每个图表的仿真,仿真结果如图3-15所示,可以看到变压前后频率没有改变,只是幅度变化了。
(a)变压前波形图 (b)变压后波形图
图3-15 变压前后的波形图
2.整流
整流部分需要用到整流二极管,可以选择“1N4001”元器件,仿真原理图如图3-16所示。
图3-16 变压并整流原理图
放置电压探针并设置图表仿真,变压整流后的波形图如图3-17所示,可以看到整流就是把正弦波的负电压部分翻到上面去了,原因就是二极管的单向导通特性。
图3-17 变压整流后的波形图
3.滤波
选择“CAP-ELEC”电解电容元器件并完成滤波部分,仿真电路如图3-18所示,经过变压、整流和滤波后的波形图如图3-19所示。
图3-18 变压整流滤波电路
图3-19 变压、整流、滤波后波形图
通过图可以看到,电解电容大约有60ms的稳定期,稳定后波形中的高频部分基本被滤除了,波形变得平缓了,幅度变化变小了,也就是更接近直流了。
4.稳压
选择“7805”稳压芯片作为最后的稳压元件,稳压芯片能实现输入在一定范围内波动时,输出保持不变,仿真电路图如图3-20所示,最终波形如图3-21所示。
图3-20 变压、整流、滤波和稳压原理图
图3-21 最终直流波形图
从最终波形图可见,最终输出的信号与5V刻度完全重合,也即是实现了220V到5V直流电的转化。
计算机通常是在一个时钟信号的控制下一步一步的工作的,时钟信号是怎样产生的呢?
1.选择仿真器件
新建仿真项目并选择“555”定时器、“CAP”电容和“RES”电阻元器件。
2.绘制仿真原理图
把元器件拖放到工作区,在虚拟仪器模式下选择“OSCILLOSCOPE”虚拟示波器并放置到工作区,把示波器的A通道连接到“555”定时器的3引脚,双击电阻和电容设置阻值和容值,仿真原理图如图3-22所示。
图3-22 时钟信号产生仿真原理图
3.仿真结果
运行仿真后可以看到示波器上显示波形。虚拟示波器需要调整的参数主要有两个,一个是波形幅度的刻度,另一个是时间的刻度。比如在仪表盘“ChannelA”位置的幅度刻度调整里输入“1”,则显示区垂直方向上一个网格代表1伏;输入“1m”,则一个网格代表1毫伏。在仪表盘左下角时间刻度调整里输入“0.25m”,则水平方向一个网格代表0.25毫秒。示波器显示的情况如图3-23所示。
图3-23 时钟信号产生电路仿真原理图
从示波器的波形中可以直观的看到仿真电路产生了方波时钟信号,并且一个周期大约占用了4个网格,也就是周期大约是1毫秒,频率是1000赫兹。通过调整R1、R2阻值和C2容值,可以实现不同频率和不同占空比的波形。
(1)电路
使用NPN三极管制作的非门电路如图3-24所示,X是输入端,Y是输出端。
图3-24 非门电路
(2)功能
当X等于0V时,C和 E之间相当于断开,Y就等于电源电压5V;当X等于5V时,C和E之间相当于接通,Y就等于接地0V。如果我们约定有电为1,没电为0,那么这个电路的功能就如表3-1所示,这种表我们称之为真值表。
表3-1 非门真实表
X | Y |
0 | 1 |
1 | 0 |
通过真值表可知,输入X和输出Y是相反的关系,这种电路称之为非门,可以简化为如图3-25所示的符号表示。
图3-25 非门符号
(3)仿真
绘制如图所示的Proteus仿真原理图,点击“信号产生”的模式图标,选择“DC”并放置在X输入端导线上,放置电压探针到Y输出端导线上。设置DC的电压值为0V,仿真后电压探针显示5V;设置DC的电压值为5V,仿真后电压探针显示0.05V。一般地,大于3.5V时,我们认为输出高电平,也就是输出1;小于0.4V时,我们认为输出低电平,也就是输出0,可以看到仿真结果与表所示的真值表一致。
(1)电路
再来看一个电路,如图3-26所示,每个三极管可以看成一个开关,X1和X2看成开关的控制信号,或门就可看作两个开关并联,等效于(b)电路。
(a)或门电路 (b)或门等效电路
图3-26 或门
(2)功能
直观上理解,并联起来的两个开关只要有一个闭合时,输出就能接通,真值表如表3-2所示。
表3-2 或门真值表
X1 | X2 | Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
通过真值表可见,当X1、X2至少一个为1时,输出Y就为1,也可以理解成只有两个输入都为0时,输出才为0。完成这种功能的电路称之为或电路,可以简化为如图3-27所示的符号表示。
图3-27 或门符号
(3)仿真
使用Proteus搭建或门仿真电路,输入端X1和X2分别放置“DC”直流信号,输出Y端放置电压探针,改变X1和X2的输入,看仿真结果是否与或门的真值表一致。
(1)电路
再来看一个电路,如图3-28(a)所示,可以看成两个开关串联,等效于3-28(b)电路。
(a)与门电路 (b)与门等效电路
图3-28 与门
(2)功能
直观上理解,串联起来的两个开关都闭合时,输出才能接通,真值表如表3-3所示。
表3-3 与门真值表
X1 | X2 | Y |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
通过真值表可见,只有X1、X2都为1时,输出Y才为1,只要有一个输入为0,输出就是0。完成这种功能的电路称之为与电路,可以简化为如图3-29所示的符号表示。
图3-29 与门符号
(3)仿真
使用Proteus搭建与门仿真电路,输入端X1和X2分别放置“DC”直流信号,输出Y端放置电压探针,改变X1和X2的输入,看仿真结果是否与与门的真值表一致。
与、或、非基本逻辑门又可以构成与非门、或非门、异或门、同或门等逻辑电路。
与非门可以看成一个与门再加上一个非门,也即是与运算之后再进行非运算,电路如图3-30(a)所示,在与门符号后再加一个小圆圈代表与非门的符号,如图3-30(b)所示。
(a)与非门电路 (b)与非门符号
图3-30 与非门电路及符号
或非门可以看成一个或门再加上一个非门,就是或运算之后再进行非运算,电路如图3-31(a)所示,同样地,在或门符号后再加一个小圆圈代表或非门符号,如图3-31(b)所示。
(a)或非门电路 (b)或非门符号
图3-31 或非门电路及符号
(1)电路
我们再来看一个电路,如图3-32所示,这个电路中不再直接使用三极管,而是使用前面介绍过的逻辑门电路,这个电路称为异或门电路。
图3-32 异或门电路
(2)功能
表3-4 异或门电路真值表
X1 | X2 | Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
异或门电路的功能可以理解为输入为“异”(1和0,0和1)时,输出为1,输入为“同”(1和1,0和0)时,输出为0,符号简化为如图3-33所示。
图3-33 异或门符号
(3)仿真
Proteus提供了基本逻辑门的仿真器件,我们可以直接使用逻辑门进行仿真,不需要再使用晶体管了,或门选择74LS32,与非门选择74LS00,与门选择74LS08,请读者完成异或门电路并进行仿真。输入端仍然使用“DC”信号,但输出端可以通过颜色判断,红色代表高电平,兰色代表低电平,灰色代表高阻态(断开连接)。
同或门与异或门功能上是相反的关系,即“同”为1,“异”为0,符号如图3-34所示。
图3-34 同或门符号
还有一种特殊的门电路叫做三态门,如图3-35所示,2是输入端,3是输出端,1是使能端。当1使能时,3可以输出高、低电平;当1没有使能时,不论2输入什么,3都输出高阻态(相当于断开),也即是3可以输出高电平、低电平和高阻态三种状态。
图3-35 三态门
三态门可以用于总线控制,比如有3个输入想通过一根总线输出信号到远端Y,如图3-36所示。当A要传输数据时,A的1使能,那么A的输出通过总线输出到Y,B和C因为没有使能,相当于和总线断开连接,不会影响到A工作,任何时刻,只能一个设备占用总线。
图3-36 三态门总线示意图
三极管是我们构造计算机的最基本的实物元件,三极管又可以构成与、或、非基本逻辑电路,通过与或非电路可以继续构造更复杂的逻辑电路,后面讲解的各种功能电路将以与、或、非基本逻辑门以及与非门、异或门等为基础,不再直接出现三极管了。后面各种功能电路只给出电路图、功能和说明,可以作为模块直接使用,至于这些电路是怎样设计出来的请参考数字电路设计相关的书籍。
事实上,只要能实现受控开关功能,就能实现与、或、非基本逻辑,也就能构成计算机,什么样的器件并不重要。
有一类逻辑电路,它们的输入会立即反映到输出上,就是输出只跟输入有关,跟时间无关,这类电路我们称之为组合逻辑电路。
(1)一位全加器
两个一位的二进制数相加,含有进位的输入和输出,电路如图3-37所示,A和B是两个1位的加数,Cin是进位输入,Sum是和,Cout进位的输出,功能见表3-5。仿真时,异或门可以使用74LS86,与非门使用74LS00,读者可以依照真值表仿真,注意输入“1”指的是输入5V。
图3-37 一位全加器电路图
表3-5 1位全加器的真值表
A | B | Cin | Sum | Cout |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 0 |
1 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
一位全加器可以实现两个1位的二进制数相加,并有进位输入和进位输出,符号如图3-38所示。
图3-38 一位全加器符号
(2)4位全加器
有了一位全加器,我们就能实现任意位数的加法器了,比如一种4位加法器的示意图如图3-39所示。
图3-39 4位加法器示意图
这个4位全加器可以实现B3B2B1B0加上A3A2A1A0,和是S3S2S1S0,进位输出是Cout。当然一位全加器还可以实现8位、16位、32位等更多位的加法器,那么我们做计算机的加法器就具备了。
(3)四则运算的实现
计算机只要实现了加法运算,那么四则运算就都能实现了。
减法可以用加法来实现,比如要计算12-5,可以计算12+(-5),12对应的二进制数是00001100,-5对应的二进制数是11111011(5的原码取反加1),再把两数相加,并且超出8位的部分溢出,所以结果是00000111,也就是7,所以减法就用加法实现了,示意图如图3-40所示。
图3-40 减法的加法实现
乘法也可以用加法实现,A乘以B,就是A个B相加,或者B个A相加。
除法可以用加法和减法实现,A除以B,可以计算B不断累加,当“和”大于于A时,累加的B的个数减1就是“商”,A加上B再减掉“和”就是“余数”。比如要计算50除以6,当计算到9个6相加的“和”是54时,刚好大于50,这时“商”就是9-1=8,“余数”就是50+6-54=2。
其它各种运算又可以转化成四则运算,所以计算机只要能实现加法、循环和判断就能实现各种算数运算。
编码器能把输入的序号编码成二进制数,电路图如图3-41所示,编码器功能见表3-6。
图3-41 4线-2线编码器
表3-6 4线-2线编码器真值表
X0 | X1 | X2 | X3 | B | A |
0 | 1 | 1 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 0 | 1 |
1 | 1 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 0 | 1 | 1 |
编码器电路能检测出哪一路有信号输入了,比如编码输出是10,就知道X2路有信号输入了(输入信号是0),这个4线-2线编码器的输入有且仅有一路是低电平。
编码器可以用于键盘的按键检测,通过输出的编码可以判断哪一个按键被按下了。除了4线-2线编码器还有8线-3线、16线-4线等更多类型的编码器。
译码器可以看成是编码器的相反功能,电路如图3-42所示,功能见表3-7。仿真时,非门可以使用74LS04。
图3-42 2线-4线译码器电路
表3-7 2线-4线译码器真值表
B | A | Y0 | Y1 | Y2 | Y3 |
0 | 0 | 0 | 1 | 1 | 1 |
0 | 1 | 1 | 0 | 1 | 1 |
1 | 0 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 0 |
译码器能够区分开输入的编码,比如输入的是10,那么Y2这条线路会输出低电平。除了2线-4线译码器,当然还有3线-8线,4线-16线等更多类型的译码器。
根据冯诺依曼的计算机设计方案,计算机的一条指令就是一条二进制的编码,那么通过译码器就能在相应的输出通道上得到一个电平信号,使用这个信号就能通知相应的功能单元工作,比如通知加法器做加法运算,所以译码器可以实现计算机指令的解析。
数据选择器电路如图3-43所示,功能见表3-8,仿真时,三输入与门可以使用74LS11,4输入或门可以使用4072。
图3-43 4选1数据选择器
表3-8 4选1数据选择器真实表
A1 | A0 | Y |
0 | 0 | D0 |
0 | 1 | D1 |
1 | 0 | D2 |
1 | 1 | D3 |
数据选择器可以通过A1A0组成的编号指定4路输入中的哪一路作为输出的值。如果把A1A0看作地址编号,D0、D1、D2和D3看作一位内存存储单元,那么数据选择器不就成了内存读取电路了吗?
数据选择器反过来就是数据分配器,数据分配器可以根据地址,把一路数据分配到多路中的一路上,电路如图3-44所示,真值表如表3-9所示。仿真时,三输入与非门可以使用4023。
图3-44 数据分配器
表3-9 数据分配器真值表
A1 | A0 | Y0 | Y1 | Y2 | Y3 |
0 | 0 | D |
|
|
|
0 | 1 |
| D |
|
|
1 | 0 |
|
| D |
|
1 | 1 |
|
|
| D |
一位数值比较器可以实现两个一位二进制数的大小比较,电路如图3-45所示,真值表如表3-10所示,比如当A>B时,那么Y(A>B)通道会输出高电平。仿真时,与非门可以使用74LS02。
图3-45 一位数值比较器
表3-10 一位数值比较器真值表
A | B | Y(A>B) | Y(A=B) | Y(A<B) |
0 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 1 | 0 |
除了一位的比较器还有4位、8位、16位等更多位的数值比较器,如图3-46所示是一个4585集成4位比较器,可以实现两个4位数的比较,多个4位比较器又能级联成更多位的比较器。
图3-46 集成4位比较器逻辑符号
组合逻辑电路的输入会立刻反应到输出上;时序逻辑电路的输入只有到了适当的时间才会反应到输出上,也就是说输入输出除了跟逻辑有关还跟时间有关,所以称为时序电路。
D锁存器能存储一位二进制数,电路如图3-47所示,DI是数据输入端,W是写入操作端,DO输出锁存器里存储的数据。
图3-47 D锁存器电路图
组合逻辑电路我们用真值表分析,时序逻辑电路可以使用时序图分析,通过分析时序图可以得出D锁存器的功能。
新建Proteus仿真项目,完成D锁存器的原理图,DI输入端放置“DC”工具,修改为“Pulse”脉冲类型,高电平设置成5V,频率设置成3Hz。W输入端也放置“DC”工具,同样修改为“Pulse”脉冲类型,高电平设置成5V,脉宽(Pulse Width)设置为70%,频率设置为1Hz。放置一个虚拟示波器,A、B、C端分别连接DI、W和DO端,设置虚拟示波器的时间刻度为0.1S,仿真片段如图3-48所示。
图3-48 D锁存器时序图
从时序图可以看出:把需要存储的数输入到DI,当W为高电平时,数据写入了D锁存器,DO输出的就是D锁存器里存储的数据,DO和DI保持一致;当W为低电平时,DI数据不能够写入锁存器,所以锁存器的输出就是前面存储好的值,不再改变。简单的说,当W为高电平时,数据写入锁存器,当W为低电平时,锁存器内容保持不变,也就是实现了数据的写入和存储。一位D锁存器的符号可以简化成如图3-49所示。
图3-49 D锁存器符号图
图3-50中数据存储器有4个存储单元,每个存储单元能存储1位二进制数。存储电路主要包括1个2-4译码器,4个D型锁存器和1个4-1数据选择器。2-4译码器带有使能端,当使能端为高电平时输出有效,否则输出高阻态,也就是相当于输出端断开,可以当成数据存储器的读/写控制。
图3-50 4x1数据存储器电路示意图
当写入数据时,译码器使能端是高电平,译码器的输入是数据存储器的地址编号,译码器相应的输出通道是高电平,D锁存器处于写入状态。比如数据输入是1,地址输入端A1A0是10,并且读/写操作端是1,译码器使能,Y2为高电平,数据就被写入到了第2号锁存器里,写信号结束后,译码器停止使能,译码器全部输出低电平,2号锁存器锁存数据,实现了数据的写入和保存。
当读出数据时,译码器不使能,译码器全部输出低电平,锁存器都处于锁存状态,地址编码驱动数据选择器选择相应的D锁存器的数据输出。比如地址输入端A1A0是10,并且读/写操作端是0,那么第2号锁存器里存储的数据被读出。
这样就实现了4x1的数据存储器(RAM),因为译码器、数据选择器、D型锁存器都可以扩充,所以就可以实现更大容量的二进制数据存储器了,下一章中我们就实现了一个16x4的RAM。
从功能上来说D型触发器也能存储一位二进制数,锁存器是电平触发,有效电平会使锁存器状态不断改变,而触发器是边沿(上升沿、下降沿)触发,一个时钟周期只有一个上升沿,触发器状态只改变一次,触发器工作更可靠、抗干扰能力更强。D型触发器电路图如图3-51所示,CP上升沿写入数据,D是待写入的数据,Q输出触发器存储的数据。R、S是置位端口,当S=0且R=1时,Q=1;当S=1且R=0时,Q=0,置位时,输出不受CP和D信号影响。存储数据时,把R、S置高电平。
图3-51 D型触发器电路图
仿真时,R、S端接高电平,CP端输入3Hz脉冲,D端输入1Hz脉冲,但设置D端脉冲开始时间为0.2S,避免D端上升沿和CP端上升沿遇到一起(CP端上升沿时写入数据,如果此时D端也是上升沿,那么就搞不清是写入1还是0了),CP、D、Q端分别接入示波器的A、B、C端,仿真片段如图3-52所示。
图3-52 上升沿触发D型触发器时序图
从时序图可以看出,Q的值在CP上升沿时刻开始等于D的值,直到下一个CP上升沿之前,不管D的值怎样改变,Q值都不变,也可以理解成在CP上升沿数据被存储到了触发器里。D型边沿触发器逻辑符号如图3-53所示。
图3-53 上升沿触发D型触发器逻辑符号
触发器和锁存器都可以构成寄存器,一个寄存器通常用来存储一个二进制数,寄存器可以是8位、16位、32位等任意位数,无非是含有的触发器或锁存器数量不同,数据存储器则可以由一组固定位宽的寄存器构成。寄存器可以用来暂存中间计算结果,存储一条指令等数据。
由D触发器构成的模8计数器如图3-54所示,它能统计CP信号的脉冲个数,从0计数到7,再回到0重新开始计数。
图3-54 D触发器构成的模8计数器
创建Proteus仿真原理图,D触发器可以使用74LS74,CP使用1Hz脉冲信号,CP、Q0、Q1、Q2分别接入虚拟示波器的A、B、C、D端口,设置虚拟示波器的时间刻度为0.5S,仿真片段如图3-55所示。
图3-55 计数器时序图
从计数器的时序图可以看出,在时钟信号CP的驱动下,每有一个CP上升沿,Q2Q1Q0组成的二进制数加一,也就是Q2Q1Q0记录了CP时钟上升沿的个数,记满8个数后,从000再重新开始,也就是实现了模为8记数功能。
计数器有很多用途,我们可以用来生成程序地址,比如模256的计数器可以生成256个地址编号,每个地址编号可以对应程序存储器的一个存储单元,那么在时钟的控制下就能依次取出程序存储器里的指令,计数器又可以预置数,也就能实现程序的跳转了。
数据存储器靠有电、没电来记录信息,一旦切断数据存储器的供电,那么存储的数据完全丢失,程序需要能够一直保存,随时读取,数据存储器显然不适合用来存储程序。如果有存储器是靠改变物理结构或者磁性来记录信息,这些改变一旦完成就可以长时间存在,那么存储的信息也就长久存在,跟是否供电就无关了。
一种半导体二极管ROM结构如图3-56所示,它主要由地址译码电路和若干二极管构成。仿真时,二极管可以使用“DIODE”元器件,2-4译码器使用74LS139,改变A1A0的值,使用电压探针查看D3D2D1D0的输出值。
图3-56 4x4位二极管ROM示意图
图3-56中ROM可以存储4x4位二进制数,它是靠集成二极管来实现记录数据的,出厂时根据客户需要写入的数据集成二极管,称为“掩膜”,ROM一旦制作完成,只能读取,不能写入。
图3-56中所示,若A1A0为00,则W0线上输出高电平,由于二极管有单向导通的特性,在D3、D1数据线上会输出高电平,D2、D0数据线上则是低电平,但W2、W3线上的低电平则对D3、D1数据线没有影响,所以D3D2D1D0输出的数据是1010。可以看成有二极管的位置存储的就是1,没有二极管的位置存储的就是0,所以00地址(也就是W0线)存储的是1010,同理11地址存储的是1011,10地址存储的是1101,01地址存储的是0100。
有了前面这些组合逻辑电路和时序逻辑电路,就好比有了堆积木的基本元件,那计算机就是我们堆积木的目标,冯诺依曼的计算机设计方案为我们提供了堆积木的方法,下一章就开始堆出一台简单的四位计算机。