咳,还是篇幅问题,自动操作还是用两篇文章写吧。
目录
加法器实现累加
之前的加法器执行加法时需要手动输入两个数,运算结果不能保存,现在我们有了锁存器,可以尝试着进行累加计算了;
锁存器保存开关断开,不保存结果;反之保存;
第二排开关闭合,进行累加;否则由外界输入;
没错,此处存在的一个问题是,加法器的结果如果进位了,锁存器无法保存;当然我们可以通过合并两个八位加法器来扩展运算的位, 但是这并不能完美解决进位保存问题。
略加改进
上述的累加计算装置还不甚方便,需要我们频繁的开关两个或者至少一个开关,我们希望找到更简单的方法;
通过对锁存器进行一些改变,我们可以得到更适合的锁存器,相对于原来的锁存器(Or触发器),下面的电路增加了清零输入;
稍加改变我们可以得到一个也许跟麻烦但是更傻瓜的累加器;
减少部件以及冗余过程的结果是重复单一的操作变多了。
计数器
自动操作要达到“自动”水准,就要求我们的电路组合可以对时间进行描述。
边沿触发的锁存器
通过对锁存器进行一些改变,我们可以得到边沿触发的锁存器,相对于电平触发,它看起来更像一个“触发”器
为了使时钟输入(Clk)变成触发型,必须把它自己相反的信号进行触发器的迭代;近当时钟输入由零变一时数据端数据才得以传导到输出端;就像彭的一声:教学楼的灯亮了;
把信号由0变1成为正跳变,由1变0称为负跳变;
D | Clk | Q | ~Q |
---|---|---|---|
0 | + | 0 | 1 |
1 | + | 1 | 0 |
X | 0 | Q | ~Q |
说得形象些,把锁存器看作二级水库;
当Clk为0时,一级闸门打开,二级关闭,D传到到一半;
当Clk为1时,一级闸门关闭,二级打开,D才能继续传输;
振荡器的妙用:分频器
如果把振荡器(clock)接到时钟输入上会有什么结果呢?
(这里假设触发器运算频率远大于振荡器频率)
(Clk左侧的三角形标志代表边沿触发)
我们看看随时间过去的真值表
D | Clk | Q | ~Q |
---|---|---|---|
1 | 0 | 0 | 1 |
1 | 1(+) | 1 | 0 |
0 | 0 | 1 | 0 |
0 | 1(+) | 0 | 1 |
1 | 0 | 0 | 1 |
… | … | … | … |
或许时序图更好观察
对,这个电路成倍降低了原clock的频率!
这就是分频器;
分频器的串并联:计数器
我们尝试着把上述分频器进行“串联”
Clk为原始频率,Q1半之,Q2再半之,Q3又半之;
我们把这四个输出一起来看
再旋转90度,然后就有下表啦!
二进制 | 十进制 | 二进制 | 十进制 |
---|---|---|---|
0000 | 0 | 1000 | 8 |
0001 | 1 | 1001 | 9 |
0010 | 2 | 1010 | 10 |
0011 | 3 | 1011 | 11 |
0100 | 4 | 1100 | 12 |
0101 | 5 | 1101 | 13 |
0110 | 6 | 1110 | 14 |
0111 | 7 | 1111 | 15 |
不正是自动计数的计数器吗!!!
八位行波计数器
上述的计数器仅仅串联了三个,如果我们串联七个或者是更多就可以得到计数范围更广的计数器啦,比如:
Clk和八位合并输出:
但这或许仍不是我们想要的,它只会一位一位的数数,无法定时啊
带预置和清零的触发器
我们在构造累加器的时候,加了预置清零的选项,对边沿触发器同样也可以这样做
电路图符号
有了这样的边沿触发器,在通过串联等一系列的方式组成计数器,自然功能会更加强大啦!