← 返回课程首页

阶段复习三 时序逻辑与定时控制器

1. 复习目标

这次复习覆盖第 11~16 章。完成后,你应能沿着一条完整主线思考时序电路:先说明状态怎样被保存,再按时钟边沿更新寄存器,用计数器生成规则序列,检查寄存器之间的建立与保持约束,处理异步输入带来的亚稳态风险,最后用有限状态机组织控制行为。

建议闭卷完成第 4 节,再展开答案。满分 100 分,建议用时 90~120 分钟。第 8 题需要画框图和逐拍表,可以使用直尺,但不要照着图 R3-2 描画。

2. 第 11~16 章知识链

观察图 R3-1 时,从左向右回答六个问题:状态从哪里来,状态何时更新,多位状态怎样形成序列,数据能否在下一边沿被可靠采样,异步信号怎样进入本时钟域,以及控制规则怎样变成状态机。

第11至16章时序逻辑知识链

图 R3-1 第 11~16 章从反馈存储到同步控制器的知识链

这条链中有两类问题不能混在一起。功能问题回答“下一拍应该是什么”;时序问题回答“这个结果能否在规定边沿前后稳定”。状态表写对了,不代表建立、保持和跨时钟域问题自动消失。

3. 六章核心检查表

章节 核心问题 你应能完成的动作
第 11 章 电路怎样记住过去? 从反馈与双稳态解释锁存,区分透明期、保持期和禁止输入
第 12 章 状态在什么时候更新? 按异步控制、有效边沿、同步控制、使能和数据的顺序读取波形
第 13 章 状态怎样形成规则序列? 设计同步计数器,定义模数、终点行为和非法状态恢复
第 14 章 数据是否赶得上、会不会来得过早? 分别使用最大延迟做建立检查、最小延迟做保持检查
第 15 章 时钟和异步输入为什么带来风险? 计算偏斜与不确定性,按信号语义选择同步方法
第 16 章 文字控制规则怎样落到硬件? 定义状态,补全转移,选择 Moore/Mealy,检查编码与非法状态

4. 综合测验(100 分)

题 1 锁存器、触发器与状态(8 分)

回答下列问题:

  1. 为什么一个没有反馈的组合逻辑网络不能仅凭当前输入保存过去信息?(2 分)
  2. D 锁存器在 EN=1EN=0 时分别怎样工作?(2 分)
  3. 正边沿 D 触发器与高电平透明 D 锁存器最关键的采样差别是什么?(2 分)
  4. “边沿后输出立即变化”为什么不是准确的物理描述?(2 分)

题 2 寄存器与移位序列(8 分)

一个 4 bit 右移寄存器状态写作 \(Q_3Q_2Q_1Q_0\)。每个上升沿执行

\[ Q_3^{+}=SI,\quad Q_2^{+}=Q_3,\quad Q_1^{+}=Q_2,\quad Q_0^{+}=Q_1. \]

初始状态为 1010,连续三个上升沿的串行输入 \(SI\) 依次为 1、0、1

  1. 写出每个边沿后的完整状态;(6 分)
  2. 解释为什么不能在同一个边沿内先更新 \(Q_3\),再把“新 \(Q_3\)”送给 \(Q_2\)。(2 分)

题 3 计数器、模数与分频(8 分)

设计一个带高有效时钟使能 EN 的同步模 6 加一计数器,合法状态为 000101

  1. 写出 EN=1 时六个合法状态的循环;(3 分)
  2. 规定非法状态 110111EN=1 时怎样恢复,并说明原因;(2 分)
  3. EN=0 时应怎样处理当前状态?(1 分)
  4. 若时钟为 60 MHz,计数器每次从 101 回到 000 时产生一个单周期 TC 脉冲,TC 的重复频率是多少?它是不是 50% 占空比的 10 MHz 时钟?(2 分)

题 4 建立与保持检查(12 分)

某寄存器到寄存器路径的题设参数如下,所有时间单位均为 ps:

使用

\[ S_{setup}=T_{clk}+t_{skew}-U_{setup}-t_{setup}-t_{cq,max}-t_{comb,max}, \]

\[ S_{hold}=t_{cq,min}+t_{comb,min}-t_{skew}-t_{hold}-U_{hold} \]

完成以下任务:

  1. 计算建立裕量和保持裕量;(8 分)
  2. 判断两项检查是否通过;(2 分)
  3. 说明本题的正偏斜分别怎样影响建立与保持裕量。(2 分)

题 5 保持违例与修复方向(6 分)

沿用第 4 题,其余参数不变,只把 \(t_{comb,min}\) 改为 35 ps。

  1. 重新计算保持裕量;(2 分)
  2. 把时钟周期从 1000 ps 增大到 1500 ps,能否修复该保持违例?说明原因;(2 分)
  3. 若只修改这条数据路径,至少要增加多少最小延迟才能刚好达到 0 ps 裕量?若设计目标是保留 10 ps 正裕量,需要增加多少?(2 分)

题 6 亚稳态与跨时钟域(10 分)

为下列信号选择合适的接收方法,并解释为什么不能把所有情况都处理成“每一位串联两个触发器”。

  1. 一个来自板外、会保持很多个目标时钟周期的单比特开关状态;(2 分)
  2. 一个宽度约 2 ns 的单周期事件脉冲,目标时钟周期为 10 ns;(3 分)
  3. 一条异步更新的 16 bit 数据总线,接收端必须得到同一次更新的完整字;(3 分)
  4. 一个异步有效的复位信号应怎样解除?(2 分)

题 7 Moore、Mealy 与状态跟踪(8 分)

  1. 分别写出 Moore 和 Mealy 输出关系,并说明哪一种存在当前输入到输出的直接组合路径。(3 分)
  2. 某可重叠 101 Mealy 检测器使用三个状态:A 表示没有有用后缀,B 表示已经看到后缀 1,C 表示已经看到后缀 10。初始状态为 A,输入序列为 10101。写出每一位输入对应的检测输出 \(Z\),并指出检测发生在哪两位。(5 分)

题 8 综合设计:四拍定时控制器(40 分)

设计一个与单一上升沿时钟 CLK 同步工作的控制器。输入为 startpauseclear,输出为 busydone。除特别讨论跨时钟域的部分外,先假定三个输入都已同步到 CLK

规格如下:

完成以下任务:

  1. 用自己的话重述“启动边沿不计数”“暂停”和“完成只持续一周期”,并写出控制优先级。(5 分)
  2. 选择状态和计数器位宽,说明每个状态与计数值的含义,画出控制器框图。(8 分)
  3. 写出完整的状态转移和计数更新规则,覆盖所有状态、clearstartpause 以及非法状态。(10 分)
  4. 写出 busydone 的输出定义,判断它们属于 Moore 还是 Mealy 输出。(5 分)
  5. 初始为空闲、计数为 0。依次在 9 个上升沿采到下列输入,填写边沿后的状态、计数、busydone。(7 分)
边沿 clear start pause
1 0 1 0
2 0 0 0
3 0 0 1
4 0 0 0
5 0 0 0
6 0 0 0
7 0 1 0
8 0 1 0
9 1 0 0
  1. 说明实现前还要检查的三件事:非法状态恢复、外部异步输入、寄存器到寄存器时序。每项给出一个具体处理方法。(5 分)

图 R3-2 只用于完成题目后的结构核对。沿实线追踪“状态和计数怎样更新”,沿虚线追踪“控制信号怎样影响更新”。

四拍定时控制器结构

图 R3-2 状态寄存器、2 bit 计数器、下一状态逻辑和 Moore 输出组成的四拍定时控制器

展开查看答案与评分点

5. 综合测验答案

题 1

  1. 组合逻辑的稳定输出只由当前输入决定。输入相同,稳定输出也相同;网络内部没有一个由旧输出继续维持的新变量,因此无法区分不同历史。(2 分)
  2. 高电平透明 D 锁存器在 EN=1 时,\(Q\) 经过传播延迟跟随 \(D\);在 EN=0 时,输入通路关闭,反馈维持原状态。(2 分)
  3. 锁存器在有效电平的整个透明期内允许输入影响状态;正边沿触发器只在上升沿附近的采样窗口读取 \(D\)。(2 分)
  4. 真实触发器存在时钟到 Q 延迟 \(t_{cq}\)。有效边沿先触发内部更新,\(Q\) 再经过有限传播时间改变。(2 分)

题 2

各触发器在同一上升沿采样边沿前的旧状态:

边沿 \(SI\) 边沿前 边沿后
1 1 1010 1101
2 0 1101 0110
3 1 0110 1011

每行状态正确得 2 分,共 6 分。

共享同一时钟的触发器同时采样。右侧级接收到的是边沿前相邻级的旧 \(Q\);边沿后,各级才经过各自的 \(t_{cq}\) 更新。把新 \(Q_3\) 立即传给 \(Q_2\),等于错误地把一次边沿当成了顺序执行的多步程序。(2 分)

题 3

  1. 合法循环为

    000 → 001 → 010 → 011 → 100 → 101 → 000

    (3 分)

  2. 可明确规定 110→000111→000。这样即使上电、干扰或状态错误使计数器进入未使用编码,也能在下一个使能边沿回到合法循环,而不是永久停留或进入未知序列。(2 分)

  3. EN=0 时保持当前状态,包括合法状态和当前物理状态;正常设计还可根据安全目标选择让非法状态不受使能限制地恢复,但必须在规格中写清。按本题基本规则答“保持”得 1 分。(1 分)

  4. 每 6 个时钟周期产生一次脉冲,所以

    \[ f_{TC}=\frac{60\ \text{MHz}}{6}=10\ \text{MHz}. \]

    TC 每次只高 1 个 60 MHz 时钟周期,周期为 6 拍,占空比为 \(1/6\),不是 50% 占空比的 10 MHz 时钟。(2 分)

题 4

建立裕量为

\[ \begin{aligned} S_{setup} &=1000+20-50-90-80-720\\ &=80\ \text{ps}. \end{aligned} \]

保持裕量为

\[ \begin{aligned} S_{hold} &=30+55-20-40-15\\ &=10\ \text{ps}. \end{aligned} \]

每个数值与代入过程各占相应分值,共 8 分。两项裕量均为非负数,因此建立和保持都通过,但保持只剩 10 ps,余量较小。(2 分)

这里定义正偏斜为捕获时钟比发射时钟晚到。它把下一捕获边沿向后移动,给建立检查更多时间;同一名义边沿的保持检查却更容易被新数据追上,因此保持裕量减小。(2 分)

题 5

新的保持裕量为

\[ S_{hold}=30+35-20-40-15=-10\ \text{ps}. \]

所以出现 10 ps 保持违例。(2 分)

基础保持检查比较同一名义边沿附近的新数据最早到达时间与保持窗口,公式中没有 \(T_{clk}\)。把下一周期推远不会改变当前边沿后的过早到达,因此降频不能修复该违例。(2 分)

若其他量不变,数据最小延迟每增加 1 ps,保持裕量增加 1 ps。增加 10 ps 可刚好达到 0 ps;要保留 10 ps 正裕量,需要增加 20 ps。(2 分)

题 6

  1. 先处理板外开关的抖动与电平规范,再用两级同步器把保持足够久的单比特电平送入目标时钟域。第二级输出供功能逻辑使用,第一级只用于给亚稳态留出解析时间。(2 分)
  2. 2 ns 脉冲可能完整落在两个 10 ns 采样边沿之间,两级同步器甚至看不到它。应先保存事件,例如在源域拉宽脉冲、翻转一个事件位,或使用请求—应答握手,再在目标域同步并恢复单周期事件。(3 分)
  3. 不能把 16 bit 每一位独立同步,因为各位可能在不同拍解析,接收端会拼出一个从未发送过的字。应使用数据保持加握手、格雷编码的受限多位状态,或异步 FIFO,确保整字一致性。(3 分)
  4. 异步复位可以异步置为有效,使系统无需等待时钟便进入安全状态;解除时应在每个时钟域内同步释放,满足恢复与移除要求。(2 分)

题 7

Moore 输出为

\[ Y=G(Q), \]

Mealy 输出为

\[ Y=G(Q,X). \]

Mealy 输出存在当前输入 \(X\) 到输出 \(Y\) 的直接组合路径;Moore 输出只由当前状态决定。(3 分)

从 A 开始逐位跟踪:

输入位位置 输入 \(X\) 边沿前状态 \(Z\) 边沿后状态
1 1 A 0 B
2 0 B 0 C
3 1 C 1 B
4 0 B 0 C
5 1 C 1 B

输出序列为 00101,在第 3 位和第 5 位检测到 101。第一次检测结束后的后缀 1 被保留,因此第二次检测可以重叠。(5 分)

题 8

1. 规格与优先级(5 分)

启动边沿只把控制器从空闲送入运行,并把计数保持在 0;第一拍工作要到后续某个 RUNpause=0 的边沿才完成。暂停不退出运行,也不清除已经完成的工作拍,只让计数保持。第四个有效工作拍使控制器进入 DONE,因此 done 在随后完整的一周期为 1,再自动回到空闲。

全局优先级为:

clear > 当前状态规定的行为

各状态内部为:空闲时判断 start;运行时先判断 pause,未暂停才更新计数;完成时忽略 start 并回到空闲。

2. 状态、计数含义与结构(8 分)

使用三个控制状态:

状态 含义 busy done
IDLE 等待新任务 0 0
RUN 正在累计有效工作拍,也可能暂停 1 0
DONE 完成指示周期 0 1

二进制状态编码至少需要 2 bit。计数器只需表示运行期间已经完成的 0、1、2、3 拍,因此需要 2 bit。count=3 且下一次在 RUN 中采到 pause=0,表示完成第 4 个有效工作拍,下一状态进入 DONE

结构上,状态寄存器与计数寄存器共享 CLK。组合逻辑读取当前状态、count==3startpauseclear,产生下一状态与下一计数。输出译码只读取当前状态。完整框图见图 R3-2。

3. 状态转移与计数更新(10 分)

先处理最高优先级:任意当前状态下,只要上升沿采到 clear=1,就执行

\[ state^{+}=IDLE,\qquad count^{+}=0. \]

clear=0 时:

当前状态 条件 下一状态 下一计数
IDLE start=0 IDLE 0
IDLE start=1 RUN 0
RUN pause=1 RUN 保持
RUN pause=0count<3 RUN count+1
RUN pause=0count=3 DONE 0
DONE 任意 start,pause IDLE 0
非法状态 任意输入 IDLE 0

非法计数若与 RUN 同时出现,也应走安全恢复路径,例如进入 IDLE 并清零,而不是让比较器和加法器继续产生无定义行为。若 2 bit 计数器只存在 0~3 四种编码,则没有额外的计数非法码,但仍要处理状态寄存器的未使用编码。

4. 输出定义(5 分)

\[ busy=(state=RUN), \]

\[ done=(state=DONE). \]

两者只由当前状态决定,属于 Moore 输出。状态在时钟边沿后经 \(t_{cq}\) 更新,所以输出也随状态译码在边沿后改变,不直接响应边沿之间的 startpause 毛刺。

5. 逐拍结果(7 分)

边沿后 状态 count busy done 解释
初始 IDLE 0 0 0 等待启动
1 RUN 0 1 0 接受启动,启动边沿不计数
2 RUN 1 1 0 完成第 1 个有效工作拍
3 RUN 1 1 0 暂停,计数保持
4 RUN 2 1 0 完成第 2 个有效工作拍
5 RUN 3 1 0 完成第 3 个有效工作拍
6 DONE 0 0 1 完成第 4 个有效工作拍
7 IDLE 0 0 0 DONE 自动返回,忽略本拍 start
8 RUN 0 1 0 空闲状态重新接受 start
9 IDLE 0 0 0 同步 clear 在边沿执行

图 R3-3 把同一过程画成波形。重点观察边沿 3 的暂停、边沿 6 后的一周期 done,以及边沿 7 的 start 为什么没有立即开始下一次任务。

四拍定时控制器逐拍波形

图 R3-3 启动、暂停、单周期完成指示与同步清零的逐拍关系

6. 实现前检查(5 分)

6. 评分与薄弱点诊断

得分 状态 建议
90~100 时序逻辑主线已经连通 记录错题后进入第 17 章
75~89 基础可用于后续学习 按错题回看对应章节,再独立重画定时控制器
60~74 单章知识存在,但跨章连接不稳 先补时序约束和状态机,再重做第 8 题
0~59 状态、时钟和时序边界尚未建立 从第 11 章开始按“读波形—算路径—做控制器”重新推进
错题 主要薄弱点 回看内容
1 反馈、透明期、边沿采样、\(t_{cq}\) 第 11、12 章
2 并行采样与移位方向 第 12 章
3 \(N\)、非法状态、时钟使能与事件脉冲 第 13 章
4 建立/保持公式、偏斜符号、不确定性 第 14、15 章
5 保持违例的物理时间关系与修复 第 14 章
6 亚稳态、两级同步器和 CDC 信号分类 第 15 章
7 Moore/Mealy 与逐拍状态跟踪 第 16 章
8.1~8.4 从文字规格到状态、计数和输出 第 13、16 章
8.5~8.6 波形验证、非法状态、CDC 与时序收尾 第 12~16 章

7. 定时控制器设计自查清单

8. 学习记录与下一章衔接

完成后,在 学习进度.md 记录总分、错题编号和错误原因。重做第 8 题时,从文字规格开始重新定义状态与计数含义,不要只背状态表。

下一章进入数据通路与控制器。这个定时器已经露出了两类硬件:状态机决定“现在该做什么”,计数器保存“已经做了多少”。第 17 章会正式把控制器与寄存器、MUX、ALU 等数据通路分开,并学习怎样用控制信号协调多周期操作。