把二进制码按照不同的规律编排的过程叫做编码,实现编码的电路为编码器。实际上,编码是译码的逆过程。为了不使输出端出现混乱,规定在任意给定的时刻,输入端中只有一个输入出现。常见的编码器有二进制编码器﹑二-十进制编码器和优先编码器。下面分别举例来讲解。
【例5-10】设计一个3位二进制编码器。
解:3位二进制编码器有8个输入端,设为:X0﹑X1﹑X2﹑X3﹑X4﹑X5﹑X6﹑X7,3个输出端设为:Z2﹑Z1﹑Z0。其真值,如表5-11所示。
表5-11 3位二进制编码器真值表
X1 |
X2 |
X3 |
X4 |
X5 |
X6 |
X7 |
Z2 |
Z1 |
Z0 | |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
续上表
X0 |
X1 |
X2 |
X3 |
X4 |
X5 |
X6 |
X7 |
Z2 |
Z1 |
Z0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
根据该真值表可以直接写出输出函数的逻辑表达式:
Z2=X4+X5+X6+X7
Z1=X2+X3+X6+X7
Z0=X1+X3+X5+X7
于是可以画出其或门逻辑电路图如图5-26所示。
若将表达式两次取反,得到:
Z2=(X4' X5' X6' X7')'
Z1=(X2' X3 ' X6' X7')'
Z0=(X1' X3' X5' X7')'
于是逻辑电路图可以用与非门改画为图5-27所示。
图5-26 3位二进制编码器或门逻辑电路图 图5-27 3位二进制编码器与非门逻辑电路图
【例5-11】设计一个二-十进制编码器。
解:二-十进制编码器就是将0~9十个字符编为BCD码。本题以8421 BCD码为例。首先给出该二-十进制编码器的真值,如表5-12所示。
表5-12 二-十进制编码器真值表
输入 |
Z3 |
Z2 |
Z1 |
Z0 |
输入 |
Z3 |
Z2 |
Z1 |
Z0 |
0 |
0 |
0 |
0 |
0 |
5 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
6 |
0 |
1 |
1 |
0 |
2 |
0 |
0 |
1 |
0 |
7 |
0 |
1 |
1 |
1 |
3 |
0 |
0 |
1 |
1 |
8 |
1 |
0 |
0 |
0 |
4 |
0 |
1 |
0 |
0 |
9 |
1 |
0 |
0 |
1 |
可以写出输出函数的表达式为:
Z3=8+9
Z2=4+5+6+7
Z1=2+3+6+7
Z0=1+3+5+7+9
由此可以画出其或门逻辑电路图,如图5-28所示。
图5-28 二-十进制编码器逻辑电路图
注意到以上的设计都没有0输入,是因为只要1~9输入均为0,输出就为0000。同例5-10一样,只要经过适当变换就可以将或门逻辑电路转换为与非门电路。
下面介绍优先编码器。
通过前面的学习知道,二进制编码器和二-十进制编码器都要求在给定时刻,只有一个输入端出现。优先编码器就克服了这个约束条件,优先编码器允许多个输入端同时出现,但因为它们的优先级不同,优先编码器会对其中优先级最高的输入进行编码,而对优先级较低的输入不予理睬,因此不会产生混乱和错误。下面给出二进制优先编码器的真值,如表5-13所示。
表5-13 二进制优先编码器真值表
输 入 |
输 出 | ||||||||||||
E1' |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
A2 |
A1 |
A0 |
Gs |
E0 |
1 |
d |
d |
d |
d |
d |
d |
d |
d |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
d |
d |
d |
d |
d |
d |
d |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
d |
d |
d |
d |
d |
d |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
d |
d |
d |
d |
d |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
d |
d |
d |
d |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
d |
d |
d |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
d |
d |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
d |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
由表可见,该电路有8条数据输入线0~7,其中0为输入数据的最高位,7为最低位。A2~A0为数据输出线,其中A2为最高位,A0为最低位。优先编码器的优先编码规则是:当有两根或两根以上输入线的输入信号为0时,它就优先将序号最大的0输入信号编码。例如,7线输入为0时,即使它前面有其他的0输入,优先编码器仍然按照7线编码。需要注意,在这里A2 A1A0是按照反码输出的。电路输入有一个使能端E1'。当E1' =0时,允许电路编码;当E1' =1时,禁止电路编码,而且电路输出还设有使能端E0和优先编码输出端Gs。只有当输入的数据中出现0时,E0=1,Gs=0,表明编码器正在对数据进行优先编码。根据该真值表可以写出输出函数的逻辑表达式,并画出逻辑电路图,这里略去,只给出该优先编码器的逻辑符号,如图5-29所示。
图5-29 二进制优先编码器的逻辑符号