我记得很早的时候读过一篇课文里面有一句话“看山是山,看山不是山,看山还是山”;这句话形容人从少年到中年到老年对世界认知随年龄和经历而变化。
作为类比,我把芯片工作的知识积累分为三个版本:场景感知、理论融合、复合认知。仅为个人思考记录,不具有任何实践意义。
场景感知
所谓的场景感知就是工程师初入实际工作场景,如少年初入社会,看到世间百态;此时认识的是一个具象的世界,但不能能系统性的思考背后运行的规律。
此时我们可能参与过一些项目,碰到了一个一个案例,并从周围环境中得到一个一个的解决方案,但此时我们并不同系统性的认识到这些问题为什么会发生,这些解决方案背后的原理是什么。
举个例子,我们修保持时间的时序违例时,在endpoint插buffer是通行做法,因为这样可以增加一级cell delay且不会影响除该path以外的其他path的时序。
理论融合
所谓理论融合就是工程师经历了一定的实践锻炼,积累了一些案例和场景,在脑海中建立了初步的工作框架,但是这些案例还是零散的点状的,此时我们会开始思考这些案例背后的原理,并试图将各种案例串联起来。此时就像人到中年,我们发现这个世界并不是具象的,很多东西免得模糊起来,我们试图拨云见雾,苦苦思索。
还是举一个插buffer修保持时间违例的例子,在第N次插buffer修保持时间为例时,我们就会思考:不同的违例大小该插哪一种buffer呢?standard cell的delay的计算方法是什么?修当前大小的保持时间违例对该path上的建立时间裕量要求是多少?
我们还会发现插buffer也可以修建立时间违例,背后的原理是合理的位置插buffer可以修max transition、修max fanout、修glitch和Cross talk,这些都能优化建立时间。
复合认知
复合认知就是经历了很多项目,很多场景,融汇了很多理论,对工作有了全面认知,突然豁然开朗。如人到老年,历经波折,尝遍人生疾苦,很多时候一眼就能洞悉事情本质。
例如一开始我对建立时间的理解就是数据路径要足够快;后来慢慢理解建立时间是由锁存器结构决定的,一个周期内要锁存一拍数据;再后来学习了流水线的知识后发现,硬件电路中的指令是并发执行的,一级流水就是一个周期内的要执行完一条指令。
写在最后
很多初学的同学(我自己也是)在学习芯片知识的初期往往会觉得愕然和恍惚,我认为这是合理的,不要灰心。我们行业的认知是建立在场景感知之上的,循序渐进的;要尽可能的接触实践,并在实践中建立健全自己的体系。