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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6616|回复: 11

[求助] 请问有没有调过synopsys出的ip核 DW_APB_i2c的 大神呀

[复制链接]
发表于 2019-10-14 16:44:31 | 显示全部楼层 |阅读模式

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

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

x
最近在调这个DW_APB_i2c IP遇到了问题,有没有做过这个的同志一起交流一下啊,感谢
发表于 2019-10-15 10:27:00 | 显示全部楼层
说说你的问题?
 楼主| 发表于 2019-10-15 19:42:19 | 显示全部楼层


我是这样验证的,例化两个ip,一个master 一个slave(slave还没接上去)想着先配置master让他可以发出数据去,可是现在我配置都做好了,master就是没有输出。1.是不是必须master和slave都接到系统上才能有输出呢?

2.master和slave中间是有两根线的,怎么能把master和slave的信号接在SCL和SDA上呢?
发表于 2019-10-16 09:44:57 | 显示全部楼层
  是的,必须外接slave,接口上拉master才能工作起来,下面有例子参考
  wire SCL;
  wire SDA;
  pullup(SCL);
  pullup(SDA);

     assign SCL = (i2c_clk_oe == 1)? 0 : 1'bz;
     assign i2c_clk_in = SCL;

     assign SDA = (i2c_data_oe == 1)? 0 : 1'bz;
     assign i2c_data_in = SDA;

然后把SDA和SCL连接到slave即可
 楼主| 发表于 2019-10-17 22:17:47 | 显示全部楼层


dragontail 发表于 2019-10-16 09:44
是的,必须外接slave,接口上拉master才能工作起来,下面有例子参考
  wire SCL;
  wire SDA;


万分感谢!!! 哥我用了下面的代码,但是我把master和slave都接上去后 master的输入也就是你上面的i2c_clk_in波形本应该是低电平的时候是不定态,造成这种情况的原因我想了一下是不是因为master的ic_clk_oe为高电平1的时候输出了0,而scl是pullup高电平1,所以他们一起给ic_clk_in的时候造成了不定态  那遇到这种情况怎么该处理一下呢?  wire i2c_clk_in;
   wire i2c_clk_out;
   wire i2c_data_in;
   wire i2c_data_out;

   wire sda1;
   wire scl1;
   pullup (sda1);
   pullup (scl1);

   assign scl1 = (i2c_clk_out)? 0:1'bz;
   assign i2c_clk_in = scl1;

   assign sda1 = (i2c_data_out)? 0:1'bz;
   assign i2c_data_in = sda1;



 楼主| 发表于 2019-10-17 22:24:59 | 显示全部楼层


dragontail 发表于 2019-10-16 09:44
是的,必须外接slave,接口上拉master才能工作起来,下面有例子参考
  wire SCL;
  wire SDA;


万分感谢!!! 哥我用了下面的代码,但是我把master和slave都接上去后 master的输入也就是你上面的i2c_clk_in波形本应该是低电平的时候是不定态,造成这种情况的原因我想了一下是不是因为master的ic_clk_oe为高电平1的时候输出了0,而scl是pullup高电平1,所以他们一起给ic_clk_in的时候造成了不定态  那遇到这种情况怎么该处理一下呢?  wire i2c_clk_in;
   wire i2c_clk_out;
   wire i2c_data_in;
   wire i2c_data_out;

   wire sda1;
   wire scl1;
   pullup (sda1);
   pullup (scl1);

   assign scl1 = (i2c_clk_out)? 0:1'bz;
   assign i2c_clk_in = scl1;

   assign sda1 = (i2c_data_out)? 0:1'bz;
   assign i2c_data_in = sda1;



发表于 2019-10-24 19:07:13 | 显示全部楼层
i2c_clk_in这个信号应该是slave通过scl1送到master的,所以i2c_clk_in如果是不定态,那你就要找slave的问题。pullup本身不会对信号冲突造成影响,所以不用考虑pullup的问题。

在slave端,你也一样要做类似的三态控制  assign scl = scl_oe ? 1'bz : 1'b0;
希望你帮到你
发表于 2020-6-23 16:10:30 | 显示全部楼层
大哥,这个问题解决了吗?我现在也遇到同样的问题了
 楼主| 发表于 2020-7-16 22:51:55 | 显示全部楼层


记忆冬天 发表于 2020-6-23 16:10
大哥,这个问题解决了吗?我现在也遇到同样的问题了


解决了呀,你遇到什么问题啦?
发表于 2020-12-22 11:51:42 | 显示全部楼层

学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-30 21:33 , Processed in 0.026982 second(s), 6 queries , Gzip On, Redis On.

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