zpalwaysyoung的个人空间 https://blog.eetop.cn/1505587 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

I2C协议IP debug记录(一)

热度 1已有 3406 次阅读| 2021-6-10 20:17 |系统分类:芯片设计| i2c, 跨时钟域

  今天作i2c模块master模式下的后仿真,明明是之前大佬们写好的已经量产的芯片代码,但是却出现了setup time violation,将网表对应的波形抓出来分析下,确实是setup time时间不满足,这就有点奇怪了。分析了一下,发现是i2c_reg模块中ahb_rdata_reg_[23:16]_违例了。将AHB总线信号抓出来查看波形,发现时序违例的点AHB并没有发起对i2c模块的读操作,通过查看源码发现i2c_reg模块中ahb_rdata的逻辑是这样描述的:

always@(posedge hclk or negedge rst_n)

  if(!rst_n)
    ahb_rdata <= 32'h0;
  else
  case(ahb_addr[7:2])
    6'd00:ahb_rdata <= #DLY regs_0x00 ;
    6'd01:ahb_rdata <= #DLY regs_0x04 ;
    6'd02:ahb_rdata <= #DLY regs_0x08 ;
    ...
  endcase

  ahb读数据的逻辑是只要ahb_addr地址满足译码的要求就更新ahb_rdata的数据,发现时序违例点的ahb_addr地址是6‘d00,也就是说和regs_0x00这个变量有关,继续追踪发现信号ahb_rdata[23:16]违例来自于i2c_rdata,i2c_rdata来自于i2c_shift_buff,i2c_shift_buff的时钟域是i2c协议子模块i2c_master的时钟clk_8m,该时钟与i2c_reg的时钟hclk是异步的,也就是说clk_8m时钟域的数据未经过同步就直接由另一个时钟采样,这样真的不会有问题吗?

  后面仔细分析了一下,i2c_shift_buff是master模块的移位寄存器,如果其数据还在发生变化则说明i2c还处在工作中,而本身电路的设计就是不允许软件在i2c还未完成传输前就去读取i2c_shift_buff的数据的,所以会在寄存器中定义pengding位,该位拉高则表示i2c完成了传输,随后还需要软件清除该pending,所以此处的数据虽然是跨时钟域传输,但在软件上的操作流程保证了其数据传输的稳定与安全。至于后仿真中出现的时序违例,在那些违例的时间点根本就没有ahb的读请求,所以总线上的数据是什么就无关紧要了。


点赞

发表评论 评论 (2 个评论)

回复 laotui 2021-6-15 21:34
不加false path吗
回复 zpalwaysyoung 2021-6-15 22:42
laotui: 不加false path吗
综合是leader做的,具体不知道咋弄的,我是后仿真发现了这点,只要确认了就没问题

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 4

    粉丝
  • 1

    好友
  • 9

    获赞
  • 5

    评论
  • 296

    访问数
关闭

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


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

GMT+8, 2024-11-23 19:54 , Processed in 0.024600 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部