1 为什么组合逻辑不够:需要「记住」
H4 把组合网说成「当前输入决定当前输出」的函数。许多真实需求却超出这个模型:按 1 下开关灯亮,再按 1 下才灭;计数器要累加过去的脉冲;状态机要记得自己走到了哪一步。这些行为的共同点是:输出不仅依赖现在的输入,还依赖系统内部保存的信息。教学上把那份可保存的信息叫做状态。时序逻辑电路就是在组合网之外增加状态元件,并规定状态何时允许更新。
若强行用纯组合网去「记住」,常见做法是把输出绕回输入,形成环。环可以暂时维持某个电平,却极易变成振荡、竞争或对噪声过敏的锁存意外。工程规范要求:合法的状态保存走触发器或明确的锁存器结构,更新时刻由时钟或使能定义,而不是靠延时碰运气。本课先建立时钟与边沿的直觉,再讲锁存与触发器的差别,然后把寄存器、计数与简单状态机接到同一套验收语言上。
对照云与系统里的类比要克制:配置项被保存、会话有超时,都不等于芯片里的触发器。本课只借用「有状态」这一层含义,不把软件对象映射成门级时序。学完应能:解释电平敏感与边沿触发的差异;画出 1 位寄存器在时钟边沿载入的时序草图;估算同步系统的关键路径直觉;列出建立时间违规的典型症状;用状态表描述 1 个 2 位计数或门铃式小状态机。
与 H4 的分界再次钉死:H4 的加法器、MUX、译码器在本课里可以出现在「下一状态组合逻辑」里,但它们本身不保存位。H6 才会把寄存器堆、ALU、总线收成整机数据通路。本课若过早展开流水线冒险,会冲淡触发器基本功。把「组合算得快不快」和「状态有没有存住」分成 2 个问题,后面所有波形图都更好读。
为什么本课放在 H4 之后:没有真值表与门网,下一状态方程写不出来;没有组合与时序分界,学生会把延迟当记忆。为什么本课放在 H6 之前:整机图里的寄存器方框,需要先知道边沿采样与使能,否则只能背名词。花时间在波形上标边沿,比急着写 HDL 更划算。

2 时钟、周期与边沿
时钟是周期性的方波教学抽象:在理想模型里,它在高电平与低电平之间切换,切换瞬间称为边沿。上升沿是从 0 到 1,下降沿是从 1 到 0。同步时序设计通常约定:状态只在选定的那一种边沿更新,其余时间状态保持。周期 T 是相邻同向边沿的间隔;频率 f = 1/T。本课用「拍」称呼 1 个时钟周期内完成的状态更新机会。
时钟不是能量魔法:它不直接计算布尔式,只提供全局对齐的采样瞬间。组合逻辑仍然在边沿之间计算下一状态与输出;触发器在边沿把计算结果锁进状态。若组合逻辑算得太慢,到不了边沿前的建立窗口,就会采到错误值——这是后文建立时间的核心。
教室练习:给定 T=10(教学时间单位),画 3 个周期的时钟波形,标出全部上升沿。再假设状态只在上升沿更新,标出 3 次可能的更新点。不要在波形上把组合延迟画成「瞬时」;至少留 1 段水平段表示组合在边沿之间奔跑。再补 1 行:在第 2 个上升沿附近,故意把 D 画成仍在变化,并标注「此处有建立风险」。
占空比(高电平时间占比)在理想同步课里通常不进入功能正确性讨论,但在板级时钟质量里会影响采样裕量。本课默认 50% 占空比的教学时钟,并把抖动、偏斜列为「未建模」。写报告时显式写「理想时钟」,避免把教室结论直接当成闭包签核。
多时钟系统暂不展开:若设计里出现 2 个独立振荡源,数据穿越边界必须同步。本课全部例子单时钟,遇到第二时钟只在风险表打勾,不在正文里假装已经安全。
3 锁存器:电平敏感的存储
锁存器在使能为有效电平时「透明」:输出跟随数据输入;使能无效时保持上一次值。常见教学模型是高电平或低电平使能的 D 锁存。透明窗口里,D 的变化会传到 Q,因此锁存对毛刺敏感:若 D 在透明期抖动,Q 也会抖。
真值直觉(高电平使能):
| EN | D | Q行为 |
|---|---|---|
| 1 | 0/1 | Q 跟随 D |
| 0 | x | Q 保持 |
锁存的价值是面积与灵活性;风险是透明期过长导致的环路与时序难分析。现代同步数字课默认优先触发器:把更新压缩到边沿附近的采样,而不是半个周期的透明窗。本课要求:能识别原理图里的锁存符号,能说明为何同步数据通路作业优先用边沿触发寄存器。
把锁存误用于「想省触发器」的同步流水,是常见反例。透明窗与组合反馈叠在一起时,静态时序工具也可能报出难解的环。课程作业若未特别声明,禁止用锁存实现本应边沿对齐的流水级。
按钮直接接锁存使能也是反例:人手抖动会在透明期制造多次跳变。正确路径是:输入调理 → 同步寄存器 → FSM。本课不要求设计去抖,但规格必须声明输入是否已同步。
4 触发器:边沿采样
D 触发器在有效时钟边沿采样 D,更新 Q,并在下一边沿前保持。相对锁存,它把「允许改变」的时间从整段电平收成边沿邻域。教学上常画:边沿到来前 D 必须稳定一段时间(建立时间 t_su),边沿后还要再稳定一小段(保持时间 t_h)。若 D 来自前级组合逻辑,则组合延迟必须满足:时钟周期 ≥ 关键路径组合延迟 + 触发器开销(含建立)。具体纳秒公式留给工艺课;本课用「级数」与「是否赶得上边沿」描述。
JK、T 触发器是 D 的功能变体:T 在 T=1 时翻转,常用于计数位;JK 可用激励表描述更通用的转移。本课以 D 为主,计数例子用「D = 下一状态组合」表达,避免符号表淹没主线。需要翻转时,写 D = ¬Q 或 D = Q ⊕ T 即可与 H3 的异或对接。
波形作业:时钟周期 8 格,D 在第 1 个上升沿前 2 格变为 1,并保持到第 2 个上升沿后。标出 t_su 窗口与 Q 何时变为 1。再画 1 张违规图:D 在上升沿前 0.5 格才变,并写「建立失败,Q 未定义」。未定义不是「一定错成相反值」,而是仿真与硅上行为都不可靠——这点要写进验收说明。

5 寄存器:并行的多位状态
把 n 个 D 触发器并排,共用时钟,就得到 n 位寄存器:1 次边沿同时载入 n 位。使能信号(同步使能)决定本拍是否更新。寄存器是处理器、外设、总线接口里最常见的状态容器:指令寄存器、通用寄存器堆的读写端口背后,都是这类结构的工程实现。
手算练习:1 位寄存器,初始 Q=0。在连续 4 个上升沿前,D 序列为 1,1,0,1。写出每拍后的 Q。答案应是 1,1,0,1。再加同步使能 EN:仅当 EN=1 时更新;若第 2 拍 EN=0,则该拍 Q 保持为 1,后续按新规则重算。把 EN 画进波形,比只背「寄存器会记住」更接近验收。
同步使能与时钟门控的教学区别:同步使能把「是否更新」变成数据通路上的选择(保持旧值或装入新值),时钟仍统一到达;时钟门控关闭时钟沿本身,省动态功耗但引入门控偏斜风险。入门作业默认用同步使能。报告里写清 EN 的来源是组合还是已同步的控制位,避免把异步控制直接塞进使能。
多寄存器组成寄存器堆时,还会出现读地址、写地址与写使能。本课不展开堆的译码细节,只要求:写发生在时钟边沿,读在同拍或下一拍的语义要在规格写明,防止「写后即读」的歧义。
6 同步计数与下一状态逻辑
二进制计数器是时序的经典用例:状态是当前计数值,下一状态组合逻辑计算「加 1(模 2^n)」,触发器在边沿装入。2 位计数状态顺序:00→01→10→11→00。把每位写成 D 输入布尔式,就能用 H3/H4 的门网实现下一状态,再用 2 个触发器保存。
| 当前 Q1 Q0 | 下一 D1 D0 |
|---|---|
| 00 | 01 |
| 01 | 10 |
| 10 | 11 |
| 11 | 00 |
推导:D0 = ¬Q0;D1 = Q1 ⊕ Q0。用真值表核对 4 行。若要同步清零,增加输入 CLR:当 CLR=1 时强制下一状态为 00,可用复用器或与或覆盖 D 表达式。同步置位同理。异步清零能立刻拉低,但释放时刻若靠近时钟边沿,可能造成恢复时间违规——入门设计优先同步清零。
把 H4 的 4 位行波加法器接到寄存器:寄存器输出作为加数之一,另一加数来自输入,和写回寄存器,就得到累加器骨架。此时临界路径往往经过进位链;若跑不过目标钟频,优先考虑超前进位或切流水,而不是盲目加锁存。
计数器验收向量至少含:复位后为 0、连续递增 4 拍、溢出回绕、CLR 有效时下一拍回 0、EN=0 时保持。缺任何 1 条,都容易在板上出现「偶尔多跳」却说不清原因。

7 有限状态机(FSM)入门
状态机 = 状态集合 + 输入 → 下一状态函数 + 输出函数。摩尔型输出主要看状态;米利型输出还看输入。教学入口用摩尔:先画状态圆与转移箭头,再填状态表,最后映射到寄存器位编码与组合逻辑。
小例子:门铃「空闲 / 响铃」。输入 press;在空闲且 press=1 时进入响铃;响铃保持 1 拍后回到空闲,或直到 press=0——具体策略要在规格里写死。验收时列出:上电默认状态、非法编码的处理、每个转移的输入条件。不要在规格含糊时直接画门。
把门铃扩成 3 状态「空闲 / 响铃 / 冷却」可以练习:冷却期间忽略 press,防止连按。状态表行数变多后,更要先表后式,避免边画边改布尔式。非法码(例如独热出现多 1)应在规格写:强制回空闲或保持并报警。
米利型在输入变化的组合延迟后立刻改输出,可能在时钟之间产生毛刺型输出。若输出驱动外部使能,摩尔更稳妥。本课作业默认摩尔,除非题目明确要求米利。

8 建立、保持与临界路径直觉
建立时间:边沿到来前,D 必须已经稳定。若前级组合逻辑延迟太长,D 在边沿附近仍在变,采样结果未定义——表现为间歇性错误、对温度与电压敏感。保持时间:边沿后 D 仍需稳定一小段;若保持失败,往往来自过短的路径或错误的时钟偏斜假设。
临界路径:同步系统里限制最高时钟频率的那条「寄存器 → 组合 → 寄存器」最长延迟路径。H4 的行波进位若落在该路径上,位宽增加会直接逼迫降频或改结构。本课验收语言:指出路径两端的触发器、中间经过哪些组合块、为何它可能是最长。
短路径保持风险:有时组合延迟几乎为 0,后级在边沿后很快看到新数据,可能破坏保持。教学对策是认识「不是越快越好」,必要时加故意延迟或调整结构。教室用理想时钟时可先标记风险,不要求算出工艺库数值。
跨时钟域只做风险标记:若 2 个寄存器由不同时钟驱动,不能直接连数据。插入同步器或使用握手属于后续课。本课练习全部假设单时钟。把「拍」说清楚:软件里的 1 次循环不等于 1 个时钟周期;硬件仿真里要以时钟边沿为事件边界。读波形时先找时钟,再读 Q,再读组合中间点。

9 设计流程、反例与和 H4 的接缝
推荐流程:规格(状态与输入输出)→ 状态表/图 → 编码 → 下一状态与输出布尔式 → 触发器 + 组合网 → 波形与向量仿真 → 板上时钟与复位检查。每 1 步都留下可复查的表,而不是只留 1 张漂亮状态图。
反例 1:用长组合环冒充存储器,上电结果依赖延时。反例 2:在透明锁存窗里喂入异步外部按钮,未做同步化,偶发双采样。反例 3:忽略复位,上电状态随机,状态机走进未定义编码。反例 4:把 H4 加法器输出直接当「已同步」跨时钟域使用。反例 5:用「再跑 1 次仿真」掩盖建立失败,而不改周期或逻辑。
复位策略写进规格:异步复位同步释放是常见工程实践,细节在实现课展开。本课最低要求是:上电后 FSM 有定义的初始状态,且测试向量从复位释放开始。
与 H4 接缝:组合块负责算,时序块负责存与对齐。数据通路图里应能指认哪些方框是寄存器、哪些是组合。若方框边界含糊,先改图画再写 HDL 或连线。把 H4 验收向量里的进位链,标到本课临界路径候选表中,两课证据才能对上。
教室加练:给出 1 张含 2 个寄存器与中间 MUX+加法器的草图,要求用红笔描出你认为的临界路径,并写 3 句理由。不要只圈加法器;要写清从哪只触发器的 Q 出发、回到哪只触发器的 D。
把波形阅读顺序固定成「时钟 → 复位 → 使能 → D → Q」,可以减少漏看建立窗口的低级错误。小组互查时,让对方遮住你的标注,只根据波形说出每拍 Q 的值。
教学仿真里常见的单位延迟模型足够完成本课向量;不要把门级延迟数值背成教条。真正闭包要用工艺库与约束文件,那是后续实现课的范围。
把「状态」与「输出」分列:有的设计用状态位直接当输出,有的用独立输出寄存器再打 1 拍。两种都合法,但规格必须写清延迟是 0 拍还是 1 拍,否则软件同事会对齐不上。
对 2 位计数,要求学生既交状态表,也交 D0/D1 公式,并口头说明溢出回绕如何从 11 回到 00。只会背顺序不会写方程,到不了 H6 的数据通路。
讨论独热编码时,画 4 状态独热需要 4 个触发器,并指出非法码数量。对比二进制 2 位编码的 4 状态,让学生看到触发器数量与译码复杂度的交换。
强调同步设计的可验证性:单时钟加上边沿对齐,使形式化与静态时序成为可能。异步风格在特定场景有价值,但不作为本课默认解法。
把实验室安全与电气内容排除:本课不涉及高压、焊接与示波器探头补偿;纸笔波形与仿真波形即可验收。
与软件调试类比仅限「断点在边沿」:你不能在组合逻辑中间随意停下芯片,只能观察寄存器边界。这解释了为何硬件调试高度依赖波形与状态输出。
写清本课不做的事:不讲锁相环、不讲 DDR 时序闭包、不讲形式化属性语言。列排除项是为了防止自学清单无限膨胀。
最后用 1 段话复述给同伴:时序用时钟对齐存储,组合在边沿之间计算下一状态;建立失败会让系统表现为偶发错误。复述不含公式也可以,但必须含「边沿」与「状态」两个词。
把波形阅读顺序固定成「时钟 → 复位 → 使能 → D → Q」,可以减少漏看建立窗口的低级错误。小组互查时,让对方遮住你的标注,只根据波形说出每拍 Q 的值。
教学仿真里常见的单位延迟模型足够完成本课向量;不要把门级延迟数值背成教条。真正闭包要用工艺库与约束文件,那是后续实现课的范围。
把「状态」与「输出」分列:有的设计用状态位直接当输出,有的用独立输出寄存器再打 1 拍。两种都合法,但规格必须写清延迟是 0 拍还是 1 拍,否则软件同事会对齐不上。
对 2 位计数,要求学生既交状态表,也交 D0/D1 公式,并口头说明溢出回绕如何从 11 回到 00。只会背顺序不会写方程,到不了 H6 的数据通路。
讨论独热编码时,画 4 状态独热需要 4 个触发器,并指出非法码数量。对比二进制 2 位编码的 4 状态,让学生看到触发器数量与译码复杂度的交换。
强调同步设计的可验证性:单时钟加上边沿对齐,使形式化与静态时序成为可能。异步风格在特定场景有价值,但不作为本课默认解法。
把实验室安全与电气内容排除:本课不涉及高压、焊接与示波器探头补偿;纸笔波形与仿真波形即可验收。
与软件调试类比仅限「断点在边沿」:你不能在组合逻辑中间随意停下芯片,只能观察寄存器边界。这解释了为何硬件调试高度依赖波形与状态输出。
写清本课不做的事:不讲锁相环、不讲 DDR 时序闭包、不讲形式化属性语言。列排除项是为了防止自学清单无限膨胀。
最后用 1 段话复述给同伴:时序用时钟对齐存储,组合在边沿之间计算下一状态;建立失败会让系统表现为偶发错误。复述不含公式也可以,但必须含「边沿」与「状态」两个词。
把波形阅读顺序固定成「时钟 → 复位 → 使能 → D → Q」,可以减少漏看建立窗口的低级错误。小组互查时,让对方遮住你的标注,只根据波形说出每拍 Q 的值。
教学仿真里常见的单位延迟模型足够完成本课向量;不要把门级延迟数值背成教条。真正闭包要用工艺库与约束文件,那是后续实现课的范围。
把「状态」与「输出」分列:有的设计用状态位直接当输出,有的用独立输出寄存器再打 1 拍。两种都合法,但规格必须写清延迟是 0 拍还是 1 拍,否则软件同事会对齐不上。
对 2 位计数,要求学生既交状态表,也交 D0/D1 公式,并口头说明溢出回绕如何从 11 回到 00。只会背顺序不会写方程,到不了 H6 的数据通路。
讨论独热编码时,画 4 状态独热需要 4 个触发器,并指出非法码数量。对比二进制 2 位编码的 4 状态,让学生看到触发器数量与译码复杂度的交换。
强调同步设计的可验证性:单时钟加上边沿对齐,使形式化与静态时序成为可能。异步风格在特定场景有价值,但不作为本课默认解法。
把实验室安全与电气内容排除:本课不涉及高压、焊接与示波器探头补偿;纸笔波形与仿真波形即可验收。
与软件调试类比仅限「断点在边沿」:你不能在组合逻辑中间随意停下芯片,只能观察寄存器边界。这解释了为何硬件调试高度依赖波形与状态输出。
写清本课不做的事:不讲锁相环、不讲 DDR 时序闭包、不讲形式化属性语言。列排除项是为了防止自学清单无限膨胀。
最后用 1 段话复述给同伴:时序用时钟对齐存储,组合在边沿之间计算下一状态;建立失败会让系统表现为偶发错误。复述不含公式也可以,但必须含「边沿」与「状态」两个词。
把波形阅读顺序固定成「时钟 → 复位 → 使能 → D → Q」,可以减少漏看建立窗口的低级错误。小组互查时,让对方遮住你的标注,只根据波形说出每拍 Q 的值。
教学仿真里常见的单位延迟模型足够完成本课向量;不要把门级延迟数值背成教条。真正闭包要用工艺库与约束文件,那是后续实现课的范围。
把「状态」与「输出」分列:有的设计用状态位直接当输出,有的用独立输出寄存器再打 1 拍。两种都合法,但规格必须写清延迟是 0 拍还是 1 拍,否则软件同事会对齐不上。
对 2 位计数,要求学生既交状态表,也交 D0/D1 公式,并口头说明溢出回绕如何从 11 回到 00。只会背顺序不会写方程,到不了 H6 的数据通路。
讨论独热编码时,画 4 状态独热需要 4 个触发器,并指出非法码数量。对比二进制 2 位编码的 4 状态,让学生看到触发器数量与译码复杂度的交换。
强调同步设计的可验证性:单时钟加上边沿对齐,使形式化与静态时序成为可能。异步风格在特定场景有价值,但不作为本课默认解法。
把实验室安全与电气内容排除:本课不涉及高压、焊接与示波器探头补偿;纸笔波形与仿真波形即可验收。
与软件调试类比仅限「断点在边沿」:你不能在组合逻辑中间随意停下芯片,只能观察寄存器边界。这解释了为何硬件调试高度依赖波形与状态输出。
写清本课不做的事:不讲锁相环、不讲 DDR 时序闭包、不讲形式化属性语言。列排除项是为了防止自学清单无限膨胀。
最后用 1 段话复述给同伴:时序用时钟对齐存储,组合在边沿之间计算下一状态;建立失败会让系统表现为偶发错误。复述不含公式也可以,但必须含「边沿」与「状态」两个词。
放进方案里
在方案「存储与对齐」节增加时序约束表:时钟边沿约定、复位极性、寄存器清单、关键路径候选、上电默认状态。每个状态寄存器写明位宽与使能。FSM 附状态表与非法码处理。验收向量至少覆盖:复位释放后首状态、1 条正常转移、1 条计数溢出回绕、1 次使能关闭保持。写明禁止项:组合环存状态、未同步的异步输入直接进 FSM、跨时钟域无同步器。把仿真波形文件名与板上钟频写入检查表。若关键路径临时超标,记录降频或改结构的二选一决策与回退条件。责任人、冻结日期与向量路径写在表末行。发布前再读:透明锁存是否误用于同步通路、建立失败是否仅用「再跑 1 次」掩盖。仿真通过后仍检查复位默认与多驱动。证据附仿真日志或纸笔波形编号。此外在接口表登记每个异步输入的同步级数与责任模块,避免口头约定。若使用锁存,必须单独论证透明窗不与反馈环重叠,并在风险表标红。时钟树暂用理想模型时,写明「未含偏斜」,防止把教室结论当成板级闭包。向量集需同时包含使能为 0 的保持拍,证明不是「每个边沿都在改」。把工具版本与仿真种子写入附录,保证他人能复现波形。板上抽检时核对晶振丝印与约束文件中的目标频率是否一致。把复位释放后的第 1 个有效边沿单独列入向量,确认不是「复位仍有效时的假转移」。若方案含多比特使能总线,注明各位含义与默认关闭值,防止上电误写。静态检查表增加:是否存在组合环、是否存在未约束的生成时钟、是否有空状态编码。与软件联调前,冻结状态编码表版本号,避免口头改码导致固件错位。
10 小结:下一课看整机如何叠起这些块
本课建立了时钟边沿、锁存与触发器、寄存器、同步计数与 FSM 入口,以及建立/保持与临界路径的验收说法。下一课 H6 会把寄存器、ALU、存储器与总线收成计算机组成概览;那时时序不再是孤立元件,而是数据通路上的节拍。
下一课转向 H7 指令集体系结构:把本章验收过的结论带进后续主题,写成可检查的方案约束。