`
chrisongs
  • 浏览: 25959 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

双向端口应用实例

    博客分类:
  • FPGA
阅读更多
  三态缓冲器也称三态门,其典型应用是双向端口,常用于双向数据总线的构建。
  在Verilog HDL中,inout型双向端口信号不能被定义成reg型变量,因此在always块内不能被直接赋值使用。
  由于现在FPGA设计和外部存储器或CPU数据交换的频繁运用,以及引脚资源有限,使用双向端口设计可以成倍地节省数据引脚线,所以利用Verilog HDL实现双向端口至关重要。在设计双向端口时应注意亮点:其一,要用三态门的控制来处理实现双向端口;其二,要分别指定双向端口作为输出口和输入口时,对外部对象的数据操作。


下面是一个双向端口的Verilog HDL实例:
module InOut(din, clk, z, dout, dinout);
    input [7:0] din;
    input clk;
    input z;
    output [7:0] dout;
    inout [7:0] dinout;
	 
	 reg [7:0] dout, din_reg;
	 
	 assign dinout = din_reg;
	 
	 always @(posedge clk) begin
		if(!z)
			din_reg <= din;          // inout型双向端口信号不能被定义成reg型变量,因此在always块内不能被直接赋值使用
		else
			dout <= dinout;
	 end


endmodule

注意:z为三态门选通信号,当z=1时,把三态门置为高阻态,这时dinout作为输入口;当z=0时,开通三态门,dinout作为输出端口。

双向端口的仿真:
  编写测试模块时,对于inout类型的端口,需要定义成wire类型变量,而其他输入端口都定义成reg类型,这两者是有区别的。此外,对于双向端口本身,仿真其输出端口和输入端口的语法是不同的。


(1)输出端口特性仿真:当双向端口作为输出口时,不需要对其进行初始化,只要开通三态门即可。
`timescale 1ns/1ps

module tb_InOut;
	reg [7:0] din;
	reg 	  z;
	reg       clk;

	wire [7:0] dout;
	wire [7:0] dinout;

	integer i;

	InOut uut(
		.din(din),
		.z(z),
		.clk(clk),
		.dout(dout),
		.dinout(dinout)
	);

	always #5 clk = ~clk;

	initial begin
		din = 0;
		z = 0;
		clk = 0;
		#100 din = 10;
		for(i=0; i<10; i=i+1)
			#10 din = din + 1;
	end

endmodule

仿真图为:



(2)输入端口特性仿真:当双向端口dinout作为输入口时,需要对它进行初始化赋值并关闭三态门。而如果把它跟一般的输入口一样直接进行初始化赋值,则会出错,这是因为在定义它的时候是wire型的数据变量,而不是reg型数据变量。因此,这里需要用到force命令,以强制给dinout赋值。
`timescale 1ns/1ps

module tb_InOut_in;
	reg [7:0] din;
	reg       z;
	reg       clk;

	wire [7:0] dout;
	wire [7:0] dinout;

	integer i;

	InOut uut(
		.din(din),
		.z(z),
		.clk(clk),
		.dout(dout),
		.dinout(dinout)
	);

	always #5 clk = ~clk;

	initial begin
		z = 1;
		clk = 0;
		force dinout = 20;
		#100;
		for(i=0; i<10; i=i+1)
			#10 force dinout = dinout - 1;
	end


endmodule

不知道为何生不成仿真图,哥就是个杯具。。。
今晚P大又要搞镜湖之夜,哥看着喧闹的人群,却突然觉得好孤单啊~~
  • 大小: 5.9 KB
0
0
分享到:
评论

相关推荐

    上位机+虚拟串口+调试工具+Virtual Serial Port Driver Pro V11

    2.与实际端口相似的真实端口,使用虚拟端口的应用程序感受不到与实际端口的差异 3.通过该程序提供的DLL直接控制程序中创建的端口 4.将虚拟端口更快地连接到实际端口示例 5.在使用该程序时不需要实际串口 6.能够仅为...

    C#程序开发范例宝典(第2版).part08

    1.1 菜单应用实例 2 实例001 带历史信息的菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6...

    Python实现TCP/IP协议下的端口转发及重定向示例

    然后我们使用我们的forwarding.py,在80端口和8080端口中间建立两条通信管道用于双向通信。 此时,我们通过80端口访问我们的服务器。 浏览器得到: 然后,我们在forwarding.py的输出结果中可以看到浏览器和webpy...

    C#程序开发范例宝典(第2版).part13

    1.1 菜单应用实例 2 实例001 带历史信息的菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6...

    C#程序开发范例宝典(第2版).part02

    1.1 菜单应用实例 2 实例001 带历史信息的菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6...

    C#程序开发范例宝典(第2版).part12

    1.1 菜单应用实例 2 实例001 带历史信息的菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6...

    电源技术中的概述用USB端口为设备内置电池充电技术与应用

    即从USB电源总线的特性,包括电压,电流限制、连接器以及电缆连接等问题开始介绍,而后对镍氢电池(NiMH)和锂电池技术、充电方法以及充电终止技术与应用实例作分折。  关键词:USB端口 内置电池 集线器 充电终止...

    java编程基础,应用与实例

    5.12.2 实例块 84 5.13 巩固练习 85 第6章 数组 86 6.1 基本数据类型数组 86 6.2 一维数组的初始化 88 6.3 对象数组 88 6.4 二维数组 91 6.5 三维数组 95 6.6 巩固练习 97 第7章 对象与方法 ...

    verilog POC代码

    verilogHDL 的 poc代码,顶层CPU用波形模拟。测试完全通过。 特别注意 双向端口和三态门的应用。

Global site tag (gtag.js) - Google Analytics