利用触发器实现计数器

作者: CodingTech | 来源:发表于2016-11-15 13:19 被阅读495次

概述

前面的课程中,介绍了基本触发器的功能特性,对触发器的内部电路进行了分析;然后还对时序电路分析给出了基本思路,即抓住三个核心方程:输出方程、激励方程、次态方程。

学习组合电路和基本触发器的目的是为了设计电路,数字逻辑这门课程的目的是能够设计简单的同步时序电路,并对其简单分析,下文通过一个模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的关系,其对应的卡诺图为:

Q3Q2\Q1Q0 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

因此,最终的电路图为:

模16减1时序电路图

分析

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

小结

不管是分析时序电路,还是设计时序电路,切忌简单背诵分析和设计步骤,抓住分析和设计的关键点(分析电路时的三个方程、设计电路时的状态迁移)即可。

简单意味着复杂,计数器可以说是最基本的时序逻辑电路,利用计数器可以做出十分复杂且有用的电路。然而,本文讲解的计数器除了时钟脉冲,没有其它输入,即其不可控,无法灵活使用,下一节将详细讲解163计数器及其应用。

如有错,请大家批评指正!谢谢!

相关文章

  • 利用触发器实现计数器

    概述 前面的课程中,介绍了基本触发器的功能特性,对触发器的内部电路进行了分析;然后还对时序电路分析给出了基本思路,...

  • 互动教学经验-第26讲-PPT互动课件必学功能-插入对象-图片全

    前面主要讲了利用“触发器”实现很多的互动教学功能,现在我们来讲一讲利用“插入对象”这个功能来实现很多很实用且有趣的...

  • 嵌入式10月13日总结。

    今天利用通用计数器实现了输出PWM波形。利用CCR控制电流输出的有效范围。这样可以实现呼吸灯,电机的从慢变快。由快...

  • 数字电路实验(05)二进制计数器设计

    一.实验要求 1.1.实验目的 认识二进制同步计数器的定义、工作状态及信号波形; 熟悉基于JK触发器实现二进制同步...

  • 并发辅助类CountDownLatch的使用和源码

    CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比...

  • CountDownLatch用法介绍

    CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比...

  • 10.13

    今天讲了通用定时器PWM,利用计数器实现,进而实现PWM输出波形,然后通过改变CCR来控制电流,最后编写程序,实现...

  • Oracle与Mysql中的触发器(Trigger)对比

    Oracle触发器 Demo(通过触发器结合创建序列(sequence)的方式实现字段递增) Mysql 触发器(...

  • 计数器设计

    一个计数器通常是由一组触发器构成,该组触发器按照预先给定的顺序改变其状态,如果所有触发器的状态改变是在同一时钟脉冲...

  • redis counter demo | redis并发计数器

    一、说明 利用redis操作的原子性,实现java 多线程并发的情况下实现计数器。 我本机测试多个线程操作之后,结...

网友评论

本文标题:利用触发器实现计数器

本文链接:https://www.haomeiwen.com/subject/fdbkpttx.html