一切烦恼的根源来源于执念,串扰和噪声则来源于电容两端电压差不能突变。串扰可以定义为一条Net电平变化导致邻近的net电平的波动。这种波动可能对受害Net的时序带来变化,甚至可能造成功能的错误。
在90nm,65nm及更先进工艺,串扰和噪声的影响越来越严重,主要原因还是在于绕线更密,频率更高,电压更低。
串扰
串扰是一直困扰着后端和EDA工具的一个问题。做过先进工艺的同仁应该深有体会,在Place和CTS阶段,时序已经优化得不错,但是Route之后,引入了Delta Delay,时序立即恶化,需要通过几轮Post-Route优化才能勉强恢复到Route之前的状态,即便如此,功耗和面积也会有很大牺牲。其原因在于Pre-Route阶段不存在真实的绕线,没办法精准预估绕线之间串扰的影响。
随着机器算力的快速增长,以及EDA公司在逐渐普及AI技术,老本相信这个问题应该最终会得到解决,因为AI的本质在于预测。通过不断地学习,建立在布局阶段去预测布线之后串扰的深度学习模型,从而能够在布局阶段相对精准地预测串扰将会带来的影响。或者更简单粗暴一点,仗着算力够用,在布局阶段就直接用Detail Route Based的Placer引擎。
PT进行SI分析需要特别注意以下SI相关命令是否正确:
...
#使能Crosstalk/SI分析
set si_enable_analysis true
#指定composite aggressor模式
set_app_var si_xtalk_composite_aggr_mode statistical
#指定victim和aggressor窗口对齐模式
set_app_var si_xtalk_delay_analysis_mode all_path_edges/all_path
...
#确保读入耦合电容寄生参数
read_parasitics -keep_capacitive_coupling ...
...
#在timing path中显示Delta Delay一栏信息
report_timing -crosstalk
窗口
时序窗口是指信号在通过不同的路径到达某条Net时,时间上有快有慢,最长路径延时和最短路径延迟之间的差值就是时序窗口的大小。如下图所示中,信号线A1, A2, A3和V都有各自的时序窗口。对于信号线V来说,A1, A2, A3都与之有重叠窗口(overlapping timing window),而A2和A3之前是没有重叠窗口的,A1和A3可以认为有部分重叠窗口。那么在计算信号线V的Delta Delay时,将其分成3个阶段:第1阶段,A1和A2同时对V造成影响,Delta Delay = 0.12 + 0.14 = 0.26;第2阶段,A1对V造成影响,Delta Delay = 0.14;第3阶段,A3对V造成影响,Delata Delay = 0.23。这种情况下,信号线V的Delta Delay取最差值0.26。
需要注意的是,上面考虑的Net之间是同步的情况下,如果两条Net相关的clock是异步的,处理的方式会有很大不同。假如是设成Async,那么计算Delta Delay采用的是无限时序窗口,考虑的是最悲观的可能情况;假如是设成Logic Exclusive,那么只有在有重叠窗口的情况下才去计算Delta Delay;假如设成Physical Exclusive,无需考虑串扰的影响,不计算Delta Delay。假如Net相关的clock设置成False Path,处理方式和Synchronous相同,所以在设置Clock异步关系时要特别小心。总结如下表:
CRPR对Delta Delay的处理
以上图中Path为例,在Clock Path的公共路径上如果有串扰造成的Delta Delay,这一部分Delta Delay会不会被CRPR机制影响,进而被取消呢?答案是:在计算Setup时,Delta Delay不会被CRPR影响;而在计算Hold时,Delta Delay会被CRPR影响。原因在于:
(1)计算Setup时,Launch Clock和Capture Clock采样一般发生在不同的时钟沿,所以Aggressor对两个时钟沿的影响是不同的,考虑到最差的情况,这部分的Delta Delay不能被取消。
(2)在计算Hold时,Launch Clock和Capture Clock采样一般发生在相同的时钟沿,Aggressor对两者的影响是一模一样的,既然在公共路径上,这一部分Delta Delay是可以通过CRPR机制取消的。
那么如何降低串扰的影响呢?从本文阐述可以看出,主要的方法还是隔离,例如Shielding和加大线间距等,另外一种有效的方式就是错开特定走线之间的时序窗口。
下回接着讲解串扰带来的另一个烦扰:“噪声”,敬请关注。