双向端口
来源:互联网 发布:大连理工大学网络连接 编辑:程序博客网 时间:2024/05/01 18:47
1. 双向端口简介
三态缓冲器也称三态门,其典型应用是双向端口,常用于双向数据总线的构建。在数字电路中,逻辑输出有两个正常态:低电平状态(逻辑0)和高电平状态(逻辑1),此外,电路还有不属于0和1的高阻态(逻辑Z)。所谓高阻,即输出端属于浮空状态,只有很小的漏电流流动,其电平随外部电平的高低而定,门电平放弃对输出电路的控制。或者可以理解为输出和电路是断开的。
在应用代码中,verilog HDL程序模块首先进行端口(input:输入端口;output:输出端口;inout:输入/输出端口)定义,然后是逻辑功能的描述。在verilog HDL中,output端口信号可以被定义为reg类型,并在always块中赋值使用,而inout端口不能被定义为reg类型,不能再always块中直接赋值使用,这一点与VHDL中的双向端口使用方法不同。
由于FPGA需要与外部存储器或CPU进行频繁的数据交换,以及引脚资源有限,使用双向端口设计可以成倍的节省数据引脚线。在设计中需要注意两点:其一,要用三态门的控制来处理实现双向端口;其二,要分别指定双向端口作为输入、输出端口时,对外部对象的数据操作。
2. 双向端口应用实例
1. 双向端口的verilog HDL描述
如果输入输出端口都是16位,那么总共需要32根数据线,使用双向端口,只需要16根数据线。实例:
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) beign if (!z) din_reg = din; else dout = dinout; endendmodule
模块示意图:
dinout为双向端口,即可作为输入端口,又可作为输出端口;
当 z = 0 时,三态门选通,从模块module_other_1 输出的数据 data 的流动方向为 I ---> I/O ,I/O 作为系统(module_top)的输出端口;(对于模块module_dinout,I 的类型是input,I/O的类型声明为inout,此时作为输出端口)
当 z = 1 时,三态门关闭,数据 data 的流动方向为 O <--- I/O ,data输入到模块module_other_2 中,供其使用,I/O 作为系统(module_top)的输入端口;(对于模块module_dinout,O 的类型是output,I/O的类型声明为inout,此时作为输入端口)
2. 双向端口的仿真
编写测试模块时,对于inout类型的端口,需要定义成wire类型,而其他输入端口定义为reg类型。此外,对于双向端口本身,仿真输出端口和输入端口的语法是不同的。
- 输出端口仿真
当作为输出端口时,不需要对其进行初始化,只要开通三态门即可。(代码略...)
- 输入端口仿真
当作为输入端口时,需要对其进行初始化赋值并关闭三态门。而如果直接把它跟一般的输入口一样直接初始化赋值,则会出错,因为它的定义是wire类型而不是reg类型。这里需要用到force命令。(代码略...)
- 双向端口
- VHDL 双向端口
- verilog双向端口的使用
- 笔记1:STC12单片机双向端口设置
- Inout双向端口信号处理方法
- Inout双向端口信号处理方法
- testbench——双向端口的仿真
- Verilog中双向端口inout的使用的总结
- 双向端口 (转自Qian得专栏)
- linux防火墙实现端口转发、端口映射及双向通路
- linux防火墙实现端口转发、端口映射及双向通路
- 关于8051单片机I/O端口的双向与准双向的分析
- GPIO输入输出各种模式(推挽、开漏、准双向端口)详解
- GPIO输入输出各种模式(推挽、开漏、准双向端口)详解
- tomcat多工程SSL双向认证的实现(每个端口对应一个工程,每个工程有各自双向的证书)
- 端口
- 端口
- 端口
- SAP批量维护数据
- wrong ELF class: ELFCLASS64
- poj 2418Hardwood Species
- VIM中配置winmanager显示NERDTree和TagList
- 编程之美3.7——队列中取最大值操作问题
- 双向端口
- discuz 搭建论坛
- C++11 理解 (九) 之 对象建构的改良
- [读书笔记]捉虫日记[A Bug Hunter's Diary]
- linux下安装nginx
- VC内存泄露检查工具:Visual Leak Detector
- C# 文件压缩与解压
- Linux系统信息查看命令大全
- operator const char*() const