时钟glich在后仿

时钟glich在后仿本文针对时钟分频器配置为 2 分频或其他分频时产生 glitch 的问题进行了深入分析 并探讨了由此导致寄存器输出不定态的原因

大家好,欢迎来到IT知识分享网。

项目场景:

时钟分频器支持一分频,此一分频使用CKMUX产生,当divider配置为1时,分频器产生的时钟为输入时钟,否则为寄存器产生的时钟。

问题描述:

时钟分频器的divider默认为1分频,功能验证通过,当divider配置为2分频或者其它分频时,分频器的时钟会产生glitch。初始认为,glitch造成时钟驱动的寄存器的时序错误,即setuphold violation,导致寄存器的Q端输出为“x”态,导致仿真无法进行。后续debug发现,glitch时钟驱动的寄存器D端无数据变化,即一起保持不变,因此不存在采样数据错误的问题,什么导致不定态出现?

原因分析:

在后仿中,最常见的不定态,通常出现在几种情况:一种是,异步时钟之间的数据交互,主要体现在同步处理的datapath上,比如两拍延迟之中的第一拍,或者异步fifo的格雷码转换第一拍,这种通常的处理方法是异步处理的第一拍做notiming处理。另外一种是,同步电路中,出现的setuphold violation,引起寄存器采样错误,导致不定态出现。但是现在寄存器的D端并没有变化,因此没有setuphold问题。仔细看log,应该有类似“width”的violation log,此glitch驱动的寄存器才会出现不定态,寻找lib的相关地方,发现有PWM检查。因此正是glitch加在了寄存器的CK端,导致MPW的violation,因此寄存器输出为不定态。

在这里插入图片描述

解决方案:

首先,时钟上glitch是一种危险的行为,它可能导致后续所有fanout的寄存器处于一种不确定状态。使寄存器处于确定状态,最佳办法就是使寄存器处于(异步)复位状态,因此即使CK端出现glitch,复位仍然有效,寄存器状态仍然可控;或者在glitch发生之后,有足够时间复位此时钟fanout的所有寄存器。

其次,在glitch出现之前,在时钟之后的CG使能,即保证时钟不传递到寄存器,也可以解决。前提是CG在clk switch之后。

结论:

glitch除了引起频率变化导致setuphold violation之外,还有可能由于MPW的造成寄存器的不稳定。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/157380.html

(0)
上一篇 2025-02-06 15:33
下一篇 2025-02-06 15:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信