inout用法浅析<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
有感于之前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口用了。
Hoki 2011-1-7 10:02
ilove314_323192455 2011-1-6 22:07
Hoki 2011-1-6 15:57
用户604763 2010-12-5 15:27
用户251222 2010-1-14 12:53
zhangshaobing517_935512703 2009-7-24 14:36