从"4 比特计数器输入"到"NSH / NSL / EWH / EWL"四个输出——完整的组合电路推导过程
4 比特输入 (4-bit input) 是一个计数器 (counter),每 5 秒跳一次:
所以 16 个输入值一圈对应的总时长是:
再看题目给的每盏灯的时序要求 (timing requirement):
因为每步是 5 秒,所以:
这等价于:在 0000 之前的那个时间片应该是"全红"间隔;而 1111→0000 正好是环回,所以让 15 代表这个"全红间隔"。
| 计数值 N | 二进制 ABCD | NS 灯色 | EW 灯色 | 持续 |
|---|---|---|---|---|
| 0 – 5 | 0000 – 0101 | 🟢 绿 | 🔴 红 | 30s |
| 6 | 0110 | 🟡 黄 | 🔴 红 | 5s |
| 7 | 0111 | 🔴 红 | 🔴 红 | 5s |
| 8 – 13 | 1000 – 1101 | 🔴 红 | 🟢 绿 | 30s |
| 14 | 1110 | 🔴 红 | 🟡 黄 | 5s |
| 15 | 1111 | 🔴 红 | 🔴 红 | 5s |
题目给的编码表 (encoding table):
| 高位 (H) | 低位 (L) | 灯的颜色 |
|---|---|---|
| 0 | 0 | 🟢 绿 (green) |
| 0 | 1 | 🟡 黄 (yellow) |
| 1 | 0 | 🔴 红 (red) |
| 1 | 1 | 🔴 红 (red) |
令 A 为最高位 (MSB),D 为最低位 (LSB),计数值 N = 8A + 4B + 2C + D:
| N | A | B | C | D | 相位 | NSH | NSL | EWH | EWL |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | NS绿 | 0 | 0 | 1 | x |
| 1 | 0 | 0 | 0 | 1 | NS绿 | 0 | 0 | 1 | x |
| 2 | 0 | 0 | 1 | 0 | NS绿 | 0 | 0 | 1 | x |
| 3 | 0 | 0 | 1 | 1 | NS绿 | 0 | 0 | 1 | x |
| 4 | 0 | 1 | 0 | 0 | NS绿 | 0 | 0 | 1 | x |
| 5 | 0 | 1 | 0 | 1 | NS绿 | 0 | 0 | 1 | x |
| 6 | 0 | 1 | 1 | 0 | NS黄 | 0 | 1 | 1 | x |
| 7 | 0 | 1 | 1 | 1 | 全红 | 1 | x | 1 | x |
| 8 | 1 | 0 | 0 | 0 | EW绿 | 1 | x | 0 | 0 |
| 9 | 1 | 0 | 0 | 1 | EW绿 | 1 | x | 0 | 0 |
| 10 | 1 | 0 | 1 | 0 | EW绿 | 1 | x | 0 | 0 |
| 11 | 1 | 0 | 1 | 1 | EW绿 | 1 | x | 0 | 0 |
| 12 | 1 | 1 | 0 | 0 | EW绿 | 1 | x | 0 | 0 |
| 13 | 1 | 1 | 0 | 1 | EW绿 | 1 | x | 0 | 0 |
| 14 | 1 | 1 | 1 | 0 | EW黄 | 1 | x | 0 | 1 |
| 15 | 1 | 1 | 1 | 1 | 全红 | 1 | x | 1 | x |
NS 为红时高位 = 1;NS 在计数 7–15 全是红。
化简观察(K-map 分组直觉):
EW 为红时高位 = 1;EW 在计数 0–7 和 15 是红。
先做"大片覆盖"的观察:
再用布尔代数 (Boolean algebra) 恒等式:
令 X = A, Y = BCD,则 A + A·(BCD) = A + BCD
用 K-map 直觉:
同样利用无关项,把 14 (1110) 和 6 (0110)(此时 EW 红,低位无关)合并,消去 A,得到同一个最简项:
这些方程实现的颜色序列 (color sequence) 与题目要求一致,并且在红灯时正确利用了"10/11 都是红"带来的无关项 (don't care) 来最小化电路: