文章目录
1. 振荡器
电路的输出,要么提供电压,要么不提供电压。
或者可以说成,输出结果要么是0,要么是1。
先看下面一个电路,继电器的输入和输出构成了一个回路。==振荡器(oscillator)==的本质就是如此。
简化电路为:
观察该电路,开关一旦闭合,簧片就会上下跳动,电路也会随之联通和断开,声音就会随之发出。如果金属簧片发出刺耳的声音,那它就是蜂鸣器;如果金属簧片连接可以敲击锣的小锤子,那它就是电铃。
可以将该电路简化为:
该电路看起来有点奇怪,反向器的输出和输入相反,但是看起来该电路的输入和输出又相同。由于继电器的切换需要时间,所以即使输入和输出相同,输出也会很快的改变为输入的相反状态。当然,输出随即也会很快改变输入,如此反复。
振荡器与其他电路有本质的区别,之前所有电路的状态都依赖人为的干预,通过开关改变。但振荡器可以完全自发的工作。
在与其他电路连接后组成的自动控制系统里,为了使不同组件同步工作,所有计算机都存在振荡器。
由于振荡器的输出随时间规律变化,其又被称作时钟(clock)。
振荡器从某个初始状态,经过一段时间又回到先前初始状态的这一段间隔定义为振荡器的一个循环(cycle),如图为从一个下降沿到下一个下降沿。
一个循环所占的时间就是这个振荡器的周期(period),周期的倒数就是频率(frequency)。假设振荡器周期为0.05s,那么其频率为1/0.05,即振荡器每秒钟产生20次循环。一般称作20Hz。
每秒钟循环次数,每小时穿越的英里数,每平方尺的重量,每份实物的卡路里等都可以使用Hz来描述。
2. 触发器
下图中,右侧或非门的输出是左侧或非门的输入,左侧或非门的输出也是右侧或非门的输入,这是一个基本的反馈(feedback)电路:
系统的输出会返回给输入,这种形式与振荡器有点类似。
左侧或非门记作L,右侧或非门记作R。该电路神奇的地方在于:
- 初始状态下,两个开关都断开:
- 闭合上边开关,则L输出0,则R输出1,则灯泡点亮;由于R输出1,同样会导致L的IA为1,不过它的改变并不影响灯泡的点亮:
- 如果此时断开上边开关,会发现灯泡仍旧是点亮的,因为L的IA变为了1,此时的开关状态与初始时相同,但是灯泡却亮着,这就是奇怪之处:
- 如果此时再闭合下边的开关,L的输出为1,则灯泡熄灭:
- 如果再断开下边的开关,灯泡也一直保持熄灭。
总结如下:
- 闭合上边开关,灯泡点亮,断开此开关仍然是点亮状态;
- 闭合下边开关,灯泡熄灭,断开此开关依旧是熄灭状态。
当两个开关都断开时,电路存在两个稳定态。此类电路称为“触发器”(Flip-Flop)。触发器可以保持信息,即记住某些信息。比如上边所说的电路,就可以记住上一次闭合的开关是哪个。如果灯泡亮着,则上一次闭合的是上开关;否则闭合的是下开关。
触发器与跷跷板相似。跷跷板有左右两个稳定态,不会长时间保持在中间态。根据跷跷板当前的状态可以知道,上次被压下的是那一侧。
一个能计数的电路,必定需要触发器。
上面的电路,通常绘制成如下,称作R-S(Reset-Set)触发器:
Q表示灯泡点亮,~Q(读作Q反)表示灯泡熄灭;如果Q是0,~Q反则是1。
R为1,则导致Q为0,表示电路复位,灯泡熄灭;
S为1,则导致Q为1,表示电路置位,灯泡点亮;
S和R同时为0,Q和~Q保持原来状态;
S和R同时为1,Q和~Q会同时为0,这与Q与~Q相反的设计相违背,因此禁止如此操作。
将R-S触发器封装为一个符号:
R-S触发器的特点是记住哪个输入端的最终状态为1。
3. D型锁存器(电平触发)
如果期望记住某个时间点上的信号是0还是1,则需要使用锁存器。
我们期望存在一个数据端输入,存在一个保持位输入。当保持位为1时,输出同数据端;否则,输出保持当前不变。
可以先看这样一个电路:
以逻辑与门的输出作为触发器的输入。该电路即可记录当保持位为1时,数据端的输入。当保持位为1时,电路与触发器相同,根据Q或~Q的状态即可知道上次输入的是复位还是置位。
由于在原则上,复位和置位应该是相反的,并且期望只有一个数据输入端,因此对两者设置同输入,并在之间加装反向器。(让数据段与置位端相同,与复位端相反,比较符合最初的设计。)
此时的电路,只要保持位为0,电路输出就丝毫不受数据端的影响;当保持位为1时,电路的输出与数据段相同(数据端1,Q为1;数据端0,Q为0;~Q刚好相反)。并且当保持位从1变为0时,电路输出依旧保持,因此可认为电路“记住”了保持位为1时的输入。
该电路称为电平触发的D型触发器,D表示data端的输入。电平触发表示保持位为某一电平是,触发器才保存数据端的输入值。
多数时候会将保持位称作时钟(clock)。本质上这种信号并不是真的时钟,但是在某些情况下(0和1之间规律的变换)它具有时钟的属性。但是现在的时钟仅仅用来指示什么时候保存数据。
该电路也被称为电平触发的D型锁存器,表示电路锁住了一位数据并保持它,以便将来使用。或者被称为1bit存储器。
4. 2-1选择器
引入一个小电路,会用在带锁存器的计算器中,即“2-1选择器”。如果选择端输入1,则输出同B。
因为当选择端为1时,上侧与门的输出同B,同时下侧的与门输出为0;再经过最后的或门,则最后输入同B。
5. 带锁存器的加法计算器
如果期望计算3个数字相加,则需要用到锁存器,将第一个和第二个数字的加法和存储起来,在将其与第三个数相加。
首先需要封装一个8bits的锁存器,所有的时钟输入连在一起。当时钟信号为1时,D端输入被传递到Q端;当时钟信号变为0时,这8位将保持不变;直到时钟信号再次变为1。
简化锁存器:
暂时不考虑减法运算。先看加法器,将八位加法器的低8bits输出传输至八位锁存器,“保存”开关控制时钟位,通过“来自锁存器”开关控制2-1选择器的输出是来自锁存器还是来自其他开关。该电路就可计算三个8bit数的加法。
改进后的加法器有一个缺点是不能很好的处理进位输出CO。假设前两个数相加使得CO为1,当第三个数加进来的时候,这个信号好像就被忽略掉了。
6. 新型加法计算器
暂时不考虑进位。
只对加法计算器做改进,在锁存器中设置一个清零位。当清零位为1时,Q必输出0。数据端和时钟的组合也可令Q输出0,但是这种组合无法替代清零位。因为我们无法精确控制输入端。
下面是一种新型的加法计算器,其中包含了带清零功能锁存器。
本加法计算器比更符合当前现在计算器的操作方法。使用之前先闭合“清零”开关,锁存器会把所有灯泡熄灭,并将八个0赋值给加法器的B输入;然后通过开关输入A,再闭合“相加”开关,则会将A输入显示在灯泡上和传输给B输入;然后再将第二个操作数输入A,且闭合“相加”开关,则灯泡就会显示相加结果。反复此操作,可以连续进行多次加法运算。
7. 边沿触发的锁存器
只有当时钟端从0跳变为1时才会引起输出端的变化。这与电平触发的区别在于:
- 电平触发器:当时钟输入为0时,数据端输入的任何改变都不会影响输出;
- 边沿触发器:当时钟输入为1时,数据端输入也不会影响输出;
- 边沿触发器:当时钟从0变为1时,会影响。
边沿触发的D型锁存器是由两级R-S触发器按如下方式连接的。左边的为第一级锁存器,记作1stD;右边的是第二级锁存器,记作2ndD。
时钟的输入端即控制1stD,又控制2ndD,只是在控制1ndD时有取反操作;1nd的输出是2stD的输入。因此当时钟输入0时1ndD会将数据输入到2stD;当时钟转为1时,2stD输出。即,此时的整体效果就是从0变为1时,锁存器输出。
边沿触发使用(↑)符号表示:
从0跳到1为正跳变,从1跳到0为负跳变。边沿触发的触发器符号如下图,小三角符号表示为边沿触发。
8. 分频器和行波计数器
把振荡器的输出与边沿触发锁存器的时钟端相连,同时把~Q端连接到数据端。为了使锁存器中继电器的工作能跟得上振荡器,必须先假设振荡器的继电器速度比锁存器中继电器速度慢。
每当时钟输入由0变为1时,Q端的输出就会发生变化(或者从0到1,或者从1到0)。时序图:
如果这个振荡器的频率是20Hz(1秒钟的时间内产生20个周期),那么Q的输出频率就是它的一半,为10Hz。由于这个原因,这种电路称为分频器(frequency divider)。分频器的输出还可以作为另一个分频器的时钟输入,进行再一次的分频。将三个分频器连接在一起为:
上图三个Q输出的变化规律为:
从左往右,从下往上看,分别为0000,0001,0010,…1110,1111完。这一组数字分别表示十进制的0~15。可见,该电路不仅具有分频功能还具有计数功能,每一次时钟正跳变时,计数器就加1。如果添加更多的触发器则可以提供更大范围的计数。将八个锁存器放在一起就构成了一个8位计数器,(Q0是第一个触发器的输出):
这个计数器被称作8位行波计数器。因为变化是一级一级的传过去的,最后一级的触发器必定会有一些延迟。(更先进的计数器叫做“并行(同步)计数器”,这种计数器的所有输出在同一时刻改变)。
时钟信号和输出Q的变化关系为:
9. 计算振荡器的频率
截至目前,已经具备手搓计数器的能力了。计数器的输入主要是一个时钟信号,因此可以将振荡器作为计数器的输入。如果计数器的输出连接灯泡,则0000 0000时灯泡为全灭,1111 1111时为全亮,从全灭到全部亮起总共需要经历255次跳变,从本次全灭到下次全灭则总共需要256次跳变。假设本次全灭到下一次全灭经历了10s,则计数器的频率为256/10=25.6Hz。
10. 带预置和清零的边沿型D触发器
其中,预置和清零输入不可同时为1。预置和清零的输入会覆盖时钟和数据的输入(可以暂且理解为预置和清零的优先级更高)。当预置输入为1时,Q为1;当清零输入为1时,~Q为1。除此之外,该触发器的工作原理与普通边沿式D触发器相同。
真值表和电路符号为: