Ungroup跟Boundary optimize是逻辑综合最基本的两项『技术』,也是优化时序、面积、功耗最基本的两个手段。任何得到都需要有付出,这两货也不例外,因此有了trad-off,故而需要对其有足够的了解以做正确的决策。
什么是Ungroup:
在逻辑综合星球,这个词儿的意思是:打破原有层次,重新构建新的层次。对于同步数字电路而言,对综合工具友好的优质RTL该具备的一个特点是:所有module的输出都经DFF后输出。
然而实际设计由于种种原因,大部分module都是组合逻辑直接输出,甚至有些module只有组合逻辑,这样的逻辑会导致优化不充分,从而得不到最好的PPA,于是就有了ungroup这一方法。如今综合工具,默认都会做ungroup,都有变量留给用户来控制工具的默认行为,如Genus的auto\_ungroup,默认值是both,工具首先会做预估,如果对一个module做ungroup会得到更好的timing或area,则该module就会被ungroup掉,否则不会。
Ungroup的影响:
形式验证是实现过程的监视官,来检测逻辑优化正确与否,某些情况下Ungroup会导致形式验证不过,尤其是当某个形式验证工具本身算法比较弱的时候。而近年工具端的算法都有长足的进步,如形式验证大神LEC,所以硅农不该墨守陈规。第一次迭代,让工具按默认方式去优化,再针对实际情况disable掉具体module的ungroup,不要一上来就把所有ungroup都关掉,会损失PPA。对DW/CW的ungroup更易引起形式验证失败,所以不论哪家工具,对DW/CW的ungroup都有单独的变量控制。在Genus里跟ungroup相关的变量跟命令:
什么是boundary optimize:
在逻辑综合星球,这个词儿的意思是:边界及跨边界优化。如果不做boundary optimize, U1接0的输入pin不会被传播到U1内部,导致U1内部的逻辑不能充分优化。
boundary optimize都做啥:
Boundary optimzie跟ungroup都跟『层次』相关,相对于ungroup,boundray optimize在保留原有『层次』的前提下做如下优化:
- Constant propagation across hierarchies
- Removing undriven or unloaded logic connected
- Collapsing equal and opposite pins.
- Hierarchical pin inversion
- Rewiring of equivalent signals across hierarchy.
同样,在某些情况下boundary optimize也会导致形式验证不过,但要比ungroup的程度轻得多。做boundary optimize是综合工具的默认行为,工具都有一系列的变量控制,在Genus里跟boundary optimize相关的变量跟命令:
另外,如果涉及到function ECO,不论ungroup还是boundary optimize都会给其带来麻烦。不成熟的小建议:
作者:陌上风骑驴
来源:https://mp.weixin.qq.com/s/PxEazOGmAWye\_WmVTA368Q
作者微信公众号
相关文章推荐
更多IC设计技术干货请关注IC设计技术专栏。