在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 8096|回复: 9

[求助] 关于高阻态z的疑惑

[复制链接]
发表于 2015-2-5 17:24:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近在学习I2C协议,自己在编I2C模块的时候,想让其空闲时SCL与SDA全部为高阻态

仿真的结果的确是这样,但是在上板调试时,这些仿真为z的地方全部成了低电平,奇怪的是这个管脚我还有硬件的上拉

所以想请问下输出高阻态z在写代码有些什么要注意的地方么?
比如只能是inout口还是output也可以,然后wire reg之类有一些什么要求么?


谢谢~~~
发表于 2015-2-5 19:14:34 | 显示全部楼层
I2C在空闲状态时,master&slave的SDA PAD都为输入状态,没有信号驱动,此时SDA即表现为高阻态,如果外接上拉电阻,SDA应该为高电平。
IO PAD简单的赋值办法如下:



  1. assign pad = ~oen ? dout : 1'bz;
  2. assign din = pad;


复制代码
如果是单向口,根据IO方向,oen接固定电平即可。
 楼主| 发表于 2015-2-5 20:06:21 | 显示全部楼层
回复 2# rvnistelrooy


   嗯嗯,谢谢~~~
现在我很奇怪我仿真出来为高阻态,但是上板调试的时候变成了0 ,我明明板子硬件是上拉的。。。

我换了一个只输出1‘bz的程序,测试,的确上拉了。。。


所以我晕了o(╯□╰)o,不知道问题出在哪,的确按这种形式写的啊
发表于 2015-2-5 20:28:08 | 显示全部楼层
发表于 2015-2-5 22:05:06 | 显示全部楼层
记住一点,FPGA是固定的硬件,很多关键器件,不是你想怎么写,它就怎么综合,它一定要确认能够翻译为FPGA上某一种硬件,你写的RTL才算成功了,否则会出现意想不到的后果。。。
比如assign a = 1'bz;这种语句,等于没写,没有任何FPGA会把这句话当做“输出三态”,甚至有被优化掉的危险。
而标准的
assign b = tri? b_r : 1'bz;
则可以对应上FPGA端口上的三态门,于是就顺利对应上了你要功能。
所以写RTL语言是需要很多经验的,慢慢学吧,别着急。
发表于 2015-2-6 08:36:39 | 显示全部楼层
回复 5# glace12123

学习了
发表于 2015-2-6 09:39:45 | 显示全部楼层
是的。
 楼主| 发表于 2015-2-6 09:58:33 | 显示全部楼层
回复 5# glace12123


   谢谢!!!原来如此。。。我再改改代码试试
 楼主| 发表于 2015-9-6 20:04:45 | 显示全部楼层
这个问题后来有用其他方法解决了,在用三态门或者双向口的时候,可以直接用FPGA原语来写,这样就不会被综合掉了
发表于 2015-9-6 21:06:04 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 20:36 , Processed in 0.027590 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表