不仅输入输出端口,FPGA中还有另一种端口称作inout端口。假如须要进行全双工通讯,是须要两条信道的,也就是说须要使用两个FPGA管脚和外部元件联接。并且,有时侯半双工通讯才能满足我们的要求,理论上来说只须要一条信道就足够了,而FPGA上实现这一功能的管脚就是inout端口。管脚相连时,input对应output,因而inout只能和inout联接(否则就不是inout了)。本文将概述FPGA的inout端口。
1.三态门
三态门,故名思议就是这个期间具有三种状态。对于数字电路来说,三种状态是高电平、低电平和高阻态。Xilinx的《XSTUserGuide》上给出了三态门的VerilogHDL(以及VHDL)的描述,具体如下:
#1:1:2:a:9:3:5:9:0:8:3:5:3:6:1:f:e:7:8:5:c:9:e:9:9:0:4:2:c:c:4:e#
#4:c:8:e:f:7:1:e:2:a:c:b:9:a:c:4:5:2:8:3:d:4:9:d:2:c:e:5:9:a:f:9#
复制
三态门意味着,输出端口不仅输出高、低电平之外还可以有第三种状态,这是inout端口实现的基础。
2.高阻和悬空
三态门中有一个状态是高阻。高阻,即可以觉得是没有输出,作为输出端口而言,对下级电路没有任何影响。悬空是针对输入端口来说的,也就是说没有接输入。这也就意味着,实际上高阻和悬空是一个状态,在HDL语言里都表示为Z。也就是说,一个输出端口在高阻态的时侯,其状态是因为其相连的其他电路决定的,可以将其看作是输入。
3.INOUT
从上一节内容中可以看出,当三态门的输出处于高阻状态的时侯,取值由外部电路决定,也就是说,这一时刻是可以作为输入。INOUT端口的描述和示意图如下
#1:0:2:c:a:c:a:9:6:8:b:4:3:9:4:0:3:4:f:0:a:5:8:0:4:1:8:7:3:d:c:d#
复制
#9:c:d:a:6:1:6:6:4:c:0:a:4:5:d:9:c:d:7:4:d:4:2:1:7:0:7:5:c:0:7:9#
4.PULLUP和PULLDOWN
假如两个INOUT都处于高阻态,这么接收到的讯号究竟是哪些状态呢?这实际上等效为两个INPUT端口联接,也就等效为INPUT端口悬空。
这应当是取决于外围的驱动,添加的上拉或则下拉阻值,通常而言,FPGA添加的是上拉内阻,也就意味着此时chipscope采集的数据是高电平.
FPGA管脚内部可以配置弱上拉或下拉内阻来实现Z状态下的控制。分别采用PULLUP和PULLDOWN约束实现,UCF、NCF句型如下
#4:c:c:a:1:c:e:b:0:a:6:f:2:c:7:f:e:f:4:2:4:3:c:7:e:f:4:e:9:e:2:b#
复制