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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7103|回复: 23

[讨论] 有关毛刺的问题

[复制链接]
发表于 2014-6-24 22:11:52 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lvdong19881008 于 2014-6-26 22:30 编辑




  1. [code]
  2. reg [9:0] waddr;
  3. reg [9:0] raddr ;
  4. reg [9:0]  waddr_lat;
  5. always @ (posedge clk80 or negedge rst1_n)
  6. if(!rst1_n)
  7. req <= 0;
  8. else if((waddr > raddr) & (waddr - raddr > 128))
  9. req <= 1;
  10. else
  11. req <= 0;

  12. always @ (posedge clk100 or negedge rst2_n)
  13. if(!rst2_n)
  14. waddr <= 10'b0;
  15. else
  16. waddr <= waddr_lat


复制代码

clk100  clk80 代表100M与80M时钟
      现在的出现的问题是,在chipscope中抓到的波形req总是很随机的无效(后果挺严重的)的起来一拍(有效的情况req是要大于1拍的),而且每次都是在waddr发生变化时,(此时raddr与waddr_lat不会发生变化),并且此时看到的(waddr > raddr) & (waddr - raddr > 128) 条件也不成立,所以我们就分析是在waddr变化时产生了毛刺(2进制编码),多位发生变化时,路径延迟不一致产生了一个满足(waddr > raddr) & (waddr - raddr > 128) 条件的waddr ,然后在经过比较器,减法器,与门,这根刺刚好被上升沿踩到,才会出现req无效起来的情况,请大家分析分析这种问题的定位对不对。
我的问题是: 1. 是不是所有的2进制地址在变化时都会出现这种情况?
                  2. 时钟沿正好踩到毛刺的现象常见么?是不是会有时序违例,还是说有很随机。
                  3.怎么解决这种问题?
      尝试了一种方法,将clk100下的waddr由同步器同步到了clk80下(但是我觉得这样只是避免了亚稳态,对消除这里的毛刺有作用么),再比较,结果还是会有,但是貌似错误的概率降低了一些,所以求助大家看怎么解决。不知道问题描述的大家有没有明白,不明白的就问我再补充,共同学习。






问题已经解决,给大家反馈一下
就是4,5楼两位说的,没有做同步处理,在慢时钟域正好踩到了快时钟域多位信号变化的时刻产生毛刺,造成后续电路出错
解决方法 开始采用2级同步器,这样还会出错,因为还是有可能踩到变化时刻,所以换了握手,问题解决,其实现在看来问题也不难,考虑的不全面,积累经验了。
楼下还有一些好人提到的一些方法我觉得都可以吧,只不过在这不适合用。
发散一下,问问还有那些情况会产生毛刺呢?还有那些方法解决毛刺呢?
求科普啊!~~~谢谢
发表于 2014-6-25 09:42:19 | 显示全部楼层
时序电路没有毛刺这个说法,应该是你同异步没处理好。
 楼主| 发表于 2014-6-25 10:08:28 | 显示全部楼层

标题

回复 2# wgej1987
    if判断条件里是组合逻辑,这里不会有毛刺么,现在的问题也总是出现在那里。
发表于 2014-6-25 10:10:09 | 显示全部楼层
看到两个问题:
第一就是((waddr > raddr) & (waddr - raddr > 128),只要 (waddr - raddr > 128不就行了吗
第二个就是异步问题,你的waddr是在clk100的时钟域,但它却在clk80的时钟域作为else if条件;就是说clk80的时钟有可能采到未稳定的waddr导致req出现毛刺。
发表于 2014-6-25 10:26:25 | 显示全部楼层
那个相当于寄存器前的组合逻辑,只是你这里的组合逻辑产生跟你的寄存器不是同一时钟域,才导致有问题,还是异步问题。说到底还是你跨时钟域没处理好
 楼主| 发表于 2014-6-25 10:47:23 | 显示全部楼层

标题

回复 4# haimo
    第一个问题其实还有一个waddr小于raddr的情况,这里我没有写出来,而且问题不会出现在那里,所以不能按你说的这样改。
    第二个问题把waddr经过同步器处理再做判断条件,但还是会有错,只不过概率下降了(按错误出现的频率来说),就算慢踩快有可能踩不到,但是不至于出错吧。是不是换种同步方式能好点呢?
发表于 2014-6-25 11:13:05 | 显示全部楼层
回复 6# lvdong19881008


    &->&&,128->10‘d128
raddr 是clk80下的?
 楼主| 发表于 2014-6-25 11:29:23 | 显示全部楼层
回复 5# wgej1987
    确实跨时钟域没有处理,但是要是单独把判断条件引一个组合逻辑输出,你说这个信号会不会有刺呢?
发表于 2014-6-25 11:34:54 | 显示全部楼层
在时序逻辑中,组合逻辑有毛刺没关系,只要采样的时候没采到毛刺就行了,而这个由你那个判断条件如果寄存器同步之后,静态时序分析会check是不是会采到毛刺,毛刺其实就是数据不稳定,变化有先后,timing满足的另一种意思就是能保证采样的时候数据都稳定,也就是这个时候毛刺过去了。
 楼主| 发表于 2014-6-25 12:06:38 | 显示全部楼层
回复 9# wgej1987
    这个我理解了,那是不是所有的2进制编码多位变化时,都有可能出线毛刺,只不过同步电路中不会踩到,而在跨时钟域时才会凸显出来,只要同步做好了,这个刺就不会被踩到,可以这样理解吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-6-5 00:24 , Processed in 0.026679 second(s), 9 queries , Gzip On, Redis On.

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