# 时序逻辑电路概述

输入信号:X1XnX_1\sim X_n

输出信号:Z1ZmZ_1\sim Z_m

内部输入信号:y1ysy_1\sim y_s

时序逻辑电路中的激励信号:Y1YrY_1\sim Y_r

按照是否存在同一的时钟信号:

  1. 同步时序逻辑电路
  2. 异步时序逻辑电路

按照输入信号的不同,脉冲异步时序可分为:

  1. 脉冲异步时序逻辑电路
  2. 电平异步时序逻辑电路

脉冲的分类:

  • 正脉冲:信号的初始值是低电平
  • 负脉冲:信号的初始值是高电平
  • 周期性的时钟信号:脉冲信号之间的间隔时间是固定的
  • 电平信号:如果信号不具备周期性,就得到了电平信号

根据输出信号的特点:

  • MealyMealy 型:输出不仅取决于当前电路状态,还同时与电路输入有关
  • MooreMoore 型:输出只取决于当前电路的状态

# 时序逻辑电路的描述方法

状态表:

MealyMealy 型电路的输出 ZZ 和次态一样,其值不仅与电路的现态有关,还与输入直接相关

MooreMoore 型电路的输出 ZZ 仅与电路的现态 yy 有关,所以将输出单独列一列

状态图:

# 小规模时序逻辑电路分析

同步时序逻辑电路和脉冲异步时序逻辑电路的共同特点:

  1. 电路状态时在脉冲下实现的
    • 同步时序逻辑电路:尽管输入信号可以是电平信号或者脉冲信号,但电路的转换受统一的时钟脉冲控制
    • 脉冲异步时序逻辑电路:没有统一的时钟脉冲,输入信号为脉冲信号,即控制电路状态转换的脉冲信号时由电路输入端提供的
  2. 电路对过去输入信号的记忆是由触发器实现的

# 小规模同步时序逻辑电路的分析

通常将时钟脉冲信号 CPCP 当作一种默认的时间基准,在写激励函数表达式时,可以不用列出时钟脉冲信号 CPCP 的表达式

时钟脉冲信号的宽度必须保证触发器可靠翻转,脉冲的频率则必须保证在前一个脉冲引起的电路响应完全结束后,后一个脉冲才能到来

分析步骤:

  1. 确定电路类型:
    • 同步?异步?
    • MealyMealy 型?MooreMoore 型?
    • 上升沿触发?下降沿触发?
  2. 输出函数和激励函数(电路内部输入)表达式
  3. 电路的次态方程
  4. 状态图和状态表
  5. 检查电路自启动
  6. 时序图和文字描述电路功能

习题示例:

MealyMealy 型电路:输出 ZZ 高电平的持续时间由输入改变的时刻下一个时钟信号下降沿间隔时间决定

# 小规模脉冲异步时序逻辑电路的分析

在脉冲异步时序逻辑电路中,触发器不共用一个时钟脉冲信号,引起触发器状态变化的脉冲信号是由输入端直接提供的

MealyMealy 型电路的输出不仅是状态变量的函数,而且是输入的函数,所以输出是脉冲信号

MooreMoore 型电路的输出仅仅是状态变量的函数,输出信号的变化只能发生在两个间隔不定的输入脉冲之间,所输出是电平信号

对输入脉冲信号的约束条件:

  • 输入脉冲的宽度,必须保证触发器可靠翻转
  • 输入脉冲的间隔,必须保证钱一个脉冲引起的电路响应完全后,后一个脉冲才能到来
  • 不允许两个或两个以上输入端同时出现脉冲,所以分析时只需考虑各自单独出现脉冲的 nn 种情况

习题:

# 小规模时序逻辑电路设计

  1. 形成原始状态图和原始状态表

    1. 确定电路类型:MealyMealy 型和 MooreMoore 型,如果未特别要求,可自行选择
    2. 设立初始状态
    3. 根据需要记忆的信息增加新的状态
    4. 确定各时刻的输出

习题:

某序列检测器有一个输入端和一个输出端 ZZ。从输入端 xx 输入一串随机的二进制代码,当输入序列中出现 10011001 时,输出 ZZ 产生一个 11 输出,否则 ZZ 输出 00。试作出该序列检测器的原始状态图和原始状态表。

因为只有一个输入端,输入时串行输入,所以只能时同步时序逻辑电路

  1. 状态化简

    等效状态的判定:

    在各种取值组合下

    • 输出相同
    • 次态属于下列情况之一
      • 次态相同
      • 次态交错或为各自的现态
      • 次态循环或为等效对

    化简原始状态表的方法–隐含表法

    • 作隐含表:等腰直角梯形,横向从左到右按原始状态表中的状态依次标上第一个状态至倒数第二个状态的名字;纵向从上到下依次标上第二个状态至最后一个状态的名称
    • 寻找等效对:若状态对是明确等效的,在相应方格内填上 √;若状态对明确是不等效的,在相应的方格内填上 ×;若状态对与其他状态对相关,在相应方格内填上相关的状态对
    • 求出最大等效类:原始状态表中的每一个状态都必须属于某一个最大等效类;如果一个状态和其他任何状态都不等效,那么该状态单独构成一个最大等效类
    • 最出最简状态表

习题:

  1. 状态编码

    • 确定二进制代码的位数(即所需触发器个数)

      设最简状态表中的状态数为 nn,二进制代码的长度为 mm,则状态数 nn 与二进制代码长度 mm 的关系是

      2mn>2m12^m\geq n>2^{m-1}

    • 寻找最佳的状态分配方案

      1. 相同输入条件下,具有相同次态的现态应尽可能分配相邻的二进制代码
      2. 相邻输入条件下,同一现态的次态应尽可能分配相邻的二进制代码
      3. 输出完全相同的现态应尽可能分配相邻的二进制代码

      以上三条按131\sim3 的优先顺序考虑

  2. 确定激励函数和输出函数并画出逻辑电路图

在确定逻辑电路之后,如果设计的电路中触发器所能表示的状态数大于有效状态数时,即存在无效状态时,需对所设计电路的实际工作状态进行讨论

  • 当电路偶然进入无效状态后,是否能自动进入有效状态,不存在 “挂起”
  • 电路处于无效状态时是否会产生错误的输出信号

如果存在 “挂起” 或错误的输出信号,需要对设计的方案进行修改

# 小规模同步时序逻辑电路的设计

判断下图所示的电路能否自启动:

# 小规模脉冲异步时序逻辑电路的设计

  1. 由于不允许两个或两个以上输入端同时出现脉冲

    • 在形成原始状态图和原始状态表时,若有多个输入信号,只需考虑多个输入信号中仅一个出现脉冲的情况
    • 在确定激励函数和输出函数时,可将两个或两个以上输入同时出现脉冲的情况作为无关条件处理
  2. 由于电路中没有统一的时钟脉冲,当存储电路采用带时钟控制的触发器时,触发器的时钟端必须作为激励函数处理

    当触发器状态保持不变时,激励有两种取值:(往往选择 CP=0CP=0

    • 一种是令 CPCP 端为 dd,输入端取相应值
    • 一种是令 CP=0CP=0,激励端取任意值
  3. 一般考虑使用输入脉冲后沿触发的触发器(正脉冲的后沿是下降沿,负脉冲的后沿是上升沿)

# 常用的中规模时序逻辑电路

# 集成计数器

# 集成同步计数器 7419374193

双时钟 44 位二进制同步可逆计数器

  1. 异步清零:当 CLR=1CLR=1 时,无论时钟脉冲信号和置数控制信号为何值,计数器状态立刻清 “0”
  2. 异步置数:当 LD=0\overline{LD} =0 时,不管时钟脉冲信号为何值,计数器状态被置为 DCBADCBA
  3. 累加计数:当 CLR=0,LD=1,CPD=1CLR=0,\overline{LD}=1,CP_D=1CPUCP_U 端输入计数脉冲时,处于累加计数状态;当出现进位时,QCC=CPUQAQBQCQD\overline{Q_{CC}}=\overline{\overline{CP_U}\cdot Q_A\cdot Q_B\cdot Q_C\cdot Q_D}
  4. 累减计数:当 CLR=0,LD=1,CPU=1CLR=0,\overline{LD}=1,CP_U=1CPDCP_D 端输入技术脉冲时,处于累减计数;当出现借位时,QCB=CPDQAQBQCQD\overline{Q_{CB}}=\overline{\overline{CP_D}\cdot \overline{Q_A}\cdot \overline{Q_B}\cdot \overline{Q_C}\cdot \overline{Q_D}}

# 集成异步计数器 7429074290

  • R0A,R0BR_{0A},R_{0B} 为清零控制信号,高电平有效
  • R9A,R9BR_{9A},R_{9B} 为置 99 控制信号,高电平有效
  • CPA,CPBCP_A,CP_B 为计数脉冲信号

计数功能

R9AR9B=0R_{9A}R_{9B}=0R0AR0B=0R_{0A}R_{0B}=0

  1. 22 计数器:将计数脉冲加到 CPACP_A 端,并从 QAQ_A 端输出,则可实现 11 位二进制加法计数

  2. 55 计数器:将计数脉冲加到 CPBCP_B 端,并从 QD,QC,QBQ_D,Q_C,Q_B 端输出,则金额实现五进制加法计数

  3. 1010 计数器:

    • 84218421 码十进制计数器:计数脉冲连接到 CPACP_A 端,然后将 QAQ_A 输出端接到 CPBCP_B

    • 54215421 码十进制计数器:计数脉冲连接到 CPBCP_B 端,然后将 QBQ_B 输出端接到 CPACP_A

# R 进制计数器

清零法:

74193741937429074290 设计一个模 66 加法计数器

注意图(b)(b) 中的清零线连接错误,因为 QAQ_A54215421 码对应的最高位,所以应该将清零位连接 QDQ_D 的连接到 QBQ_B

因为实际上的 66 对应的是 0011001\, 1

置数法:

在没有清零功能的计数器中,可以利用预置值进行 “清零”,灵活性更大

级联法:

如果前一个计数器的模是 M1M_1,后一个计数器的模是 M2M_2,那么它们联级后得到计数器的模为

M=M2×M1M=M_2\times M_1

我们将 模 M1M_1 的输出连接到 模 M2M_2 的脉冲,那么 M2M_2 每出现一次进位,都需要 M1M_1M1M_1 次,所以一共是 模 M2×M1M_2\times M_1

模为 256256 的减法计数器

因为 CPDCP_D 输入的脉冲式负脉冲,上升沿状态改变;借位输出 QCB\overline{Q_{CB}} 也是负脉冲,所以可以直接连接

# 寄存器

一个触发器能存储 11 位二进制代码;一个 nn 位寄存器由 nn 个触发器组成,可以存放 nn 位二进制代码

# 移位寄存器 7419474194

# 移位寄存器的联级

** 扭环计数器:** 电路的状态的每次变化时只有一个触发器发生翻转,不会出现竞争和现象

  • 当由寄存器的第 nn 位状态通过非门连接到右移控制端 DRD_R 时,构成的是模为 2×n2\times n 的扭环计数器
  • 当由寄存器的第 n1n-1 位和第 nn 位状态输出通过与非门连接到右移控制端 DRD_R 时,构成的是模为 2×n12\times n-1

# 中规模时序逻辑电路的分析和设计

# 分析题

分析题 11

L=1L=1

  • 因为 L=1L=1 时,383-8 线译码器失效,Yˉ0Y7\bar Y_0\sim Y_7 输出为 11
  • 44JKJK 触发器形成一个标准的 4 位二进制计数器,可计数 0~15,共 16 个状态
    • 第一次出现 CPCP 脉冲后,在下降沿,Q0Q_0 变成 11,计数 11
    • 第二次出现 CPCP 脉冲后,在下降沿,Q0Q_0 变成 00,此时因为 Q0Q_0 产生了脉冲下降沿,Q1Q_1 变成 11,计数 0101
    • 以此类推,最终可计数 11111111

L=0,Q3=1L=0,Q_3=1

因为 YY 连接置位端,所以 YY 不同,对应置零时的数不同,模数不同

  • MN=00MN=00

    Y=D0=Yˉ0=Aˉ2Aˉ1Aˉ0=Qˉ2Qˉ1Qˉ0Y=D_0=\bar Y_0= \bar A_2\bar A_1\bar A_0=\bar Q_2\bar Q_1\bar Q_0

    所以当 Q3Q2Q1Q0=1000Q_3Q_2Q_1Q_0=1000 时,Y=0Y=044JKJK 触发器置零

  • MN=01MN=01

    Y=D1=Yˉ2=Aˉ2A1Aˉ0=Qˉ2Q1Qˉ0Y=D_1=\bar Y_2=\bar A_2 A_1\bar A_0=\bar Q_2 Q_1\bar Q_0

    所以当 Q3Q2Q1Q0=1010Q_3Q_2Q_1Q_0=1010 时,Y=0Y=044JKJK 触发器置零

  • MN=10MN=10:❓

    Y=D2=Yˉ6=A2A1Aˉ0=Q2Q1Qˉ0Y=D_2=\bar Y_6=A_2 A_1\bar A_0= Q_2 Q_1\bar Q_0

    所以当 Q3Q2Q1Q0=1110Q_3Q_2Q_1Q_0=1110 时,Y=0Y=044JKJK 触发器置零

  • MN=11MN=11

    Y=D3=Yˉ7=A2A1A0=Q2Q1Q0Y=D_3=\bar Y_7=A_2 A_1 A_0= Q_2 Q_1 Q_0

    所以当 Q3Q2Q1Q0=1111Q_3Q_2Q_1Q_0=1111 时,Y=0Y=044JKJK 触发器置零

分析题 22

显然对于左边的 7429074290 它是一个模 1010 计数器

对于右边的 7429074290 因为只要到了 Qb=1Q_b=1 的情况,再继续加到左边的变成 QaQbQcQd=1010Q_aQ_bQ_cQ_d=1010,此时就会清零

所以右边相当于一个模 22 计数器

根据上述清零时候的分析可以得出,上述电路在到达 01010101\,0101 的时候清零,即到达 2525 的时候清零,一共经历 0250\sim 252626 种情况,所以是 2626 进制

# 设计题

设计题 11

7429074290 芯片实现一个模 2424 的加法计数器

  1. 用两个 842184211010 进制的加法计数器级联
    • 先画出两个 1010 进制 7429074290,时钟脉冲连接 CPACP_AQAQ_A 连接 CPBCP_B
    • 0010(2)0100(4)0010(2) \, 0100(4) 处清零
    • 因为 7429074290 是下降沿触发,QDQ_D 在从 10011001 变成 00000000 的时候才会产生下降沿,所以直接将 QDQ_D 连接 CPACP_A 即可

  1. 用一个 842184211010 进制和一个 8421842155 进制的加法计数器级联
    • 先画出一个 1010 进制 一个 55 进制 7429074290
    • 0100100010\, 0100 处清零
    • 低位的 QDQ_D 直接连接高位的 CPBCP_B 即可

  1. 用两个 8421842155 进制的加法计数器级联
    • 因为两个 55 进制级联得到的是 2525 进制,所以有一个状态是多余的
    • 在到达 010011010\, 011 的时候,实际上下一个就应该是置 00 了,所以我们可以在到达状态 010011010\,011 的时候直接置 99,即变成 100100100\,100,那么下一个就是 000000000\,000

  1. 用一个 8421842144 进制和一个 8421842166 进制的加法计数器级联
    • 利用清零法分别实现模 44 和 模 66
    • 低位是模 44,在 011011 变成 000000 的时候产生进位,所以只需检测中间的 11 是否变 00,即可知道是否产生进位
    • 级联处理即可

设计题 22

设计一个能够产生 001011100010\,1110 从左至右顺序输出的序列信号发生器

  1. 计数器和数据选择器
    • 利用 7419374193 产生 070\sim 7 的模 88 计数
    • 连接数据选择器的输入端,实现选择

  1. 计数器和译码器
    • 译码器的有效输出是低电平,无效是高电平
    • 利用与非门,有 0011,实现输出

  1. 利用移位寄存器

    假定序列发生器产生的序列周期为 pp,移位寄存器的级数(触发器个数)为 nn,应满足关系 :

    2np2^n\geq p

    • 序列周期是 88,所以寄存器的级数是 33
    • 根据规定的序列,写出产生的移位反馈信号

    • 可以得到

      F=QˉAQBQˉC+QAQˉBQC+QAQBQˉC+QˉAQˉBQˉC=QBQˉC+QAQˉBQC+QˉAQˉBQˉC=(QB+QˉAQˉB)QˉC+QAQˉBQC=(QˉA+QB)QˉC+QAQˉBQC=(QˉA+QB)QˉC\begin{aligned} F&=\bar Q_AQ_B\bar Q_C+Q_A\bar Q_BQ_C+Q_AQ_B\bar Q_C+\bar Q_A\bar Q_B\bar Q_C\\ &=Q_B\bar Q_C+Q_A\bar Q_B Q_C+\bar Q_A\bar Q_B\bar Q_C\\ &=(Q_B+\bar Q_A\bar Q_B)\bar Q_C+Q_A\bar Q_BQ_C\\ &=(\bar Q_A+ Q_B)\bar Q_C+Q_A\bar Q_BQ_C\\ &=(\bar Q_A+ Q_B)\oplus \bar Q_C\\ \end{aligned}

S1S0S_1S_0 先置为 1111,实现并行输入;再置为 0101,实现右移

设计题 33

使用 7419374193 芯片实现一个 3030 秒倒计时路,电路有一个频率为 44 Hz 的输入脉冲信号,一个倒计时启动信号 xx,一个输出信号 ZZ,当倒计时结束时输出 Z=1Z=1 且停止倒计时。

  • 因为倒计时需要的是 1Hz1Hz 的输入频率,所以需要分频器

    因为一个 TT 触发器可以实现 010、1 状态,实现模 22 计数

    所以两个 TT 触发器串联可以实现 00,01,10,1100,01,10,11 4 种状态,实现模 44 状态

    CP Q1 Q2
    0 0
    1 1 0
    2 0 1(下降沿触发)
    3 1 1
    4 0 0

    因为模 44 计数器每 44 个输入才是一个完整的循环,所以分频之后的频率是 4/4=1Hz4/4=1Hz

  • 3131 的减法计数器

    因为 7419374193 是模 1616 的计数器,所以需要两片 7419374193

    • 一种方法是级联成为模 256256 的减法计数器,在电路状态为 111111111111\,1111 时,置为 000111100001\,1110

      但是因为是用 88 位二进制数表示的,所以输出的时候还需要将二进制转换成十进制

    • 一种方法是将一片 7419374193 构成模 10(09)10(0\sim9) 减法计数器,另一片构成模 4(03)4(0\sim 3) 减法计数器,并将初值置为 00110000(30)0011\,0000(30)