在做这个项目的过程中,IC君一直在反思,工作7年以来,为什么绝大部分的项目都很忙?每到tapeout的时候总是手忙脚乱?为什么有些项目出来的结果会失败?
《穷查理宝典》
巴菲特的搭档查理芒格认为凡事要反过来想:
“如果要明白人生如何得到幸福,首先是研究人生如何才能变得痛苦;要研究企业如何做强做大,首先研究企业是如何衰败的。”
要想做一个成功的项目,首先是研究如何做一个“失败”的IC项目。
这儿定义的失败,是指项目执行的过程很混乱,大家做得辛苦,但是最后出来芯片的bug却很多,甚至完全不能工作。
至于芯片生产出来之后,市场定位准不准确、好不好卖或者赚不赚钱不在我们的讨论之列。
我们IC的项目流程往往如下所示:
这个图的步骤分类比较粗犷,具体各部分的功能以前的文章也说过新入职IC工程师必备技能——数模混合篇。比较细致的流程可以参考之前的文章一个前端数字IC工程师的一天。下面就从这几个步骤探讨一下如何做一个“失败”的项目。
架构设计决定了一个芯片的功能和设计划分,是最重要的一环,它决定了我们以后的努力方向。如果努力的方向错了,做得越多,错的越多!
想把项目搞失败,这一步最容易。
比如项目执行的过程中,架构不停地变换,但是tapeout的日期没变:
本来想做高速芯片,后面突然想把功耗做到最低;
起初想做一颗很小的芯片,后面变成一颗很大的芯片,期间添加了无数的功能。tapeout前添加的功能最容易出问题哦!
某个中等模块的风险一开始没有评估充分,做到后面发现冒出来的bug越来越多。如果彻底解决需要改动很多block,最后只能修修补补;
对spec的理解发生错误,项目执行的中后期发现了这个问题,为了实现正确的spec需要改动很多电路;
没有正确评估封装的可行性,比如做到后面突然发现8SOP封装包不进去,pad位置需要大改,之前做的很多评估工作完全白做。
架构设计主要是在项目leader主导下完成,当然有些东西也不完全由leader决定,老板很多时候也会参与其中。有时候架构的变化是市场导致的,果断的改架构可能对公司而言是一个正确的决定。比如某段时间穿戴式产品的兴起,低功耗突然变成大家迫切需要的特性,对于speed不太那么care。
架构的改变对于IC工程师而言,只能接受并做出更多仿真来确保架构的改动是没问题的。不管是基于何种原因,频繁的改动架构是最容易导致项目失败的!
小模块的设计和仿真验证就是广大的IC工程师的工作内容,做好自己负责的部分。对于一个失败的项目而言,这一步的危害性相对于架构设计小很多。如果你想把项目做失败,可以通过以下方法来实现:
负责的模块经过自己评估之后,发现工作量巨大或者难度巨高,但是又希望完全通过自己的努力去完成它,默默的做了几个月而没有及时向leader highlight这些问题;
在没有搞清楚电路功能的情况下,随意修改继承项目的电路。以前的项目怎么做得这么笨啊,不行我要改改它,让它的gate数目少一点,面积更小prefect!
实现功能的时候没有想清楚各种意外case,只是简单的实现spec的功能;
时序检查的时候没有留下足够的margin,在post layout仿真的时候很容易出错;
有些模块可能要跑所有的工艺角,实际做的时候只跑了一个TT 工艺,后续芯片级验证的时候也不可能跑所有的工艺,有可能芯片的工艺稍微飘一飘就不能正常工作了。比如你做了一个RC的delay在TT工艺下是5ns,但是工艺飘一飘就到15ns了,有可能电路就fail了;
设计没有冗余,自认为将面积做到了最小。tapeout前期修改电路的时候根本没有gate让你用。这也是IC君容易犯的错误。
不遵守一些既定的设计规则。比如在电路综合的时候,不希望出现latch,必须遵守特定的RTL代码写法。
芯片仿真就是把所有模块都包含进来的仿真验证。通常整合之后,会发现很多小模块设计时没考虑的问题。这一步通常会有多位工程师参与,所以前一步的问题很多在这边能cover掉,项目想要失败似乎也没那么容易。
仿真环境和电路实际工作环境不match,不带dspf没有任何寄生效应,看起来工作的棒棒的,tapeout出来之后fail了;
行为模型编写错误,你看到的仿真行为根本和实际芯片不一致,验证结果很完美,实际结果没法看。这个危害真的挺大的;
由于芯片仿真也是由不同的人负责的,所以如果负责人没有按照既定的flow 验证一些该check的东西,遗漏了很多情况,就加大了失败的概率;
负责check的人不够资深,即使看到错误的仿真结果仍然发现不了问题;
仿真时间特别长,没有使用提高仿真速度的方法,做一次仿真需要很长时间,等你仿真结果出来黄花菜都凉了。如何避免这个问题,可以参考我们之前的文章如何减少IC设计和验证的仿真时间。
4
寄生参数仿真(layout后仿真)就是考虑实际的layout提取寄生参数后,进行的仿真。
这一步通常跟做第二步的是同一批的人,如果项目要做失败,可能是以下原因导致的:
根本就没有做寄生参数的仿真,前仿的时候电路的节点根本没有寄生的RC,仿真结果看起来特别好,但是layout有可能走了很长的金属线,有可能setup时间就违例了;
对抽取寄生参数的工具使用不当:比如使用calibre的工具去抽寄生参数,有很多option需要设置。有可能寄生结果的提取比实际layout过重或者过轻,导致仿真结果的不正确;
没有做layout检查,有些模块需要特殊的layout比如电流镜、bandgap、放大器等等;还有一些特殊的走线(特殊线宽),也需要做layout检查,以确保tapeout的版本跟你仿真的版本一致。
其它原因主要是指一些跟工厂相关的问题,以前的文章也提到过一部分聊一聊tapeout失败的事。这些问题通常都很严重,一招致命的类型:
mask给你出错了,少出了一层或者拿成前一版的;
某些器件用得好好的,突然建议你不要用了;
工厂产能不够,需要换工艺或者换工厂。
和PAD直接连接的电路不考虑ESD的问题
每家公司可能都有tapeout的checklist,tapeout前没有check这些规则,很可能就会fail。
我只想知道将来我会死在什么地方,这样我就不去那儿了。
由于个人知识有限,上面列举了一些项目失败的原因,大家还可以在微信文章或者知乎文章留言,IC君会对文章进行修改和补充。
最后希望大家在项目执行过程中不要犯这些错误,轻松愉快地流片成功!
上一篇:电源电路产生快速电流瞬变优化方法
下一篇:c代码如何转换成可以在硬件上运行程序
推荐阅读最新更新时间:2024-05-07 18:00