做集成电路设计,特别是高精度集成电路设计,版图太重要了。作为设计工程师,就有一次深受版图之害,一款高精度的电流输出型电流检测芯片,在passI做了各种各样的算法优化来弥补非线性,即便如此,在上市卖了三四年之后,一次工厂参数的细微调整还是让芯片的yield几乎为0,给客户供不上货。各种焦头烂额的算法调整勉强给客户供上货,同时紧锣密鼓的做了一次全监控的版图优化。改版头的芯片性能无比美好,无比坚强。
扯得有点远了,我们公司是设计主导的,版图性能差不是版图工程师的责任,要算在设计工程师的头上,算设计工程师监察不力。
作为设计工程师,除了在电路上加必要的版图要求备注,向版图工程师提出明确的设计要求,尽量抽出时间人肉看版图有无满足自己要求,可以借助的重要工具就是LPE仿真了。忽视LPE仿真的坑大大小小,五花八门。简单一点的,比如我的一颗芯片,一条通过几百uA电流的金属线的res parasitic带来了几个mV的VOL,最后改版时通过一条kelvin的地线满足了VOL的要求;再比如我和另外两位工程师合作的第一款chop芯片,不同金属层之间的cap parasitic(其实和我们DC-DC PCB 布线时那根和电感开关管连接的金属线减小面积的道理类似)吧一个几十uV的设计硬生生搞到了几个mV......总之,有策略的运用LPE工具,为我们的高性能设计保驾护航。
扯了这么多,终于言归正传了。LPE仿真的利器一方面是从版图方面屏蔽一些模块/连线的LPE抽取,或者只抽取可疑模块/连线的寄生参数,另一个利器就是Designer手动改网表,快速定位是哪些寄生参数导致性能恶化。在spectre的仿真环境中作LPE仿真,笔者改过寄生电阻导致的vOL问题,寄生电阻导致的运放的增益误差,寄生电容导致的CCIA电流检测器的增益和offset误差,几乎是所向披靡。
但最近的mixed signal项目,要改AMS的网表,笔者直接傻眼了。在ADE仿真器中view netlist, 找到netlist文件打开,大刀阔斧的改一通,点击“run simulation”(大家都知道这里不能是netlist and run simulation),然后发现.......发现改的内容被重新覆盖初始化了。小可不才,花了两天时间,尝试各种其他方案,最后还是发现AMS仿真要改的不是那个表面上的completeDesignInfo.ckt 网表文件,而是到inhl文件夹下根据library name, cell name一路找下去。ihnl下边的网表文件才是源头,.ckt只是在每次仿真时把ihnl下边的文件综合一下。
如同芯片debug,所有root cause已经figure out的问题都觉得很简单,身在其中时却总觉捉襟见肘。