在数字系统里,常常需要将某一信息(输入)变换为某一特定的代码(输出)。把二进制码按一定的规律编排,例如8421码、格雷码等,使每组代码具有一特定的含义(代表某个数字或控制信号)称为编码。具有编码功能的逻辑电路称为编码器。编码器有若干个输入,在某一时刻只有一个输入信号被转换成为二进制码。如果一个编码器有n个输入端和n个输出端,则输出端与输入端之间应满足关系n≤2n。 例如8线—3线编码器和10线—4线编码器分别有8输入、3位二进制码输出和10输入、4位二进制码输出。
1.4线—2线编码器
下面分析4输入、2位二进制输出的编码器的工作原理。4线—2线编码器的功能如表1所示。
表1 4线—2线编码器功能表
输 入
输 出
i0
i1
i2
i3
y1
y0
1
0
0
0
0
0
0
1
0
0
0
1
0
0
1
0
1
0
0
0
0
1
1
1
表1所示的编码器为高电平输入有效,因而可由功能表得到如下逻辑表达式:
y1= i0i1i2i3+ i0i1i2i3
y0= i0i1i2i3+ i0i1i2i3
根据逻辑表达式画出逻辑图如图1所示。该逻辑电路可以实现如表5.2.1所示的功能,即当i0~i3中某一个输入为1,输出 y1y0即为相对应的代码,例如当i1为1时,y1y0为01。这里还有一个问题请读者注意。当i0为1,i1~i3都为0和i0~i3均为0时y1y0 都是00,而这两种情况在实际中是必须加以区分的,这个问题留待后面加以解决。当然,编码器也可以设计为低电平有效。
图1 4线—2线编码器逻辑图
2.键盘输入8421bcd码编码器
计算机的键盘输入逻辑电路就是由编码器组成。图2是用十个按键和门电路组成的8421码编码器,其功能如表2所示, 其中s0~s9代表十个按键,即对应十进制数0~9的输入键,它们对应的输出代码正好是8421bcd码,同时也把它们作为逻辑变量,abcd 为输出代码(a为最高位),gs为控制使能标志。
对功能表和逻辑电路进行分析,都可得知:①该编码器为输入低电平有效;②在按下s0~s9中任意一个键时,即输入信号中有一个为有效电平时,gs=1,代表有信号输入,而只有s0~s9均为高电平时gs=0,代表无信号输入,此时的输出代码0000为无效代码。由此解决了前面提出的如何区分两种情况下输出都是全0的问题。
图2 用十个按键和门电路组成的8421bcd码编码器
表2 十个按键8421bcd码编码器功能表
3.优先编码器
上述机械式按键编码电路虽然比较简单,但当同时按下两个或更多个键时,其输出将是混乱的。在数字系统中,特别是在计算机系统中,常常要控制几个工作对象,例如微型计算机主机要控制打印机、磁盘驱动器、输入键盘等。当某个部件需要实行操作时,必须先送一个信号给主机(称为服务请求),经主机识别后再发出允许操作信号(称为服务响应),这里会有几个部件同时发出服务请求的可能,而在同一时刻只能给其中一个部件发出允许操作信号。因此,必须根据轻重缓急,规定好这些控制对象允许操作的先后次序,即优先级别。识别这类请求信号的优先级别并进行编码的逻辑部件称为优先编码器。4线—2线优先编码器的功能表如表3所示。
表3 4线—2线优先编码器的功能表
输入
输出
i0
i1
i2
i3
y1
y0
1
0
0
0
0
0
×
1
0
0
0
1
×
×
1
0
1
0
×
×
×
1
1
1
分析表3中i0~i3的优先级别。例如,对于i0,只有当i1、i2、i3均为0,即均无有效电平输入,且i0为1时,输出为00。对于i3,无论其他3个输入是否为有效电平输入,输出均为11。由此可知i3的优先级别高于i0的优先级别,且这4个输入的优先级别的高低次序依次为i3、i2、i1、i0。
由表3可以得出该优先编码器的逻辑表达式为
y1=i2i3+i3=i2+i3
y0=i1i2i3+i3=i1i2+i3
由于这里包括了无关项,逻辑表达式比前面介绍的非优先编码器简单些。