端口的设计
0 L* a9 b, s6 s4 _1 k9 p% Q6 M 在I/0接口中,无条件输入端口和无条件输出端口是最基本的组成成分。当用中、小规模集成电路芯片组成接口时,无条件输入端口一般由三态缓冲器、地址译码器和负与逻辑所组成;无条件输出端口一般由寄存器(或锁存器)、地址译码器和负与逻辑所组成。当一个I/O接口含有多个端口时,其译码逻辑一般集中进行设计。设计无条件输入端口时,需要考虑的是三态缓冲器选通信号的产生;设计
- ~- s2 G0 T6 ~5 y7 U6 e无条件输出端口时,需要考虑的是寄存器控制信号(或锁存器锁存信号)的产生。实际上,前者是I/O读信号和地址译码信号的“负与”,后者是I/O写信号和地址译码信号的“负与”。
, S/ J0 h- \! }0 d7 N3 C9 D5 m
注意,这里所说的“负与”是一种逻辑关系,可以用物理的“负与门(即正或门)”实现,但也要注意技巧的运用。例如,要设计8个地址连续的字节型输出端口,需要用一片3线一8线译码器。可以用I/O写信号作为该译码器的一个允许信号,即把I/0写信号隐含在地址译码信号中,或者说“负与”已在地址译码器中实现,从而可节省8个“负与门”。
; [3 p$ U2 }" O; Z) i6 k" |5 V
需要指出,严格地说,锁存器和寄存器是有区别的。对锁存器来说,有一个输出跟随输入变化的阶段。以8282为例,跟随发生在锁存脉冲的高电平期间,一旦锁存脉冲的下降沿到来,该时刻输入端的值被锁存起来。目前用的寄存器大多数是由D型触发器所组成(如74LS273),它们没有跟随阶段,即在控制脉冲的上升沿到来之前输出不受输入变化的影响,在控制脉冲的上升沿到来时,该时刻输入端的值被送到寄存器中。因此,用锁存器和用寄存器构成输出端口是有区别的。以前面的图4.4为例,数据存放如果用锁存器8282,则负与门输出处的圆圈应去掉(不能再称之为负与门)。当三个条件(M/
6 Z! \+ P+ E7 q. A" M/ j
7 x8 C# Z7 ]* E+ D9 e7 e为低电平、地址译码输出有效、
" B- G/ a* Z' I: l
1 t. R2 I6 E# D8 s
为低电平)同时满足时,该门输出为一正脉冲。在正脉冲的高电平期间,8282为跟
7 ]6 s" j l7 u* v7 u随阶段。在正脉冲的下降沿(对应
9 s1 q% w1 S t: k# _2 v
1 E/ w9 h: N* P: [1 a, v- C
信号的后沿)到来之时,数据总线上的数据被锁存到8282中。如果在使用8282情况下,仍采用负与门,则当三个条件同时满足时负与门输出负脉冲,锁存将发生在负脉冲的前沿(对应
8 l' V3 |9 X% {7 \7 }
1 ~6 t, o# T. [& S信号的前沿)。此时,数据总线上的输出数据还未达到稳定状态,锁存的数据可能是错误的。