Adaptive retiming案例分析及Formality svf的解读和使用

文摘   2024-08-28 17:59   上海  

在用DC综合时,打开retime选项(compile_ultra -retime)可以进一步优化和均衡时序。如下图,打开retime后,最高频率从50Mhz提高到100Mhz。

图一

Adaptive retiming时,DFF可以向前移(forward,fanout endpoint方向),也可以向后移(backward,fanin endpoint方向)。

forward retiming

一个实际例子,模块B例化了4次,模块B的输出信号用DFF打拍输出。且4个信号在模块C中接到了4输入或门的输入端,如图二。

图二

对于这个逻辑,综合时工具进行了自动优化。把4个B模块的输出DFF移到了或门的前面(forward),且4个DFF合并成了一个新的DFF,如图三。

图三

查看DC的svf文件,有如下优化记录。可以看到或门的input I1~I4分别接到B模块的原DFF的逻辑处,输出O接到增加的DFF R_0。

guide_retiming \  -design { digital_top } \  -direction { forward } \  -libCell { OR4TDX1 } \  -input { I1:u_A/u_B_0/Error_reg } \   -input { I2:u_A/u_B_1/Error_reg } \   -input { I3:u_A/u_B_2/Error_reg } \   -input { I4:u_A/u_B_3/Error_reg } \  -output { O:u_A/u_C/R_0 } 

查看retime之后的网表,原u_A/u_B_*/Error_reg的4个dff已经不存在,新增了dff R_0。

Backward retiming

再来看一个backward retiming的例子。模块E的信号,拉到后面6个模块u_D_0~u_D_5里,这个信号在模块D里进行了打拍。

我们发现DC进行retime优化后,把打拍的动作挪到源头模块E中,打拍好的信号再用到后面u_D_0~u_D_5里。

从DC的svf也可以看出,在模块E中增加了DFF R_6,并把R_6的输出接到源u_A/u_D_*/en_out_d1_reg处。(查看网表发现原来的u_A/u_D_*/en_out_d1_reg 6个DFF已经被删除。

guide_retiming \  -design { digital_top } \  -direction { backward } \  -libCell { FM_FORK } \  -input { :__tmp__name___2 } \  -output { :u_A/u_D_0/en_out_d1_reg } \   -output { :u_A/u_D_1/en_out_d1_reg } \   -output { :u_A/u_D_2/en_out_d1_reg } \   -output { :u_A/u_D_3/en_out_d1_reg } \   -output { :u_A/u_D_4/en_out_d1_reg } \   -output { :u_A/u_D_5/en_out_d1_reg } 
guide_retiming \ -design { digital_top } \ -direction { backward } \ -libCell { FM_FORK } \ -input { :u_A/u_E/R_6 } \ -output { :__tmp__name___2 }

这段backward retiming可以用图四来描述。

图四

总结

从上面的分析来看,forward retming和backward retiming的DFF个数都发生了变化。从svf可以看出这些DFF优化的方法。其次,上面的案例中,retiming是跨模块的。再次,由于这两个案例中DFF是合并的,所以面积也会更小一些。

上一篇文章《什么是Adaptive retiming及LEC的原理和方法》中提到带retiming的综合的设计,在做逻辑等价性检查时需要识别retime的优化方法,再用sequencial LEC的方法来测试ref和imp电路。单就Formality来讲,需要读入dc产生的svf。从Formality的log来看,如图五,Formality读到了svf中的retiming指令并Accepted了。

图五


NanDigits
专注芯片功能ECO、逻辑等价性检查、网表调试、形式验证等技术的研究,及其设计自动化的实现。