首页 百科知识 三态门及总线缓冲器

三态门及总线缓冲器

时间:2024-10-10 百科知识 版权反馈
【摘要】:引入三态门有许多实际的应用,如CPU设计中的数据和地址总线的构成,RAM或堆栈的数据端口的设计等。在设计中,如果用STD_LOGIC数据类型Z对一个变量赋值,即引入三态门,并在控制下可使其输出呈高组态,这就等效于使三态门禁止输出。例6.12是一个8位三态控制门电路的描述,当使能控制信号为1时,8位数据输出;为0时输出呈高阻态。

6.1.7 三态门及总线缓冲器

引入三态门有许多实际的应用,如CPU设计中的数据和地址总线的构成,RAM或堆栈的数据端口的设计等。在设计中,如果用STD_LOGIC数据类型Z对一个变量赋值,即引入三态门,并在控制下可使其输出呈高组态,这就等效于使三态门禁止输出。

1)三态门电路

所谓三态门,就是具有高电平、低电平和高阻抗三种输出状态的门电路。

【例6.11】

img338

img339

例6.11的仿真波形如图6.12所示。当EN为1时,把DIN赋值给DOUT;当EN为0时,DOUT输出为高阻态‘Z’ 。

img340

图6.12 例6.11的仿真波形

一般地,可以首先将某信号定义为STD_LOGIC数据类型,将Z赋给这个变量来获得三态控制门电路,一个Z表示一个逻辑位。但应注意,由于Z在综合中是一个不确定的值,不同的综合器可能会给出不同的结果,因而对于VHDL综合前的行为仿真与综合后的功能仿真结果也可能是不同的。因此有时虽然能通过综合,但却不能获得正确的时序仿真结果,建议尽可能不要将Z用作比较值、表达式或操作数。另外,虽然VHDL语法规定不区分关键词的大小写,但当把表示高阻态的‘Z’值赋给一个数据类型为STD_LOGIC的变量或信号时,Z必须是大写,这是因为在IEEE库数据类型STD_LOGIC的预定义中已经将高阻态定为大写Z。

2)单向总线驱动器

例6.12是一个8位三态控制门电路的描述,当使能控制信号为1时,8位数据输出;为0时输出呈高阻态。语句中用高阻态数据“ZZZZZZZZ”给输出端口赋值,其仿真波形如图6.13所示。

【例6.12】

img341

img342

img343

图6.13 例6.12仿真结果

3)双向端口设计

用INOUT模式设计双向端口与三态端口的设计十分相似,都必须考虑端口的三态控制,这是由于双向端口在完成输入功能时,必须使原来呈输出模式的端口呈高阻态。

下面比较例6.13和例6.14两个双向端口的VHDL设计实例。

【例6.13】

img344

【例6.14】

img345

img346

例6.13和例6.14都将q定义为双向端口,将x定义为三态控制输出口。它们的区别仅在于:例6.13利用q的输入功能将q端口的数据读入并传输给x时,没有将q端口设置成高阻态输出。图6.14是例6.13的仿真波形,当control为0时,x无法得到正确的输出结果。这是因为,表面上看其中的IF语句是一个完整的条件语句,但这仅对x而言的;对q并非如此,q只在control为1时执行赋值命令,为0时没有给出q的操作说明。例6.14情况就不同了,例中增加了语句q<=“ZZZZZZZZ”,使q在IF语句中有了完整的条件描述,从而克服了时序元件的引入;另外在q履行输入功能时,将其设定为高组态输出,使q成为真正的双向端口。从仿真波形图6.15可见,无论control为1或0,q和x都能得到正确的输出结果。

img347

图6.14 例6.13的仿真波形

img348

图6.15 例6.14的仿真波形

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈