利用触发器实现计数器

2019-04-14 17:06发布

概述

前面的课程中,介绍了基本触发器的功能特性,对触发器的内部电路进行了分析;然后还对时序电路分析给出了基本思路,即抓住三个核心方程:输出方程、激励方程、次态方程。 学习组合电路和基本触发器的目的是为了设计电路,数字逻辑这门课程的目的是能够设计简单的同步时序电路,并对其简单分析,下文通过一个模16的减1计数器进行说明。

基本流程

要设计时序电路,首先必须要对功能需求进行分析,模16减1计数器的功能需求很显然应该是: 15 --> 14 --> 13 --> 12 --> ... --> 1 --> 0 --> 15 --> 14 --> ...。 有了上面的迁移关系,接下来应该做的是如何实现这种转换。显然,上面的这种转换关系是我们人类的头脑意识,电路并不知情,因此,我们需要给上面的这种关系进行形式化描述,即对15,14等数字(这个例子里直接认为是状态)进行编码(这个编码是任意的,可以自由发挥,但是一般我们采用大家都认可的规范,这个例子中用二进制数进行编码),编码规则为:
  • 15: 1111
  • 14: 1110
  • 13: 1101
  • ...
  • 0:0000
    显然,这里需要4个触发器来存储需要表达的状态。
然后,如何表述状态之间的转换关系呢?前面学习的状态转移表刚好可以表述现态和次态之间的关系,如下表所示: Q3Q2Q1Q0 Q3(t+1)Q2(t+1)Q1(t+1)Q0(t+1) 1111 1110 1110 1101 1101 1100 1100 1011 1011 1010 1010 1001 1001 1000 1000 0111 0111 0110 0110 0101 0101 0100 0100 0011 0011 0010 0010 0001 0001 0000 0000 1111 在得到了编号后状态的基本迁移关系的基础上,需要进一步获取次态和现态之间的关系。上表是一个状态转移真值表,需要得到准确的次态与现态之间的关系。处理方式有两种,一种是直接利用最小项之和,另一种是卡诺图,通常情况下,对于6变量以下,一般采用卡诺图。 首先寻求Q3(t+1)与Q3Q2Q1Q0的关系,其对应的卡诺图为: Q3Q2Q1Q0 00 01 11 10 00 1 0 0 0 01 0 0 0 0 11 1 1 1 1 10 0 1 1 1 注:卡诺图中的编号即表示了现态 利用卡诺图化简规则,得到:
Q3(t+1) = Q3 !(!Q2!Q1!Q0) + !Q3 (!Q2!Q1!Q0) // 由于markdown中没有异或符号,直接展开
同理,可以获取Q2(t+1)、Q1(t+1)、Q0(t+1)与Q3Q2Q1Q0之间的关系,得到:
Q2(t+1) = Q2 !(!Q1!Q0) + !Q2 (!Q1!Q0)
Q1(t+1) = Q1 Q0 + !Q1 (!Q0)
Q0(t+1) = !Q0
此时,已经得到了次态与现态的准确关系,剩下的工作就是根据所提供的触发器来设计。假设,给定的是4个上升沿J-K触发器,则需要根据J-K触发器的次态方程,对上述方程进行匹配赋值。由此得到:
J3 = K3 = (!Q2!Q1!Q0)
J2 = K2 = (!Q1!Q0)
J1 = K1 = (!Q0)
J0 = K0 = 1
因此,最终的电路图为: 2756933-65d354eea67dcdcf.png 模16减1时序电路图

分析

至此,模16减1计数器已经实现了。分析上面得到的次态与现态的表达式,其实可以直接写出模32减1的计数器;另外,也可以看出:Q0的状态每个脉冲都会跳变一次,Q1的状态每两个脉冲跳变一次,Q2的状态每四个脉冲跳变一次,Q3的状态每8个脉冲跳变一次,这种跳变对应着脉冲的2分频、4分频、8分频、16分频。

小结

不管是分析时序电路,还是设计时序电路,切忌简单背诵分析和设计步骤,抓住分析和设计的关键点(分析电路时的三个方程、设计电路时的状态迁移)即可。 简单意味着复杂,计数器可以说是最基本的时序逻辑电路,利用计数器可以做出十分复杂且有用的电路。然而,本文讲解的计数器除了时钟脉冲,没有其它输入,即其不可控,无法灵活使用,下一节将详细讲解163计数器及其应用。 如有错,请大家批评指正!谢谢!