点论 | 很基很基的基本点

2019-05-30 14:36:15 浏览数 (2)

如何处理设计中的combinational loop?

通常,在同步设计中,combinational loop 跟latch 是两个要尽量避免的东西。但在设计初始阶段或在一些特殊设计中,combinational loop 是不可别避免的,比如随机数生成器。那如何处理combinational loop 呢?

1)combinational loop 在设计实现中的最大的影响是timing 分析,工具无法计算一个loop 的timing;

2)如果designer 没有用set_disable_timing 打断combinational loop ,优化工具如Genus 跟innovus都会自动插入loop breaker,再做优化;

3)如果是工具自动插入loop breaker,通常在log 中都会有对应的warning 信息,如Genus 会报TIM-2;

4)check_timing 会check 设计中是否有combinational loop,建议读入设计跟sdc 后run该命令进行check;工具通常也有报loop的命令,如Genus 中的report_loop;

5)根据check_timing的结果跟相关设计人员确认,如果是设计中一定要有的combinational loop 最好用set_disable_timing 设掉,如果是不期望的combinational loop 要让设计人员改代码;

6)STA 工具不会自动打断combinational loop,必须要用set_disable_timing 来打断,在STA中如果有combinational loop 而且loop 在clock path 上则会有各种奇怪的问题,如导致clock 传不到后面,通常clock path 上的combinational loop 都是代码问题。

某兄dei 补充

众所周知,为了潜在的ECO 需求,在设计中都会撒一些spare cell,那么spare cell 有哪些注意事项呢?

1)spare cell 的类型:spare cell 的功能应该齐全,如除了基本的buffer,inverter,and,nand,or,nor,还应包括可编程cell(Gate array),aoi,oai,xor,mux,scan flop等,而且每类cell 最好要有多种驱动能力;除此之外还应该有tie-H 跟tie-L 的cell;

2)spare cell 对面积的影响,spare cell 种类要齐全,但也不能对die 的面积有太大影响,通常spare cell 占比1%,最大不能超过2%;

3)通常老的设计,做ECO的可能性很小,但是对于那些新的设计需要做ECO的可能性极高,所以应该在有新设计的module 中撒更多的spare cell;

4)在一个合格的设计中,PR 后的netlist 中是不能有floating 的input的,所以要对spare cell的input 做处理,通常会tie 到0/1;如果是多电压域的设计,要注意input pin tie cell 的power domain;

5)要提前考虑,spare DFF 的clock 是否要做tree,是否要将其预先插到scan 链上;

6)如果是低功耗设计,还应包括spare isolation,level shifter 跟 retention cell;而且要考虑不同电压域所需要的工作于不同电压的std cell;

7)对于congestion 敏感的设计,在选spare cell的时候还应考虑是否对congestion 友好;

8)因为eco 改Metal1 通常很贵,所以最好选择place pin 在Metal2 以上的cell;

9)后端如何撒spare cell ,通常需要均匀分布,要考虑后续ECO的便利性,通常有distributed 跟clustered 两种。

0 人点赞