越熟悉的东西越不知从何下笔,总觉得就那一眼东西,没什么可写的,想试一下按照每一步要检查的东西或debug 时候常需要看的东西写一下,简单基础但是重要。
相比STA 或P&R, 综合表面看似简单,其实涉及到的步骤跟算法要比前两者繁杂艰难得多。STA 考虑的因素再多,也只是一个分析工具,只需要根据已有的东西做计算即可,所有逻辑优化工具都比分析工具复杂。
而相对于P&R, 综合需要将设计从RTL 级转化到gate 级,在转化过程中:
而且整个过程都需要在Performance, Power, Area 三者之间做『竞选』,如功耗优化对实现工程师可见的是:clock gating insertion, operator isolation, multibit merging, Multi-VT leakage optimize, dynamic power optimize, retiming等。在整个过程中,只要有一步做得不够不好,就得重头再来。
对于综合而言,结果的好坏基本取决于三个因素:
综合流程可以粗暴地划分为如下几步:
从综合流程看,首先读入的是library, 所以要求硅农对library 十分了解,这可以避免许多不必要的问题。额外提及一点,在读lib 时如果要用search path 就明确指定,工具都有默认的search path, 老驴一直以为这种默认search path 就是卖给老年人的保健品,不仅无用还有害。
在开始做综合之前,强烈推荐去解读跟分析library, 老驴就当下想到的点列一些,望请驴友补充:
上述各点,大部分可以从library 中直接读出,对于每个类型cell 不同VT 不同size 间的PPA 对比,过去在工具端没有直接命令的时候需要借助脚本去分析,如今工具会有对应的命令,如在Genus 或Joules 中用命令:report_libcells 可以报出指定cell 的相关信息,如下图报了某工艺下在输入transition 跟输出load 相同时,二输入与非门不同VT 跟不同size 的一些属性,从该report 可以一目了然delay, leakage, internal power 等信息。
也可以借助工具画一些更直观的图出来,如下是在load 一定时,第一副图是cell delay 跟输入transition 之间的关系图,第二幅图是internal power 跟输入transition 的关系图。
老驴以为,所有数字实现端的硅农都需要对library 有清晰且准确的认知,这样才能更明确用哪些cell 穿成的项链挂到你的脖子上才更美丽。
最后,祝大家健康!