📜  数字逻辑中的编码器和解码器

📅  最后修改于: 2021-09-16 10:49:10             🧑  作者: Mango

先决条件 – 编码器、解码器

N 位二进制代码可用于存储编码信息的2 N 个不同元素。这就是编码器和解码器的用途。编码器将 2 N行输入转换为 N 位代码,解码器将 N 位解码为 2 N行。

1. 编码器 –
编码器是一种组合电路,它将以 2 N 条输入线形式的二进制信息转换为 N 条输出线,这些线代表输入的 N 位代码。对于简单的编码器,假设一次只有一条输入线处于活动状态。

例如,让我们考虑八进制到二进制编码器。如下图所示,一个八进制转二进制编码器需要8条输入线,生成3条输出线。

真值表——

D7 D6 D5 D4 D3 D2 D1 D0 X Y Z
0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 1 0 0 0 1 0
0 0 0 0 1 0 0 0 0 1 1
0 0 0 1 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 1 0 1
0 1 0 0 0 0 0 0 1 1 0
1 0 0 0 0 0 0 0 1 1 1

从真值表看,D0有效时输出为000; D1 有效时为 001;当 D2 处于活动状态时为 010,依此类推。

执行 –
从真值表来看,当输入八进制数字为 1、3、5 或 7 时,输出线 Z 是活动的。类似地,当输入八进制数字为 2、3、6 或 7 时,Y 为 1,输入八进制数字时 X 为 1 4、5、6 或 7。因此,布尔函数将是:

X = D4 + D5 + D6 + D7
Y = D2 +D3 + D6 + D7
Z = D1 + D3 + D5 + D7 

因此,编码器可以用或门实现,如下所示:

此编码器的一个限制是在任何给定时间只能激活一个输入。如果有多个输入处于活动状态,则输出未定义。例如,如果 D6 和 D3 都处于活动状态,那么我们的输出将是 111,它是 D7 的输出。为了克服这个问题,我们使用优先编码器。

当所有输入均为 0 时,会出现另一种歧义。在这种情况下,编码器输出 000,它实际上是 D0 活动的输出。为了避免这种情况,可以在输出中添加一个额外的位,称为有效位,当所有输入为 0 时为 0,否则为 1。

优先编码器 –
优先级编码器是一种编码器电路,其中输入具有优先级。当多个输入同时处于活动状态时,具有较高优先级的输入优先,并生成与其对应的输出。

让我们以 4 到 2 优先级编码器为例。
从真值表中,我们看到当所有输入都为 0 时,我们的 V 位或有效位为零,并且不使用输出。表中的 x 表示不关心条件,即它可能是 0 或 1。这里,D3 具有最高优先级,因此,无论其他输入如何,当 D3 为高时,输出必须为 11。并且D0 的优先级最低,因此只有当 D0 为高且其他输入线为低时,输出才会为 00。同样,D2 的优先级高于 D1 和 D0,但低于 D3,因此只有当 D2 为高且 D3 为低时(D0 和 D1 无关),输出才会为 010。

真值表——

D3 D2 D1 D0 X Y V
0 0 0 0 x x 0
0 0 0 1 0 0 1
0 0 1 x 0 1 1
0 1 x x 1 0 1
1 x x x 1 1 1

执行 –
可以清楚地看出,有效位为1的条件是至少有一个输入应该是高的。因此,

V = D0 + D1 + D2 + D3 

对于 X:

=> X = D2 + D3
对于 Y:

=> Y = D1 D2′ + D3

因此,优先级 4-to-2 编码器可以实现如下:

2. 解码器——
解码器完成与编码器相反的工作。它是一个组合电路,将 n 行输入转换为 2 n行输出。

让我们以 3 到 8 行解码器为例。

真值表——

X Y Z D0 D1 D2 D3 D4 D5 D6 D7
0 0 0 1 0 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 0 0
0 1 1 0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 1 0 0 0
1 0 1 0 0 0 0 0 1 0 0
1 1 0 0 0 0 0 0 0 1 0
1 1 1 0 0 0 0 0 0 0 1

执行 –
当 X = 0、Y = 0 和 Z = 0 时,D0 为高电平。因此,

D0 = X’ Y’ Z’ 

相似地,

D1 = X’ Y’ Z
D2 = X’ Y Z’
D3 = X’ Y Z
D4 = X Y’ Z’
D5 = X Y’ Z
D6 = X Y Z’
D7 = X Y Z 

因此,