【学习笔记】6、时序逻辑电路

  • 组合逻辑电路:任意一时刻的输出信号,仅仅与该时刻的输入信号有关。
  • 时序逻辑电路:任意一时刻的输出信号,与输入信号和原本的状态有关。

6.1 时序逻辑电路的基本概念

  • 输入信号,输出信号,激励信号,现态,次态,状态转换关系。

6.1.1 模型与分类

1. 时序电路模型

  • 时序电路是状态依赖的,时序电路又称为状态机。

在这里插入图片描述

  • 有限状态机(FSM finite state machine):有限数量的存储单元构成的状态机,状态个数也是有限的。

2. 时序电路分类

  • 时序电路分为 异步时序电路 和 同步时序电路。(CP脉冲作用的时间点不同)
  • 异步时序电路:状态更新不是同时发生的。
  • 同步时序电路:同一时钟源的同一脉冲边沿作用下,同步进行。
    在这里插入图片描述

6.1.2 时序电路逻辑功能的表达

  • 组合逻辑电路:输出方程,真值表,波形图,
  • 时序逻辑电路:方程组(输出方程,激励方程,状态方程),状态表,状态图,时序图

1. 逻辑方程组

  • 以下图为例子。未标注n和n+1的都是现态值。
  • 输出方程O: Y = ( Q 0 + Q 1 ) ⋅ A ‾ Y = (Q_0+Q_1)·\overline{A} Y=(Q0+Q1)A
  • 激励方程E1: D 0 = ( Q 0 + Q 1 ) ⋅ A D_0 = (Q_0+Q_1)·A D0=(Q0+Q1)A
  • 激励方程E2: D 1 = Q 0 ‾ ⋅ A D_1 = \overline{Q_0}·A D1=Q0A
  • 状态方程 S 0 n + 1 : S^{n+1}_0: S0n+1: Q 0 n + 1 = ( Q 0 n + Q 1 n ) ⋅ A Q_0^{n+1}=(Q_0^n+Q_1^n)·A Q0n+1=(Q0n+Q1n)A
  • 状态方程 S 1 n + 1 : S^{n+1}_1: S1n+1: Q 1 n + 1 = Q 0 n ‾ ⋅ A Q_1^{n+1}=\overline{Q_0^n}·A Q1n+1=Q0nA

在这里插入图片描述

2. 状态表

  • 与真值表类似,根据上述逻辑方程组,列出状态表。

  • 先列出“现态”到“次态”的转换(状态转换真值表)

    • 状态方程 S 1 n + 1 : S^{n+1}_1: S1n+1: Q 1 n + 1 = Q 0 n ‾ ⋅ A Q_1^{n+1}=\overline{Q_0^n}·A Q1n+1=Q0nA
    • 状态方程 S 0 n + 1 : S^{n+1}_0: S0n+1: Q 0 n + 1 = ( Q 0 n + Q 1 n ) ⋅ A Q_0^{n+1}=(Q_0^n+Q_1^n)·A Q0n+1=(Q0n+Q1n)A
    • 输出方程O: Y = ( Q 0 + Q 1 ) ⋅ A ‾ Y = (Q_0+Q_1)·\overline{A} Y=(Q0+Q1)A (现态n)
现态 Q 1 n Q_1^n Q1n现态 Q 0 n Q_0^n Q0n输入变量A次态 Q 1 n + 1 Q_1^{n+1} Q1n+1次态 Q 1 n + 1 Q_1^{n+1} Q1n+1输出Y
000000
001100
010001
011010
100001
101110
110001
111010
  • 根据状态转换真值表,列出状态表,将 Q 1 和 Q 0 拼成一个 2 位的状态值 : { Q 1 n , Q 0 n } 根据状态转换真值表,列出状态表,将Q_1和Q_0拼成一个2位的状态值:\{Q_1^n,Q_0^n\} 根据状态转换真值表,列出状态表,将Q1Q0拼成一个2位的状态值:{Q1n,Q0n}
  • 对状态进行编号“a=00,b=01,c=10,d=11”
现态 Q 1 n Q 0 n Q_1^nQ_0^n Q1nQ0n当A=0时,次态 Q 1 n + 1 Q 0 n + 1 / 输出 Y Q_1^{n+1}Q_0^{n+1} /输出 Y Q1n+1Q0n+1/输出Y当A=1时,次态 Q 1 n + 1 Q 0 n + 1 / 输出 Y Q_1^{n+1}Q_0^{n+1} /输出 Y Q1n+1Q0n+1/输出Y
00(a)00(a)/010(c)/0
01(b)00(a)/101(b)/0
10(c)00(a)/111(d)/0
11(d)00(a)/101(b)/0

3. 状态图

在这里插入图片描述

4. 时序图

  • 可以根据 三组逻辑方程 、 状态表 、 状态图 得到时序图。
  • 下图 Q 0 Q 1 Q_0Q_1 Q0Q1波形图在CP上升沿的时候,根据A和 Q 0 Q 1 Q_0Q_1 Q0Q1当前状态,决定下一状态是什么。
  • 下图中,对于Y的波形图绘制,是错误的。我直接看状态图绘制Y是不对的。
  • 因为Y值不在CP上升沿处同步变化,而是实时跟随A和 Q 0 Q 1 Q_0Q_1 Q0Q1变化。
  • 所以我们在绘制完 Q 0 Q 1 Q_0Q_1 Q0Q1之后,再根据A和 Q 0 Q 1 Q_0Q_1 Q0Q1的实时状态,绘制Y的波形图,才是正确的。
    在这里插入图片描述
  • 正确的Y波形图。
    在这里插入图片描述

6.2 同步时序逻辑电路分析

  • 读图与识图的过程。 给定 同步时序电路 分析出 功能 。

6.2.1 一般步骤

参考前文6.1.2的分析步骤。

  • (1)列出逻辑方程组
    • 输出方程组O
    • 激励方程组E
    • 状态方程组S
  • (2)根据状态方程组S和输出方程组O,列出状态表,画出状态图或者时序图
  • (3)确定电路的逻辑功能,可用文字详细描述。

6.2.2 分析举例

  • 前文6.1.2已经有一个例子,这里继续分析给定的时序电路图。

例1,二进制计数

下图是 米利型时序电路,输出Y与A和 Q 1 Q 0 Q_1Q_0 Q1Q0都有关。
在这里插入图片描述

(1)列出逻辑方程组
  • 输出方程: Y = Q 0 ⋅ Q 1 ⋅ A Y=Q_0·Q_1·A Y=Q0Q1A
  • 激励方程: T 0 = A , T 1 = Q 0 ⋅ A T_0=A,T_1=Q_0·A T0=AT1=Q0A
  • 状态方程: Q 0 n + 1 = A ⋅ Q 0 n ‾ + A ‾ ⋅ Q 0 n = A ⊕ Q 0 n ,同理, Q 1 n + 1 = ( Q 0 n ⋅ A ) ⊕ Q 1 n Q_0^{n+1}=A·\overline{Q_0^n}+\overline{A}·Q_0^n=A⊕Q_0^n,同理,Q_1^{n+1}=(Q_0^n·A)⊕Q_1^n Q0n+1=AQ0n+AQ0n=AQ0n,同理,Q1n+1=(Q0nA)Q1n
(2)列出状态表
  • 列出可能出现的现态和次态。现态 Q 1 n Q 0 n Q_1^nQ_0^n Q1nQ0n和次态 Q 1 n + 1 Q 0 n + 1 Q_1^{n+1}Q_0^{n+1} Q1n+1Q0n+1
  • 输入量A,列在次态的下面。
  • 结合上述的逻辑方程组,填写状态表
现态 Q 1 n Q 0 n Q_1^nQ_0^n Q1nQ0nA=0时,次态 Q 1 n + 1 Q 0 n + 1 Q_1^{n+1}Q_0^{n+1} Q1n+1Q0n+1 /YA=1时,次态 Q 1 n + 1 Q 0 n + 1 Q_1^{n+1}Q_0^{n+1} Q1n+1Q0n+1 /Y
0000/001/0
0101/010/0
1010/011/0
1111/000/1
(3)画出状态图
  • 下图是 米利型状态机,输出Y与A和 Q 1 Q 0 Q_1Q_0 Q1Q0都有关。
    在这里插入图片描述
(4)画出波形图
  • Y是现态,只看输出方程: Y = Q 0 ⋅ Q 1 ⋅ A Y=Q_0·Q_1·A Y=Q0Q1A
    在这里插入图片描述
(5)分析逻辑功能
  • 二进制计数器,A=1时,开始计数。A=0时,停止计数。计数值为现态 Q 1 n Q 0 n Q_1^nQ_0^n Q1nQ0n
  • Y表示记满。Y=1时,计数值为11。
  • Y的下降沿来临时,重新开始计数。
  • Y的下降沿可以作为触发进位的操作。
  • 观察波形图,输入A的波动,会干扰进位,错误产生2次进位信号。后续需要改进电路“计数与进位”。

例2,可逆二进制计数

下图是 穆尔型时序电路,输出Y只和 Q 1 Q 0 Q_1Q_0 Q1Q0都有关,与输入无关。
在这里插入图片描述

(1)列出逻辑方程组
  • 输出方程: Z = Q 1 Q 0 Z=Q_1Q_0 Z=Q1Q0
  • 激励方程: J 0 = K 0 = 1 , F F 0 构成了一个 J_0=K_0=1,FF0构成了一个 J0=K0=1FF0构成了一个T’ 触发器。 J 1 = K 1 = A ⊕ Q 0 。 触发器。J_1=K_1=A⊕Q_0。 触发器。J1=K1=AQ0
  • 状态方程: Q 0 n + 1 = 1 ⊕ Q 0 n = Q 0 n ‾ Q_0^{n+1}=1⊕Q_0^n=\overline{Q_0^n} Q0n+1=1Q0n=Q0n Q 1 n + 1 = A ⊕ Q 0 n ⊕ Q 1 n Q_1^{n+1}=A⊕Q_0^n⊕Q_1^n Q1n+1=AQ0nQ1n
(2)列出状态表
  • 列出可能出现的现态和次态。现态 Q 1 n Q 0 n Q_1^nQ_0^n Q1nQ0n和次态 Q 1 n + 1 Q 0 n + 1 Q_1^{n+1}Q_0^{n+1} Q1n+1Q0n+1
  • 输入量A,列在次态的下面。
  • 结合上述的逻辑方程组,填写状态表
  • Q 0 Q_0 Q0的次态是取反,与A无关
  • 输出Z与现态 Q 1 n Q 0 n Q_1^nQ_0^n Q1nQ0n无关,因而可以单独列出。
现态 Q 1 n Q 0 n Q_1^nQ_0^n Q1nQ0nA=0时,次态 Q 1 n + 1 Q 0 n + 1 Q_1^{n+1}Q_0^{n+1} Q1n+1Q0n+1A=1时,次态 Q 1 n + 1 Q 0 n + 1 Q_1^{n+1}Q_0^{n+1} Q1n+1Q0n+1输出Z
0001110
0110000
1011010
1100101
(3)画出状态图
  • 下图是 穆尔型状态图,输出Z只与现态 Q 1 n Q 0 n Q_1^nQ_0^n Q1nQ0n有关,与输入A无关,因而可以画在圈内。

在这里插入图片描述

(4)画出波形图

在这里插入图片描述

(5)分析逻辑功能
  • 可逆二进制计数器
  • A=0时,正向计数,A=1时,反向计数。
  • Z表示进位信号。在加计数时,Z的下降沿触发进位信号。在减计数时,Z的上升沿触发借位信号。

例3,脉冲分配器,节拍脉冲产生器

下图是 穆尔型时序电路,输出只与触发器状态有关。无输入。
在这里插入图片描述

(1)列出逻辑方程组
  • 输出方程: Z 0 = Q 0 , Z 1 = Q 1 , Z 2 = Q 2 Z_0=Q_0,Z_1=Q_1,Z_2=Q_2 Z0=Q0Z1=Q1Z2=Q2
  • 激励方程: D 0 = Q 0 ‾ ⋅ Q 1 ‾ , D 1 = Q 0 , D 2 = Q 1 D_0=\overline{Q_0}·\overline{Q_1},D_1=Q_0,D_2=Q_1 D0=Q0Q1D1=Q0D2=Q1
  • 状态方程: Q 0 n + 1 = D 0 = Q 0 n ‾ ⋅ Q 1 n ‾ , Q 1 n + 1 = D 1 = Q 0 n , Q 2 n + 1 = D 2 = Q 1 n Q_0^{n+1}=D_0=\overline{Q_0^n}·\overline{Q_1^n},Q_1^{n+1}=D_1=Q_0^n,Q_2^{n+1}=D_2=Q_1^n Q0n+1=D0=Q0nQ1nQ1n+1=D1=Q0nQ2n+1=D2=Q1n
(2)列出状态表
现态 Q 2 n Q 1 n Q 0 n Q_2^nQ_1^nQ_0^n Q2nQ1nQ0n次态 Q 2 n + 1 Q 1 n + 1 Q 0 n + 1 Q_2^{n+1}Q_1^{n+1}Q_0^{n+1} Q2n+1Q1n+1Q0n+1
000001
001010
010100
011110
100001
101010
110100
111110
(3)画出状态图

在这里插入图片描述

(4)画出波形图
  • 根据状态图可知,最终都会进入3个循环状态中。
  • 具体从哪个入口进入3个循环状态,由初始状态决定。
  • 设定初始状态为000
    在这里插入图片描述
(5)分析逻辑功能
  • 电路的有效状态是3为循环码。
  • 电路把周期脉冲信号,分成了3倍周期的脉冲信号
  • 脉冲分配器,节拍脉冲产生器

6.3 同步时序逻辑电路设计

  • 时序电路设计也叫时序电路综合。
  • 根据给定的逻辑功能->设计出逻辑电路,

6.3.1 一般步骤

  • (1)给定逻辑功能

    • 需求的时序电路逻辑功能,是通过文字、图形、波形图来描述的。
    • 必须把他们变成规范的状态图或者状态表。
      • 明确输入条件,输出要求。确定输入变量的数目与符号。在同步时序电路中, C P 或者 C P ‾ CP或者\overline{CP} CP或者CP不作为输入变量考虑。
      • 找出所有的状态转换关系。建立原始的状态图。
      • 根据状态图,建立状态表。
    • 状态图和状态表需要全面正确的反应设计要求。
  • (2)状态化简

    • 去除多余状态。
    • 两个状态,在相同的输入下,产生的次态相同,这两个状态称为“等价状态”,可以将两个状态合并。
  • (3)状态分配

    • 对每个状态,指定一个特定的二进制代码。状态编码,状态分配码。
    • 编码方案不同,设计出的电路结构不同。
      • 确定状态编码的位数。触发器的个数n,为状态编码的位数。状态数M,表示状态的个数。一般应该满足: 2 n − 1 < M ≤ 2 n 2^{n-1} <M≤2^n 2n1<M2n
      • 对每个状态进行编码。从 2 n 2^n 2n个状态中,取M个状态组合。
      • 选取编码方案,应有利于触发器的激励方程和输出方程的化简。
      • 电路应稳定可靠。
      • 自然数二进制数递增顺序编码,有利于化简电路。
      • 格雷码编码,有利于减少状态输出出现“竞争和冒险”。
  • (4)选择触发器类型

    • D触发器
    • JK触发器
    • 等等。
  • (5)确定激励方程组和输出方程组

    • 根据状态分配后的分配表,使用卡诺图或者其他方式,进行化简。
    • 求出激励方程、输出方程。(组合电路)
  • (6)画出逻辑图并增加自启动能力。

    • 根据激励方程和输出方程组,画出逻辑电路图。
    • 避免进入无效状态,不能退出。
    • 检查电路能否进入有效状态。是否具有自启动功能。
    • 有时,需要指定初始启动状态。可利用触发器的置0置1功能。
    • 设计了复位电路的时序电路,不需要考虑自启动问题。

6.3.2 设计举例

例1 8421BCD计数器

(1)需求
  • 用D触发器,设计一个8421BCD码,同步十进制加计数器。
(2)状态化简
(3)状态分配
(4)选择触发器
  • 需求中已经明确选用D触发器。
    • 列出状态图或者状态表
计数CP脉冲现态 Q 3 n Q 2 n Q 1 n Q 0 n Q_3^nQ_2^nQ_1^nQ_0^n Q3nQ2nQ1nQ0n次态 Q 3 n + 1 Q 2 n + 1 Q 1 n + 1 Q 0 n + 1 Q_3^{n+1}Q_2^{n+1}Q_1^{n+1}Q_0^{n+1} Q3n+1Q2n+1Q1n+1Q0n+1
000000001
100010010
200100011
300110100
401000101
501010110
601100111
701111000
810001001
910010000
(5)确定激励方程
  • 4个D触发器的激励信号是 D 3 D 2 D 1 D 0 D_3 D_2 D_1 D_0 D3D2D1D0
  • 根据D触发器的状态方程,可知 Q n + 1 = D Q^{n+1}=D Qn+1=D
  • 结合状态表,可以反推出D应该在次态来临前,对应的值
计数CP脉冲现态 Q 3 n Q 2 n Q 1 n Q 0 n Q_3^nQ_2^nQ_1^nQ_0^n Q3nQ2nQ1nQ0n D 3 D 2 D 1 D 0 D_3 D_2 D_1 D_0 D3D2D1D0
000000001
100010010
200100011
300110100
401000101
501010110
601100111
701111000
810001001
910010000
  • 得到激励方程组

    • D 3 = E 3 ( Q 3 n , Q 2 n , Q 1 n , Q 0 n ) = m 7 + m 8 D_3 = E_3(Q_3^n,Q_2^n,Q_1^n,Q_0^n)=m_7+m_8 D3=E3(Q3n,Q2n,Q1n,Q0n)=m7+m8
    • D 2 = E 2 ( Q 3 n , Q 2 n , Q 1 n , Q 0 n ) = m 3 + m 4 + m 5 + m 6 D_2 = E_2(Q_3^n,Q_2^n,Q_1^n,Q_0^n)=m_3+m_4+m_5+m_6 D2=E2(Q3n,Q2n,Q1n,Q0n)=m3+m4+m5+m6
    • D 1 = E 1 ( Q 3 n , Q 2 n , Q 1 n , Q 0 n ) = m 1 + m 2 + m 5 + m 6 D_1 = E_1(Q_3^n,Q_2^n,Q_1^n,Q_0^n)=m_1+m_2+m_5+m_6 D1=E1(Q3n,Q2n,Q1n,Q0n)=m1+m2+m5+m6
    • D 0 = E 0 ( Q 3 n , Q 2 n , Q 1 n , Q 0 n ) = m 0 + m 2 + m 4 + m 6 + m 8 D_0 = E_0(Q_3^n,Q_2^n,Q_1^n,Q_0^n)=m_0+m_2+m_4+m_6+m_8 D0=E0(Q3n,Q2n,Q1n,Q0n)=m0+m2+m4+m6+m8
  • 使用卡诺图化简,下图灰色格子表示无关项“X”
    在这里插入图片描述

  • D 3 D 2 D 1 D 0 D_3 D_2 D_1 D_0 D3D2D1D0的卡诺图如下,结合无关项进行化简,得到激励方程组

    • D 3 = Q 2 Q 1 Q 0 + Q 3 Q 0 ‾ D_3=Q_2Q_1Q_0+Q_3\overline{Q_0} D3=Q2Q1Q0+Q3Q0
    • D 2 = Q 2 ‾ Q 1 Q 0 + Q 2 Q 1 ‾ + Q 2 Q 0 ‾ D_2=\overline{Q_2}Q_1Q_0+Q_2\overline{Q_1}+Q_2\overline{Q_0} D2=Q2Q1Q0+Q2Q1+Q2Q0
    • D 1 = Q 3 ‾ Q 1 ‾ Q 0 + Q 1 Q 0 ‾ D_1=\overline{Q_3}\overline{Q_1}Q_0+Q_1\overline{Q_0} D1=Q3Q1Q0+Q1Q0
    • D 0 = Q 0 ‾ D_0=\overline{Q_0} D0=Q0
      在这里插入图片描述
(6)画出逻辑图
  • 根据激励方程组,绘制逻辑图。
  • D 3 = Q 2 Q 1 Q 0 + Q 3 Q 0 ‾ D_3=Q_2Q_1Q_0+Q_3\overline{Q_0} D3=Q2Q1Q0+Q3Q0
  • D 2 = Q 2 ‾ Q 1 Q 0 + Q 2 Q 1 ‾ + Q 2 Q 0 ‾ D_2=\overline{Q_2}Q_1Q_0+Q_2\overline{Q_1}+Q_2\overline{Q_0} D2=Q2Q1Q0+Q2Q1+Q2Q0
  • D 1 = Q 3 ‾ Q 1 ‾ Q 0 + Q 1 Q 0 ‾ D_1=\overline{Q_3}\overline{Q_1}Q_0+Q_1\overline{Q_0} D1=Q3Q1Q0+Q1Q0
  • D 0 = Q 0 ‾ D_0=\overline{Q_0} D0=Q0
  • 下图,具有复位功能。工作时 R E S E T ‾ \overline{RESET} RESET需要保持为高电平。
    在这里插入图片描述
(7)检查自启动能力
  • 4位二进制数,其中10种组合为有效状态,用来表示8421BCD码,另外6种是无效状态。
  • 有效状态,按照设计需求设计的电路,有效状态会随着加计数循环变化。
  • 无效状态,代入电路的状态方程组,求出无效状态的次态,如果次态仍为无效状态,继续代入状态方程。
  • 检查无效状态最终是否会进入有效状态。
    • Q 3 n + 1 = D 3 = Q 2 n Q 1 n Q 0 n + Q 3 n Q 0 n ‾ Q_3^{n+1}=D_3=Q_2^nQ_1^nQ_0^n+Q_3^n\overline{Q_0^n} Q3n+1=D3=Q2nQ1nQ0n+Q3nQ0n
    • Q 2 n + 1 = D 2 = Q 2 n ‾ Q 1 n Q 0 n + Q 2 n Q 1 n ‾ + Q 2 n Q 0 n ‾ Q_2^{n+1}=D_2=\overline{Q_2^n}Q_1^nQ_0^n+Q_2^n\overline{Q_1^n}+Q_2^n\overline{Q_0^n} Q2n+1=D2=Q2nQ1nQ0n+Q2nQ1n+Q2nQ0n
    • Q 1 n + 1 = D 1 = Q 3 n ‾ Q 1 ‾ Q 0 n + Q 1 n Q 0 n ‾ Q_1^{n+1}=D_1=\overline{Q_3^n}\overline{Q_1}Q_0^n+Q_1^n\overline{Q_0^n} Q1n+1=D1=Q3nQ1Q0n+Q1nQ0n
    • Q 0 n + 1 = D 0 = Q 0 n ‾ Q_0^{n+1}=D_0=\overline{Q_0^n} Q0n+1=D0=Q0n
  • 如下图,状态图所示,6种无效状态最终会进入有效状态。
    • 1010 -> 1011->0100
    • 1011->0100
    • 1100->1101->0100
    • 1101->0100
    • 1110->1111->1000
    • 1111->1000

在这里插入图片描述

例2 序列编码检测器

(1)需求
  • 序列编码检测器,当检测到110序列编码(自左向右),电路输出1,否则输出0。
    • 一个输入A,一个输出Y。

    • 电路检测A的编码序列,一旦检测到连续编码110序列,输出1,否则输出0。

    • 分析,假设电路处于初始状态,连续收到1,1,0,最终进入"检测成功"的状态。

    • 中间收到1,1,0对应有各自的状态。
      在这里插入图片描述

    • 对原始状态图进行化简,S表示状态,增加abcd状态符号。如下图所示。
      在这里插入图片描述

    • 列出状态表

现态 S n S^n SnA=0时,次态 S n + 1 / 输出 Y S^{n+1}/输出Y Sn+1/输出YA=1时,次态 S n + 1 / 输出 Y S^{n+1}/输出Y Sn+1/输出Y
aa/0b/0
ba/0c/0
cd/1c/0
da/0b/0
(2)状态化简
  • 在一开始,我就感觉状态a 初始可以为0可以为1,是不是可以化简。
  • 通过观察状态表,可以看到状态a和状态d的次态完全相同(相同A输入的情况下)。
  • a和d称为”等价状态“,可以合并。即a=d,d=a。
  • 去除d状态后,可以得到新的状态表,如下所示
现态 S n S^n SnA=0时,次态 S n + 1 / 输出 Y S^{n+1}/输出Y Sn+1/输出YA=1时,次态 S n + 1 / 输出 Y S^{n+1}/输出Y Sn+1/输出Y
aa/0b/0
ba/0c/0
ca/1c/0
  • 化简后的状态图,如下所示。c状态时,电路已经收到了两个1,这个时候再收到一个0,即算接受了一个完整的110。电路可直接回到初始状态a,准备接受新的110的到来。
    在这里插入图片描述
(3)状态分配
  • 3个状态,用2位二进制数表示,初步分配 a=00,b=01,c=10
  • 00->01->10 ,这里可以看到 01和10一下变了两位,电路实现较复杂。类似于格雷码的考虑,只变一个状态将10换成11。
  • 即00->01->11。
  • a=00,b=01,c=11
    在这里插入图片描述
(4)触发器选择
  • JK触发器的逻辑功能更强。可能实现上更简单。
    Q n + 1 = J Q n ‾ + K ‾ Q n Q^{n+1}=J\overline{Q^n}+\overline{K}Q^n Qn+1=JQn+KQn
(5)激励方程组和输出方程组
  • JK触发器的激励方程需要间接给出。
  • 结合JK触发器的状态方程和状态图或状态表,可以推出 Q n + 1 Q n 和 J K Q^{n+1}Q^n和JK Qn+1QnJK的关系,激励表。
    • 如, Q 1 n = 0 , Q 0 n = 0 Q_1^n=0,Q_0^n=0 Q1n=0Q0n=0,它们的次态是 A = 0 时, Q 1 n + 1 = 0 , Q 0 n + 1 = 0 A=0时,Q_1^{n+1}=0,Q_0^{n+1}=0 A=0时,Q1n+1=0Q0n+1=0或者 A = 1 时, Q 1 n + 1 = 0 , Q 0 n + 1 = 1 A=1时,Q_1^{n+1}=0,Q_0^{n+1}=1 A=1时,Q1n+1=0Q0n+1=1
Q 1 n Q 0 n Q_1^nQ_0^n Q1nQ0nA Q 1 n + 1 Q 0 n + 1 Q_1^{n+1}Q_0^{n+1} Q1n+1Q0n+1
00000
00101
01000
01111
11000
11101

Q 1 , Q 0 Q_1,Q_0 Q1,Q0的现态和次态代入 Q n + 1 = J Q n ‾ + K ‾ Q n Q^{n+1}=J\overline{Q^n}+\overline{K}Q^n Qn+1=JQn+KQn等式两边,求出 J 1 J 0 K 1 K 0 J_1J_0K_1K_0 J1J0K1K0

现态 Q 1 n Q 0 n Q_1^nQ_0^n Q1nQ0n输出A次态 Q 1 n + 1 Q 0 n + 1 Q_1^{n+1}Q_0^{n+1} Q1n+1Q0n+1输出Y代入 J 1 J_1 J1 K 1 K_1 K1 J 0 J_0 J0 K 0 K_0 K0
000000 Q 1 : 0 = J 1 ⋅ 0 ‾ + K 1 ‾ ⋅ 0 Q 0 : 0 = J 0 ⋅ 0 ‾ + K 0 ‾ ⋅ 0 Q_1:0=J_1·\overline{0}+\overline{K_1}·0 \\ Q_0:0=J_0·\overline{0}+\overline{K_0}·0 Q1:0=J10+K10Q0:0=J00+K000X0X
001010 Q 1 : 0 = J 1 ⋅ 0 ‾ + K 1 ‾ ⋅ 0 Q 0 : 1 = J 0 ⋅ 0 ‾ + K 0 ‾ ⋅ 0 Q_1:0=J_1·\overline{0}+\overline{K_1}·0 \\ Q_0:1=J_0·\overline{0}+\overline{K_0}·0 Q1:0=J10+K10Q0:1=J00+K000X1X
010000 Q 1 : 0 = J 1 ⋅ 0 ‾ + K 1 ‾ ⋅ 0 Q 0 : 0 = J 0 ⋅ 1 ‾ + K 0 ‾ ⋅ 1 Q_1:0=J_1·\overline{0}+\overline{K_1}·0 \\ Q_0:0=J_0·\overline{1}+\overline{K_0}·1 Q1:0=J10+K10Q0:0=J01+K010XX1
011110 Q 1 : 1 = J 1 ⋅ 0 ‾ + K 1 ‾ ⋅ 0 Q 0 : 1 = J 0 ⋅ 1 ‾ + K 0 ‾ ⋅ 1 Q_1:1=J_1·\overline{0}+\overline{K_1}·0 \\ Q_0:1=J_0·\overline{1}+\overline{K_0}·1 Q1:1=J10+K10Q0:1=J01+K011XX0
110001 Q 1 : 0 = J 1 ⋅ 1 ‾ + K 1 ‾ ⋅ 1 Q 0 : 0 = J 0 ⋅ 1 ‾ + K 0 ‾ ⋅ 1 Q_1:0=J_1·\overline{1}+\overline{K_1}·1 \\ Q_0:0=J_0·\overline{1}+\overline{K_0}·1 Q1:0=J11+K11Q0:0=J01+K01X1X1
111110 Q 1 : 1 = J 1 ⋅ 1 ‾ + K 1 ‾ ⋅ 1 Q 0 : 1 = J 1 ⋅ 1 ‾ + K 0 ‾ ⋅ 1 Q_1:1=J_1·\overline{1}+\overline{K_1}·1 \\ Q_0:1=J_1·\overline{1}+\overline{K_0}·1 Q1:1=J11+K11Q0:1=J11+K01X0X0

J 1 = Q 1 ‾ Q 0 A Y ‾ = m 6 J_1=\overline{Q_1}Q_0A\overline{Y}=m_6 J1=Q1Q0AY=m6
K 1 = Q 1 Q 0 A ‾ Y = m 13 K_1=Q_1Q_0\overline{A}Y=m_{13} K1=Q1Q0AY=m13
J 0 = Q 1 ‾ Q 0 ‾ A Y ‾ = m 2 J_0=\overline{Q_1}\overline{Q_0}A\overline{Y}=m_2 J0=Q1Q0AY=m2
K 0 = Q 1 ‾ Q 0 A ‾ Y ‾ = m 4 K_0=\overline{Q_1}Q_0\overline{A}\overline{Y}=m_4 K0=Q1Q0AY=m4

使用卡诺图进行化简,得到激励方程组
J 1 = Q 0 A J_1=Q_0A J1=Q0A
K 1 = A ‾ K_1=\overline{A} K1=A
J 0 = A J_0=A J0=A
K 0 = A ‾ K_0=\overline{A} K0=A
在这里插入图片描述
使用卡诺图进行化简,得到输出方程
Y = Q 1 ⋅ A ‾ Y=Q_1·\overline{A} Y=Q1A
在这里插入图片描述

(6)绘制逻辑图

在这里插入图片描述

(7)检查自启动能力

由前文可知,2位二进制状态中,10状态是无效状态。代入激励方程和输出方程

  • A = 0 , Q 1 Q 0 = 10 A=0,Q_1Q_0=10 A=0Q1Q0=10时, 10->00有效状态,Y=1

    • J 1 = Q 0 A = 0 J_1=Q_0A=0 J1=Q0A=0
    • K 1 = A ‾ = 1 K_1=\overline{A}=1 K1=A=1
    • J 0 = A = 0 J_0=A=0 J0=A=0
    • K 0 = A ‾ = 1 K_0=\overline{A}=1 K0=A=1
    • Y = Q 1 ⋅ A ‾ = 1 Y=Q_1·\overline{A}=1 Y=Q1A=1(重大错误,此种情形下,输出会错误出现1的情况,而此时并不是检测序列成功的状态)
    • Q 1 n + 1 = J 1 ⋅ Q 1 n ‾ + K 1 ‾ ⋅ Q 1 n = 0 ⋅ 1 ‾ + 1 ‾ ⋅ 1 = 0 Q_1^{n+1}=J_1·\overline{Q_1^n}+\overline{K_1}·Q_1^n=0·\overline{1}+\overline{1}·1=0 Q1n+1=J1Q1n+K1Q1n=01+11=0
    • Q 0 n + 1 = J 0 ⋅ Q 0 n ‾ + K 0 ‾ ⋅ Q 0 n = 0 ⋅ 0 ‾ + 1 ‾ ⋅ 0 = 0 Q_0^{n+1}=J_0·\overline{Q_0^n}+\overline{K_0}·Q_0^n=0·\overline{0}+\overline{1}·0=0 Q0n+1=J0Q0n+K0Q0n=00+10=0
  • A = 1 , Q 1 Q 0 = 10 A=1,Q_1Q_0=10 A=1Q1Q0=10时, 10->11有效状态,Y=0

    • J 1 = Q 0 A = 1 J_1=Q_0A=1 J1=Q0A=1
  • K 1 = A ‾ = 0 K_1=\overline{A}=0 K1=A=0
  • J 0 = A = 1 J_0=A=1 J0=A=1
  • K 0 = A ‾ = 0 K_0=\overline{A}=0 K0=A=0
  • Y = Q 1 ⋅ A ‾ = 0 Y=Q_1·\overline{A}=0 Y=Q1A=0
  • Q 1 n + 1 = J 1 ⋅ Q 1 n ‾ + K 1 ‾ ⋅ Q 1 n = 1 ⋅ 1 ‾ + 0 ‾ ⋅ 1 = 1 Q_1^{n+1}=J_1·\overline{Q_1^n}+\overline{K_1}·Q_1^n=1·\overline{1}+\overline{0}·1=1 Q1n+1=J1Q1n+K1Q1n=11+01=1
  • Q 0 n + 1 = J 0 ⋅ Q 0 n ‾ + K 0 ‾ ⋅ Q 0 n = 1 ⋅ 0 ‾ + 0 ‾ ⋅ 0 = 1 Q_0^{n+1}=J_0·\overline{Q_0^n}+\overline{K_0}·Q_0^n=1·\overline{0}+\overline{0}·0=1 Q0n+1=J0Q0n+K0Q0n=10+00=1
  • 无效状态会在下一次脉冲到来后,变为有效状态。但是会出现输出状态错误的情况。
  • 无效状态, Q 1 Q 0 A = 100 Q_1Q_0A=100 Q1Q0A=100,在卡诺图中,不应标记为无关
  • 修改后的卡诺图,得到 Y = Q 1 ⋅ Q 0 ⋅ A ‾ Y=Q_1·Q_0·\overline{A} Y=Q1Q0A
    在这里插入图片描述
  • 修改后的逻辑图
    在这里插入图片描述

例3 给定原始状态图

(1)需求
  • 实现如下图“状态图”所示的电路。使用D触发器设计。
    在这里插入图片描述

    • 列出原始状态表
现态 S n S^n SnA=0时,次态 S n + 1 S^{n+1} Sn+1/YA=1时,次态 S n + 1 S^{n+1} Sn+1/Y
aa/0b/0
bc/0d/0
ca/0d/0
de/0f/1
ea/0f/1
fg/0f/1
ga/0f/1
(2)状态化简
  • 观察原始状态表可知,e和g是等价状态。A相同的情况下,次态相同,输出相同。
  • 将e和g合并,不会影响输出Y的逻辑。得到如下状态表。
现态 S n S^n SnA=0时,次态 S n + 1 S^{n+1} Sn+1/YA=1时,次态 S n + 1 S^{n+1} Sn+1/Y
aa/0b/0
bc/0d/0
ca/0d/0
de/0f/1
ea/0f/1
fe/0f/1
  • 对于改变之后的状态表,又发现,d和f等价,可以将d和f合并。不会影响输出Y的逻辑。
现态 S n S^n SnA=0时,次态 S n + 1 S^{n+1} Sn+1/YA=1时,次态 S n + 1 S^{n+1} Sn+1/Y
aa/0b/0
bc/0d/0
ca/0d/0
de/0d/1
ea/0d/1

在这里插入图片描述

(3)状态分配
  • 由状态图可知,需要定义5个状态abcde

  • 方案一:选用3位二进制数的前5个连续编码。000,001,010,011,100

  • 方案二:选用3位格雷码的前5个编码。降低竞争冒险。000,001,011,010,110

  • 方案三:选用1对1方案。5位二进制数,每一位对应一种状态。00001,00010,00100,01000,10000。使用的触发器较多,但组合电路可能会更简单。针对触发器多,门逻辑少的情形下,该方案更加好。

  • 最终按照方案一,3位二进制数的前5个连续编码,a=000,b=001,c=010,d=011,e=100

现态 Q 2 n Q 1 n Q 0 n Q_2^nQ_1^nQ_0^n Q2nQ1nQ0nA=0时,次态 Q 2 n + 1 Q 1 n + 1 Q 0 n + 1 Q_2^{n+1}Q_1^{n+1}Q_0^{n+1} Q2n+1Q1n+1Q0n+1/YA=1时,次态 Q 2 n + 1 Q 1 n + 1 Q 0 n + 1 Q_2^{n+1}Q_1^{n+1}Q_0^{n+1} Q2n+1Q1n+1Q0n+1/Y
000000/0001/0
001010/0011/0
010000/0011/0
011100/0011/1
100000/0011/1
(4)选取触发器
  • 需求已经明确,使用D触发器。
(5)确定激励方程组和输出方程组
  • 3位二进制数,对应3个D触发器。
  • 状态方程: Q n + 1 = D Q^{n+1}=D Qn+1=D
  • 所以状态表可以改写成如下形式,栏目中增加D。

状态转换真值表

现态 Q 2 n Q 1 n Q 0 n Q_2^nQ_1^nQ_0^n Q2nQ1nQ0nA次态 Q 2 n + 1 ( D 2 ) Q 1 n + 1 ( D 1 ) Q 0 n + 1 ( D 0 ) Q_2^{n+1}(D_2)Q_1^{n+1}(D_1)Q_0^{n+1}(D_0) Q2n+1(D2)Q1n+1(D1)Q0n+1(D0)/Y
0000000/0
0001001/0
0010010/0
0011011/0
0100000/0
0101011/0
0110100/0
0111011/1
1000000/0
1001011/1
  • 使用卡诺图,求出逻辑表达式
    • 激励方程组
      • D 2 = Q 1 Q 0 A ‾ D_2 = Q_1Q_0\overline{A} D2=Q1Q0A
      • D 1 = Q 1 A + Q 1 ‾ Q 0 + Q 2 A D_1 = Q_1A+\overline{Q_1}Q_0+Q_2A D1=Q1A+Q1Q0+Q2A
      • D 0 = A D_0 = A D0=A
        在这里插入图片描述
    • 输出方程组
      • Y = Q 2 A + Q 1 Q 0 A Y=Q_2A+Q_1Q_0A Y=Q2A+Q1Q0A
        在这里插入图片描述
(6)绘制逻辑图
  • 3个D触发器
  • D 2 = Q 1 Q 0 A ‾ D_2 = Q_1Q_0\overline{A} D2=Q1Q0A
  • D 1 = Q 1 A + Q 1 ‾ Q 0 + Q 2 A D_1 = Q_1A+\overline{Q_1}Q_0+Q_2A D1=Q1A+Q1Q0+Q2A
  • D 0 = A D_0 = A D0=A
  • Y = Q 2 A + Q 1 Q 0 A Y=Q_2A+Q_1Q_0A Y=Q2A+Q1Q0A
  • 已略去CP和Reset的连线

在这里插入图片描述

(7)检查自启动能力
  • 3个D触发器,有8-5=3个无效状态 101,110,111
  • 将3个无效状态,代入激励方程组,观察是否能够进入有效状态
    • A=0时,101->010,Y=0,110->000,Y=0,111->100,Y=0
    • A=1时,101->011,Y=0,110->011,Y=0,111->011,Y=0

在这里插入图片描述

  • 结论,3个无效状态都可以进入有效。

6.4 异步时序逻辑电路分析

  • 异步时序电路,没有统一的时钟。
  • 各个存储电路不是同时更新
  • 状态之间没有明确的分界线。

6.4.1 注意点

  • (1)分析状态转换时,必须考虑各个触发器的时钟信号作用情况。
    • 列出电路中各个触发器时钟信号的逻辑表达式
    • 确定各个触发器的CP或者 C P ‾ \overline{CP} CP是否有时钟信号的作用。
    • 时钟信号有作用, c p n = 1 cp_n=1 cpn=1
    • 时钟信号没有作用, c p n = 0 cp_n=0 cpn=0
  • (2)从输入信号影响的第一个触发器逐级向后确定状态的转换。
    • 确定第一个触发器的输出状态,再去分析下一级触发器的时钟信号等等。
    • 逐级分析。
  • (3)每一次状态转换都有一定的时间延迟。
    • 电路的各个触发器,从现态到次态转换需要一定的时间。在此期间,电路处于不确定状态。
    • 只有全部触发器状态,转换完毕,电路才进入稳定状态。
    • 异步时序电路的输入信号,必须等待电路进入稳定状态,输入信号才可以发生改变。否则会处在不确定的状态。

6.4.2 举例分析异步时序逻辑电路

例1 异步时序逻辑电路

  • 下图 C P 0 和 C P 1 CP_0和CP_1 CP0CP1未共用时钟源。属于异步时序电路。
    在这里插入图片描述
(1)列出方程组
  • 时钟信号, C P 0 = C L K , C P 1 = Q 0 CP_0=CLK,CP_1=Q_0 CP0=CLKCP1=Q0
  • 输出方程, Z = Q 1 Q 0 Z=Q_1Q_0 Z=Q1Q0
  • 激励方程, D 0 = Q 0 ‾ , D 1 = Q 1 ‾ D_0=\overline{Q_0},D_1=\overline{Q_1} D0=Q0,D1=Q1
  • 状态方程,
    • c p 0 = 1 cp_0=1 cp0=1时,时钟起作用, Q 0 n + 1 = Q 0 n ‾ Q_0^{n+1}=\overline{Q_0^n} Q0n+1=Q0n
    • c p 0 = 0 cp_0=0 cp0=0时,时钟不起作用, Q 0 n + 1 = Q 0 n Q_0^{n+1}=Q_0^n Q0n+1=Q0n
    • Q 0 n + 1 = c p 0 ‾ Q 0 n + c p 0 Q 0 n ‾ Q_0^{n+1}=\overline{cp_0}Q_0^n+cp_0\overline{Q_0^n} Q0n+1=cp0Q0n+cp0Q0n
    • 同理, Q 1 n + 1 = c p 1 ‾ Q 1 n + c p 1 Q 1 n ‾ Q_1^{n+1}=\overline{cp_1}Q_1^n+cp_1\overline{Q_1^n} Q1n+1=cp1Q1n+cp1Q1n
(2)列出状态表
  • 只有 Q 0 Q_0 Q0从0变到1,才有 c p 1 = 1 cp_1=1 cp1=1
Q 1 n Q 0 n Q_1^nQ_0^n Q1nQ0n c p 0 = C L K ( 始终起作用 ) cp_0=CLK \\ (始终起作用) cp0=CLK(始终起作用) c p 1 = Q 0 n + 1 c p 1 = c p 0 ‾ Q 0 n + c p 0 Q 0 n ‾ c p 1 = Q 0 n ‾ cp_1=Q_0^{n+1}\\cp_1=\overline{cp_0}Q_0^n+cp_0\overline{Q_0^n}\\cp_1=\overline{Q_0^n} cp1=Q0n+1cp1=cp0Q0n+cp0Q0ncp1=Q0n Q 1 n + 1 Q 0 n + 1 Q_1^{n+1}Q_0^{n+1} Q1n+1Q0n+1Z(现态)
001( Q 0 Q_0 Q0次态取反)1( Q 1 Q_1 Q1次态取反)110
011( Q 0 Q_0 Q0次态取反)0( Q 1 Q_1 Q1次态不变)000
101( Q 0 Q_0 Q0次态取反)1( Q 1 Q_1 Q1次态取反)010
111( Q 0 Q_0 Q0次态取反)0( Q 1 Q_1 Q1次态不变)101
(3)画出状态图
  • 本电路,一个现态只有一种情况的次态。Z与现态有关,因而每种状态的输出Z都是固定的。可以将Z与 Q 1 Q 0 Q_1Q_0 Q1Q0放在状态圈里。
    在这里插入图片描述
(4)列出时序图
  • 由于两个D触发器的触发响应延迟,电路短时间会出现“不确定状态”。(如果使用74HCT74双D触发芯片,这个不确定状态的时间大概是40ns)
    在这里插入图片描述
(5)功能分析
  • 异步二进制减计数器,Z的上升沿作为“借位”信号。0->3->2->1->0->3->2->1…
  • 序列信号发生器。输出Z序列脉冲信号,周期时4个CP周期,脉宽是1个CP周期。

例2 异步时序逻辑电路

  • T ′ 触发器, Q n + 1 = Q n ‾ T'触发器,Q^{n+1}=\overline{Q^n} T触发器,Qn+1=Qn,分析其功能。
    在这里插入图片描述
(1)列出方程组
  • 时钟信号
    • C P 0 ‾ = Q 2 + C L K ‾ = Q 2 ‾ ⋅ C L K ‾ \overline{CP_0}=\overline{Q_2+CLK}=\overline{Q_2}·\overline{CLK} CP0=Q2+CLK=Q2CLK
    • C P 1 ‾ = Q 0 \overline{CP_1}=Q_0 CP1=Q0
    • C P 2 ‾ = C L K + Q 0 ⋅ Q 1 + Q 2 ‾ ‾ = C L K ‾ ⋅ ( Q 0 ⋅ Q 1 + Q 2 ) \overline{CP_2}=\overline{CLK+\overline{Q_0·Q_1+Q_2}}=\overline{CLK}·(Q_0·Q_1+Q_2) CP2=CLK+Q0Q1+Q2=CLKQ0Q1+Q2
  • 输出方程, Q 2 , Q 1 , Q 0 Q_2,Q_1,Q_0 Q2,Q1,Q0
  • 激励方程,无
  • 状态方程,与前一个例子一样,需要考虑 C P ‾ \overline{CP} CP是否起作用。
    • Q 0 n + 1 = c p 0 Q 0 ‾ + c p 0 ‾ Q 0 Q_0^{n+1}=cp_0\overline{Q_0}+\overline{cp_0}Q_0 Q0n+1=cp0Q0+cp0Q0
    • Q 1 n + 1 = c p 1 Q 1 ‾ + c p 1 ‾ Q 1 Q_1^{n+1}=cp_1\overline{Q_1}+\overline{cp_1}Q_1 Q1n+1=cp1Q1+cp1Q1
    • Q 2 n + 1 = c p 2 Q 2 ‾ + c p 2 ‾ Q 2 Q_2^{n+1}=cp_2\overline{Q_2}+\overline{cp_2}Q_2 Q2n+1=cp2Q2+cp2Q2
(2)列出状态表
  • 在表格中加入 c p 0 , c p 1 , c p 2 cp_0,cp_1,cp_2 cp0,cp1,cp2
  • c p n = 1 , 表示起作用(即出现下降沿) cp_n=1,表示起作用(即出现下降沿) cpn=1,表示起作用(即出现下降沿)
  • C P 0 ‾ = Q 2 + C L K ‾ = Q 2 ‾ ⋅ C L K ‾ \overline{CP_0}=\overline{Q_2+CLK}=\overline{Q_2}·\overline{CLK} CP0=Q2+CLK=Q2CLK,可知 c p 0 cp_0 cp0直连时钟,但需要满足逻辑 Q 2 ‾ = 1 \overline{Q_2}=1 Q2=1才起作用。
  • C P 1 ‾ = Q 0 \overline{CP_1}=Q_0 CP1=Q0,可知 c p 0 cp_0 cp0是否起作用,需要 Q 0 Q_0 Q0产生一个下降沿
  • C P 2 ‾ = C L K + Q 0 ⋅ Q 1 + Q 2 ‾ ‾ = C L K ‾ ⋅ ( Q 0 ⋅ Q 1 + Q 2 ) \overline{CP_2}=\overline{CLK+\overline{Q_0·Q_1+Q_2}}=\overline{CLK}·(Q_0·Q_1+Q_2) CP2=CLK+Q0Q1+Q2=CLKQ0Q1+Q2,可知 c p 2 cp_2 cp2直连时钟,但需要满足逻辑 ( Q 0 ⋅ Q 1 + Q 2 ) = 1 (Q_0·Q_1+Q_2)=1 Q0Q1+Q2=1才起作用。
现态 Q 2 n Q 1 n Q 0 n Q_2^nQ_1^nQ_0^n Q2nQ1nQ0n c p 0 与 Q 2 n ‾ ⋅ C L K ‾ 有关 cp_0与\overline{Q_2^n}·\overline{CLK}有关 cp0Q2nCLK有关 c p 1 与 Q 0 n 有关 Q 0 n + 1 从 1 − > 0 下降沿时起作用 cp_1与Q_0^n有关\\Q_0^{n+1}从1->0下降沿时起作用 cp1Q0n有关Q0n+11>0下降沿时起作用 c p 2 与 C L K ‾ ⋅ ( Q 0 n ⋅ Q 1 n + Q 2 n ) 有关 cp_2与\overline{CLK}·(Q_0^n·Q_1^n+Q_2^n)有关 cp2CLKQ0nQ1n+Q2n)有关次态 Q 2 n + 1 Q 1 n + 1 Q 0 n + 1 Q_2^{n+1}Q_1^{n+1}Q_0^{n+1} Q2n+1Q1n+1Q0n+1
0001( Q 0 Q_0 Q0翻转)00001
0011( Q 0 Q_0 Q0翻转)10010
0101( Q 0 Q_0 Q0翻转)00011
0111( Q 0 Q_0 Q0翻转)11100
100001000
101001001
110001010
111001011
(3)列出状态图
  • 经历一次CLK上升沿, C L K ‾ \overline{CLK} CLK的下降沿之后,无论电路处于什么状态,都会进入5个状态的单向循环。
    在这里插入图片描述
(4)列出时序图
(5)功能分析
  • 加计数器,0->1->2->3->4 ->0->1->…

6.5 时序逻辑集成电路

  • 寄存器、移位寄存器、计数器。结合组合逻辑电路,可以构成极其复杂的数字系统。
  • 中规模集成电路中,已经实现了较为成熟的寄存器、移位寄存器、计数器。
  • 宏模块:具有较完善功能的中规模集成电路

6.5.1 寄存器和移位寄存器

1. 寄存器

  • 寄存器:用来存储二进制数据的逻辑部件。1个触发器可以存储1位二进制数据。
  • 典型寄存器芯片:74HC/HCT374(8个触发器构成的8位CMOS寄存器)
    • 8个D触发器并联。
    • 输出端使用了三态门
    • 8位数据同步并行存储。
    • 对比传输门控D锁存器构成的8位寄存器(5.2.2.4小节),功能基本一样。D锁存器构成的8位存储电路电路是电平敏感。D触发器(寄存器)构成的8位寄存器是脉冲边沿敏感。
    • 根据数据刷新稳定的时间点在信号边沿前还是边沿后,决定选取D触发器(寄存器)还是D锁存器。
    • 寄存器比锁存器具有更好的同步性能和抗干扰能力。
      在这里插入图片描述

2. 移位寄存器

(1)基本移位寄存器
  • 几个触发器级联,构成移位寄存器。
  • 属于同步时序电路。在同一脉冲作用下,将二进制数据依次移位。
  • 先送的数据,在经过4次移位后,会存到 Q 3 Q_3 Q3
  • 移位寄存器 只对 脉冲边沿敏感。(时钟高电平期间有一点的时间,这段时间内不能让输出跟随输入,因而只能使用触发器构成,不可以使用锁存器。)
    在这里插入图片描述
  • 典型移位寄存器芯片:74HC/HCT164
    在这里插入图片描述
(2)双向移位寄存器
  • 国家标准:逻辑图中数据的最低位LSB和最高有效位MSB,按照从上到下,从左到右排列。(与计算机程序中的左移右移不同)

    • 双向移位寄存器电路右移:从低位触发器移向高位触发器
    • 双向移位寄存器电路左右:从高位触发器移向低位触发器
  • 并行置入与并行输出

    • 原本只能一位一位的移入,增加了并行置入,可以一下将全部位值写入
    • 原本只能一位一位的移出,增加了并行输出,可以一下将全部位值读出
      在这里插入图片描述
  • 具体逻辑电路图实现,见教材书籍page284页。

  • 典型双向移位寄存器芯片:74HC/HCT194

    • 2个选择输入端 S 1 S 0 S_1S_0 S1S0,同步控制(并行置数,左移,右移,保持不变)
    • 2个串行数据输入端 D S R , D S L D_{SR},D_{SL} DSRDSL
    • 4个并行数据输入端 D I 0 , D I 1 , D I 2 , D I 3 DI_0,DI_1,DI_2,DI_3 DI0,DI1,DI2,DI3
    • 4个并行输出端 Q 0 , Q 1 , Q 2 , Q 3 Q_0,Q_1,Q_2,Q_3 Q0,Q1,Q2,Q3
  • 5个功能包括:

    • 异步置0,输出被异步置0。 C R ‾ \overline{CR} CR
    • 同步并行置数
    • 左移(高到低)
    • 右移(低到高)
    • 保持不变在这里插入图片描述
      在这里插入图片描述

6.5.2 计数器

常见应用:

  • 对脉冲进行计数
  • 分频
  • 定时
  • 产生节拍脉冲
  • 其他

1. 二进制计数器

(1)异步二进制计数器(纹波计数器)
  • T ′ 触发器 T'触发器 T触发器
  • 前一级触发器经过依次1->0,才会有下一级的一次变化。这正模拟了二进制加计数的进位。
  • 这里的分析过程,参考本文的6.4.2的例2。
    在这里插入图片描述
  • 如下时序图所示,低位(前一级触发器)的输出产生一次下降沿,为下一级高位(触发器)产生一个进位信号(触发时钟有效,触发器翻转)。
    在这里插入图片描述
  • 异步二进制计数器,逐级脉动翻转,被称为“纹波计数器”。像水波一样,一级一级,翻转周期变大。
  • 缺点,纹波进位,需要一定的时间,且时间越来越大。要求 T C P > > N ∗ t p d T_CP>>N*t_{pd} TCP>>Ntpd,否则会出错。因而加计数的速度受限。
  • 典型异步二进制计数器:74HC/HCT393
(2)同步二进制加计数器
  • 较高的计数速度。
  • 利用组合逻辑电路,在脉冲作用前,提前准备好条件。
  • 脉冲作用时,触发器应翻转则翻转,应保持则保持。
  • 不存在纹波进位的时间累计。
  • 逻辑图如下,分析过程略。可参考本文的6.2.2例1。
  • CE是counter enable 计数使能端
    在这里插入图片描述
  • 典型同步二进制加计数器:74LVC161,支持并行置位,具体分析见教材page292。
    • CEP和CET与运算,作为计数使能端。
    • P E ‾ = 0 \overline{PE}=0 PE=0时,允许并行置值(初始值)。 P E ‾ = 1 \overline{PE}=1 PE=1时,从当前状态继续加计数功能。
    • C R ‾ \overline{CR} CR,作为异步清零Clear。
    • Q 3 Q 2 Q 1 Q 0 = 1111 Q_3Q_2Q_1Q_0=1111 Q3Q2Q1Q0=1111且CET=1时,TC=1产生进位信号。
      在这里插入图片描述
  • 74LVC161构成模 2 16 2^{16} 216计数器
    • 进位信号作为下一级的计数使能。
      在这里插入图片描述

2. 非二进制计数器

(1)异步二-十计数器
  • 参考6.4.2 例2,3个 T ′ 触发器 T'触发器 T触发器构成的五进制加计数器。
  • 增加一个触发器, 2 4 = 16 2^4=16 24=16,可用于制作一个十进制计数器。
  • 具体分析,参考6.4.2的例2
    在这里插入图片描述
(2)任意进制计数器
  • 已知74LVC161是4个触发器,16种状态。本身就是一个4位的十六进制加计数器。
  • 使用74LVC161构成9进制,即设法跳过9,a,b,c,d,e,f这7种状态,回到0。(0,1,2,3,4,5,6,7,8,0,1,2…)

【1】反馈清零法
在这里插入图片描述
【2】反馈置数法

  • 使用Q3触发并行置位,计数到0x1000打开预置位,在下一个脉冲CP到来后,置数0x0000
  • 或者使用进位信号触发置位,从7记到15的9进制
    在这里插入图片描述
(3)环形计数器

【1】基本环形计数器

  • 无需译码,直接输出四个状态。
  • 不存在竞争冒险。
    在这里插入图片描述
    【2】扭环形计数器(约翰逊计数器)
  • 使用5位移位寄存器,构成10状态的扭环形计数器。
    在这里插入图片描述
  • 状态图
    在这里插入图片描述
  • 典型扭环形计数器:74HC/HCT4017

6.6 VerilogHDL 描述时序逻辑电路

  • 使用数据流描述语句+行为级描述语句

6.6.1 移位寄存器的Verilog建模

(1)4位双向移位寄存器

  • 使用行为级描述语句always,描述一个4位双向移位寄存器。(参考6.5多功能双向移位寄存器)

    • 2个选择输入端 S 1 S 0 S_1S_0 S1S0,同步控制(并行置数,左移,右移,保持不变)
    • 2个串行数据输入端 D S R , D S L D_{SR},D_{SL} DSRDSL
    • 4个并行数据输入端 D I 0 , D I 1 , D I 2 , D I 3 DI_0,DI_1,DI_2,DI_3 DI0,DI1,DI2,DI3
    • 4个并行输出端 Q 0 , Q 1 , Q 2 , Q 3 Q_0,Q_1,Q_2,Q_3 Q0,Q1,Q2,Q3
  • 5个功能包括:

    • 异步置0,输出被异步置0。 C R ‾ \overline{CR} CR
    • 同步并行置数
    • 左移(高到低)
    • 右移(低到高)
    • 保持不变
module shift74x194(S1,S0,D,Dsl,Dsr,Q,CP,CR);
    input S1,S0;//功能选择
    input [3:0]D;//并行输入数据,用于置数
    input Dsl,Dsr;//串行输入数据
    input CP;//clock pulse
    input CR;//clear output Q
    
    //Q需要在always中赋值,应定义为寄存器(触发器)
    output [3:0]Q;//输出数据
    reg [3:0]Q;
    
    always @ (posedge CP or negedge CR)//CR异步清0
        //CR清零Q,拥有最高优先级。
        if(~CR) 
            Q <= 4'b0000; 
        else
            case({S1,S0})
                2'b00: Q<=Q;//保持
                2'b01: Q<={Q[2:0],Dsr};//电路右移,实际是二进制数据左移,Dsr补充为最低位。
                2'b10: Q<={Dsl,Q[3:1]};//电路左移,实际是二进制数据右移,Dsl补充为最高位。
                2'b11: Q<=D;//并行置值
            endcase
endmodule

  • 激励信号
module shift74x194_TB;

    reg S1,S0,Dsl,Dsr,CP,CR;
    reg [3:0]D;
    wire [3:0]Q;

    shift74x194 fun(S1,S0,D,Dsl,Dsr,Q,CP,CR);

    initial
        begin
            CP=0;
            S1=1;S0=1;D=4'b1010;
            Dsl = 1;Dsr=0;
            CR=1;

        #24 S1=0;S0=1;//右移,数据左移
        #34 S1=0;S0=0;//保持

        #50 S1=1;S0=0;//左移,数据右移

        #25 S1=0;S0=0;

        #50 S1=1;S0=1;D=4'b1100;
        #50 S1=0;S0=0;
        #50 CR =0;
            
        #50 $stop;  
        end
    always #10 CP=~CP;

endmodule

  • ModelSim仿真波形
    在这里插入图片描述

6.6.2 计数器的Verilog建模

(1)同步二进制计数器

  • 异步置零
  • 并行置数
  • 4位
  • 类似于74LVC161的功能
  • 使用assign语句描述组合电路中的(CEP&CET,与门产生的中间节点)CE
  • 使用assign语句描述TC进位输出信号
module counter74x161(CEP,CET,PE,D,CP,CR,Q,TC);
    //输入
    input CEP,CET,PE,CP,CR;
    input [3:0]D;
    output TC;
    //输出
    output [3:0]Q; //
    reg [3:0]Q;    //寄存器(触发器) 

    //中间节点
    wire CE;

    //组合逻辑电路
    assign CE = CEP&CET;
    assign TC = CET&(Q==4'b1111);

    //时序逻辑电路,触发器
    always @(posedge CP or negedge CR)//异步清零
        if(~CR)Q<=4'b0000;//异步清零的优先级最高
        else if(~PE) Q<=D;//同步并行置数
        else if(~CE) Q<=Q;//没有使能计数,Q不变
        else Q<=Q+1'b1; //正常计数
endmodule

  • 激励信号
module counter74x161_TB;

    reg CEP,CET,PE,CP,CR;
    reg [3:0]D;
    wire TC;
    wire [3:0]Q;

    counter74x161 fun(CEP,CET,PE,D,CP,CR,Q,TC);

    initial
        begin
            CP=0;
            CEP=1;CET=1;D=4'b1010;
            PE = 0;CR=0;

        #24 CR=1;//结束复位
        #34 PE=1;//停止并行置位
        #100 CR=0;//复位
        #100 CR=1;CEP=0;
        #25 CEP=1;
            
        #100 $stop;  
        end
    always #10 CP=~CP;

endmodule

  • 仿真时序图
    在这里插入图片描述

(2)异步二进制计数器(纹波计数器)

  • 4位异步二进制计数器

  • 结构化描述,调用模块(带异步置零的D触发器)。

  • D触发器作为底层模块。参考第5章内容。
    在这里插入图片描述

module D_FF(Q,D,CP,Rd);
    output Q;
    input D,CP,Rd;
    reg Q;//寄存器(触发器)
    always @ (negedge CP or negedge Rd)//异步清零
       if(~Rd)Q<=1'b0;
       else Q<=D;
endmodule

在这里插入图片描述

  • 实现异步二进制计数器
//Ripple counter 纹波计数器
module ripplecounter(Q0,Q1,Q2,Q3,CP,CR);
    output Q0,Q1,Q2,Q3;
    input CP,CR;

    D_FF FF0(Q0,~Q0,CP,~CR);
    D_FF FF1(Q1,~Q1,Q0,~CR);
    D_FF FF2(Q2,~Q2,Q1,~CR);
    D_FF FF3(Q3,~Q3,Q2,~CR);

endmodule
  • 激励信号
module ripplecounter_TB;

    reg CP,CR;

    wire Q0,Q1,Q2,Q3;

    ripplecounter fun(Q0,Q1,Q2,Q3,CP,CR);

    initial
        begin
            CP=0;
            CR=1;
        #20 CR=0;//复位
        #200 CR=1;//复位
        #25 CR=0;
            
        #300 $stop;  
        end
    always #10 CP=~CP;

endmodule

  • 仿真波形图
    在这里插入图片描述

(3)非二进制计数器

  • 具有异步清零的同步十进制计数器
  • CR变低电平时,计数器输出被清0
  • CE=1,在CP上升沿作用,计数器在0->9之间循环计数
  • CE=0,计数器不工作,保持原值。
module m10_counter(CE,CP,CR,Q);
    input CE,CP,CR;
    output [3:0]Q;
    reg [3:0]Q;

    always @ (posedge CP or negedge CR)
        if(~CR)Q<=4'b0000;//清零
        else if(CE)//计数器工作
            begin 
                if(Q>=4'b1001) Q<=4'b0000;
                else Q <= Q+1'b1;
            end
        else Q<=Q; //CE=0,计数器保持不变
endmodule
  • 激励信号
module m10_counter_TB;

    reg CE,CP,CR;

    wire [3:0]Q;

    m10_counter fun(CE,CP,CR,Q);

    initial
        begin
            CP=0;
            CR=1;
            CE=1;
        #20  CR=0;
        #20  CR=1;
        #300 CR=0;//复位
        #20  CR=1;
        #250 CE=0;
        #300 $stop;  
        end
    always #10 CP=~CP;
endmodule

  • 仿真时序图
    在这里插入图片描述

6.6.3 状态图的Verilog建模

  • 使用Verilog语句,描述状态图。
  • always语句,敏感信号和触发器
  • case语句,状态切换。

(1)检测连续输入序列110(Mealy型)

  • mealy箭头上有输出
  • 本文6.3.2小节,例2,状态图如下所示
    在这里插入图片描述
  • 使用verilog语句描述状态图
    • 保存电路状态的触发器,使用current_state、next_state进行定义。
    • 使用 参数定义语句parameter定义 电路的 三种状态。S0 = 2’b00 ,S1 = 2’b01 ,S2 = 2’b11
    • A是输入信号
    • JK触发器,下降沿触发
module Mealy_sequence_detector(A,CP,CR,Y);
    input A,CP,CR;
    output Y;
    reg Y;
    reg[1:0] current_state,next_state;

    parameter S0 = 2'b00,S1 = 2'b01,S2 = 2'b11;
   
   //(1)边沿敏感事件,时序逻辑部分。同步状态变化(现态->次态)  或者异步清零
    always @ (negedge CP or negedge CR)//异步清零
        begin
            if(~CR) current_state <= S0; //异步清零
            else    current_state <= next_state; //时钟下降沿,更新状态
        end
    
    //(2) 电平敏感事件,组和逻辑部分。事件更新 输出Y的值,次态的值。
    always @ (current_state or A)//在mealy型电路中,输出Y实时跟随输入A变化
        begin                    //次态next_state 和(输入A,现态current_state)有关
            case(current_state)
                S0: begin Y<=0; next_state<= (A==1)?S1:S0; end
                S1: begin Y<=0; next_state<= (A==1)?S2:S0; end
                S2: if(A==1) begin Y<=0; next_state <= S2; end
                    else     begin Y<=1; next_state <= S0; end
                default: begin Y<=0; next_state <= S0;end
            endcase
        end
endmodule

(2)穆尔型状态图(Moore型)

  • 穆尔型:箭头上没有输出
  • CP上升沿
    在这里插入图片描述
module Moore_mdl(Data,Q,CP.CR);
    input Data,CP,CR;
    output [1:0]Q;

    reg [1:0]state;
    parameter S0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;
    
    //(1)时序逻辑电路
    always @ (posedge CP or negedge CR)//同步更新状态,异步清零
        begin
            if(~CP)state<=S0;
            else
                case(state)
                    S0:if(~Data)state <=S1;
                    S1:if(~Data)state <=S3;else state <= S2;
                    S2:if(~Data)state <=S3;
                    S3:if(~Data)state <=S0;
                endcase
        end
    //(2)组和逻辑电路
    assign Q=state;
endmodule

6.7 时序可编程逻辑器件

6.7.1 宏单元

  • 时序可编程器件中的宏单元。
  • 时序电路 = 组合电路 + 存储电路。
    • 组合电路:PLD (与-或阵列),参考第4章4.5小节
    • 存储电路:触发器

(1)基本宏单元Macrocell

  • 基本宏单元Macrocell:在PLD器件的 与-或阵列 和 输出缓冲之间 增加 触发器电路,充当存储电路。
    • 便于 组成 不同逻辑功能的 时序电路。
    • 公共时钟CLK,同步刷新。
    • 公共使能OE
      在这里插入图片描述
  • 时序PLD, 寄存器型PAL,集成了很多如上图所示的电路。

(2)输出逻辑宏单元OLMC

  • GAL,CPLD,对基本宏单元进行了改进。
  • 输出逻辑宏单元 output logic macrocell。
    在这里插入图片描述
    在这里插入图片描述

6.7.2 主要类型

(1)通用整列逻辑GAL

  • 1000门以下。
  • 继承了PLD的与-或结构。
  • 输出端,基于输出逻辑宏单元OLMC。
  • 输出功能,灵活,通用。
    在这里插入图片描述

(2)复杂可编程逻辑器件CPLD

  • 内部集成了多个逻辑单元块。每个逻辑快相当于一个通用整列逻辑GAL。
  • 多个GAL之间 通过 共享可编程开关阵列 实现互连,信息交换。
  • 每个GAL 都可与 IO模块 连接
  • 部分CPLD 内部有 EEPROM,FIFO,RAM等。
    在这里插入图片描述

(3)现场可编程门阵列FPGA

  • FPGA的结构和GAL、CPLD有很大差别。
  • 不受与-或阵列限制。
  • 适合实现多级逻辑功能。
  • 百万门以上。在一个FPGA上,可实现CPU+外围电路。
  • SOC技术:软件系统+硬件系统=整个数字系统都在单个芯片上运行。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值