zoukankan      html  css  js  c++  java
  • FPGA中的INOUT接口和高阻态

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

    1. 三态门

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

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

    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

    image

    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.

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

  • 相关阅读:
    ftp上传工具类&FTPClient通过代理连接到FTP服务器
    JS判断闰年与获取月份天数
    SpringBoot文件上传文件大小限制The field file exceeds its maximum permitted size of 1048576 bytes.
    JSON.parse解析json字符串包含 回车换行符报错
    JS解决加减乘除浮点类型丢失精度问题
    Mysql连接异常java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more than one time zone.
    Springboot基于Guava+自定义注解实现IP或自定义key限流 升级版
    Centos7设置默认进入图形界面和命令行界面
    第一节 RabbitMQ入门及安装
    第三节 Kafka性能优化实践
  • 原文地址:https://www.cnblogs.com/sea-wind/p/4924567.html
Copyright © 2011-2022 走看看