SICI · 天机门 · 第三章

记忆诞生

时序逻辑电路:记忆的诞生 · 炼气三层

门接起来就能算一切——这句话,亚稳态之影说对了一半。

门楣刻字:「状态加输入,输出与次态」
序章

记忆之门

组合逻辑算完即忘——哪件里没有时序?

时序殿的灯是冷的。你把 ch02 的组合逻辑阵列铺满整面石台——加法器、ALU、多路选择器,金光流转,像一件得意之作。

时序之钟,时钟信号在电路中传播

诺依曼老祖立在台边,只问一句:"让它数到三就停。"你按下时钟,它数:一、二、三……四、五。停不住。你松手,它归零,连"刚才数到几"都忘了。

亚稳态之影 亚稳态之影

「你算得对,但你记不住。一个记不住的东西,算得再快也是空。你押上"组合逻辑万能"的全部自信——赌一把:哪一件里没有时序逻辑?」

诺依曼老祖 诺依曼老祖

「先下注。猜错,亚稳态账本记一笔。」

反直觉下注 · 哪件里没有时序逻辑电路?

先下注,指认一件。猜错,亚稳态账本记一笔。👆 点击下方按钮下注

组合逻辑的输出只取决于当前输入,没有"过去"。"记忆"必须来自某种能把状态留住的回路——这就是时序逻辑:状态+输入→输出+次态。
详解 · K03-01 时序逻辑基本概念

组合逻辑:输出 = f(当前输入)。时序逻辑:输出 = f(当前输入,当前状态),且状态本身也在更新:次态 = g(输入,状态)。多出来的这条「状态→次态」的边就是记忆。按输出是否直接依赖输入还分 Mealy(依赖)与 Moore(只依赖状态)两型——计数器、寄存器、状态机,全都建立在这四个要素上。

详解 · K03-01 时序逻辑基本概念

组合逻辑:输出 = f(当前输入)。时序逻辑:输出 = f(当前输入,当前状态),且状态本身也在更新:次态 = g(输入,状态)。多出来的这条「状态→次态」的边就是记忆。按输出是否直接依赖输入还分 Mealy(依赖)与 Moore(只依赖状态)两型——计数器、寄存器、状态机,全都建立在这四个要素上。

第一幕 · 第一崩塌

双环之锁 · SR 锁存器

S 与 R,谁能同时按下?

诺依曼老祖把两个或非门推到你面前,让你把它们尾对尾交叉耦合。你按下 S,Q 亮了;按下 R,Q 灭了。松手,它居然还记着。你几乎要笑出声。

诺依曼老祖 诺依曼老祖

「同时按呢?」

亚稳态之影 亚稳态之影

「它记住了——可你敢同时按 S 和 R 吗?记忆说谎的瞬间,我就在那里。」

SR 双环之锁非法态探索器 · 踩出 S=R=1 禁区

点 S/R 旋钮切换 0/1,逐行试真值表。亲手同时按 S=1, R=1,看记忆"说谎"。

NOR10
NOR20
Q
Q̄
⚠ S=R=1 是禁区!Q 与 Q̄ 同时为 0,违反互补约束。松手后随机落定——记忆"说谎"。
SR 锁存器用交叉耦合解决了"留住状态",但 S=R=1 是禁区——记忆不能被同时"设又清",否则它就不再是确定的记忆。释放后对称破坏让电路随机翻向 0 或 1——亚稳态的初级形态。
详解 · K03-02 SR 锁存器:结构与特性

两个或非门(或与非门,低有效版)尾对尾交叉耦合,构成双稳态回路——这是所有存储元件的祖师爷。特性表:S=0,R=0 保持;S=1 置位(Q=1);R=1 复位(Q=0);S=R=1 禁区——NOR 版两输出同被压成 0,互补约束破裂,且松手瞬间两级延迟的微小差(对称破坏)决定最终落向,结果不可预测。所以一切实用锁存器的第一要务,就是从结构上消灭 11 这个输入组合。

第一幕 · 边沿之约

边沿之刃 · D 触发器

快门只开一瞬,违时则颤

老祖给你主从双联:两个 D 锁存串联,主从时钟相反。上升沿一到,从锁存器把主锁存器上一瞬的值"咔"地冻结。你第一次得到一个稳稳的 1 位记忆。

正欣慰,老祖却在上升沿前最后一纳秒猛拨 D。Q 颤了半拍,停在 0 和 1 之间,像一缕不肯落定的灰雾。半秒后它才随机落下。

诺依曼老祖 诺依曼老祖

「快门按下前,数据得摆好姿势;按下后,还得再 hold 一会儿。」

亚稳态之影 亚稳态之影

「你管得了自己的数据,管不了异步的外部输入——它想什么时候来就什么时候来。」

D 触发器 · 主从边沿快门 + Tsu/Th 违例触发余烬

按"拨时钟"看边沿采样;在上升沿前极短窗口翻转 D(违反建立时间),看输出颤动——亚稳态余烬一闪。

主锁存0
→
从锁存0
D = 0
建立时间 Tsu满足
保持时间 Th满足
采样结果0
紫灰色余烬一闪——Q 停在中间电平,半秒后随机落下。亚稳态的初级显形。
边沿触发=瞬间快门。但快门按下前数据须"摆好姿势"够久(建立时间 Tsu),按下后须"保持"一会儿(保持时间 Th)——否则触发器在 0 与 1 之间徘徊。透明期漏刺,边沿非万能。
详解 · K03-03 D 锁存器:透明与电平触发

给 SR 锁存器加一个反相器,让 S = D、R = ¬D——输入 11 从结构上被消灭,这就是 D 锁存器。使能 EN=1 时 Q 透明跟随 D(此刻输入毛刺会直漏到输出,即「透明期漏刺」);EN=0 时锁存。它是电平触发的:整个高电平期间都在"听",这正是它不够安全的原因。

详解 · K03-04 D 触发器:主从边沿触发

两个 D 锁存器串联、时钟反相:时钟低时主锁存透明、从锁存保持;时钟升高瞬间主锁存关门冻结,随后从锁存开门把冻结值放出。净效果:输出只在上升沿那一瞬采一次样——边沿触发。一拍之内 D 怎么折腾都漏不过去,这就是数字系统敢用"一拍"做时间单位的底气。

详解 · K03-06 建立时间与保持时间(Tsu/Th)

边沿采样不是魔法,它要求数据在沿前稳定至少 Tsu(建立时间)、沿后再稳至少 Th(保持时间)——源于内部传输延迟与钟控门的物理惯性。在 Tsu+Th 构成的"决断窗口"内翻转 D,触发器就可能停在中间电平:亚稳态。Tsu/Th 是数据手册上的硬参数,时序约束方程的两块基石。

第二幕 · 成列

记忆之墙 · 寄存器

8 个 D 触发器并排,一键并行写入

你把 8 个 D 触发器并排,共用一个时钟,一键并行写入 8 位——寄存器。数据像一面墙上的灯,齐刷刷亮起。

诺依曼老祖 诺依曼老祖

「能存 8 位了。可你骄矜中没注意——并排靠的是共同时钟,一旦时钟歪了整列就错位。这是后面崩塌的火药。」

8 位并行寄存器 · 共时钟并行写入

逐位点击输入开关设定 8 位数据,按"写入"看寄存器整列同步更新。

寄存器值00000000
十进制0
并行写入=一次写 8 位。所有触发器共时钟统一步伐——时钟一歪,全列错位。
寄存器=并行存储。它靠共同时钟统一步伐——时钟一歪,全列错位。你埋下的火药,迟早会炸。
详解 · K03-07 寄存器:并行加载与移位

n 个 D 触发器共时钟、共清零,就是一个 n 位寄存器:一个时钟沿,n 位同时更新(并行加载)。加一条写使能 WE,就能"只在需要时更新"。寄存器是 CPU 里最忙碌的居民——程序计数器 PC、指令寄存器 IR、通用寄存器,本质都是它。

详解 · K03-14 寄存器文件的组织与寻址

把 2ᵏ 个寄存器排成阵列,配上地址译码器(选写哪个)和多路选择器(选读哪个),就是寄存器文件(Register File)。CPU 的通用寄存器堆通常是 2 读 1 写三端口:同一拍内读两个源操作数、写一个结果——端口数直接决定数据通路能多宽。

第二幕 · 自走

自走之轮 · 计数器

异步简单生刺,同步干净吃路径

你把 T 触发器级联:第一级翻两次,第二级进一位——异步二进制计数器成了。简单。但每一级的翻转要等上一级传过来,毛刺在中间一闪,记进了亚稳态账本。

亚稳态之影 亚稳态之影

「行波延迟的毛刺,是我派去的探子。你以为级联即计数?刺会传遍下级。」

诺依曼老祖 诺依曼老祖

「改同步:所有触发器共时钟,用组合逻辑算'该不该翻'。同步干净,可逻辑越绕越慢。」

计数器对比 · 异步行波 vs 同步共时钟

选择计数器类型,按"来一个时钟"看计数过程。异步会生毛刺,同步吃关键路径。

当前计数值0
毛刺无
异步:逐级翻转,进位延迟产生毛刺。同步:共时钟齐翻,干净但关键路径变长。
异步简单但有 glitch(行波延迟),同步干净但吃关键路径。毛刺是亚稳态之影的探子——它会传遍下级。
详解 · K03-05 JK 与 T 触发器

JK 触发器是 SR 的进化:次态方程 Q* = J·¬Q + ¬K·Q,J=K=1 不再是禁区而是翻转。把 J、K 短接成 T 就得到 T 触发器:T=1 时每拍翻转一次——天然二分频。T 触发器是计数器的基本细胞,你脚下的异步计数器就是它级联出来的。

详解 · K03-09 同步计数器设计

所有触发器共时钟,"该不该翻"由组合逻辑提前算好:T₀=1,T₁=Q₀,T₂=Q₀·Q₁,T₃=Q₀·Q₁·Q₂——每一级看所有低位是否全 1。任意模 N 则用译码电路在数到 N−1 时同步清零或置数。代价:与门输入数随位数增长,关键路径变长——这就是"同步干净但吃路径"。

详解 · K03-10 异步(行波)计数器与 glitch

把上一级的 Q 直接当下一级的时钟——结构极简、几乎不要组合逻辑。但第 i 级要比第 0 级晚 i 个触发器延迟才翻转:0111→1000 的进位过程中会瞬态经过 0110、0100、0000 等中间值——毛刺(glitch)。位数越多、频率越高越危险,所以异步计数器只配做低速分频,正经计数一律同步。

第二幕 · 流水

流水之渠 · 移位寄存器

串入并出、并入串出——时间换空间

老祖又让你把前一级的 Q 接下一级的 D,首尾相连——移位寄存器。你试四种接法:串进串出、串进并出、并进串出、并进并出。数据像一串光点,在 8 格之间一格一格地搬。

诺依曼老祖 诺依曼老祖

「串并转换,是时间换空间。8 位串入 8 次→并出,你用时间换了 8 根线。」

8 位移位寄存器 · 四模式切换

选一种模式,按"移一位"看数据在 8 格间流动。

输入 0
SISO 串入串出 · SIPO 串入并出 · PISO 并入串出 · PIPO 并入并出。串并转换=时间换空间。
寄存器=并行存储,移位寄存器=串并转换的桥梁。它们都靠共同时钟统一步伐——时钟一歪,全列错位。
详解 · K03-08 移位寄存器的应用

四种模式各有战场:SISO 做 n 拍延迟线;SIPO 是串口接收的核心(UART:线上串行来,内部并行用);PISO 反过来做串口发送;PIPO 就是普通寄存器。串并转换的本质是时间换空间——用 8 拍换 8 根线。再加上反馈抽头还能变 LFSR:伪随机数发生器、CRC 校验都靠它。

第三幕 · 第二崩塌

时钟之裂 · 时钟偏移

同步的前提是同源同时到达——物理做不到

你把同步计数器挂上一块大电路,时钟线拉得太长。到末端的触发器时,时钟已经歪了一截。末端在错误的时间采样,整个计数乱套。你画时序图一行行对,约束方程一行行被违反。

亚稳态之影 亚稳态之影

「你以为同步就稳?'同步'的前提是时钟同源同时到达——而物理世界,做不到绝对同时。信号总要时间。」

时钟偏移模拟器 · 末端采样错位

拖动"时钟线长度"滑块,看末端触发器时钟延迟、采样错位。违例窗口染赤红。

时钟源 CLK
skew = 0.5 ns
末端到达延迟0.5 ns
采样状态正常
⚠ 时钟偏移过大:末端在错误时间采样,数据未稳定就被读走。同步约束被违反。
同步设计核心是"共同时钟同源同时到达"。时钟偏移、关键路径过长都违反时序约束。时序分析就是用约束方程丈量这条路一拍内能不能走完。
详解 · K03-11 时钟信号:频率 · 占空比 · 偏移

时钟有三个物理参数:频率/周期决定节拍快慢;占空比是高电平占比(理想 50%);偏移(skew)是同一时钟沿到达不同触发器的时间差——来自走线长度、负载、缓冲级数的不均衡。芯片里用时钟树综合(CTS)把时钟布线成对称的树,把 skew 压到皮秒级。与之并列的还有 jitter(周期间抖动),它们一起吃掉了你的时序裕量。

第三幕 · 约束

约束方程求解器

T_clk ≥ T_cq + T_logic + T_setup + T_skew

诺依曼老祖递来一张方程石板:"写下同步的契约。"你刻下:T_clk ≥ T_cq + T_logic + T_setup + T_skew。四项相加,不能超过一拍。

诺依曼老祖 诺依曼老祖

「调参数。让它满足,再让它违反。亲手感受契约的边界。」

亚稳态之影 亚稳态之影

「约束能算清的,都不算绝路。算不清的,在边沿上等着你。」

约束方程求解器 · 四参数实时代入

拖动四个滑块,看约束满足(翠绿)或违反(赤红)。亲手经历"满足→违反→满足→违反"。

T_clk ≥ T_cq + T_logic + T_setup + T_skew
10.0 ≥ 2.0 + 3.0 + 1.0 + 0.5 = 6.5 ns
✓ 约束满足 · 最小时钟周期 6.5 ns · f_max = 153.8 MHz
⚠ 约束违反:四项之和超过时钟周期,数据来不及在建立时间前到达,采样到错误值。
同步时序分析就是用约束方程丈量这条路一拍内能不能走完。时钟偏移是"物理世界做不到绝对同时到达"的体现。但调低频率能救同步,却救不了亚稳态。
详解 · K03-13 同步设计准则

为什么整个行业死守同步设计?单一时钟源 + 全部边沿触发 + 每条组合路径都过约束方程——电路行为就变得可预测、可分析:静态时序分析(STA)不用跑仿真就能遍历所有路径。异步电路里毛刺、竞争、冒险全靠手工排查,验证成本爆炸。同步不是信仰,是工程上唯一付得起的确定性。

详解 · K03-15 时序分析:时序图与约束方程

两条核心不等式。建立约束:T_clk ≥ T_cq + T_logic + T_setup + T_skew——决定最高频率(f_max = 1/T_min)。保持约束:T_hold ≤ T_cq + T_logic——注意它不含 T_clk:降频救不了保持违例,只能修数据路径本身。画时序图逐拍对齐每个信号的到达与采样时刻,是定位违例的基本功。

第三幕 · 显形

亚稳态之兆 · MTBF

它不住在错误里,住在"还没决定"的瞬间

你把一个异步外部信号直接送进触发器的 D 端。信号恰好在时钟上升沿附近翻转——Q 既不是 0 也不是 1,停在一个中间电平上,久久不落。你查 MTBF:平均故障时间随"决断时间"指数增长。

亚稳态之影 亚稳态之影

「这不是 bug。这是物理。我在两个稳态的山脊上,需要时间滚下来。你算得清约束,算不清我。」

亚稳态示波器 + MTBF 公式组装

①按"对齐边沿"触发亚稳态,Q 停在中间电平;②拖"决断时间"滑块看 Q 最终落定;③拖公式碎片组装 MTBF 公式;④拖 T_res 看 MTBF 指数变化。

T_res = 1.0 ns
输出 Q稳定
当前 MTBF—

MTBF 公式组装 · 拖碎片到空槽

MTBF = e^(...) T_res/T₀ ÷ f_clk · f_data · C
把碎片拖(点)入正确的空槽。
紫灰色的雾从示波器里渗出来,开始凝聚成人形……"你算得清约束,算不清我。"
亚稳态=触发器在两稳态间的山脊上,需"决断时间"滚落。建立/保持时间违例是诱因,根因是物理——你不能消灭它,只能等它过去或躲开它。MTBF 随 T_res 指数增长。
详解 · K03-12 亚稳态与 MTBF

触发器内部是正反馈双稳态回路,输入在决断窗口内变化时,输出会停在两个稳态之间的"山脊"上——需要随机的时间滚落,这就是亚稳态。它不可消除,只可管理:平均故障间隔 MTBF = e^(T_res/τ) / (f_clk · f_data · C),对决断时间 T_res 呈指数敏感。两级同步器的精髓:第一级专心冒险,白赚一整个时钟周期当 T_res,第二级再采样——MTBF 从秒级直接拉到亿年级。

终幕 · 对决

亚稳态之影 · 三问收网

从"战胜不确定"到"与不确定共处"

亚稳态之影从每一次违时采样中渗出,凝成 neither-0-nor-1 的影子。它不攻击,它只是"不决定"——让每一级触发器在山脊上多停一拍,错误像涟漪传遍全电路。

亚稳态之影 亚稳态之影

「我是亚稳态之影。我不在错误里——我在'还没决定'的瞬间。建立/保持时间违例只是入口,根因是物理世界做不到瞬时决断。三问。答不出,天机门归于不确定。」

诺依曼老祖 诺依曼老祖

「你的刻痕,够用了。三问:驯服、立基、收网。」

渊账累计 0 笔 · 三问全对后清零

尾声

记忆之生 · 时序生忆

炼气三层 · 记忆觉醒 · 圆满

之影散去,石台清朗。诺依曼老祖让你综合一个序列检测器:认出输入里的"1011"。你画状态图、列状态表、化简、分配编码、推导方程、画出电路。你输入 1、0、1、1——检测灯亮了。一列触发器同步亮起,像一段被点亮的记忆。

诺依曼老祖 诺依曼老祖

「记忆,诞生了。不是某个元件,是这套'状态+输入→输出+次态'的语言。你能记事了。但记得越多,丢得起吗?」

知识图谱点亮 · 十六碎片排认知链 + 1011 序列检测

点击下方碎片,按因果顺序点亮认知链。再切换编码、输入"1011"看检测灯亮。

排错处会闪烁红光,提示该知识点依赖的前置知识。

1011 序列检测器 · 状态综合

二进制:3 触发器,译码复杂;格雷:相邻态只变 1 位,毛刺少;独热:5 触发器,次态逻辑最简。

输入序列 · 逐位点击

逐位输入,凑出"1011"看检测灯亮。
状态加输入,输出与次态
时序电路综合=状态图→状态表→化简→分配→方程→电路。状态分配是工程权衡的舞台:触发器数量 vs 译码复杂度 vs 毛刺风险。记忆不是单个元件,是这套"状态语言"。
详解 · K03-16 时序与组合的协同:流水线萌芽

把一条长组合逻辑切成几段、段与段之间插入寄存器:每段在一拍内独立完成,上一段的结果被寄存器稳稳接住再交给下一段——整体吞吐率成倍提升,而每一拍仍满足约束方程。这就是流水线思想的种子(ch08 将让它长成参天大树):时序逻辑切开时间,组合逻辑填满空间,二者协同才有了现代 CPU。

本章复盘 · 记忆诞生全景

记忆 = 状态+输入→输出+次态。SR 锁存器用交叉耦合留住状态却留下 11 禁区;D 锁存器消灭禁区却透明漏刺;主从 D 触发器用边沿快门驯服透明,但 Tsu/Th 划出物理铁窗。寄存器成墙、计数器自走、移位器成渠,全都押注"共同时钟"——skew 告诉你物理做不到绝对同时,约束方程告诉你一拍能装多少逻辑;而亚稳态住在"还没决定"的瞬间,两级同步器与复位策略教你的不是战胜它,是与不确定共处。

ch04 有限状态机:状态之舞 🔒(点亮全部图谱 + 检测成功后开启)
交互实验

D 触发器时序

调节 D 与时钟周期,观察 Q 在时钟上升沿锁定 D 的时序行为。