除了输入输出端口,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;

     assign O = (~T) ? I: ’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
assign data_inout=data_out_control?data_out:'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.

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

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

  1. FPGA内部信号避免高阻态

    RT,否则警告Warning: Tri-state node(s) do not directly drive top-level pin(s),会利用或门代替中间的扇出fan-out. 原因:在进行 ...

  2. gpio高阻态

    配置gpio为高阻态:将gpio设为GPIO_INPUT,GPIO_NO_PULL即可

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

    1.fpga没有用的的管脚一定要设置成高阻状态设置路径如下: Assignmen->Device->Device&Pin Option->Unused pins->As ...

  4. FPGA中逻辑复制

    copy from http://www.cnblogs.com/linjie-swust/archive/2012/03/27/FPGA_verilog.html 在FPGA设计中经常使用到逻辑复制 ...

  5. 【转】关于FPGA中建立时间和保持时间的探讨

      时钟是整个电路最重要.最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错:因而明确FPGA设计中决定系统时钟的因素,尽 ...

  6. FPGA中的除法运算及初识AXI总线

    FPGA中的硬件逻辑与软件程序的区别,相信大家在做除法运算时会有深入体会.硬件逻辑实现的除法运算会占用较多的资源,电路结构复杂,且通常无法在一个时钟周期内完成.因此FPGA实现除法运算并不是一个&qu ...

  7. 低成本FPGA中实现动态相位调整

    在FPGA中,动态相位调整(DPA)主要是实现LVDS接口接收时对时钟和数据通道的相位补偿,以达到正确接收的目的.ALTERA的高端FPGA,如STRATIX(r) 系列中自带有DPA电路,但低端的F ...

  8. C#中对IDisposable接口的理解

    http://blog.sina.com.cn/s/blog_8abeac5b01019u19.html C#中对IDisposable接口的理解 本人最近接触一个项目,在这个项目里面看到很多类实现了 ...

  9. FPGA中的时序分析(四)

    常用约束语句说明 关于Fmax      上述是实现Fmax的计算公式,clock skew delay的计算如下图, 就是两个时钟的差值.到头来,影响Fmax的值的大小就是组合逻辑,而Fmax是针对 ...

随机推荐

  1. oracle 分析函数的使用(1)

    LISTAGG(columnName,'拼接符') WITHIN GROUP(ORDER BY clause) --order by 子句决定拼接内容的顺序 LISTAGG(columnName,'' ...

  2. MySQL锁机制总结(二)

    前言: Mysql是一个支持插件式存储引擎的数据库系统,本文讨论的锁机制也主要包含两部分SERVER层的锁和存储引擎的锁,存储引擎是指innodb,其它存储引暂不讨论. 1. 数据库中锁相关的基本概念 ...

  3. 使用Source Safe for SQL Server解决数据库版本管理问题(转载)

    简介 在软件开发过程中,版本控制是一个广为人知的概念.因为一个项目可能会需要不同角色人员的参与,通过使用版本控制软件,可以使得项目中不同角色的人并行参与到项目当中.源代码控制使得代码可以存在多个版本, ...

  4. fopen()、 file_get_contents() 通过url获取链接内容

    功能:获得网页内容 区别如下: fopen()打开URL 下面是一个使用fopen()打开URL的例子: <?php $fh = fopen('http://www.baidu.com/', ' ...

  5. 【JavaScript】EasyUI框架的Dialog控件根据浏览器分辨率自动调节宽高

    序: 如果单独一个或几个Dialog控件修改成根据浏览器可视界面自动调整高.宽很容易仅仅是一个量变的过程,但如果大量页面都引入了Dialog控件,修改起来是一个很消耗体力的工作.所以接到任务后第一想法 ...

  6. JNA 如何 加载多个 存在依赖的 DLL 库

    JNA 的出现,极大的简化了原有的 JNI 技术.下面是JNA github地址:https://github.com/java-native-access/jna 1. 简单的一个例子: /** S ...

  7. openstack-kilo--issue(九) heat stacks topology中图形无法正常显示

    ======声明======= 欢迎转载:转载请注明出处 http://www.cnblogs.com/horizonli/p/6186581.html ==========环境=========== ...

  8. 将报表移动端集成到自有移动端app方法【IOS、Android】

    应用场景 用户有自己的app,希望把报表的移动端[本文中以FineReport移动端为例]功能集成到他们的app里面去,而不需要安装两个app.Android端和IOS端的集成接口是不一样的,下面我们 ...

  9. [转]js函数式变成之函数柯里化

    本文转自:https://segmentfault.com/a/1190000003733107 函数柯里化是指参数逐渐求值的过程. 我觉得它是:降低通用性,提高专用性. 通常,柯里化是这样的过程,“ ...

  10. 记一次惨痛的线上bug

    讲述背景,刚入职新公司2个月的时候,接手一个红包系统.资历尚浅,对业务也不是很熟悉.公司开发新的平台,需要使用红包功能来进行推广,按照产品的需求,进行开发...然而,问题就出在这里,红包接口比较陈旧, ...