专栏首页瓜大三哥FPGA中的INOUT接口和高阻态

FPGA中的INOUT接口和高阻态

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

1. 三态门

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

 // Tristate Description Using Concurrent Assignment  // Combinatorial Always Block Can be Used too.  module v_three_st_2 (T, I, O);      input T, I;      output O;      ’bZ;  endmodule

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

2. 高阻和悬空

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

3. INOUT

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

 module inout_def(clk,data_inout) input clk; inout data_inout; reg data_out; reg data_out_control; //define data_out  //define data_out_control  //assign data_inout 'bz;  //assign data_in wire data_in; assign data_in=(!data_out_control)&data_inout;  endmodule

4. PULLUP和PULLDOWN

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

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

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

      NET "pad_net_name" PULLUP;      //Configures the I/O to use a Pullup constraint.       DEFAULT PULLUP = TRUE; //Configures the Pullup constraint to be used globally.

本文分享自微信公众号 - 瓜大三哥(xiguazai_tortoise),作者:米果不回来

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HLS Lesson4-例子

    动态空间分配是不可综合的,设计到操作系统层面是不可被综合的。 1.头文件 #define N 5 #include<iostream> using namesp...

    瓜大三哥
  • HLS Lesson15-for循环优化:其他方法

    例1: void for_merge(data_t a[N],data_t b[N],data_t c[N],data_t d[N]) { data_t x_a...

    瓜大三哥
  • FPGA设计技巧

    FPGA的用处比我们平时想象的用处更广泛,原因在于其中集成的模块种类更多,而不仅仅是原来的简单逻辑单元查找表(LUT)。而且还有一些其他资源,例如:

    瓜大三哥
  • FPGA中的INOUT接口和高阻态

    三态门,故名思议就是这个期间具有三种状态。对于数字电路来说,三种状态是高电平、低电平和高阻态。Xilinx的《XST User Guide》上给出了三态...

    sea-wind
  • 如何规避线性回归的陷阱(下)

    在上一部分中,我们学习了线性回归的概念和规避线性回归陷阱的前两个解决方案,今天我们继续学习剩余的两个方案。

    AiTechYun
  • BootstrapTable,选中某几行,获取其数据并进行后台处理。以及其他的属性使用。

    1、首先将复选框搞出来,<table data-single-select="true"> 属性,限制了只能单选。去除以后添加<th data-checkbox...

    别先生
  • 【BAT面试必会】如何在10亿数中找出前1000大的数

    小史:我可以用分治法,这有点类似快排中partition的操作。随机选一个数t,然后对整个数组进行partition,会得到两部分,前一部分的数都大于t,后一部...

    乔戈里
  • Python3 pandas read_csv 读取txt文件报错:IOError: Initializing from file failed

    错误代码: data=pd.read_csv(‘C:\Users\lenovo\Desktop\停用词文件\后缀词处理260\handle_data_01....

    学到老
  • Python3 pandas read_csv 读取txt文件报错:IOError: Initializing from file failed

    错误代码: data=pd.read_csv(‘C:\Users\lenovo\Desktop\停用词文件\后缀词处理260\handle_data_01....

    学到老
  • 【面试现场】如何在10亿数中找出前1000大的数

    小史:我可以用分治法,这有点类似快排中partition的操作。随机选一个数t,然后对整个数组进行partition,会得到两部分,前一部分的数都大于t,后一部...

    用户1260737

扫码关注云+社区

领取腾讯云代金券