FPGA设计基础:Inout端口详解

  最近在把zedboard的项目工程搬到性能更好的器件上,除了改zynq核和相应管教外,还需要改几个inout端口和差分LVDS端口。本篇便对inout端口做一个小结。

FPGA设计中,大家常用的一般时input和output端口,且在vivado中默认为wire型。而inout端口,正如其名,即可以做输入,也可以做输出端口。其基础是一个三态门构建,由一个控制信号控制输入和输出。

FPGA设计——inout端口_三态门

用verilog描述为:


module three_state(
           din,
           ctr,
           dout        
);
input din,ctr;
ouput dout;

assign dout = (ctr)?1'bz:din;

endmodule1.2.3.4.5.6.7.8.9.10.11.

三态门表示存在高电平,低电平和高阻态三种状态,由control信号控制。也即inout端口(三态门)可以输出三种状态。当输出为高阻态时,可认为输出悬空,对下一级输入没有影响,或者说对接的下一级输入悬空(没有输入)。但是值得注意的是,上句话只是表明端口output属性是悬空的,其input属性还存在,可作为input端口来控制inout模块内部。

但是inout是如何在control的控制下切换输入输出的呢?先看看下面的代码。


//代码选自ad9361 no-os HDL,为ADI工程师编写module ad_iobuf ( 
  dio_t,
  dio_i,
  dio_o,
  dio_p);

  parameter     DATA_WIDTH = 1;

  input   [(DATA_WIDTH-1):0]  dio_t;
  input   [(DATA_WIDTH-1):0]  dio_i;
  output  [(DATA_WIDTH-1):0]  dio_o;
  inout   [(DATA_WIDTH-1):0]  dio_p;

  genvar n;
  generate
  for (n = 0; n < DATA_WIDTH; n = n + 1) begin: g_iobuf
  assign dio_o[n] = dio_p[n];
  assign dio_p[n] = (dio_t[n] == 1'b1) ? 1'bz : dio_i[n];
  end
  endgenerate

endmodule1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.
端口含义
dio_t视为control
dio_i视为din
dio_o视为dout
dio_p主角,控制端口方向

各端口含义如上表所示,该段代码含义为如果dio_t为高电平,dio_p=输入dio_i;也即dio_o = dio_i,此时为output属性;

当dio_t为低电平时,dio_p为高阻态,只有输入端口畅通,此时为input属性;注意了,此时output已经全为高阻态了,但是!inout端口,out虽然被阻了,in还是能用呀,dio_p可以被外界驱动,当成input端口,也即dio_o继续输出dio_p输入的值。

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空