6.3 常用的时序逻辑电路
6.3.1 移位寄存器
移位寄存器(Shift Register)不仅具有存储代码的功能,还具有移位功能。移位功能是指寄存器内存储的代码在移位脉冲的作用下依次左移或右移。移位寄存器不仅可以用来寄存代码,还可以实现数据的串行-并行转换、数值的运算以及数据处理等。
如图6.3.1所示的电路是由边沿触发方式的D触发器组成的4位移位寄存器,其中第一个触发器FF₀的输入端接收输入信号,其余触发器输入端均与前边一个触发器的Q端相连。
在时钟上升沿同时作用于所有触发器时,触发器输入端(D端)的状态尚未改变,因此FF₀按Q₀原来的状态翻转,FF₁按Q₁原来的状态翻转,依此类推。总的效果是寄存器里的代码依次右移1位。
例如,在4个时钟周期内输入代码依次为1011,而移位寄存器的初始状态为Q₀Q₁Q₂Q₃=0000,那么在移位脉冲的作用下,寄存器里的代码移动情况如表6.3.1所示。
表6.3.1 移位寄存器中代码的移动状况
CLK 顺序 | 输入 D₀ | Q₀ | Q₁ | Q₂ | Q₃ |
---|---|---|---|---|---|
0 | 1 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 0 |
2 | 1 | 0 | 1 | 0 | 0 |
3 | 1 | 1 | 0 | 1 | 0 |
4 | 1 | 1 | 1 | 0 | 1 |
经过4个CLK信号后,串行输入的4位代码全部移入移位寄存器,同时在4个触发器的输出端得到了并行输出的代码。
图6.3.3是用JK触发器组成的4位移位寄存器,逻辑功能与图6.3.1相同。
为了增加逻辑功能和使用灵活性,有的移位寄存器集成电路附加了左、右移控制、数据并行输入、保持、异步置零等功能。图6.3.4给出的74HC194A 4位双向移位寄存器就是一个典型例子。
74HC194A 由4个触发器FF₀、FF₁、FF₂、FF₃和各自的输入控制电路组成。数据右移串行输入端为D_R,左移串行输入端为D_L,数据并行输入端为D₀-D₃,数据并行输出端为Q₀-Q₃。移位寄存器的工作状态由控制端S₁和S₀的状态指定。
表6.3.2 双向移位寄存器 74HC194 的功能表
R | S₁ | S₀ | 工作状态 |
---|---|---|---|
0 | X | X | 置零 |
1 | 0 | 0 | 保持 |
1 | 0 | 1 | 右移 |
1 | 1 | 0 | 左移 |
1 | 1 | 1 | 并行输入 |
图6.3.5 是用两片 74HC194A 接成的 8 位双向移位寄存器连接图。两片的 Q 接至另一片的 D_R,同时并联 S₁、S₀、CLK 和 R'。
例 6.3.1:分析图 6.3.6 所示电路的逻辑功能,并指出在图 6.3.7 所示的时钟信号及 S₁、S₀ 状态作用下,t₄ 时刻以后输出 Y 与两组并行输入的二进制数 M、N 在数值上的关系。
解:该电路由两片 4 位加法器 74283 和 4 片移位寄存器 74HC194A 组成。两片 74283 接成了一个 8 位并行加法器,4 片 74HC194A 分别接成了两个 8 位单向移位寄存器。两个 8 位移位寄存器的输出分别加到 8 位并行加法器的两组输入端,因此图 6.3.6 所示电路是将两个 8 位移位寄存器里的内容相加的运算电路。
根据波形图,当 t=t₁ 时,CLK₁ 和 CLK₂ 的第一个上升沿同时到达,因为此时 S₁=1,S₀=1,所以移位寄存器处于数据并行输入工作状态,M、N 的数值被分别存入两个移位寄存器中。此后,M 和 N 同时右移 1 位。若 m₀ 和 n₀ 是 M、N 的最低位,则右移 1 位相当于两数各乘以 2。至 t=t₄ 时,M 又右移了 2 位,所以此时上面一个移位寄存器里的数为 M×8,下面一个移位寄存器里的数为 N×2。两数经加法器相加后得到 Y=M×8+N×2。
6.3 常用的时序逻辑电路
6.3.2 计数器
计数器在数字系统中被广泛使用,主要用于对时钟脉冲进行计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。
分类
-
按触发器翻转方式分类
- 同步计数器:当时钟脉冲输入时,所有触发器同时翻转。
- 异步计数器:触发器的翻转有先后,不是同时发生的。
-
按计数过程中数字增减分类
- 加法计数器:随着计数脉冲的不断输入进行递增计数。
- 减法计数器:随着计数脉冲的不断输入进行递减计数。
- 可逆计数器(加/减计数器):可进行递增和递减计数。
-
按数字编码方式分类
- 二进制计数器
- 二-十进制计数器
- 格雷码计数器
-
按计数容量分类
- 十进制计数器
- 六十进制计数器
同步计数器
同步二进制计数器:
根据二进制加法运算规则,最低位在每次加1时都要改变状态,而第1位以下各位皆为1时,第1位应改变状态(由0变成1或由1变成0)。
同步计数器通常用T触发器构成,结构形式有两种:
- 控制输入端T的状态。
- 控制时钟信号。
图6.3.8所示电路是按上述原则接成的4位二进制同步加法计数器:
各触发器的驱动方程为: 𝑇0=1T0=1 𝑇𝑖=𝑄0⋅𝑄1⋅…⋅𝑄𝑖−1 (𝑖=1,2,…,𝑛−1)Ti=Q0⋅Q1⋅…⋅Qi−1(i=1,2,…,n−1)
根据T触发器的特性方程和驱动方程可得到电路的状态方程和输出方程。
6.3.3 用T触发器构成的同步二进制加法计数器
通过T触发器实现同步二进制加法计数,电路的状态转换表如下表所示:
表6.3.3 图6.3.8电路的状态转换表
计数顺序 | 电路状态 𝑄3𝑄2𝑄1𝑄0Q3Q2Q1Q0 | 等效十进制数 | 进位输出 𝐶C |
---|---|---|---|
0 | 0000 | 0 | 0 |
1 | 0001 | 1 | 0 |
2 | 0010 | 2 | 0 |
3 | 0011 | 3 | 0 |
4 | 0100 | 4 | 0 |
5 | 0101 | 5 | 0 |
6 | 0110 | 6 | 0 |
7 | 0111 | 7 | 0 |
8 | 1000 | 8 | 0 |
9 | 1001 | 9 | 0 |
10 | 1010 | 10 | 0 |
11 | 1011 | 11 | 0 |
12 | 1100 | 12 | 0 |
13 | 1101 | 13 | 0 |
14 | 1110 | 14 | 0 |
15 | 1111 | 15 | 1 |
通过电路状态转换表和状态转换图(图6.3.9和图6.3.10),可以看到每输入16个计数脉冲,计数器工作一个循环,并在输出端Q3产生一个进位输出信号,所以这个电路称为十六进制计数器。
单时钟同步十六进制加/减计数器 74LS191
图6.3.14显示了一个单时钟同步十六进制加/减计数器 74LS191 的逻辑图。
其功能表如表6.3.5所示:
表6.3.5 同步十六进制加/减计数器 74LS191 的功能表
CLK | 𝑆′S′ | 𝐿𝐷′LD′ | 𝑈′/𝐷′U′/D′ | 工作状态 |
---|---|---|---|---|
X | 1 | 1 | X | 保持 |
X | X | 0 | X | 预置数 |
↑ | 0 | 1 | 0 | 加法计数 |
↑ | 0 | 1 | 1 | 减法计数 |
图6.3.15是其时序图。由时序图可以清楚地看到CLK和CLK0的时间关系。
由于图6.3.14所示电路只有一个时钟信号输入端,电路的加、减由U/D的电平决定,所以称这种电路结构为单时钟结构。
双时钟同步十六进制加/减计数器 74LS193
图6.3.16是双时钟加/减计数器 74LS193 的电路结构图。该电路采用控制时钟信号的结构形式。
74LS193也具有异步置零和异步预置数功能。当R0=1时,所有触发器置成Q=0状态,而不受计数脉冲控制。当LD'=0时,立即将D0-D3的状态置入FF0-FF3中,与时钟脉冲无关。
通过上述计数器的逻辑结构和功能分析,可以看到不同类型计数器在数字系统中的应用和工作原理,有助于理解和设计复杂的数字电路系统。
6.3 常用的时序逻辑电路
二、异步计数器
1. 异步二进制计数器
异步计数器在做“加1”计数时采取从低位到高位逐位进位的方式工作。因此,各个触发器不是同步翻转的。
首先讨论二进制加法计数器的构成方法。按照二进制加法计数规则,每一位如果已经是1,则再记入1时应变为0,同时向高位发出进位信号,使高位翻转。使用下降沿动作的T触发器组成计数器并令T=1,只需将低位触发器的Q端接至高位触发器的时钟输入端。当低位由1变为0时,Q端的下降沿正好作为高位的时钟信号。
图6.3.23是用下降沿触发的T触发器组成的3位二进制加法计数器,T触发器是将JK触发器的J=K=1而得到的。所有的触发器在时钟信号下降沿动作,因此进位信号应从低位的Q端引出。最低位触发器的时钟信号CLK₀就是要记录的计数输入脉冲。
根据T触发器的翻转规律,可绘制在一系列CLK₀脉冲信号作用下Q₀、Q₁、Q₂的电压波形,如图6.3.24所示。由图可见,触发器输出端新状态的建立比CLK下降沿滞后一个触发器的传输延迟时间。
从时序图出发还可以列出电路的状态转换表,绘制状态转换图。这些都和同步二进制计数器相同,不再重复。
使用上升沿触发的T触发器同样可以组成异步二进制加法计数器,但每一级触发器的进位脉冲应改由Q'端输出。
按照二进制减法计数规则,若低位触发器已经为0,则再输入一个减法计数脉冲后应翻成1,同时向高位发出借位信号,使高位翻转。图6.3.25是按上述规则接成的3位二进制减法计数器,图中仍采用下降沿动作的JK触发器接成T触发器使用,并令T=1。其时序图如图6.3.26所示。
异步二进制减法计数器和异步二进制加法计数器的比较:
- 两者都是将低位触发器的一个输出端接到高位触发器的时钟输入端而组成的。
- 使用下降沿动作的T触发器时,加法计数器以Q端为输出端,减法计数器以Q'端为输出端。
- 使用上升沿动作的T触发器时,情况正好相反,加法计数器以Q'端为输出端,减法计数器以Q端为输出端。
常见的异步二进制加法计数器产品有:
- 4位的:741S293、74LS393、74HC393
- 7位的:CC4024
- 12位的:74HC4040
- 14位的:74HC4020
2. 异步十进制计数器
异步十进制加法计数器是在4位异步二进制加法计数器的基础上加以修改而得到的。修改时要解决的问题是如何使4位二进制计数器在计数过程中跳过从1010到1111这6个状态。
图6.3.27是异步十进制加法计数器的典型电路。假定所用的触发器为TTL电路,J、K端悬空时相当于接逻辑1电平。
如果计数器从Q₃Q₂Q₁Q₀=0000开始计数,在输入第八个计数脉冲以前,FF₀、FF₁和FF₂的J和K始终为1,即工作在T触发器的T=1状态,因而工作过程和异步二进制加法计数器相同。虽然Q₀输出的脉冲也送给了FF₃,但由于每次Q₀的下降沿到达时J₃=Q₀Q₂=0,所以FF₃一直保持0状态不变。
当第八个计数脉冲输入时,由于J₃=K₃=1,所以Q₀的下降沿到达后FF₃由0变为1,同时J₃也随Q₀变为0状态。第九个计数脉冲输入后,电路状态变成Q₃Q₂Q₁Q₀=1001。第十个计数脉冲输入后,FF₀翻成0,同时Q₀的下降沿使FF₃置0,于是电路从1001返回到0000,跳过了1010~1111这6个状态,成为十进制计数器。
通过这个例子可以看到,在分析一些比较简单的异步时序电路时,可以采取从物理概念出发直接画波形图的方法分析其功能,而不一定要按前面介绍的异步时序电路的分析方法去写方程式。
常见的异步十进制加法计数器产品有:
- 741S290
异步计数器的优缺点:
- 优点:结构简单,用T触发器构成二进制计数器时无需附加其他电路。
- 缺点:工作频率低,因为各级触发器以串行进位方式连接,在最不利情况下需要经过所有级的触发器传输延迟时间之和后新状态才能稳定建立;状态译码时存在竞争-冒险现象。
三、任意进制计数器的构成方法
根据需要,可以用已有的计数器产品经过外电路的不同连接方式构成任意一种进制的计数器。
1. 𝑀<𝑁M<N 的情况
在N进制计数器的顺序计数过程中,使其跳越N-M个状态即可得到M进制计数器。实现跳跃的方法有置零法和置数法。
- 置零法:适用于有置零输入端的计数器。当计数器从全0状态开始计数,接收M个计数脉冲后进入状态S𝑀M,若将S𝑀M状态译码产生一个置零信号加到计数器的异步置零输入端,则计数器将立刻返回状态S00,从而跳过N-M个状态。
- 置数法:通过给计数器重复置入某个数值的方法跳越N-M个状态,从而获得M进制计数器。
图6.3.30(a)和图6.3.30(b)分别示意了置零法和置数法的原理:
例 6.3.2
试利用同步十进制计数器74160接成同步六进制计数器。74160的逻辑图见图6.3.19。
- 置零法:
图6.3.31所示电路是采用异步置零法接成的六进制计数器。当计数器计成Q₃Q₂Q₁Q₀=0110状态时,门G输出低电平信号给R端,将计数器置零,回到0000状态。
由于置零信号随计数器被置零立即消失,置零信号持续时间极短,可能导致电路误动作。因此,这种接法的电路可靠性不高。图6.3.33所示的改进电路克服了这一缺点。
- 置数法:
采用置数法时可以从计数循环中的任何一个状态置入适当的数值而跳越N-M个状态,得到M进制计数器。图6.3.34中给出了两种不同的接法。
图6.3.35所示状态转换图中实线表示图(a)的接法,虚线表示图(b)的接法:
2. 𝑀>𝑁M>N 的情况
这时需要用多片N进制计数器组合构成M进制计数器。各片之间的连接方式有串行进位方式、并行进位方式、整体置零方式和整体置数方式。
- 串行进位方式:以低位片的进位输出信号作为高位片的时钟输入信号。
- 并行进位方式:以低位片的进位输出信号作为高位片的工作状态控制信号(计数的使能信号),两片的CLK输入端同时接计数输入信号。
例 6.3.3
试用两片同步十进制计数器接成百进制计数器。
图6.3.36是并行进位方式的接法:
图6.3.37是串行进位方式的接法:
当M为大于N的素数时,必须用整体置零方式或整体置数方式构成M进制计数器。
- 整体置零方式:首先将两片N进制计数器接成一个大于M进制的计数器,然后在计数器计为M状态时译出异步置零信号,将两片N进制计数器同时置零。
- 整体置数方式:首先将两片N进制计数器接成一个大于M进制的计数器,然后在选定的某一状态下译出LD'=0信号,将两个N进制计数器同时置入适当的数据,跳过多余的状态,获得M进制计数器。
例 6.3.4
试用两片同步十进制计数器74160接成二十九进制计数器。
图6.3.38是整体置零方式的接法:
图6.3.39是整体置数方式的接法:
通过以上对异步计数器和任意进制计数器的分析与设计方法的介绍,可以帮助更好地理解和应用这些计数器电路。
异步计数器
1. 异步二进制计数器
异步计数器在进行“加1”计数时采用从低位到高位逐位进位的方式,因此各个触发器不是同时翻转的。首先讨论异步二进制加法计数器的构成方法。
根据二进制加法计数规则,每一位如果已经是1,再记入1时应变为0,同时向高位发出进位信号,使高位翻转。若使用下降沿动作的T触发器组成计数器并令T=1,只要将低位触发器的Q端接至高位触发器的时钟输入端,当低位由1变为0时,Q端的下降沿正好可以作为高位的时钟信号。
电路原理图
图6.3.23是用下降沿触发的T触发器组成的3位二进制加法计数器,T触发器是令JK触发器的J=K=1而得到的。因为所有的触发器都是在时钟信号下降沿动作,所以进位信号应从低位的Q端引出。最低位触发器的时钟信号CLK也是要记录的计数输入脉冲。
根据T触发器的翻转规律可以画出在一系列CLK脉冲信号作用下Q0, Q1, Q2的电压波形,如图6.3.24所示。由图可见,触发器输出端新状态的建立要比CLK下降沿滞后一个触发器的传输延迟时间。
时序图
用上升沿触发的T触发器同样可以组成异步二进制加法计数器,但每一级触发器的进位脉冲应改由Q’端输出。如果将T触发器之间按二进制减法计数规则连接,就得到二进制减法计数器。图6.3.25是按上述规则接成的3位二进制减法计数器。图中仍采用下降沿动作的JK触发器接成T触发器使用,并令T=1。它的时序图如图6.3.26所示。
电路原理图
时序图
通过比较可以发现,异步二进制减法计数器和异步二进制加法计数器都是将低位触发器的一个输出端接到高位触发器的时钟输入端而组成的。在采用下降沿动作的T触发器时,加法计数器以Q端为输出端,减法计数器以Q’端为输出端。在采用上升沿动作的T触发器时,情况正好相反,加法计数器以Q’端为输出端,减法计数器以Q端为输出端。
常见的异步二进制加法计数器产品有4位的(如741S293、74LS393、74HC393等)、7位的(如CC4024等)、12位的(如74HC4040等)和14位的(如74HC4020等)几种类型。
2. 异步十进制计数器
异步十进制加法计数器是在4位异步二进制加法计数器的基础上加以修改而得到的。修改时要解决的问题是如何使4位二进制计数器在计数过程中跳过从1010到1111这6个状态。
电路原理图
图6.3.27是异步十进制加法计数器的典型电路。假定所用的触发器为TTL电路,J、K端悬空时相当于接逻辑1电平。
计数器从Q3Q2Q1Q0=0000开始计数,在输入第八个计数脉冲以前FF0、FF1和FF2的J和K始终为1,工作过程和异步二进制加法计数器相同。在此期间虽然Q3输出的脉冲也送给了FF3,但由于每次Q3的下降沿到达时J3=Q2Q1=0,所以FF3一直保持0状态不变。
当第八个计数脉冲输入时,由于J3=K3=1,所以Q3的下降沿到达后FF3由0变为1。同时,J3也随Q变为0状态。第九个计数脉冲输入后,电路状态变成Q3Q2Q1Q0=1001。第十个计数脉冲输入后,FF0翻成0,同时Q3的下降沿使FF3置0,电路从1001返回到0000,跳过了1010~1111这6个状态,成为十进制计数器。
时序图
通过这个例子可以看到,在分析一些比较简单的异步时序电路时,可以采取从物理概念出发直接画波形图的方法分析其功能,而不一定要按前面介绍的异步时序电路的分析方法去写方程式。
异步十进制加法计数器逻辑图
74IS290就是按照图6.3.27所示电路的原理制成的异步十进制加法计数器,它的逻辑图如图6.3.29所示。为了增加使用的灵活性,FF2和FF3的CLK端没有与Q3端连在一起,而是从CLK端单独引出。若以CLK0为计数输入端、Q3为输出端,即得到二进制计数器(或二分频器);若以CLK1为输入端,Q2为输出端,则得到五进制计数器(或五分频器);若将CLK1与Q3相连,同时以CLK1为输入端、Q3为输出端,则得到十进制计数器(或十分频器)。因此,又将这个电路称为二-五-十进制异步计数器。
和同步计数器相比,异步计数器具有结构简单的优点。在用T触发器构成二进制计数器时,可以不附加任何其他电路。但异步计数器也存在两个明显的缺点。第一个缺点是工作频率比较低,因为异步计数器的各级触发器是以串行进位方式连接的,所以在最不利的情况下要经过所有各级触发器传输延迟时间之和以后,新状态才能稳定建立起来。第二个缺点是在电路状态译码时存在竞争-冒险现象。这两个缺点使异步计数器的应用受到了很大的限制。
任意进制计数器的构成方法
从降低成本的角度考虑,集成电路的定型产品必须有足够大的批量。因此,目前常见的计数器芯片在计数进制上只做成应用较广的几种类型,如十进制、十六进制、7位二进制、12位二进制、14位二进制等。在需要其他任意一种进制的计数器时,只能用已有的计数器产品经过外电路的不同连接方式得到。
假定已有的是N进制计数器,而需要得到的是M进制计数器。这时有M<N和M>N两种可能的情况。下面分别讨论两种情况下构成任意一种进制计数器的方法。
1. M<N的情况
在N进制计数器的顺序计数过程中,若设法使之跳越N-M个状态,就可以得到M进制计数器了。实现跳跃的方法有置零法(或称复位法)和置数法(或称置位法)两种。
置零法 置零法适用于有置零输入端的计数器。对于有异步置零输入端的计数器,它的工作原理是这样的:设原有的计数器为N进制,当它从全0状态S0开始计数并接收了M个计数脉冲以后电路进入SM状态。如果将SM状态译码产生一个置零信号加到计数器的异步置零输入端,则计数器将立刻返回S0状态,这样就可以跳过N-M个状态而得到M进制计数器(或称为分频器)。
由于电路一进入SM状态后立即又被置成S0状态,所以SM状态仅在极短的瞬时出现,在稳定的状态循环中不包括SM状态。
对于有同步置零输入端的计数器,由于置零输入端变为有效电平后计数器并不会立刻被置零,必须等下一个时钟信号到达后,才能将计数器置零,因此应由SM-1状态译出同步置零信号。而且,SM状态包含在稳定状态的循环当中。例如同步十进制计数器74162、同步十六进制计数器74163就都是采用同步置零方式。
置数法 置数法与置零法不同,它是通过给计数器重复置入某个数值的方法跳跃N-M个状态,从而获得M进制计数器,如图6.3.30(b)所示。置数操作可以在电路的任何一个状态下进行。这种方法适用于有预置数功能的计数器电路。
对于同步式预置数的计数器(如74160、74161),LD’=0的信号应从SM状态译出,待下一个CLK信号到来时,才将要置入的数据置入计数器中。稳定的状态循环中包含有SM状态。而对于异步式预置数的计数器(如74LS190、741S191),只要LD’=0信号一出现,立即会将数据置入计数器中,而不受CLK信号的控制,因此LD’=0信号应从SM状态译出。SM状态只在极短的瞬间出现,稳态的状态循环中不包含这个状态,如图6.3.30(b)中虚线所示。
实例 【例6.3.2】试利用同步十进制计数器74160接成同步六进制计数器。74160的逻辑图见图6.3.19。它的功能表与74161的功能表(见表6.3.4)相同。
解:因为74160兼有异步置零和同步预置数功能,所以置零法和置数法均可采用。图6.3.31所示电路是采用异步置零法接成的六进制计数器。当计数器计成Q3Q2Q1Q0=0110(即S6)状态时,担任译码器的门G输出低电平信号给R0端,将计数器置零,回到0000状态。电路的状态转换图如图6.3.32所示。
由于置零信号随着计数器被置零而立即消失,所以置零信号持续时间极短,如果触发器的复位速度有快有慢,则可能动作慢的触发器还未来得及复位,置零信号已经消失,导致电路误动作。因此,这种接法的电路可靠性不高。
为了克服这个缺点,时常采用图6.3.33所示的改进电路。图中的与非门G1起译码器的作用。当电路进入0110状态时,它输出低电平信号。与非门G2和G3组成了SR锁存器,以它Q'端输出的低电平作为计数器的置零信号。
若计数器从0000状态开始计数,则第六个计数输入脉冲上升沿到达时计数器进入0110状态,G1输出低电平,将SR锁存器置1,Q'端的低电平立刻将计数器置零。这时虽然G1输出的低电平信号随之消失了,但SR锁存器的状态仍保持不变,因而计数器的置零信号得以维持。直到计数脉冲回到低电平以后,SR锁存器被置零,Q'端的低电平信号才消失。可见,加到计数器R端的置零信号宽度与输入计数脉冲高电平持续时间相等。同时,进位输出脉冲也可以从SR锁存器的Q端引出,这个脉冲的宽度与计数脉冲高电平宽度相等。
有些计数器产品中,将G1、G2、G3组成的附加电路直接制作在计数器芯片上,在使用时就不用外接附加电路了。
采用置数法构成六进制计数器的电路
图6.3.34中给出了两个不同的方案,其中图(a)的接法是用Q3Q2Q1Q0=0101状态译码产生LD'=0信号,下一个CLK信号到达时置入0000状态,从而跳过0110-1001这4个状态,得到六进制计数器,如图6.3.35中的实线所表示的那样。
从图6.3.35所示的状态转换图中可以发现,图6.3.34(a)电路所取的6个循环状态中没有1001这个状态。因为进位输出信号C是由1001状态译码产生的,所以计数过程中C端始终没有输出信号。图6.3.31电路也存在同样的问题。这时的进位输出信号只能从Q2端引出。
若采用图6.3.34(b)所示电路的方案,则可以从C端得到进位输出信号。在这种接法下,是用0100状态译码产生LD'=0信号,下一个CLK信号到来时置入1001(如图6.3.35中的虚线所示),因而循环状态中包含了1001这个状态,每个计数循环都会在C端给出一个进位脉冲。
由于74160的预置数是同步式的,即LD'=0以后,还要等下一个CLK信号到来时才置入数据,而这时LD'=0的信号已稳定地建立了,所以不存在异步置零法中因置零信号持续时间过短而可靠性不高的问题。
状态转换图
2. M>N的情况
这时必须用多片N进制计数器组合起来,才能构成M进制计数器。各片之间(或称为各级之间)的连接方式可分为串行进位方式、并行进位方式、整体置零方式和整体置数方式几种。下面仅以两级之间的连接为例说明这四种连接方式的原理。
若M可以分解为两个小于N的因数相乘,即M=N1×N2,则可采用串行进位方式或并行进位方式将一个N1进制计数器和一个N2进制计数器连接起来,构成M进制计数器。
在串行进位方式中,以低位片的进位输出信号作为高位片的时钟输入信号。在并行进位方式中,以低位片的进位输出信号作为高位片的工作状态控制信号(计数的使能信号),两片的CLK输入端同时接计数输入信号。
实例 【例6.3.3】试用两片同步十进制计数器接成百进制计数器。
解:本例中M=100,N1=N2=10,将两片74160直接按并行进位方式或串行进位方式连接即得百进制计数器。
图6.3.36所示电路是并行进位方式的接法。以第(1)片的进位输出C作为第(2)片的EP和ET输入,每当第(1)片计成9(1001)时C变为1,下个CLK信号到达时第(2)片为计数工作状态,计入1,而第(1)片计成0(0000),它的C端回到低电平。第(1)片的EP和ET恒为1,始终处于计数工作状态。
图6.3.37所示电路是串行进位方式的连接方法。两片74160的EP和ET恒为1,都工作在计数状态。第(1)片每计到9(1001)时C端输出变为高电平,经反相器后使第(2)片的CLK端为低电平。下一个计数输入脉冲到达后,第(1)片计成0(0000)状态,C端跳回低电平,经反相后使第(2)片的输入端产生一个正跳变,于是第(2)片计入1。可见,在这种接法下两片74160不是同步工作的。
在N1、N2不等于N时,可以先将两个N进制计数器分别接成N1进制计数器和N2进制计数器,然后再以并行进位方式或串行进位方式将它们连接起来。
当M为大于N的素数时,不能分解成N1和N2,上面讲的并行进位方式和串行进位方式就行不通了。这时必须采取整体置零方式或整体置数方式构成M进制计数器。
整体置零方式 所谓整体置零方式,是首先将两片N进制计数器按最简单的方式接成一个大于M进制的计数器(例如N·N进制),然后在计数器计为M状态时译出异步置零信号R0=0,将两片N进制计数器同时置零。这种方式的基本原理和M<N时的置零法是一样的。
整体置数方式 整体置数方式的原理与M<N时的置数法类似。首先需将两片N进制计数器用最简单的连接方式接成一个大于M进制的计数器(例如N·N进制),然后在选定的某一状态下译出LD’=0信号,将两个N进制计数器同时置入适当的数据,跳过多余的状态,获得M进制计数器。采用这种接法要求已有的N进制计数器本身必须具有预置数功能。
当然,当M不是素数时整体置零法和整体置数法也可以使用。
实例 【例6.3.4】试用两片同步十进制计数器74160接成二十九进制计数器。
解:因为M=29是一个素数,所以必须用整体置零法或整体置数法构成二十九进制计数器。
图6.3.38是整体置零方式的接法。首先将两片74160以并行进位方式连成一个百进制计数器。当计数器从全0状态开始计数,计入29个脉冲时,经门G1译码产生低电平信号立刻将两片74160同时置零,于是便得到了二十九进制计数器。需要注意的是,计数过程中第(2)片74160不出现1001状态,因而它的C端不能给出进位信号。而且,门G1输出的脉冲持续时间极短,也不宜作进位输出信号。如果要求输出进位信号持续时间为一个时钟信号周期,则应从电路的28状态译出。当电路计入28个脉冲后门G2输出变为低电平,第29个计数脉冲到达后门G4的输出跳变为高电平。
通过这个例子可以看到,整体置零法不仅可靠性较差,而且往往还要另加译码电路才能得到需要的进位输出信号。
采用整体置数方式可以避免置零法的缺点。图6.3.39所示电路是采用整体置数法接成的二十九进制计数器。首先仍需将两片74160接成百进制计数器。然后将电路的28状态译码产生LD'=0信号,同时加到两片74160上,在下一个计数脉冲(第29个输入脉冲)到达时,将0000同时置入两片74160中,从而得到二十九进制计数器。进位信号可以直接由门G的输出端引出。
移位寄存器型计数器
1. 环形计数器
如果按图6.3.40所示的那样将移位寄存器首尾相接,即D0=Q3,那么在连续不断地输入时钟信号时寄存器里的数据将循环右移。
例如,电路的初始状态为Q3Q2Q1Q0=1000,则不断输入时钟信号时电路的状态将按1000→0100→0010→0001→1000的次序循环变化。因此,用电路的不同状态能够表示输入时钟信号的数目,也就是说,可以把这个电路作为时钟脉冲的计数器。
根据移位寄存器的工作特点,不必列出环形计数器的状态方程即可直接画出图6.3.41所示的状态转换图。如果取由1000、0100、0010和0001所组成的状态循环为所需要的有效循环,那么同时还存在着其他几种无效循环。而且,一旦脱离有效循环之后,电路将不会自动返回有效循环中去,所以图6.3.40所示的环形计数器是不能自启动的。为确保它能正常工作,必须首先通过串行输入端或并行输入端将电路置成有效循环中的某个状态,然后再开始计数。
状态转换图
考虑到使用的方便,在许多场合下需要计数器能自启动,即当电路进入任何无效状态后都能在时钟信号作用下自动返回有效循环中去。通过在输出与输入之间接入适当的反馈逻辑电路,可以将不能自启动的电路修改为能够自启动的电路。图6.3.42所示电路是能自启动的4位环形计数器电路。
根据图6.3.42所示的逻辑图得到它的状态方程为:
并可画出电路的状态转换图,如图6.3.43所示。
环形计数器的突出优点是电路结构极其简单。而且,在有效循环的每个状态只包含一个1(或0)时,可以直接以各个触发器输出端的1状态表示电路的一个状态,不需要另外加译码电路。它的主要缺点是没有充分利用电路的状态。用n位移位寄存器组成的环形计数器只用了n个状态,而电路总共有2ⁿ个状态,这显然是一种浪费。
2. 扭环形计数器
为了在不改变移位寄存器内部结构的条件下提高环形计数器的电路状态利用率,只能在改变反馈逻辑电路上想办法。事实上任何一种移位寄存器型计数器的结构均可表示为图6.3.44所示的一般形式,其中反馈逻辑电路的函数表达式可写成:
D₀=F(Qn-1, Qn-2, ..., Q1, Q0)
一般结构形式
环形计数器是反馈逻辑函数中最简单的一种,即D₀=Qn-1。若将反馈逻辑函数取为D₀=Qn-1,则得到的电路如图6.3.45所示。这个电路称为扭环形计数器(也称为约翰逊计数器)。若将它的状态转换图画出,则如图6.3.46所示。不难看出,它有两个状态循环,若取图中左边的一个为有效循环,则余下的一个就是无效循环了。显然,这个计数器不能自启动。
扭环形计数器电路
状态转换图
为了实现自启动,可将图6.3.45所示电路的反馈逻辑函数稍加修改,令D₀=Qn-1 + Qn-2。于是就得到了图6.3.47所示的电路和图6.3.48所示的状态转换图。
能自启动的扭环形计数器
状态转换图
不难看出,用n位移位寄存器构成的扭环形计数器可以得到含2n个有效状态的循环状态利用率较环形计数器提高了一倍。而且,如采用图6.3.48中的有效循环,由于电路在每次状态转换时只有一位触发器改变状态,因而在将电路状态译码时不会产生竞争-冒险现象。
虽然扭环形计数器的电路状态利用率有所提高,但仍有2ⁿ-2n个状态没有利用。使用最大长度移位寄存器型计数器可以将电路的状态利用率提高到2ⁿ-1,有关内容可参阅本书第三版中的附录5E。
顺序脉冲发生器
在一些数字系统中,有时需要系统按照事先规定的顺序进行一系列的操作。这就要求系统的控制部分能给出一组在时间上有一定先后顺序的脉冲信号,再用这组脉冲形成所需要的各种控制信号。顺序脉冲发生器就是用来产生这样一组顺序脉冲的电路。
顺序脉冲发生器可以用移位寄存器构成。当环形计数器工作在每个状态中只有一个1的循环状态时,它就是一个顺序脉冲发生器。由图6.3.49可见,当CLK端不断输入系列脉冲时,Q0-Q3端将依次输出正脉冲,并不断循环。
环形计数器作顺序脉冲发生器
这种方案的优点是不必附加译码电路,结构比较简单。缺点是使用的触发器数目比较多,同时还必须采用能自启动的反馈逻辑电路。在顺序脉冲数较多时,可以用计数器和译码器组合成顺序脉冲发生器。图6.3.50(a)所示电路是有8个顺序脉冲输出的顺序脉冲发生器的例子。图中的三个触发器FF0、FF1和FF2组成3位二进制计数器,8个与门组成3线-8线译码器。只要在计数器的输入端CLK加入固定频率的脉冲,便可在P0-P7端依次得到输出脉冲信号,如图6.3.50(b)所示。
顺序脉冲发生器
由于使用了异步计数器,在电路状态转换时三个触发器在翻转时有先有后,因此当两个以上触发器同时改变状态时将发生竞争-冒险现象,有可能在译码器的输出端出现尖峰脉冲,如图6.3.50(b)上所表示的那样。例如,在计数器的状态Q2Q1Q0由001变为010的过程中,因FF0先翻转为0而FF1后翻转为1,因此在FF0已经翻转而FF1尚未翻转的瞬间计数器将出现000状态,使P0端出现尖峰脉冲。
为了消除输出端的尖峰脉冲,可以采用4.9.3节中介绍的几种方法。在使用中规模集成的译码器时,由于电路上大多数均设有控制输入端,可以作为选通脉冲的输入端使用,所以采用选通的方法极易实现。图6.3.51(a)所示电路是用4位同步二进制计数器74LS161和3线-8线译码器74LS138构成的顺序脉冲发生器电路。图中以74LS161的低3位输出Q2Q1Q0作为74LS138的3位输入信号。
顺序脉冲发生器
由74LS161的功能表(表6.3.4)可知,为使电路工作在计数状态,R0, LD’, EP和ET均应接高电平。由于它的低3位触发器是按八进制计数器连接的,所以在连续输入CLK信号的情况下,Q2Q1Q0的状态将按000一直到111的顺序反复循环,并在译码器输出端依次输出P0-P7的顺序脉冲。
虽然74LS161中的触发器是在同一时钟信号操作下工作的,但由于各个触发器的传输延迟时间不可能完全相同,所以在将计数器的状态译码时仍然存在竞争-冒险现象。为消除竞争冒险现象,可以在74LS138的S3端加入选通脉冲。选通脉冲的有效时间应与触发器的翻转时间错开。例如图中选取CLK’作为74LS138的选通脉冲,即得到图6.3.51(b)所示的输出电压波形。
如果将图6.3.51(a)电路中的计数器改成4位的扭环形计数器,并取图6.3.46所示的有效循环,组成如图6.3.52所示的顺序脉冲发生器电路,则可以从根本上消除竞争-冒险现象。因为扭环形计数器在计数循环过程中任何两个相邻状态之间仅有一个触发器状态不同,因而在状态转换过程中任何一个译码器的门电路都不会有两个输入端同时改变状态,亦即不存在竞争现象。
顺序脉冲发生器
综上所述,异步计数器及其变种在设计和使用中需考虑各种竞争-冒险现象,并采取相应的措施加以消除,以保证电路的可靠性和稳定性。
6.3.4 序列信号发生器
在数字信号的传输和数字系统的测试中,有时需要用到一组特定的串行数字信号。通常将这种串行数字信号称为序列信号。产生序列信号的电路称为序列信号发生器。
序列信号发生器的构成方法有多种。一种比较简单、直观的方法是用计数器和数据选择器组成。例如,需要产生一个8位的序列信号00010111(时间顺序为自左而右),则可用一个八进制计数器和一个8选1数据选择器组成,如图6.3.53所示。其中八进制计数器取自74LS161(4位二进制计数器)的低3位。74LS152是8选1数据选择器。
图6.3.53 用计数器和数据选择器组成的序列信号发生器
当CLK信号连续不断地加到计数器上时,Q₂、Q₁、Q₀的状态(也就是加到74LS152上的地址输入代码A₂、A₁、A₀)便按照表6.3.8中所示的顺序不断循环,D₀D₇的状态就循环不断地依次出现在Y’端。只要令D₀=D₁=D₂=D₄=1、D₃=D₅=D₆=D₇=0,便可在Y’端得到不断循环的序列信号00010111。在需要修改序列信号时,只要修改加到D₀D₇的高、低电平即可实现,而不需对电路结构做任何更动。因此,使用这种电路既灵活又方便。
表6.3.8 图6.3.53电路的状态转换表
CLK顺序 | Q₂ (A₂) | Q₁ (A₁) | Q₀ (A₀) | Y' (D) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 0 |
2 | 0 | 1 | 0 | 0 |
3 | 0 | 1 | 1 | 1 |
4 | 1 | 0 | 0 | 0 |
5 | 1 | 0 | 1 | 1 |
6 | 1 | 1 | 0 | 1 |
7 | 1 | 1 | 1 | 1 |
构成序列信号发生器的另一种常见方法是采用带反馈逻辑电路的移位寄存器。如果序列信号的位数为m,移位寄存器的位数为n,则应取2ⁿ≥m。例如,若仍然要求产生00010111这样一组8位的序列信号,则可用3位的移位寄存器加上反馈逻辑电路构成所需的序列信号发生器,如图6.3.54所示。移位寄存器从Q₂端输出的串行输出信号就应当是所要求的序列信号。
图6.3.54 用移位寄存器构成的序列信号发生器
根据要求产生的序列信号,即可列出移位寄存器应具有的状态转换表,如表6.3.9所示。再从状态转换的要求出发,得到对移位寄存器输入端D₀取值的要求,如表6.3.9中所示。表中也同时给出了D₀与Q₂、Q₁、Q₀之间的函数关系。利用图6.3.55所示的卡诺图将D₀的函数式化简,得到:
D₀ = Q₂Q₀' + Q₁Q₀' + Q₁'Q₀
表6.3.9 移位寄存器的状态转换表及输入取值
Q₂Q₁Q₀ | D₀取值要求 | D₀的函数关系 |
---|---|---|
000 | 0 | Q₂Q₀' |
001 | 0 | Q₂Q₀' |
011 | 1 | Q₁Q₀' |
010 | 0 | Q₂Q₀' |
110 | 1 | Q₁Q₀' |
111 | 1 | Q₁Q₀' |
101 | 1 | Q₁Q₀' |
100 | 0 | Q₂Q₀' |
图6.3.55 D₀的卡诺图
图6.3.54中的反馈逻辑电路就是按上述函数式接成的。通过这种方法,利用移位寄存器和反馈逻辑电路可以灵活地构建序列信号发生器,满足不同的序列信号需求。