设计含3组3位输入、4个1位输出的电路:大一ECE生求解思路
三位独热码输入的逻辑电路设计方案
问题定义
输入:三位二进制信号 A[2:0]、B[2:0]、C[2:0]
输出:四位二进制信号 E、RA、RB、RC
核心逻辑规则
- 错误触发(E=1):只要满足以下任一条件,
E=1且RA=RB=RC=0:- 任一输入为全0(无1)
- 任一输入中1的数量≥2
- 正常工作(E=0):当所有输入均为独热码(仅含1个1)时,
E=0,此时分三种输出情况:- 三个输入的1所在位置(0/1/2位)完全不同 →
RA=RB=RC=1 - 仅一个输入的1的位置与另外两个不同 → 对应输出(如A不同则
RA=1)置1,其余为0 - 三个输入的1的位置完全相同 →
RA=RB=RC=0
- 三个输入的1所在位置(0/1/2位)完全不同 →
分步求解思路
1. 先实现输入有效性判断
首先需要对每个输入判断是否为独热码(仅1位为1),定义三个有效性信号:
valid_A:当A[2:0]是独热码时为1,否则为0
(注:valid_A = (A2·¬A1·¬A0) + (¬A2·A1·¬A0) + (¬A2·¬A1·A0)·表示与运算,+表示或运算,¬表示非运算)- 同理可得
valid_B、valid_C的表达式,对应B、C的独热码判断
2. 设计E的逻辑
只要任一输入无效,E=1,因此:
E = ¬valid_A + ¬valid_B + ¬valid_C
等价于更节省门电路的与非形式:
E = ¬(valid_A · valid_B · valid_C)
3. 正常工作模式下的RA/RB/RC逻辑
仅当valid_A·valid_B·valid_C=1(即E=0)时,这三个输出才会有非0值,因此所有表达式都需要与该条件做与运算。
子模块1:位置比较信号
先定义输入间的位置相同判断信号:
same_AB:A和B的1的位置相同时为1,否则为0
(same_AB = ¬(A ⊕ B)⊕为异或运算,独热码输入下,位置相同时异或结果为全0,取非后为1)- 同理可得
same_BC(B和C位置相同)、same_AC(A和C位置相同)
子模块2:三种输出情况的逻辑
情况1:三个位置完全不同
此时三个输入两两位置都不同,逻辑为:all_diff = ¬same_AB · ¬same_BC · ¬same_AC该情况触发
RA=RB=RC=1情况2:仅单个输入位置不同
- 仅A与B、C位置不同:B和C位置相同,且A与它们不同
触发only_A_diff = same_BC · ¬same_AB · ¬same_ACRA=1 - 仅B与A、C位置不同:
触发only_B_diff = same_AC · ¬same_AB · ¬same_BCRB=1 - 仅C与A、B位置不同:
触发only_C_diff = same_AB · ¬same_AC · ¬same_BCRC=1
- 仅A与B、C位置不同:B和C位置相同,且A与它们不同
情况3:三个位置全相同
此时same_AB·same_BC·same_AC=1,三个输出均为0,无需额外逻辑,因为上面两种情况都不满足时输出自然为0
最终RA/RB/RC表达式
RA = (all_diff + only_A_diff) · valid_A · valid_B · valid_C RB = (all_diff + only_B_diff) · valid_A · valid_B · valid_C RC = (all_diff + only_C_diff) · valid_A · valid_B · valid_C
4. 电路实现建议
- 有效性判断可以用3-8译码器简化:将三位输入接入译码器,独热码输入会使译码器仅一个输出端为1,此时
valid信号可通过判断译码器输出是否仅有一位为1实现(或直接利用译码器输出作为位置信号) - 异或门可直接用74LS86这类芯片实现,与/或/非门用通用逻辑芯片即可
- 可以先画卡诺图对表达式进行化简,进一步减少门电路的使用
内容的提问来源于stack exchange,提问作者Bhuhu
相关产品推荐
相关产品推荐

