FPGA中的INOUT接口和高阻态

除了输入输出端口,FPGA中还有另外一种端口叫作inout端口。若是须要进行全双工通讯,是须要两条信道的,也就是说须要使用两个FPGA管脚和外部器件链接。可是,有时候半双工通讯就能知足咱们的要求,理论上来讲只须要一条信道就足够了,而FPGA上实现这一功能的管脚就是inout端口。管脚相连时,input对应output,所以inout只能和inout链接(不然就不是inout了)。本文将概述FPGA的inout端口。ide

1. 三态门

    三态门,故名思议就是这个期间具备三种状态。对于数字电路来讲,三种状态是高电平、低电平和高阻态。Xilinx的《XST User Guide》上给出了三态门的Verilog HDL(以及VHDL)的描述,具体以下:ui

clipboard

 1 // Tristate Description Using Concurrent Assignment
 2 
 3 // Combinatorial Always Block Can be Used too.
 4 
 5 module v_three_st_2 (T, I, O);
 6 
 7     input T, I;
 8 
 9     output O;
10 
11     assign O = (~T) ? I: 1’bZ;
12 
13 endmodule

   三态门意味着,输出端口除了输出高、低电平以外还能够有第三种状态,这是inout端口实现的基础。spa

2. 高阻和悬空

    三态门中有一个状态是高阻。高阻,便可以认为是没有输出,做为输出端口而言,对下级电路没有任何影响。悬空是针对输入端口来讲的,也就是说没有接输入。这也就意味着,实际上高阻和悬空是一个状态,在HDL语言里都表示为Z。code

    也就是说,一个输出端口在高阻态的时候,其状态是因为其相连的其余电路决定的,能够将其看做是输入。blog

3. INOUT

    从上一节内容中能够看出,当三态门的输出处于高阻状态的时候,取值由外部电路决定,也就是说,这一时刻是能够做为输入。INOUT端口的描述和示意图以下three

 1 module inout_def(clk,data_inout)
 2 input clk;
 3 inout data_inout;
 4 reg data_out; 
 5 reg data_out_control; 
 6 //define data_out
 7 
 8 //define data_out_control
 9 
10 //assign data_inout 
11 assign data_inout=data_out_control?data_out:1'bz;  
12 
13 //assign data_in
14 wire data_in;
15 assign data_in=(!data_out_control)&data_inout;
16 
17 endmodule

 

image

4. PULLUP和PULLDOWN

    若是两个INOUT都处于高阻态,那么接收到的信号究竟是什么状态呢?这实际上等效为两个INPUT端口链接,也就等效为INPUT端口悬空。    ip

    这应该是取决于外围的驱动,添加的上拉或者下拉电阻,通常而言,FPGA添加的是上拉电阻,也就意味着此时chipscope采集的数据是高电平.get

    FPGA管脚内部能够配置弱上拉或下拉电阻来实现Z状态下的控制。分别采用PULL UP和PULL DOWN约束实现,UCF、NCF语法以下input

1      NET "pad_net_name" PULLUP;
2 
3     //Configures the I/O to use a Pullup constraint.
4 
5      DEFAULT PULLUP = TRUE;
6 
7     //Configures the Pullup constraint to be used globally.

    这一部份内容有待进一步验证。it

相关文章
相关标签/搜索