#include <stdio.h>
int main(void) {
/* --- 例1: 译码器(低有效)+NAND 实现 F=Sm(0,2,3,5,7) --- */
printf("--- 例1 译码器 + NAND ---\n");
int S1[5] = {0, 2, 3, 5, 7};
int bad = 0;
for (int i = 0; i < 8; i++) {
/* 74LS138: 唯一为 0 的输出是 Y_i,其余为 1 */
int prod = 1;
for (int k = 0; k < 5; k++) if (S1[k] == i) prod = 0;
int F = !prod; /* NAND */
int ref = 0;
for (int k = 0; k < 5; k++) if (S1[k] == i) ref = 1;
if (F != ref) { bad++; printf(" MISMATCH %d\n", i); }
printf(" ABC=%03d F=%d(ref %d)\n", i, F, ref);
}
printf(" %s\n", bad ? "FAIL" : "PASS");
/* --- 例2: 74LS151 直连实现 F=Sm(0,1,2,4,7) --- */
printf("--- 例2 74LS151 直连 ---\n");
int S2[8] = {1, 1, 1, 0, 1, 0, 0, 1};
bad = 0;
for (int i = 0; i < 8; i++) {
int set[] = {0, 1, 2, 4, 7};
int ref = 0;
for (int k = 0; k < 5; k++) if (set[k] == i) ref = 1;
if (S2[i] != ref) bad++;
printf(" ABC=%03d D%d=%d F=%d(ref %d)\n", i, i, S2[i], S2[i], ref);
}
printf(" %s\n", bad ? "FAIL" : "PASS");
/* --- 例3: 8选1 MUX 降维实现 4 变量函数 --- */
printf("--- 例3 8选1 MUX 降维 ---\n");
int F4[] = {0,1,5,7,8,9,13,15};
bad = 0;
for (int m = 0; m < 16; m++) {
int A = m>>3 & 1, B = m>>2 & 1, C = m>>1 & 1, D = m & 1;
int abc = A*4 + B*2 + C;
/* 数据端: 0->1, 1->0, 2->D, 3->D, 4->1, 5->0, 6->D, 7->D */
int Dv[8] = {1, 0, D, D, 1, 0, D, D};
int F = Dv[abc];
int ref = 0;
for (int k = 0; k < 8; k++) if (F4[k] == m) ref = 1;
if (F != ref) { bad++; printf(" MISMATCH m%d\n", m); }
}
printf(" %s\n", bad ? "FAIL" : "PASS");
printf(" 与门实现对照: F = B'C' + BD\n");
bad = 0;
for (int m = 0; m < 16; m++) {
int A = m>>3 & 1, B = m>>2 & 1, C = m>>1 & 1, D = m & 1;
int F = (!B && !C) || (B && D);
int ref = 0;
for (int k = 0; k < 8; k++) if (F4[k] == m) ref = 1;
if (F != ref) bad++;
}
printf(" B'C' + BD 与 MUX 结果一致: %s\n", bad ? "FAIL" : "PASS");
/* --- 例4: 2 位比较器 --- */
printf("--- 例4 2 位比较器 ---\n");
bad = 0;
for (int a = 0; a < 4; a++) for (int b = 0; b < 4; b++) {
int A1 = a>>1 & 1, A0 = a & 1, B1 = b>>1 & 1, B0 = b & 1;
int G = (A1 && !B1) || ((A1 == B1) && A0 && !B0);
int L = (!A1 && B1) || ((A1 == B1) && !A0 && B0);
int E = (A1 == B1) && (A0 == B0);
int g = a > b, l = a < b, e = a == b;
if (G != g || L != l || E != e) { bad++; printf(" MISMATCH %d vs %d\n", a, b); }
}
printf(" %s\n", bad ? "FAIL" : "PASS");
return 0;
}
c 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
from itertools import product
print("--- 例1 译码器(低有效)+NAND 实现 F=Sm(0,2,3,5,7) ---")
S = {0, 2, 3, 5, 7}
for m in range(8):
# 74LS138: Y_i = 0 当 i == m,其余 1
vals = [0 if i == m else 1 for i in S]
F = 0 if all(v == 1 for v in vals) else 1
print(f" ABC={m:03b} Y0,Y2,Y3,Y5,Y7={vals} F={F} (ref {1 if m in S else 0})")
print(" 结论: F = NAND(Y0,Y2,Y3,Y5,Y7)")
print("--- 例2 74LS151 直连 F=Sm(0,1,2,4,7) ---")
S2 = {0, 1, 2, 4, 7}
print(" " + " ".join(f"D{i}={'1' if i in S2 else '0'}" for i in range(8)))
print("--- 例3 8选1 MUX 降维实现 F=Sm(0,1,5,7,8,9,13,15) ---")
F4 = {0, 1, 5, 7, 8, 9, 13, 15}
for abc in range(8):
f0 = 1 if abc*2 in F4 else 0
f1 = 1 if abc*2+1 in F4 else 0
d = "0" if (f0, f1) == (0, 0) else "1" if (f0, f1) == (1, 1) \
else "D" if (f0, f1) == (0, 1) else "D'"
print(f" ABC={abc:03b}: f(D=0)={f0} f(D=1)={f1} -> D{abc} = {d}")
bad = []
for m in range(16):
A, B, C, D = (m >> 3) & 1, (m >> 2) & 1, (m >> 1) & 1, m & 1
abc = A * 4 + B * 2 + C
Dv = [1, 0, D, D, 1, 0, D, D]
if Dv[abc] != (1 if m in F4 else 0):
bad.append(m)
print(f" MUX 实现验证: {'PASS' if not bad else 'FAIL ' + str(bad)}")
bad = []
for m in range(16):
A, B, C, D = (m >> 3) & 1, (m >> 2) & 1, (m >> 1) & 1, m & 1
if int((not B and not C) or (B and D)) != (1 if m in F4 else 0):
bad.append(m)
print(f" 门实现 B'C'+BD 验证: {'PASS' if not bad else 'FAIL ' + str(bad)}")
print("--- 例4 2 位比较器 ---")
bad = []
for a in range(4):
for b in range(4):
A1, A0 = (a >> 1) & 1, a & 1
B1, B0 = (b >> 1) & 1, b & 1
G = int((A1 and not B1) or ((A1 == B1) and A0 and not B0))
L = int((not A1 and B1) or ((A1 == B1) and not A0 and B0))
E = int((A1 == B1) and (A0 == B0))
if (G, E, L) != (int(a > b), int(a == b), int(a < b)):
bad.append((a, b))
print(f" G/E/L 方程验证: {'PASS' if not bad else 'FAIL ' + str(bad)}")
print(f" 覆盖全部 16 组输入")
print("--- 优先编码器 74LS148 (I7 最高优先) ---")
for act in (7, 5, 0):
inp = [1 if i == act else 0 for i in range(8)]
code = max(i for i in range(8) if inp[i])
print(f" 输入 I7..I0={inp[::-1]} -> 最高有效位 I{act} -> A2A1A0={code:03b}")
print("--- 级联:两片 74LS138 扩成 4-16 译码器 ---")
print(" 高位地址 A3=0 -> 片1 使能, A3=1 -> 片2 使能")
for a3 in (0, 1):
chip = 1 if a3 == 0 else 2
print(f" A3={a3}: 片{chip} 工作,输出 Y{0 if a3==0 else 8}..Y{7 if a3==0 else 15}")
评论(0)
当前浏览器不允许本地存储,评论无法保存。
还没有评论,来说两句。