如何解码端口地址?

问题描述 投票:-1回答:3

根据下图,它表示输出端口来自F0-F7H。我的问题是这些端口地址是如何确定的?例如,F0(低电平有效)(Y0)是从输入A0-A7输入确定的?如果是这样,这些输入端口在数学上如何变为F0?

I/O port decoder

io x86 logic port hardware
3个回答
1
投票

74ALS138是一个1-8多路分离器,这意味着它需要一个0到7之间的数字,并激活其八条输出线之一(低电平有效)。

A,B和C输入信号是输入数字(23 = 8)的三位编码,而G1,GA和GB是使能信号。 要使芯片G1必须为高电平且GA和GB必须为低电平,任何其他组合都将禁用芯片(所有输出均为高电平)。

要使G1高,我们必须将地址的第4位置为高电平,类似地,第5位,第6位和第7位必须为高电平。 最后,第3位必须为低。

这给出了1111 0xxx形式的地址,范围从0f0h到0f7h。 最低的三位选择输出线。

关于A,B和C与输出之间的关系,您可以从真值表开始:

A B C    Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 
0 0 0    0  1  1  1  1  1  1  1
0 0 1    1  0  1  1  1  1  1  1
0 1 0    1  1  0  1  1  1  1  1   
0 1 1    1  1  1  0  1  1  1  1
1 0 0    1  1  1  1  0  1  1  1
1 0 1    1  1  1  1  1  0  1  1
1 1 0    1  1  1  1  1  1  0  1
1 1 1    1  1  1  1  1  1  1  0

每个输出Yi必须独立计算;因为它们中的每一个都只有零一次,所以没有必要用Karnaugh map来优化它,因为有很多,使用Maxterms绝对会更好。

因此,例如对于Y0,公式是

Y0 = A + B + C

由于处理maxterms时的规则(它是sum的乘积,如果输入变量为1,则每个因子都被否定)。 其他关系是

Y1 = A  + B  + C'
Y2 = A  + B' + C
Y3 = A  + B' + C'
Y4 = A' + B  + C
Y5 = A' + B  + C'
Y6 = A' + B' + C
Y7 = A' + B' + C'

这没有考虑使能输入,在内部我们可以通过取E = G1 * GA'* GB'来获得单个使能信号E然后Y0的真值表变为

E A B C    Y0
0 0 0 0    1
0 0 0 1    1
0 0 1 0    1 
0 0 1 1    1
0 1 0 0    1
0 1 0 1    1
0 1 1 0    1
0 1 1 1    1
1 0 0 0    0
1 0 0 1    1
1 0 1 0    1
1 0 1 1    1
1 1 0 0    1
1 1 0 1    1
1 1 1 0    1
1 1 1 1    1

这只是转换为Y0 = E' + A + B + C

如果你考虑X + Y === (X' * Y')'De Morgan's laws并打电话给(X * Y)' NAND你会看到Y0 = NAND(E, A', B', C')正是74ALS138 datasheet中的实现:

74ALS138 implementation with NAND logic

Datasheet courtesy of Matt Clark


1
投票

数据表中的表格似乎很清楚:如果A0,A1,A2和A3为低,A4,A5,A6和A7为高,则Y0有效。除了A0为高电平外,Y1在所有相同条件下都有效。


0
投票

Thanks for the comments to help me connect the dots in figuring out how the address is map to the input address

感谢您的评论,以帮助我连接点,找出地址如何映射到输入地址

© www.soinside.com 2019 - 2024. All rights reserved.