Q3 · Combinational Circuit · 组合电路

🚦 交通信号灯控制器
布尔方程设计与化简

从"4 比特计数器输入"到"NSH / NSL / EWH / EWL"四个输出——完整的组合电路推导过程

1
看到"每 5 秒变一次、4 比特计数 0→15"应该立刻做的判断

4 比特输入 (4-bit input) 是一个计数器 (counter),每 5 秒跳一次:

0000 → 0001 → ⋯ → 1111 → 0000

所以 16 个输入值一圈对应的总时长是:

16 × 5s = 80s

再看题目给的每盏灯的时序要求 (timing requirement)

  • 绿 (green) 30s
  • 黄 (yellow) 5s
  • 红 (red) 45s
30 + 5 + 45 = 80s ← 和计数器周期完全吻合!
💡 这意味着我们可以把 A B C D 直接当作"当前处于第几个 5 秒时间片 (5-second slot)"。不需要额外的时序电路,纯组合逻辑 (combinational logic) 就够了!
2
把"秒数"换成"计数值"的分段(最关键的一步)

因为每步是 5 秒,所以:

  • 30s = 6时间片 (slots)
  • 5s = 1 个时间片
  • 45s = 9 个时间片
题目还说:有两个 5 秒间隔 (two 5-second intervals)"两边都红"。并且给定初始条件:当输入 0000 时,NS"刚变绿",EW"已经红了 5 秒"。

这等价于:在 0000 之前的那个时间片应该是"全红"间隔;而 1111→0000 正好是环回,所以让 15 代表这个"全红间隔"。

📋 完整的相位序列 (phase sequence)

计数值 N二进制 ABCDNS 灯色EW 灯色持续
0 – 50000 – 0101🟢 绿🔴 红30s
60110🟡 黄🔴 红5s
70111🔴 红🔴 红5s
8 – 131000 – 1101🔴 红🟢 绿30s
141110🔴 红🟡 黄5s
151111🔴 红🔴 红5s
✅ 这样 EW 在计数 15 开始红,到计数 0 时恰好"已红了 5 秒"——和初始条件一致!
3
把"颜色"换成"高位/低位"两比特(输出编码)

题目给的编码表 (encoding table)

高位 (H)低位 (L)灯的颜色
00🟢 绿 (green)
01🟡 黄 (yellow)
10🔴 红 (red)
11🔴 红 (red)
🔑 关键观察:红色时"低位 0 / 1 都行" ⇒ 低位对红色是无关 (don't care)。这允许我们用无关项 (don't care conditions) 去大幅化简低位输出!
4
列出"计数值 → 四个输出"的完整真值表

A 为最高位 (MSB)D 为最低位 (LSB),计数值 N = 8A + 4B + 2C + D:

NABCD相位NSHNSLEWHEWL
00000NS绿001x
10001NS绿001x
20010NS绿001x
30011NS绿001x
40100NS绿001x
50101NS绿001x
60110NS黄011x
70111全红1x1x
81000EW绿1x00
91001EW绿1x00
101010EW绿1x00
111011EW绿1x00
121100EW绿1x00
131101EW绿1x00
141110EW黄1x01
151111全红1x1x
📌 表中的 "x" 就是无关位 (don't care bit)——红色时低位 0 或 1 都算红色,可以自由选择以便化简。
5
逐个输出写成函数并化简
📘 5.1 NSH(NS 高位)— 什么时候为 1?

NS 为红时高位 = 1;NS 在计数 7–15 全是红。

NSH = Σ m(7, 8, 9, 10, 11, 12, 13, 14, 15)

化简观察(K-map 分组直觉):

  • 计数 8–15 的共同特征是 A = 1 ⇒ 一项就是 A
  • 还缺的计数 7 是 0111,对应积项是 BCD
✅ NSH = A + BCD
📙 5.2 EWH(EW 高位)— 什么时候为 1?

EW 为红时高位 = 1;EW 在计数 0–715 是红。

EWH = Σ m(0, 1, 2, 3, 4, 5, 6, 7, 15)

先做"大片覆盖"的观察:

  • 0–7 的共同特征是 A = 0 ⇒ 一项是 A
  • 再补 15 = 1111 ⇒ 一项是 ABCD
EWH = A + ABCD

再用布尔代数 (Boolean algebra) 恒等式:

X + XY = X + Y

令 X = A, Y = BCD,则 A + A·(BCD) = A + BCD

✅ EWH = A + BCD
📕 5.3 NSL(NS 低位)— 带无关项的最小化
  • NS 黄只在计数 6 (0110):低位必须 = 1
  • NS 绿在计数 0–5:低位必须 = 0
  • NS 红在计数 7–15:低位是无关 (don't care)

K-map 直觉:

  • N=6 是 0110:B=1, C=1, D=0
  • 计数 141110:同样 B=1, C=1, D=0,而它处于 NS 红(无关),可以和 6 合并以消去 A
✅ NSL = BCD
📒 5.4 EWL(EW 低位)— 同理
  • EW 黄只在计数 14 (1110):低位必须 = 1
  • EW 绿在计数 8–13:低位必须 = 0
  • EW 红在计数 0–7, 15:低位无关

同样利用无关项,把 14 (1110)6 (0110)(此时 EW 红,低位无关)合并,消去 A,得到同一个最简项:

✅ EWL = BCD
🧠 化简直觉总结:高位用"一位覆盖一大片 + 再补一个点"的 K-map 分组思路;低位利用"红色时无关",通过合并无关项消去变量。
6
最终答案:四个布尔输出的化简方程

这些方程实现的颜色序列 (color sequence) 与题目要求一致,并且在红灯时正确利用了"10/11 都是红"带来的无关项 (don't care) 来最小化电路:

NS 高位 NSH = A + BCD
NS 低位 NSL = BCD
EW 高位 EWH = A + BCD
EW 低位 EWL = BCD
✅ NSL 和 EWL 恰好相同,硬件上可以共用同一个门电路——这就是利用 don't care 化简得到的额外收益!

🎯 解题思路总结

  • 第一步:确认计数器周期 = 灯周期 = 80s → 纯组合电路
  • 第二步:按初始条件分配 16 个时间片到各相位
  • 第三步:用编码规则将颜色转成 H/L 二位输出
  • 第四步:列真值表,标出无关项 (don't care)
  • 第五步:K-map 或布尔代数化简每路输出
NSH = A + BCD
NSL = BCD
EWH = A + BCD
EWL = BCD

🎮 交互式演示 — 点击计数值,观察信号灯变化

🔼 NS(北-南)
◀▶ EW(东-西)
点击上方的计数值按钮开始体验 ↑