计数器应该是比较常用的时序电路了。计数器分很多种,在国内见的比较多的应该是“沙计数器”了,就是1=1,11=2,111=3那种
file:///C:\Users\719823~1\AppData\Local\Temp\ksohtml\wps_clip_image-13263.png
file:///C:\Users\719823~1\AppData\Local\Temp\ksohtml\wps_clip_image-19196.png
这种设计一般用在小游戏中,如果用来计比较大的数,那就比较麻烦了,因为每扩展一位,计数器就要长两格,相比之下,二进制计数器的优点就显现出来了。
假如我要计127个数,那么“沙计数器”至少要254格,但是二进制才占15格左右。
file:///C:\Users\719823~1\AppData\Local\Temp\ksohtml\wps_clip_image-12231.png
可以看到,白色的部分都是一样的,单个的白色就是T触发器了,T触发器只有一个输入,一个输出,输入是接收时钟或脉冲信号的,输入会随着输入端而反转,也就是说假如原来是1,输入有信号时输出就变成了0。
上图的连接方式是最简单的,叫行波计数器(把n位的输出连接到n+1位的输入),也就是说他们4个T触发器的输入端不是同步的,你只要给第一个的输入一个信号,后面的会随第一个的状态改变而做出改变。这种计数器用的材料最少,但是速度也相对较慢,最坏的情况,要等n*T的时间才能输出最终结果(n是位数,T是T触发器自身的延时)因为n的输出连接着n+1的输入,所以要逐次运算
所以呢,要解决这个问题就要用到同步计数器了,也就是一个时钟或脉冲信号可以控制所有的T触发器的输入
file:///C:\Users\719823~1\AppData\Local\Temp\ksohtml\wps_clip_image-6366.png
我临时做了一个,没压缩,比行波那个大很多,但是速度提高不少,下面是电路图
file:///C:\Users\719823~1\AppData\Local\Temp\ksohtml\wps_clip_image-5090.png
这是带了使能端的T触发器,用D触发器改的,我先把它编辑成模块
file:///C:\Users\719823~1\AppData\Local\Temp\ksohtml\wps_clip_image-18921.png
T就是T触发器的时钟输入,EN是使能端,当使能端为0,T触发器会忽视T端的信号,Q是输出
file:///C:\Users\719823~1\AppData\Local\Temp\ksohtml\wps_clip_image-5326.png
Logisim里不能很好地模拟时序电路,所以我就不展示效果了。因为EN是控制是否忽视T端信号的,所以当EN为0时T端是无效的,那个与门是用来检测前一位是否为1的,如果少了与门,那么同步了T端的话,所有的T触发器会同时亮起。
原理和行波的一样,都是根据前一个T触发器来判断当前T触发器应该怎么变化,但是这种可以使全部T触发器同时判断是否变化,省去了逐位判断的时间
还有一种叫同步并行二进制计数器,是最快的二计数器设计,但是在MC中做起来比较麻烦,所以就忽略了