电子说
串扰是芯片后端设计中非常普遍的现象,它会造成逻辑信号的预期之外的变化。消除串扰的影响是后端的一个重要课题。
首先,什么是串扰?它是如何产生的?芯片的信号线之间会存在耦合电容,因此一条信号线的变化会影响周围的线(信号线之间的耦合电感一般可以忽略)。
对于工程师来说了解这么多就可以了,不过这样的解释有点循环论证的感觉,因为耦合电容就是因为两端金属线互相影响而抽象出来的概念。
最根本的原因就是一条信号线的跳变会造成周围空间电磁场的变化,而变化的电磁场会在周围的导线感应出电流。
十几年前老的工艺可能还可以忽略寄生电容,现在的先进工艺下寄生电容已经到了万万不可忽略的地步了,不过对于电感好像还是不会过多考虑。
两段很近的导线发生串扰时,假设一段导线从0跳变为1,会影响另一段导线电势小幅上升一点,再回落下来。我们称产生跳变的导线为attacker,受影响的导线为victim,那一小段电势的变化称为glitch。
相应的,如果attacker从1变0,victim会有一个电势下降的glitch。如果这个glitch过大,就可能产生一个错误的逻辑信号出来,这个时候就发生了glitch的violation。
Attacker和victim的角色是可以互相转化的,一个victim在需要翻转的时候就成为了attacker,attacker信号保持不变的时候就是victim。如果两段信号线同时反转,他们就都既是attacker又是victim。
Glitch violation也是信号完整性(SI,signal integrity)violation的一种,SI据我所知也就只和crosstalk有关。
另一种情况,如果attacker和victim同时跳变,如果attacker和victim的跳变方向一致,比如说都从0变为1,victim受attacker的影响跳变速度会更快一些,也就是transition/slew time更小。注意这个时候两者都既是attacker也是victim,所以两根导线的transition都会变快。
相反地,如果attacker和victim跳变方向不同,transition会变慢。Transition的变化可能会产生timing的violation,这一类violation也可以说是由SI带来的。但是一般这种violation不如glitch来的严重。
一种比较严重的violation叫做DS(double switch),也是由于串扰带来的逻辑错误。
就是说attacker和victim同时跳变并且方向相反,假设attacker从1到0,victim从0到1,假设某个时刻victim已经过了逻辑1的电压阈值,后面的cell已经可以捕捉到信号1了,但之后由于crosstalk,victim的电势会有一个向下(逻辑0方向)的glitch。
而这个glitch可能导致后级cell捕捉到信号0,之后victim电势再升高为逻辑1,所以总的来说victim的信号传播就从0、1变为0、1、0、1.这就叫做double switch violation。
消除SI violation的方法还是要从绕线着手。第一就是加shielding net,就是在attacker旁边加一段地线,称为shielding,减弱attacker与victim的耦合电容。
一般的时钟trunk都会加一定比例的shielding。第二种就是把发生violation的两段shape分开,距离越远越好,具体做法可以把很直的一段shape让它拐一下,做个detour出来。
第三种就是把其中一个net换到另一层去,因为我们metal layer的preferred routing direction都是一层横的一层竖的,换层之后能有效减少耦合电容。
全部0条评论
快来发表一下你的评论吧 !