Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2565674
  • 博文数量: 320
  • 博客积分: 9650
  • 博客等级: 中将
  • 技术积分: 3886
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 21:05
文章分类

全部博文(320)

文章存档

2024年(1)

2017年(5)

2016年(10)

2015年(3)

2014年(3)

2013年(10)

2012年(26)

2011年(67)

2010年(186)

2009年(9)

分类:

2010-07-01 15:35:15

原文转自:http://blog.chinaaet.com/detail/6415.html

有感于之前IIC通信中第一次使用verilog的inout端口,早就想写点什么。有些人可能会认为所谓的inout端 口FPGA会自己处理,你要它做INPUT的 时候从它读数据,你要它OUTPUT的时候给它赋值就行。问题可不是这么简单!

    我先送上一个表格吧,正好今天在一本书上看到了。这个表格表示 的是在同等驱动强度下,两个驱动源驱动的wire型和tri型 变量的真值表。

 

 

0

1

x

Z

0

0

x

X

0

1

 

1

X

1

X

X

X

X

X

Z

0

1

x

Z

 

   

 

 

 

 

 

 

发现问题了吧!如果某时刻inout口有输入,此时你又正好要拿这个inout口 做输出那么冲突是在所难免的,会出现什么样的结果可以参考上面的表。另外看这个表,你就应该明白双向口该怎么处理了吧。下面是一种典型的用法:

inout io_data;    //inout口

reg out_data;     //需要输出的数据

reg io_link;      //inout口方向控制

assign io_data = io_link ? out_data:1'bz;//这个是关键

    当inout的 口要做输入时,记得一定要把它置为高阻态z,此时你就可以把inout口 当作平常的input口用了。

阅读(1133) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~