1、双向端口简介

实现双向端口的典型方法是三态缓冲器也称三态门,它常用于双向数据总线的构建。在数字电路中,逻辑输出有两个正常态:低电平状态(对应逻辑0)和高电平状态(对应逻辑1);此外,电路还有不属于0和1状态的高阻态(对应逻辑Z  )。所谓高阻,即输出端属于浮空状态,只有很小的漏电流流动,其电平随外部电平高低而定,门电平放弃对输出电路的控制。或者可以理解为输出与电路是断开的。最基本的三态缓冲器的逻辑符号如下图:

当OE为高电平时,Dataout与Datain相连;而OE为低时,Dataout为高阻态,相当于与Datain之间的连线断开。

在应用代码中,Verilog HDL程序模块首先要进行I/O端口(input:输入端口;output:输出端口;inout:双向端口,同时具有输入输出功能的端口)的定义,然后是逻辑功能的描述。在Verilog HDL中,output端口可以定义为寄存器型变量,并在always块内可以被赋值使用,而inout型双向端口信号不能被定义为寄存器型变量,因此在always块内不能直接被赋值。

由于现在FPGA设计和外部存储器或CPU数据交换的频繁运用,以及引脚资源有限,使用双向端口设计可以成倍地节省数据引脚线,所以利用Verilog HDL实现双向端口至关重要。在设计双向端口时应注意两点:其一,要用三态门的控制来处理实现双向端口;其二,要分别指定双向端口作为输出口和输入口时,其外部对象的数据操作。

2、双向端口应用实例

实例假设输入输出数据的位宽为8,使用双向端口设计,需要8根数据线。

例:双向端口的Verilog实例。

module dinout(din,z,clk,dout,dinout)input [7:0] din;input z;input clk;output [7:0] dout;inout [7:0] dinout;reg [7:0] dout;reg [7:0] din_reg;assign dinout = (!z)?din_reg:8’bz;always @(posedge clk)beginif(!z)din_reg=din;elsedout=dinout;end
endmodule

程序在ISE中综合后的RTL级结构图如下图所示。dinout定义为双向端口,即可作为输入端口,又可作为输出端口;当双向端口dinout作为输出口时,从输入端口din输入数据到模块中,让数据从dinout端口输出;当双向端口dinout作为输入口时,数据从dinout口输入,从输出端口dout输出。z为三态门选通信号,当z=1时,三态门置于高阻态,这是dinout作为输入口;当z=0时,开通三态门,dinout作为输出端口。

3、双向端口的仿真

编写测试模块时,对于inout类型的端口,与输出端口一样,需要定义成wire类型的变量,而输入端口定义为reg类型,这两者是有区别的。此外,对于双向端口本身,仿真其输出端口和输入端口的语法是不同的。下面分别给出上例中双向端口的输入、输出特性仿真。

(一)双向端口作为输出端口时仿真

当双向端口作为输出口时,不需要对其进行初始化,只要开通三态门即可。输出端口特性仿真代码如下所示。假设在100ns后,让数据10-20依次从din口输入,然后用10ns的采样时钟从双向端口dinout输出。

module tb_doutreg [7:0] din;reg z;reg clk;wire [7:0] dout;wire [7:0] dinout;integer i;dinout uut(.din(din),.z(z),.clk(clk),.dout(dout),.dinout(dinout));always #5 clk = ~clk;initialbegindin=0;z=0;clk=0;#100 din=10;for(i=0;i<10;i=i+1)#10 din=din+1;end
endmoudle

(二)双向端口作为输入端口时仿真

当双向端口dinout作为输入口时,需要对它进行初始化赋值并关闭三态门。而如果把它跟一般的输入口一样直接初始化赋值,则会出错,这是因为在定义它的时候是wire型的数据变量,而不是reg型数据类型。因此,这里需要用到force命令,用来强制给dinout赋值。同样,下面给出一个Verilog HDL仿真实例,设定在100ns后,让数据20-10从dinout口输入模块,然后用10ns的采样时钟从输出口dout输出。

module tb_dinreg [7:0] din;reg z;reg clk;wire [7:0] dout;wire [7:0] dinout;integer i;dinout uut(.din(din),.z(z),.clk(clk),.dout(dout),.dinout(dinout));always #5 clk = ~clk;initialbeginz=1;clk=0;force dinout = 20;#100#100 din=10;for(i=0;i<10;i=i+1)#10 dinout=dinout-1;end
endmoudle

参考文件:

《Verilog HDL程序设计与实践(云创工作室)》

Verilog 双向端口相关推荐

  1. 通俗易懂的带你解读inout双向端口【Verilog高级教程】

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  2. 双向端口inout端口

    verilog里如何处理io成双向 在查阅了各种书和帖子之后,总结了以下inout端口的使用注意事项. (以下资料来源: <Xilinx FPGA开发实用教程 第二版> https://w ...

  3. 三态门三个状态vhdl_[转帖]INOUT双向端口仿真 三态门构成 三态门原理 三态门仿真...

    INOUT双向端口仿真 三态门构成 三态门原理 三态门仿真 (2010-04-10 00:17:54) HDL语言的INOUT双向端口仿真暨三态门仿真 ------VHDL和VerilogHDL 概述 ...

  4. 6.Inout双向端口信号处理方法

    Verilog中inout端口的使用方法 (本文中所有Verilog描述仅为展示inout端口的用法,实际描述则需要更丰富的功能描述) Inout端口的使用 在芯片中为了管脚复用,很多管脚都是双向的, ...

  5. verilog 双向口使用

    芯 片外部引脚很多都使用inout类型的,为的是节省管腿.一般信号线用做总线等双向数据传输的时候就要用到INOUT类型了.就是一个端口同时做输入和输 出. inout在具体实现上一般用三态门来实现.三 ...

  6. Verilog——双向IO口的FPGA实现

    双向IO口的FPGA实现 双向IO口的Verilog试验 主要功能 模块代码 仿真代码 仿真结果 双向IO口的Verilog试验 主要功能 为深入理解双向端口的使用,进行本仿真试验,完成一个类似可修改 ...

  7. GPIO输入输出各种模式(推挽、开漏、准双向端口)详解---重点双向开漏端口

    GPIO输入输出各种模式(推挽.开漏.准双向端口)详解 原创techexchangeischeap 发布于2017-05-20 10:31:31 阅读数 62961  收藏 展开 技术交流是便宜的博客 ...

  8. GPIO输入输出各种模式(推挽、开漏、准双向端口)详解【转】

    转自:http://blog.csdn.net/techexchangeischeap/article/details/72569999 技术交流是便宜的博客地址:http://blog.csdn.n ...

  9. Verilog inout端口使用详解

    理解 来源特权同学-https://www.eefocus.com/ilove314/blog/11-09/231507_10e01.htmlinout用法浅析有感于之前IIC通信中第一次使用veri ...

最新文章

  1. 批量新建文件夹并命名_dos命令实现批量新建文件夹
  2. ASP.NET连接带密码Access的方法
  3. 【设计模式】分类和定义
  4. HBase之CMS GC调优
  5. android update sdk --no-ui,CircleCI Android constraintLayout不起作用
  6. 哪些手机搭载鸿蒙,鸿蒙2.0搭载手机吗-有什么功能
  7. 四种浏览器对 clientHeight、offsetHeight、scrollHeight、clientWidth、offsetWidth 和 scrollWidth 的解释差异...
  8. JAVA面向对象OOP→继承extends、构造方法super、方法重写override、样例代码
  9. 非常流行的版本管理工具Tower for Mac
  10. android jar包下载地址
  11. 有哪些好用的云盘软件?2022不限速云盘网盘推荐
  12. 用Python实现简单的服务器【新手必学】
  13. 高通MSM8937芯片参考资料免费下载
  14. 毕业设计php做个人网站,个人网站的设计与实现
  15. QQ音乐首页静态页面练习
  16. 计算机在手机找不到了怎么办,手机找不到了怎么办 手机找不到了找回方法
  17. idea安装zookeeper(zoolytic)可视化管理插件
  18. 9月20日云栖精选夜读:异构计算高性能计算分论坛——揭秘拿什么实现超算平民化、国际化?
  19. TaefTestParser, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
  20. Oracle中的PLsql的符号解释大全

热门文章

  1. python泊松分布公式和期望_当λ很大时泊松分布如何计算?
  2. 【搜狐驾校】手动更安全 如何换档最合理
  3. UC浏览器的抓包分析
  4. 1052 Linked List Sorting (25 分)
  5. Python往图片写入文字,插入图片的方法
  6. ASP.NET程序中常用代码汇总-1[转]
  7. java ffmpeg 转码
  8. python操作word——python-docx和python-docx-template模块
  9. MurmurHash3_最详细的介绍
  10. SNAP计算哨兵二号的叶面积指数(LAI)