简谈FPGA/Verilog中inout端口使用方法

描述

        大家好,又到了每日学习的时间了,今天我们来聊一聊FPGA/Verilog中inout端口使用方法。

       输入端口可以由wire/reg驱动,但输入端口只能是wire;输出端口可以使wire/reg类型,输出端口只能驱动wire;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型。用关键词inout声明一个双向端口, inout端口不能声明为reg类型,只能是wire类型;输入和双向端口不能声明为寄存器类型。

INOUT引脚:

1.FPGA IO在做输入时,可以用作高阻态,这就是所说的高阻输入;

2.FPGA IO在做输出时,则可以直接用来输入输出。

       芯片外部引脚很多都使用inout类型的,为的是节省管腿。就是一个端口同时做输入和输出。 inout在具体实现上一般用三态门来实现。三态门的第三个状态就是高阻'Z'。当inout端口不输出时,将三态门置高阻。这样信号就不会因为两端同时输出而出错了,更详细的内容可以搜索一下三态门tri-state的资料.
       
       1 使用inout类型数据,可以用如下写法:
       inout data;
       reg data_in;
       reg data_out;

       //data为输出时
       reg en_output;
       assign data_inout=en_output?data_out:1'bz;//en_output控制三态门
       //对于data_out,可以通过组合逻辑或者时序逻辑根据data对其赋值.通过控制en_output的高低电平,从而设置data是输出数据还是处于高阻态,如果处于高阻态,则此时当作输入端口使用.en_output可以通过相关电路来控制.

       2 编写测试模块时,对于inout类型的端口,需要定义成wire类型变量,而其它输入端口都定义成reg类型,这两者是有区别的.
       当上面例子中的data_inout用作输入时,需要赋值给data_inout,其余情况可以断开.

       此时可以用assign语句实现:assign data_inout=link?data_in_t:1'bz;

       其中的link ,data_in_t是reg类型变量,在测试模块中赋值.

       另外,可以设置一个输出端口观察data_inout用作输出的情况:
       Wire data_out;
       Assign data_out_t=(!link)?data_inout:1'bz;

       但要注意给data_inout赋值的时候,link选通信号如何给呢?

       首先测试文件给源文件的data_inout数据赋值,那只能在原INOUT数据为高阻态的时候才可以赋值,故link信号即该INOUT数据为高阻太时的控制信号。
       
       当不需要测试文件给你data_inout数据赋值的时候,测试文件的data_inout接口因为高阻态,从而不影响源文件data_inout接口的其他操作。

        今天就聊到这里,各位,加油。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
yuwenchenxuwh 2020-05-28
0 回复 举报
不会写就别乱抄袭,你自己看看你的信号名定义对不对。写的什么玩意,也拿出来丢人。 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分