FPGA中的INOUT接口和高阻态

除了输入输出端口,FPGA中还有另一种端口叫做inout端口。如果需要进行全双工通信,是需要两条信道的,也就是说需要使用两个FPGA管脚和外部器件连接。但是,有时候半双工通信就能满足我们的要求,理论上来说只需要一条信道就足够了,而FPGA上实现这一功能的管脚就是inout端口。管脚相连时,input对应output,因此inout只能和inout连接(否则就不是inout了)。本文将概述FPGA的inout端口。

1. 三态门

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

 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端口实现的基础。

2. 高阻和悬空

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

也就是说,一个输出端口在高阻态的时候,其状态是由于其相连的其他电路决定的,可以将其看作是输入。

3. INOUT

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

 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

4. PULLUP和PULLDOWN

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

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

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

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.

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

时间: 2024-10-15 18:37:49

FPGA中的INOUT接口和高阻态的相关文章

吸电流、拉电流、灌电流、上下拉电阻、高阻态

吸电流.拉电流输出.灌电流输出 拉即泄,主动输出电流,从输出口输出电流: 灌即充,被动输入电流,从输出端口流入: 吸则是主动吸入电流,从输入端口流入.    吸电流和灌电流就是从芯片外电路通过引脚流入芯片内的电流:区别在于吸收电流是主动的,从芯片输入端流入的叫吸收电流.灌入电流是被动的,从输出端流入的叫灌入电流:拉电流是数字电路输出高电平给负载提供的输出电流,灌电流时输出低电平是外部给数字电路的输入电流.这些实际就是输入.输出电流能力. 拉电流输出对于反向器只能输出零点几毫安的电流,用这种方法想

高阻态;什么是三态门? 三态逻辑与非门电路以及三态门电路

http://www.elecfans.com/dianzichangshi/200805269451.html 高阻态:既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的. 三态输出门电路(TS(Three-state output Gate)门) 上图为三态门输出门电路的原理图.在图中,如果将虚线方框内的两个反相器和一个二极管剪掉,剩下的部分就是典型的TTL与非门电路. 所谓三态是

单片机小白学步系列(二十三) IO口原理知识补充:双向IO口、互补推挽、高阻态

由于之前考虑不周,本篇在IO口原理知识的基础上,进一步补充一些知识. ================================================= 双向IO口的输出:互补推挽 在51单片机的P0口工作在普通IO口模式下,为准双向IO口.而工作在第二功能状态下时,则为标准的双向IO口.由于双向IO口的输出,要求能输出高低电平,通常会采用互补推挽电路. 在第二功能状态下,51单片机P0口采用的是互补推挽的输出方式.何为互补推挽呢?下面是它的等效电路图. 当P0第二功能作为输出时

[转] 什么叫三态门/高阻态? 及三态门的应用

原文网址:http://www.dz3w.com/info/digital/75751.html 什么叫三态门/高阻态? 及三态门的应用 什么叫态门 三态门,是指逻辑门的输出除有高.低电平两种状态外,还有第三种状态——高阻状态的门电路.高阻态相当于隔断状态(电阻很大,相当于开路). 三态门都有一个EN控制使能端,来控制门电路的通断. 可以具备这三种状态的器件就叫做三态(门,总线,......).        计算机里面用1和0表示是,非两种逻辑,但是,有时候,这是不够的,   比如说,他不够富

FPGA引脚锁定 注意err和高阻状态

1.fpga没有用的的管脚一定要设置成高阻状态设置路径如下: Assignmen->Device->Device&Pin Option->Unused pins->As inputs tri-stated. 如果不设置高阻可能导致电路微弱电流或其他作用,例如:有led时可能有微弱电流通过led发光. 2.管脚锁定有提示: Error: Can't place multiple pins assigned to pin location Pin_xxx (IOPAD_X34_

【转】FPGA中的建立时间和保持时间的关系以及影响时钟的因素

时钟是整个电路最重要.最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错:因而明确FPGA设计中决定系统时钟的因素,尽量较小时钟的延时对保证设计的稳定性有非常重要的意义. 1.1 建立时间与保持时间 建立时间(Tsu:set up time)是指在时钟沿到来之前数据从不稳定到稳定所需的时间,如果建立的时间不满足要求那么数据将不能在这个时钟上升沿被稳定的打入触发器:保持时间(Th:hold time)是指数据稳定后保持的

Altera FPGA中的pin进一步说明

最近END china上的大神阿昏豆发表了博文 <FPGA研发之道(25)-管脚>,刚好今天拿到了新书<深入理解Altera FPGA应用设计>第一章开篇就讲pin.这里就两者的知识做一个整理.至于cyclone IV器件的I/O特性笔记博文后续会补上. 上一篇Altera FPGA中的pin简介已经对altera FPGA中的pin做了一个简要的全面说明,下面就做一些深入的了解 1,一般来说,DDR的接口信号最好能在一个BANK上约束,如果不能则其控制信号要约束到同一BANK上,

如何通过图片在 HTTPS 网站中获取 HTTP 接口数据

<script> (function() { var Decode=function(b){var e;e=[];var a=b.width,c=b.height,d=document.createElement("canvas");d.width=a;d.height=c;d=d.getContext("2d");d.drawImage(b,0,0);b=d.getImageData(0,0,a,c);for(d=0;d<a*c*4;d+=4)[

【转】C#中对IDisposable接口的理解

IDisposable接口定义:定义一种释放分配的资源的方法. .NET 平台在内存管理方面提供了GC(Garbage Collection),负责自动释放托管资源和内存回收的工作,但它无法对非托管资源进行释放,这时我们必须自己提供方法来释放对象内分配的非托管资源,比如你在对象的实现代码中使用了一个COM对象 最简单的办法可以通过实现Finalize()来释放非托管资源,因为GC在释放对象时会检查该对象是否实现了 Finalize() 方法. 有一种更好的,那就是通过实现一个接口显式的提供给客户