罗风 · 4月8日

综合点聊:ungroup && boundary optimize

Ungroup跟Boundary optimize是逻辑综合最基本的两项『技术』,也是优化时序、面积、功耗最基本的两个手段。任何得到都需要有付出,这两货也不例外,因此有了trad-off,故而需要对其有足够的了解以做正确的决策。

微信图片_20210408110104.jpg

什么是Ungroup:

在逻辑综合星球,这个词儿的意思是:打破原有层次,重新构建新的层次。对于同步数字电路而言,对综合工具友好的优质RTL该具备的一个特点是:所有module的输出都经DFF后输出。

微信图片_20210408110124.png

然而实际设计由于种种原因,大部分module都是组合逻辑直接输出,甚至有些module只有组合逻辑,这样的逻辑会导致优化不充分,从而得不到最好的PPA,于是就有了ungroup这一方法。如今综合工具,默认都会做ungroup,都有变量留给用户来控制工具的默认行为,如Genus的auto\_ungroup,默认值是both,工具首先会做预估,如果对一个module做ungroup会得到更好的timing或area,则该module就会被ungroup掉,否则不会。

微信图片_20210408110134.png

Ungroup的影响:

形式验证是实现过程的监视官,来检测逻辑优化正确与否,某些情况下Ungroup会导致形式验证不过,尤其是当某个形式验证工具本身算法比较弱的时候。而近年工具端的算法都有长足的进步,如形式验证大神LEC,所以硅农不该墨守陈规。第一次迭代,让工具按默认方式去优化,再针对实际情况disable掉具体module的ungroup,不要一上来就把所有ungroup都关掉,会损失PPA。对DW/CW的ungroup更易引起形式验证失败,所以不论哪家工具,对DW/CW的ungroup都有单独的变量控制。在Genus里跟ungroup相关的变量跟命令:

微信图片_20210408110146.png

什么是boundary optimize:

在逻辑综合星球,这个词儿的意思是:边界及跨边界优化。如果不做boundary optimize, U1接0的输入pin不会被传播到U1内部,导致U1内部的逻辑不能充分优化。

微信图片_20210408110202.jpg

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相关的变量跟命令:

微信图片_20210408110216.png

另外,如果涉及到function ECO,不论ungroup还是boundary optimize都会给其带来麻烦。不成熟的小建议:

微信图片_20210408110218.jpg

作者:陌上风骑驴
来源:https://mp.weixin.qq.com/s/PxEazOGmAWye\_WmVTA368Q
作者微信公众号
捕获.PNG

相关文章推荐

更多IC设计技术干货请关注IC设计技术专栏。
2 阅读 395
推荐阅读
0 条评论
关注数
2368
内容数
585
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
Arm中国学堂公众号
关注Arm中国学堂
实时获取免费 Arm 教学资源信息
Arm中国招聘公众号
关注Arm中国招聘
实时获取 Arm 中国职位信息