端口地址是如何解码的?

How is the port address decoded?

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

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

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。
最低三位select输出行。

关于A、B、C的关系和输出,可以从一个道理开始table:

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 and since there are a lot of ones, working with Maxterms 绝对更好地对其进行优化。

例如,对于 Y0,公式为

Y0 = A + B + C

由于处理maxterms时的规则(它是和的乘积,如果输入变量为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 的真实 table 变为

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 and call (X * Y)' NAND you see that Y0 = NAND(E, A', B', C') which is exactly the implementation in the 74ALS138 datasheet:

感谢您的评论,帮助我将地址与输入地址映射的方式联系起来