当前位置:   article > 正文

FPGA 双向口的使用及Verilog实现_双向数据总线实现时如何处理

双向数据总线实现时如何处理

FPGA的双向口在FPGA的设计应用中使用及其广泛,如I2C接口中的SDA,3线制的SPI接口中的数据线,传统控制总线中的数据总线,以及内存的访问DDR3/DDR4的数据总线等都是双向访问的。双向访问涉及到的概念比较多,如三态的概念,高阻的概念,输入、输出引脚合并,输入输出分时复用等概念,因此初学者往往比较迷惑,觉得无所适从,本文从底层基本原理入手,揭示双向口的机理,并用Verilog程序开发为例一步步引导大家如何使用双向口(inout)的使用与开发。

  1. 双向口涉及的基本模型
    • 三态门

为了描述方便,这里给两个命名tri0和tri1(tri是三态门(tri-state的缩略写法,其实在Verilog语法中有两个模型与之对应,分别为bufif0,bufif1。图1,2中的oe在传统的三总线结构中,通常对应OE(读)或WE(写)。

      • tri0

bufif0是三态门模型,其例化格式如下:

bufif0 tri0 (out, in, oe); //tri0是bufif0的例化名。

其电路形态形态如图1:

%title插图%num

图1 bufif0

在这两个模型中,oe端决定输出的形态,在tri0的模型中,如果oe为’0’, out就得到out0(out0是FPGA内部逻辑产生的值)的值,最终输出到端口PAD上。如果 oe为’1’,此时三态门的输出为高阻状态,在Verilog 描述中用’Z’表示,即三态门与外界是断开状态,如图2所示。

%title插图%num

图2

图1,2中的oe在传统的三总线结构中,通常对应OE(读)或WE(写)。

      • tri1

bufif1是另一种三态门模型,其例化格式如下:

bufif1 tri1 (out, in, oe); //tri1是bufif1的例化名。

其电路形态形态如图3:

%title插图%num

图3 buffif1

在这两个模型中,oe端决定输出的形态,在tri1的模型中,如果oe为’1’, out就得到out0(out0是FPGA内部逻辑产生的值)的值,最终输出到端口PAD上。如果 oe为’0’,此时三态门的输出为高阻状态,在Verilog 描述中用’Z’表示,即三态门与外界是断开状态,如图4所示。

%title插图%num

图4

图3,4中的oe在传统的三总线结构中,通常对应OE#(读)或WE#(写)。

  • 输入、输出在双向口合并

FPGA的I/O基本上都支持双向数据操作,但是由于对外输出端口只有一个,因此需要在端口处合并。

    • <
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/599776
推荐阅读
相关标签
  

闽ICP备14008679号