利用反相器解决锁存器无法复位问题
在之前遗留一个问题, 锁存器 Q 端一旦进入高电平就无法复位, 除非手动在 R 端置入高电平.
原因在于锁存器的输入只接在了 S 端. 那现在需要把输入同时接在 S 和 R 端吗?
根据之前的 R-S 锁存器的真值表:
R | S | Q | !Q |
---|---|---|---|
低 | 低 | 之前状态 | 之前状态 |
低 | 高 | 高 | 低 |
高 | 低 | 低 | 高 |
高 | 高 | 低 | 低 |
真正有效的两个状态是中间两行, 此时 R 和 S 是正好相反的.
而如果 R 和 S 状态相同, 则输出要么是低电平, 要么是保持之前状态. 所以 R 和 S 直接接同一个输入是不行的.
为达到 R 和 S 相反的目的, 可以引入一个反相器(非门), 如下:
如此一来, 无论输入是什么, R 和 S 总是获得一个相反的输入:
在加法器输出的每个锁存器上都引入同样的结构, 如下:
在加法器上应用带反相器的锁存器结构 在线可互动操作示例
如此一来, 一开始在每个 R 端手动设置的输入也不需要了.
现在测试一下, 先做 1+2, 结果是 3(0011):
再改成 1+1, 锁存器的结果也跟随变成了 2, 问题解决了:
但是否会有新的问题呢? 很不幸的, 正如那句"按下葫芦起了瓢"的谚语所说的那样, 如果此时我们把输入都撤掉, 也即是变成类似 0+0:
会发现锁存器的结果也直接变为了 0, 因为它总是实时跟随加法器的输出而变化.
还记得我们引入锁存器的初衷吗? 不就是为了能缓存这个结果吗? 显然需要进一步改进这个结构!