如何解码端口地址?

时间:2017-12-27 05:18:21

标签: io x86 logic port hardware

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

I/O port decoder

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

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

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

1111 0xxx

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

例如,对于Y0,公式为

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

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

Y0 = A + B + C

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

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 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

如果您按De Morgan's laws考虑​​Y0 = E' + A + B + C并致电X + Y === (X' * Y')' NAND,您会看到(X * Y)'正好是74ALS138 datasheet中的实施:

74ALS138 implementation with NAND logic

Datasheet courtesy of Matt Clark

答案 2 :(得分:0)

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

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