我这边ADS /Cadence PDK基本大部分都是自学完成的。

当然也非常感谢我的前同事周**的帮忙,教了我很多基础的。另外也感谢我现在同事,李**和程*的帮忙,学习了很多cad的视角。

其实对于自学写PDK的小伙伴,一般都要如何学习呢?

我总结了我几次完成的学习流程:(以cadence PDK为例)

  1. 首先,自学最重要的是一个成就感的搭建,所以需要先确定以PCell为起点去编写结构。并且,需要了解一下,pdk的所有代码文件的结构是什么。
  2. 对于cadence来说,首先学会如pcDenfinePCell写一个矩形就行了,这样就跑通一个流程了。
  3. 学习skill的语法,将如何设置变量,如何输入输出,如何判断,如何循环,以及一些数据转换的函数,了解完之后就对skil有个大概的了解了。
  4. 试着将矩形组合不同的层结构,搭建一些简单的图形。这个时候看看via、圆形、弧形、多边形、path线用哪些函数?
  5. 学会根据简单的参数,写一个基础的cdf参数。这个时候,可以dump一下别家pdk的cdf的参数,去抄一下别人的面板。
  6. 在cdf的基础上,写一个简单的callback回调。用encrypt的方式,得到一个解码的lie文件,可以查看一下别人写callback的逻辑。并且,理解callback和cdf与pcell之间的关系。
  7. 修改cdf面板中仿真的部分,增加netlist的部分进入cell中
  8. 看看能不能修改libInit去自动载入脚本
  9. 学习一下如何encode代码,然后用libInit去兼容
  10. 怎么增加sch,ivpcell,等等仿真器的设置,以及界面的设置,各种调用设置
  11. 这个时候,可以开始学习DRC的部分,主要是了解单层的规则,比如同层间距,宽度,密度的相关函数;以及双层的规则,如enc、异层间距、内接、外接等等规则函数。
  12. 之后看看别家的PDK中的DRC,了解DRC工具间不同的语法,大概的通用结构,然后确定自己的语法结构和规则。之后,试着复现一下别家的DRC文件。
  13. 而后可以了解LVS的规则,都有哪些识别Pin的,哪些是器件识别结构定义的,不同的器件之间又是如何区分的用什么层结构区分的,哪些结构上不能放哪些结构的等等
  14. 之后看别家的LVS规则,照着抄一遍,就知道别人在面对一些规则问题的处理手法。
  15. 学习别家的文档体系的构成,都有哪些种类的文件,分别是起到什么作用的,各自又有什么区别。试着自己确定一个文档的格式,并且按照自己的格式,将自己pdk的一些内容整理上去。
  16. 直接去做某一家业界一线在用pdk的复刻版本,基本上大部分问题你就都能自我学会了。

以veriloga为例,其实和学习pdk的步骤是差不多的,最重要几个节点就是必须了解清楚需要做的东西的结构,使用的工具的语法,然后试着用软件跑通一个编译的流程后,接着去做一些小东西,之后再查阅一些基础功能集合,再去想办法搜集一些资料,帮助自己继续自学,了解透彻handbook上的函数,之后再进行深入的case编写,一边写一边学。

自学的流程其实都差不多的,不过需要时间和毅力去做这个事情,也要相信自己一定可以做成。

(对于垃圾人的pua可以不用管,因为用pua的人本身就是弱者,这种弱者并不仅仅是能力上的,更是意识上的。对所有自学的人来说,什么都不可怕,最怕就是不相信自己,心气一丢,万事皆休。)

我曾经学习电路的时候,摸爬滚打,遇到了一堆的坎坷,也没人跟我讲如何设计,出现了一些我觉得有问题的设计方法,我自己不知道问题出在哪里,感觉自己设计的时候没有章法。然后就被煞笔领导pua过,觉得我学的很慢,但是问他问题他又不给你教导,所以我就在错误的道路上越走越远。

为了摆脱这种局面,我后来找了一堆的研究生毕业文献,专门找那些逻辑讲得清晰详细的,将哪些只会放几个书上公式和各种不靠谱图片的垃圾文献都丢了,然后专门抽空去过了一遍基础课。我原以为自己会用非常长的时间,原计划是三个月。但是,后来我发现开始做起来,就没那么难了。

学习基础课的时间大概两个礼拜就完成了,需要真正学会的东西不太多。一边做一边消化。

最后发现,垃圾领导给我指的方向是错的。难怪我前面几个月一直走弯路到怀疑人生,感觉自己效率low到爆炸。

从那以后我就知道了,大部分人甚至是领导可能都没有我专业,甚至还要防备领导把自己带错方向。从那以后,我把畏惧心放下来了,开始相信自己的判断,质疑领导的判断,结果发现自己的路几乎都是走的正确的,连判断都是正确的。

应该说,从真正相信自己的那一刻起,我就几乎没有做出过错误的决策。

学习也是如此,心不静的话,书在面前也学不会,其实,我发现真正的捷径都在那些你非常害怕并且觉得头皮发麻,疯狂说不行,不可能的地方。

把上面的小任务当成十个项目目标,3-4天一个小目标,1-2个月内基本就能直接写出pdk了。

如果卡壳了(卡壳是很正常的),大概要摸爬滚打了解各种边角的知识,抓住框架是什么,才能继续下去,没有人引导的时候,最长我卡过半年。每个人都会卡壳,我也不例外,要学会面对卡壳,就像面对工程难题一样。

习惯于挑战难题,并相信自己能够挑战难题是优秀工程师的基础素质,所以就从学习这件小事开始做起吧。