这次复习覆盖第 11~16 章。完成后,你应能沿着一条完整主线思考时序电路:先说明状态怎样被保存,再按时钟边沿更新寄存器,用计数器生成规则序列,检查寄存器之间的建立与保持约束,处理异步输入带来的亚稳态风险,最后用有限状态机组织控制行为。
建议闭卷完成第 4 节,再展开答案。满分 100 分,建议用时 90~120 分钟。第 8 题需要画框图和逐拍表,可以使用直尺,但不要照着图 R3-2 描画。
观察图 R3-1 时,从左向右回答六个问题:状态从哪里来,状态何时更新,多位状态怎样形成序列,数据能否在下一边沿被可靠采样,异步信号怎样进入本时钟域,以及控制规则怎样变成状态机。
图 R3-1 第 11~16 章从反馈存储到同步控制器的知识链
这条链中有两类问题不能混在一起。功能问题回答“下一拍应该是什么”;时序问题回答“这个结果能否在规定边沿前后稳定”。状态表写对了,不代表建立、保持和跨时钟域问题自动消失。
| 章节 | 核心问题 | 你应能完成的动作 |
|---|---|---|
| 第 11 章 | 电路怎样记住过去? | 从反馈与双稳态解释锁存,区分透明期、保持期和禁止输入 |
| 第 12 章 | 状态在什么时候更新? | 按异步控制、有效边沿、同步控制、使能和数据的顺序读取波形 |
| 第 13 章 | 状态怎样形成规则序列? | 设计同步计数器,定义模数、终点行为和非法状态恢复 |
| 第 14 章 | 数据是否赶得上、会不会来得过早? | 分别使用最大延迟做建立检查、最小延迟做保持检查 |
| 第 15 章 | 时钟和异步输入为什么带来风险? | 计算偏斜与不确定性,按信号语义选择同步方法 |
| 第 16 章 | 文字控制规则怎样落到硬件? | 定义状态,补全转移,选择 Moore/Mealy,检查编码与非法状态 |
回答下列问题:
EN=1 和 EN=0
时分别怎样工作?(2 分)一个 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。
设计一个带高有效时钟使能 EN 的同步模 6
加一计数器,合法状态为 000~101。
EN=1 时六个合法状态的循环;(3 分)110、111 在 EN=1
时怎样恢复,并说明原因;(2 分)EN=0 时应怎样处理当前状态?(1 分)101 回到 000
时产生一个单周期 TC 脉冲,TC
的重复频率是多少?它是不是 50% 占空比的 10 MHz 时钟?(2 分)某寄存器到寄存器路径的题设参数如下,所有时间单位均为 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} \]
完成以下任务:
沿用第 4 题,其余参数不变,只把 \(t_{comb,min}\) 改为 35 ps。
为下列信号选择合适的接收方法,并解释为什么不能把所有情况都处理成“每一位串联两个触发器”。
101 Mealy 检测器使用三个状态:A
表示没有有用后缀,B 表示已经看到后缀 1,C 表示已经看到后缀
10。初始状态为 A,输入序列为
10101。写出每一位输入对应的检测输出 \(Z\),并指出检测发生在哪两位。(5 分)设计一个与单一上升沿时钟 CLK 同步工作的控制器。输入为
start、pause、clear,输出为
busy、done。除特别讨论跨时钟域的部分外,先假定三个输入都已同步到
CLK。
规格如下:
clear 为高有效同步清零,优先级最高。它在上升沿被采到为
1 时,下一状态进入空闲,计数清零;start。采到 start=1
的边沿进入运行,但这个启动边沿不计作工作拍;pause=1
表示暂停:保持计数和运行状态,busy 仍为 1;pause=0 时完成一个有效工作拍;累计完成 4
个有效工作拍后进入完成状态;done=1、busy=0;下一边沿自动回到空闲;start
被忽略。若要再次启动,必须等回到空闲后重新给出 start;busy 只在运行状态为 1,done 只在完成状态为
1。完成以下任务:
clear、start、pause
以及非法状态。(10 分)busy 和 done 的输出定义,判断它们属于
Moore 还是 Mealy 输出。(5 分)busy 和
done。(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 |
图 R3-2 只用于完成题目后的结构核对。沿实线追踪“状态和计数怎样更新”,沿虚线追踪“控制信号怎样影响更新”。
图 R3-2 状态寄存器、2 bit 计数器、下一状态逻辑和 Moore 输出组成的四拍定时控制器
EN=1 时,\(Q\) 经过传播延迟跟随 \(D\);在 EN=0
时,输入通路关闭,反馈维持原状态。(2 分)各触发器在同一上升沿采样边沿前的旧状态:
| 边沿 | \(SI\) | 边沿前 | 边沿后 |
|---|---|---|---|
| 1 | 1 | 1010 |
1101 |
| 2 | 0 | 1101 |
0110 |
| 3 | 1 | 0110 |
1011 |
每行状态正确得 2 分,共 6 分。
共享同一时钟的触发器同时采样。右侧级接收到的是边沿前相邻级的旧 \(Q\);边沿后,各级才经过各自的 \(t_{cq}\) 更新。把新 \(Q_3\) 立即传给 \(Q_2\),等于错误地把一次边沿当成了顺序执行的多步程序。(2 分)
合法循环为
000 → 001 → 010 → 011 → 100 → 101 → 000
(3 分)
可明确规定
110→000、111→000。这样即使上电、干扰或状态错误使计数器进入未使用编码,也能在下一个使能边沿回到合法循环,而不是永久停留或进入未知序列。(2
分)
EN=0
时保持当前状态,包括合法状态和当前物理状态;正常设计还可根据安全目标选择让非法状态不受使能限制地恢复,但必须在规格中写清。按本题基本规则答“保持”得
1 分。(1 分)
每 6 个时钟周期产生一次脉冲,所以
\[ f_{TC}=\frac{60\ \text{MHz}}{6}=10\ \text{MHz}. \]
TC 每次只高 1 个 60 MHz 时钟周期,周期为 6 拍,占空比为
\(1/6\),不是 50% 占空比的 10 MHz
时钟。(2 分)
建立裕量为
\[ \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 分)
新的保持裕量为
\[ 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 分)
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 分)
启动边沿只把控制器从空闲送入运行,并把计数保持在
0;第一拍工作要到后续某个 RUN 且 pause=0
的边沿才完成。暂停不退出运行,也不清除已经完成的工作拍,只让计数保持。第四个有效工作拍使控制器进入
DONE,因此 done 在随后完整的一周期为
1,再自动回到空闲。
全局优先级为:
clear > 当前状态规定的行为
各状态内部为:空闲时判断 start;运行时先判断
pause,未暂停才更新计数;完成时忽略 start
并回到空闲。
使用三个控制状态:
| 状态 | 含义 | 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==3、start、pause
和
clear,产生下一状态与下一计数。输出译码只读取当前状态。完整框图见图
R3-2。
先处理最高优先级:任意当前状态下,只要上升沿采到
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=0 且 count<3 |
RUN |
count+1 |
RUN |
pause=0 且 count=3 |
DONE |
0 |
DONE |
任意 start,pause |
IDLE |
0 |
| 非法状态 | 任意输入 | IDLE |
0 |
非法计数若与 RUN 同时出现,也应走安全恢复路径,例如进入
IDLE 并清零,而不是让比较器和加法器继续产生无定义行为。若 2
bit 计数器只存在 0~3
四种编码,则没有额外的计数非法码,但仍要处理状态寄存器的未使用编码。
\[ busy=(state=RUN), \]
\[ done=(state=DONE). \]
两者只由当前状态决定,属于 Moore 输出。状态在时钟边沿后经 \(t_{cq}\)
更新,所以输出也随状态译码在边沿后改变,不直接响应边沿之间的
start 或 pause 毛刺。
| 边沿后 | 状态 | 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 启动、暂停、单周期完成指示与同步清零的逐拍关系
default → IDLE,并在恢复时把计数清零;不能只依赖“正常情况下不会进入”。start
是可能漏采的窄脉冲,应改用脉冲拉宽、事件翻转或握手。| 得分 | 状态 | 建议 |
|---|---|---|
| 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 章 |
完成后,在 学习进度.md
记录总分、错题编号和错误原因。重做第 8
题时,从文字规格开始重新定义状态与计数含义,不要只背状态表。
下一章进入数据通路与控制器。这个定时器已经露出了两类硬件:状态机决定“现在该做什么”,计数器保存“已经做了多少”。第 17 章会正式把控制器与寄存器、MUX、ALU 等数据通路分开,并学习怎样用控制信号协调多周期操作。