第 14 讲:时序逻辑电路的分析与设计

组合电路只回答“现在输入什么”,时序电路还要回答“过去走到了什么状态”。所以时序题的核心不是多画一个触发器,而是把状态引入逻辑函数。

时序电路分析与设计的双向流程

时序电路的统一模型

设外部输入为 XX,当前状态为 QnQ^n,触发器的激励为 WW,输出为 YY,则一个时序电路可以写成三组方程:

Y=f1(X,Qn),Y=f_1(X,Q^n), W=f2(X,Qn),W=f_2(X,Q^n), Qn+1=f3(W,Qn).Q^{n+1}=f_3(W,Q^n).

第一式是输出方程,第二式是激励(驱动)方程,第三式由所用触发器的特性方程给出。把第二式代入第三式,才得到真正的状态方程。

同步与异步

  • 同步时序电路:所有触发器受同一个时钟控制,状态在同一有效沿更新;
  • 异步时序电路:各触发器不一定共用时钟,有些触发器由前一级输出触发,状态变化会逐级传播。

同步电路容易按离散时刻分析;异步计数器结构简单,但中间状态和累计延迟不能忽略。

Moore 与 Mealy

  • Moore 型:Y=g(Qn)Y=g(Q^n),输出只由状态决定,通常较稳定;
  • Mealy 型:Y=g(X,Qn)Y=g(X,Q^n),输入一变,输出可能在时钟沿之前就变,响应快但更容易出现毛刺。

状态图标注也不同:Mealy 常在边上写 输入/输出,Moore 常把输出写进状态节点。

描述同一电路的五种语言

  1. 电路图告诉你器件怎样连接;
  2. 方程告诉你组合逻辑怎样算;
  3. 状态表枚举每个“现态 + 输入”对应的次态和输出;
  4. 状态图把转移关系画成有向图;
  5. 时序图沿着时钟逐拍展开真实变化。

它们不是五套知识,而是同一个对象的五种表示。考试最常见的要求,就是把一种表示翻译成另一种。

分析一张同步电路图

固定流程如下:

  1. 先确认触发器类型和有效时钟沿;
  2. 从组合逻辑写输出方程、各触发器激励方程;
  3. 代入 DD、JKJK 或 TT 触发器特性方程,求 Qn+1Q^{n+1};
  4. 枚举现态和输入,列状态表;
  5. 画状态图和必要的时序图;
  6. 识别计数模数、序列检测等外部功能;
  7. 把未用状态也代入,判断是否能自启动。

一个最小例子

若 D 触发器满足

D=X⊕Qn,Y=XQn,D=X\oplus Q^n, \qquad Y=XQ^n,

则

Qn+1=X⊕Qn.Q^{n+1}=X\oplus Q^n.

状态表为:

XXQnQ^nQn+1Q^{n+1}YY
0000
0110
1010
1101

当 X=0X=0 时保持;当 X=1X=1 时翻转。输出只有在输入和原状态都为 1 时才为 1。这一步已经足够画出 Mealy 状态图。

计数器与“自启动”

一个三位状态机共有 23=82^3=8 个编码。若只设计六进制计数循环,仍有两个未用状态。

所谓自启动,是指电路即使因为上电、干扰等原因落入未用状态,也能在有限个时钟后回到有效循环。检查方法非常机械:

  1. 保留化简时未用项所对应的实际逻辑;
  2. 分别把每个未用状态代入状态方程;
  3. 沿次态继续走;
  4. 能进入有效循环则可自启动,否则形成无效循环。

不要只看设计表里的六个有效状态就宣布“六进制计数器设计完成”。

从要求设计同步时序电路

分析和设计方向相反:

  1. 把自然语言要求变成原始状态图;
  2. 合并等价状态;
  3. 给状态编码;
  4. 列次态、输出表;
  5. 选择触发器,用激励表求 DD、J/KJ/K 或 TT;
  6. 用 Karnaugh 图化简驱动方程和输出方程;
  7. 画电路;
  8. 校验完整输入序列与自启动。

状态数与触发器数

若化简后有 MM 个状态,需要的触发器数 nn 满足

2n−1<M≤2n.2^{n-1}<M\le 2^n.

状态编码会直接改变最终逻辑复杂度。相邻编码通常有利于 Karnaugh 化简,但“自然二进制顺序”不一定总是最优。

等价状态

两个状态可以合并,至少要满足:

  • 对每一种相同输入,它们的输出相同;
  • 对每一种相同输入,它们转向同一状态,或转向一对仍然等价的状态。

只因为两个圆圈“看起来作用相近”就合并,会改变机器行为。

异步计数器怎样分析

异步电路不能假设所有位同时更新。应先写每个触发器自己的时钟方程,再按真实触发顺序追踪状态。

例如低位触发器由外部 CP 驱动,高位触发器由低位输出驱动,那么一个外部时钟沿可能先改变低位,传播延迟后才改变高位。示波器上短暂出现的中间码并不是“算错”,而是异步结构的物理结果。

最容易丢分的地方

  • 激励方程和状态方程混为一谈;
  • 忘记 JKJK、TT 触发器还要结合现态;
  • Mealy 状态图边上的输入、输出顺序写反;
  • 状态编码后漏掉未用状态;
  • 用 Karnaugh 图的无关项化得很简,却不检查自启动;
  • 异步计数器仍按“全体同沿更新”计算;
  • 时序图没有标清初态和有效沿。

真正稳妥的做法,是让“方程 → 表 → 图 → 波形”互相复核。任何两种表示对不上,都说明前面有一步出了问题。

评论