本页目录

时序逻辑电路

什么是时序逻辑

时序逻辑 — 输出不仅取决于当前输入,还取决于历史状态⁠。

时序逻辑核心结构:组合逻辑 + 反馈存储 = 有记忆的电路

输入 组合逻辑 输出

↓ 状态更新 反馈(读状态) ↑ 存储元件 受时钟 CLK 控制采样 核心特征:时钟信号(Clock)+ 状态保持 —— 有反馈、有时钟,输出才不仅取决于当前输入,还取决于历史状态。

核心特征: 时钟信号 (Clock) + 状态保持


锁存器与触发器

SR 锁存器 (基本存储单元)

NOR 实现:
    ┌───┐
S ──┤   ├── Q
    │NOR│
    │   ├──┐
    └───┘  │
    ┌───┐  │
R ──┤   ├──┘── Q̄
    │NOR│
    └───┘

S=1,R=0 → Set   (Q=1)
R=1,S=0 → Reset (Q=0)
S=0,R=0 → Hold  (保持)
S=1,R=1 → 禁止! (Q=Q̄=0, 且解除后不确定)

D 锁存器 (电平触发)

电平触发: CLK=1 期间跟随 D, CLK=0 锁存

D ────┬── Q
      │
CLK ──┘

问题: CLK=1 期间 D 变化 → Q 跟着变 (透明)
     在反馈回路中可能导致振荡

D 触发器 (边沿触发) — 数字电路主力

符号:
    ┌───┐
D ──┤D  Q├── Q
CLK─┤>   │
    └───┘

仅在时钟上升沿 (↑) 采样 D, 其余时间 Q 不变

关键时序参数:
  tsu (setup): D 在 CLK 沿之前必须稳定的最短时间
  th  (hold):  D 在 CLK 沿之后必须保持的最短时间
  tcq (clk→q): CLK 沿到 Q 更新的延迟

违反 tsu/th → 亚稳态 (metastability) → Q 振荡或不确定!

其他触发器

JK 触发器:
  J=1,K=0 → Q=1  (Set)
  J=0,K=1 → Q=0  (Reset)
  J=1,K=1 → Q翻转 (Toggle)
  J=0,K=0 → Hold

T 触发器 (Toggle):
  T=1 → 每个时钟沿翻转一次
  T=0 → 保持

级联 T 触发器 = 计数器

寄存器 (Register)

n 个 D 触发器共用同一时钟 = n 位寄存器

    ┌───┐
D0 ─┤D  Q├── Q0
    │>  │
    └───┘
    ┌───┐
D1 ─┤D  Q├── Q1
    │>  │
    └───┘
    ...   ← 共 n 个
    ↑
   CLK

每个时钟上升沿,所有 D 被采样 → Q 更新
这是 CPU 中寄存器、流水线寄存器的基本原理

计数器 (Counter)

异步 (行波) 计数器

Q0 → CLK1 → Q1 → CLK2 → Q2 ...
前级 Q 输出直接驱动后级 CLK

简单但慢 (级联延迟累加) + 中间态有毛刺

同步计数器

所有触发器共用同一时钟

任意计数序列 (上/下/可逆)
典型: 74HC161 (4位同步), 74HC193 (可逆)

常用计数

二进制: 0→1→2→...→2ⁿ-1→0
十进制: 0→1→...→9→0  (BCD码)
格雷码: 每次只变1位 (防竞争)
  BCD:     000→001→010→011→100...
  Gray:    000→001→011→010→110...
  每次只翻转1位 → 适合跨时钟域传输

状态机 (FSM)

Moore 型

Moore 型状态机:输出仅取决于当前状态 S0 out = A 条件满足(时钟沿切换) S1 out = B 输出仅取决于当前状态,状态切换只发生在时钟沿 —— 输出变化只跟着时钟走,没有 glitch(毛刺)。

Mealy 型

Mealy 型状态机:输出取决于当前状态 + 输入 S0 当前状态 输入 = 1 时输出 = 1 (即刻响应,不等时钟沿) 输出 = 当前状态 + 当前输入,输入一变输出立刻跟着变 —— 可能发生在任意时刻,有 glitch 风险;但状态数通常比 Moore 少。

FSM 实现

1. 状态编码 (二进制/独热码/Gray)
2. 当前状态 → 寄存器
3. 下一状态 → 组合逻辑 (状态 + 输入 → 下一状态)
4. 输出逻辑 → Moore/Mealy

独热码: N个状态=N位, 仅1位为1
  优点: 输出/下一状态逻辑简单
  缺点: 触发器多

时序分析

建立/保持时间

     tsu  th
     ├──┤├┤
D ───┘    └────────────
         ↑
CLK ─────┘    ─────────

tsu: 时钟沿前 D 必须稳定的时间
th:  时钟沿后 D 必须保持的时间

违规 → 亚稳态!

最大频率

fmax = 1 / (tcq + tcomb(max) + tsu)

tcq:    触发器 CLK→Q 延迟
tcomb:  组合逻辑最大延迟 (关键路径)
tsu:    下一级触发器建立时间

提高 fmax:
- 减少组合逻辑级数
- 插入流水线寄存器 (把长路径切成多段)

亚稳态 (Metastability)

当 D 在 tsu/th 窗口内变化时:
  Q 可能进入中间电平 → 振荡 → 最终稳定在 0 或 1

平均无故障时间 (MTBF):
  MTBF ∝ e^(t_wait/τ) / (f_clk × f_data)

解决: 两级同步器 (打两拍)
  async_in → [DFF] → [DFF] → sync_out
             ↑CLK      ↑CLK
  
  第一级可能亚稳态,第二级几乎总是稳定了

时钟域交叉 (CDC)

跨时钟域传输信号的黄金法则:

1. 单 bit 信号: 两级同步器 (双触发器)
2. 多 bit 总线: 用异步 FIFO 或握手协议
   不要直接同步多 bit! (各 bit 可能在不同周期捕获)
3. 慢→快: 信号保持至少 2 个快时钟周期
4. 快→慢: 信号必须保持足够长时间被慢时钟采样

关键词: 触发器, DFF, 建立时间, 保持时间, 亚稳态, 状态机, Moore, Mealy, CDC, 同步器