高校如何快速培养EDA研发人员

1.EDA高校科研如何与产业结合?
我在大学本科期间从事EDA开发大约有1年半的时间 , 是从1992年底到1994年本科毕业 , 主要从事的方向是:寄生参数提取的二维场求解器 。从1994年到1999年初 , 攻读博士4年半期间主要从事的研发工作是寄生参数提取的三维场求解器领域 。在高校从事EDA软件研发的时间合计6年 。
我们实验室当时的研发与工业界的联系比较紧密 , 做出的EDA软件比较接近实用化 。我们在学校研发中大约有一半的时间是在调试工业界的实用化例子 , 需要不停地优化和修改程序 , 满足工业界的需求 。当时产品原型开发出来后 , 给EDA公司试用 , 经过其测试效果不错 。后来我们实验室基于该软件与EDA公司签署了合作协议 。由于我当时还是学生 , 对商业协议不太理解 , 就记得对一个数字耿耿于怀 , 即:我们实验室研发出来的寄生参数提取工具软件 , 嵌入该EDA公司的流程进行销售 , 协议中规定 , 产品销售的2%给我们学校 , 其余的98%归EDA公司 。当时不太理解:为什么我们辛辛苦苦研发只能得到2%的收益?
事后我在工业界从事多年 , 才逐渐理解到:这个协议是一个很好的产学研利益捆绑的协议 。其中软件销售提成的比例并不重要 , 重要的是把学校和EDA公司进行了很好的利益捆绑 , 学校只有把软件产品做得很好 , 才能获得销售提成 , 这些经费可以支持学校继续进行深入研发 。
反观国内一些常见的高校与公司合作模式 , 一般是EDA公司提供研发经费后 , 高校把软件产品原型提供给EDA公司 , 但是后续的支持和服务都由EDA公司来做 。由于EDA公司对高校开发的软件产品细节不是很了解 , 客户的需求很难及时满足 , 导致高校的研发成果逐步淡化 , 不再被工业界接受 。
如果是软件销售提成的模式 , 由于EDA公司销售额越高 , 高校的提成额也越高 , 因此当软件产品遇到问题需要优化和修改时 , 高校就会很积极去响应EDA公司的需求 , 继续进行实用化完善 , 满足工业界需求 , 从而推动高校的科研成果转化 。
因此 , 把EDA公司与高校的关系从甲方、乙方的博弈关系转变为利益捆绑关系 , 是促进国内EDA高校研发产业化的重要举措 。利益捆绑有两种途径:第一是销售提成模式 , 第二是股权合作模式 。
最近我们在股权合作模式方面有一个新的探索 , 2019年我们公司入股一家新成立的EDA公司 , 该公司是专门从事寄生参数提取软件研发的公司 , 其中高校的知识产权入股大约三分之一左右 。高校把其寄生参数提取最新研究成果的知识产权全部注入到该公司 。公司成立后 , 在进行大量例子测试中发现的软件问题 , 高校总是会提供及时的修改和优化 , 满足工具快速迭代开发的需求 。这其中很重要的原因是:由于股权的利益捆绑 , 高校有很大的动力从产品实用化中获得利益 。如果采用双方签署劳务合同的模式 , 则由于很难界定软件中bug的责任 , 公司与高校就会陷于争执中 , 无法进行高效的合作 。
总结:国内高校从事EDA科研的单位应该立足于与产业结合 , 把核心算法尽量产业化 , 产业化的思路是:与国内EDA公司合作进行软件销售提成合作或者股权作价入股 。不建议采用高校一次性把源程序卖给EDA公司的模式 。
不过 , 目前国内从事EDA研发的高校大多数还是以学术研究为主 , 没有把产业化作为其研发的主要目标 , 这个现状对国内EDA产业的总体发展有一定影响 , 需要国内高校研究人员进一步思考 。
2.EDA研发长期坚持的重要性
1999年高校毕业后 , 我加入了国内一家从事EDA软件研发的公司 。从1999年到2009年 , 我在该公司从事EDA研发10年 。这期间 , 公司研发人员徘徊在二三十人 , 开发的核心产品有6个:
Layout Editor(版图编辑工具) , 
Schematic Editor(原理图编辑工具) , 
DRC (版图设计规则检查) , 
LVS(版图与原理图一致性比较) , 
PE(寄生参数提取工具) , 
Verilog-AMS仿真工具(后扩展为spice仿真工具) 。
我主要从事DRC/LVS/PE的3个产品开发 。
以上6个工具可以归纳为3项核心技术 , 即:
1.版图处理技术(应用产品是当时开发的通用Layout Editor , 超大规模Layout Editor , DRC工具 , LVS工具)2.RC提取技术(应用产品是当时开发的PE准三维提取工具)3.电路仿真技术(应用产品是当时开发的Verilog-AMS工具和spice仿真工具) 。
事实上 , 以上3个核心技术不仅在1999年到2009年是公司的EDA核心算法 , 也是公司从1986年成立以来不断投入多年研发出来的最关键技术 , 同时还是公司2009后产品更新换代不断升级的技术基础 。这3个核心技术可以说奠定了公司EDA的基础 。
从公司EDA具体产品开发的时间长度分析 , 层次式(hierarchical)版图DRC工具和LVS工具从2002年就开始进行研发 , 一致持续到2020年产品不断升级换代 , 前后持续了18年 。如果把层次式的定语去掉 ,  基于打散(flatten)的DRC工具和LVS工具的技术研发可以更早追溯到1995年左右 , 该项技术的积累长达25年以上 。从这个时间跨度数据 , 我们可以看到 , 要开发一项EDA的核心产品 , 不是短短的几年时间就可以一蹴而就的 , 需要长达十几年的技术积累与迭代进步 。
公司的另外一个产品寄生参数提取工具是从1999年就开始开发的 , 如果要追溯该项技术的最原始出处 , 是清华大学从1991年开始就进行寄生参数提取的基础技术研究 , 后来初步进行产品实用化研究 。可见 , 该项技术也有长达二十多年的技术积累 。
另外一项技术spice仿真技术最早源于Verilog-AMS的仿真工具研发 , 从2003年起进行研发队伍的组建和原型的开发 , 一直持续进行与仿真相关的算法的研究和改进 。曾经有一段时间 , 也有部分人员觉得该项目很难盈利 , 是否要放弃该项目了?我们最终还是坚持把这个技术保留下来 , 其中促使我下决心一定要把它坚持下来的一个原因是:有一次与一个重要客户交流 , 客户说:spice仿真是模拟电路中一个十分fundamental的技术 , 如果缺了spice 仿真 , 对全流程不利 。从上面分析可以看到 , 公司在spice仿真方面的积累从2003年算起 , 也有接近20年的历史了 。
我在该公司的10年中(1999年到2009年) , 当时几个产品在商业上还不太成功 。不太成功的标志是:无法与主流EDA工具进行正面竞争 , 在功能和性能上有差距 。当时国内EDA产业的环境与目前差别很大 , 当时的现状是:做出的EDA工具必须比主流EDA工具要好 , 并且要明显地好 , 才可能有市场空间 。而目前国内EDA产业的现状是:首先解决EDA工具的有无问题 , 其次再解决好与更好的问题 。相对来讲 , 目前国内EDA产业的需求对EDA公司的商业化成功更加友好 。有时候 , 我甚至猜想:如果把今天国内EDA产业环境提前10年 , 也许我们当年开发EDA就不会那么痛苦了 。
由于在技术上与国外主流EDA工具有差距 , 因此当时我们的EDA业务在商业上很困难 , 产品很难销售 。当时我们EDA业务的参与人员都感到十分痛苦 , 几乎看不到希望 。痛苦主要表现在:无论自己如何再努力 , 做出的产品总是无法在商业上成功 。
事后过了10年 , 我反思当时自己的工作 , 应该讲虽然商业上不太成功 , 但是在技术上的积累还是有一定价值的 。最重要的作用是通过做3个核心技术的研发 , 保留了一只30多人的研发团队 , 这30多人对3个核心技术的掌握程度虽然不能与国际一流EDA公司的研发技术相比 , 但是为今后努力进行技术突破奠定了基础 。我离开该公司后的十年内 , 该公司相继在这些核心技术上有了较大突破 , 也获得了部分商业成功 , 其中的许多核心开发人员都是经历过当年十分痛苦的阶段但是却始终坚持不放弃 , 从而看到了成功的希望 。
总结:从事EDA核心产品开发 , 需要长达10年以上的积累才能逐步获得商业的成功 , 我加入的第一家EDA公司从1986年开始到现在有长达30年以上的技术研发 , 才一步步获得了技术上和商业上的部分成功 。期间曾经经历了外人不知的十分痛苦的阶段 , 有多次萌生放弃EDA业务的念头但是都坚持下来了 。国内其它比较成功的EDA公司也同样都有多年的技术积累 , 要想在一两年内获得EDA产品的开发成功是很难的 。
3.高校如何快速培养EDA研发人员
【高校如何快速培养EDA研发人员】我们知道 , 目前国内EDA公司招聘合适的EDA研发人员比较困难 , 高校该如何加速培养EDA工程性研发人员呢?
前面提到 , 我在本科毕业一年半前开始进入EDA领域 , 本科期间花了一年半的时间做EDA学科的毕业设计课题 。当时我们学校本科是5年制 , 因此从三年级下半学期到五年级有比较长的时间可以从事课题研发 。
我本科刚刚开始接触EDA学科时 , 研究领域是寄生参数提取的算法研究 。由于之前对此一无所知 , 导师给我安排的是:首先自学一本《偏微分方程数值解法》的教材 。为什么一上来就要学这个教材呢?因为寄生参数提取的本质就是求解静电场的拉普拉斯方程 , 这是偏微分方程的典型应用 。只有把偏微分方程的求解原理理解清楚了 , 才能真正进入该领域 。我大概花了一个月左右的时间把这本数学教材看完了 , 看完后总的感觉就是一知半解 , 由于本科专业是计算机科学 , 并不是数学专业 , 因此对其中很多的数学公式和数学变换都理解不深 。遇到这个情况 , 下一步该如何应对呢?是继续花一段时间把这本教材理解透彻再进行工程实践呢?还是在实践中反过来促使理论水平的提高呢?
我当时的实际操作是:先实践后理论 。先仔细阅读实验室的前辈已经开发出的基本算法原理和程序 , 再分析和阅读中逐步理解其本质 。直接边界元素法是我们导师率先在国际上提出的求解寄生电阻电容的领先方案 , 起初采用二维的常数元边界元素法进行寄生参数提取 , 为了进一步提高精度 , 需要把常数元提高到线性元或者更高精度的二次元等 。我的本科毕业设计课题就是:针对任意形状的二维图形 , 采用边界元素法计算出任意两个terminal之间的电阻值 。测试用例是一个典型的圆环器件 , 采用边界元素法计算出外环边到内环边的电阻 。针对这种典型的圆环器件 , 理论上有一个精确公式 , 要求采用边界元素法的数值求解方法的精度与理论值误差在1%以内 。
该如何提高计算精度呢?理论上 , 如果每个离散化区间内的多项式次数越高 , 边界元素法达到的精度越高 。但是 , 如果采用高次插值策略 , 会带来数值求解稳定性的问题 。因此 , 我当时想到了曾经学习过的样条函数插值策略 , 样条函数插值的好处是:不仅在两个区间的交界处连续 , 而且在交界处的导数也是连续的 , 可以有效避免稳定性的问题 。我把这个策略与导师交流后 , 导师认为想法不错 , 不过 , 为了能更好地提高效率和精度 , 建议我再考虑一下还有哪些更好的策略 。
我经过仔细思考 , 在样条函数的基础上 , 又进一步提出了“圆弧样条插值”的策略 , 在函数多项式次数不高(2次)的条件下 , 可以更好地模拟任意形状的二维结构 。该策略得到了导师的认可 , 建议可以基于该思路进行编程实现 。
要把一套复杂的偏微分方程数值求解实现 , 针对刚刚从事EDA研究的我来说 , 还是有一定难度的 , 其主要实现过程有3个难点:第一是复杂二维图形结构的几何离散化 , 第二是根据边界元素法的原理计算线性方程组的系数 , 第三是求解大型线性方程组 。这3点其实也奠定了我今后博士期间从事三维寄生参数提取的基础 , 只有把这个步骤理解透彻了 , 才能真正掌握边界元素法的本质 。
理解了上述3个难点后 , 开始编程实现 , 然后进行调试分析 。编程实现和调试总计花了半年左右的时间 。这个时间事后来看是显得比较长了 , 但是当时是我第一次接触边界元素法 , 理解起来确实很有难度 , 而且又提出了圆弧样条的新策略 , 在一个本来理解比较困难的算法上添加了自己提出的新策略 , 编程实现确实需要花一定时间 。这个时间主要不在于程序量的多少 , 而是有些步骤的不好理解 。
该策略实现后 , 经过测试 , 针对典型的圆环器件 , 理论值与采用数值离散方法实现的值误差为1e-6 , 比预期的1%精度高了很多 , 这个有些出乎我的意料 。我原来对能否达到1%这个指标都没有信心 , 没想到精度超出了预期 。主要原因就是:我提出的采用圆弧样条策略刚好符合了圆环的几何特征 , 因此精度较高 。不过 , 在毕业设计期间 , 有很长一段时间 , 我一直提心吊胆 , 到底实现策略是否能达到预期?在程序没有实现之前 , 心里一点底都没有 , 甚至担心万一结果做不出来怎么办 , 毕竟 , 在实现中有多个关键环节 , 任何一个环节只要有一点理解不对 , 它的结果就会差十万八千里 。而且 , 要分析错在哪里比较困难 , 因为数值计算程序的中间运行数据是没有具体判断标准的 , 一旦最终的结果错了 , 要一步步去推导到底是哪步错了比较困难 。
经过1年半在EDA领域的学习 , 我开始对EDA学科有了一个初步认识 , 它是一门交叉学科:需要用到计算数学、微电子学、物理学、计算机科学等多门学科的知识 。本科毕业时 , 我并没有思考:这个一年半的本科课题研究时间到底是否合理?我当时觉得自己投入了几乎100%的时间从事该项目研发 , 似乎用一年半时间做这样一个课题达到了预期效果已经很不错了 , 难道还有哪些不足吗?
多年后 , 我再去回顾这个过程 , 觉得花费一年半的时间有些长了 。在本科的一年半时间中 , 如果能够每半年做一个课题和大作业 。那么一年半时间就可以做出3个课题 , 这3个课题最好是3个不同的领域 , 而不是在一个领域做3个不同方法的研究 。也就是说 , 在本科期间可以尽可能地提高知识的广度 , 还不急于在深度上下功夫 。我当时是在深度上下功夫较多 , 为了能够使得计算精度和计算效率足够好 , 花了很多时间进行优化 , 虽然对个人的创新性培养大有好处 , 但是从全局领域看 , 如果EDA学科都按照这个模式培养人才 , 人才培训速度不够 , 无法满足国内EDA产业的快速补充人才缺口的需求 。
因此 , 如果现在让我回到高校去培养本科生的EDA人才 , 我会采取与我当初不同的模式 , 给同一个学生布置多个不同的课题 , 每个课题给定一个完成时间节点 , 在时间约束条件下 , 完成各个不同的课题 。比如 , 如果还是从事寄生参数提取 , 还是一年半的时间 。我会给学生3个不同课题:第一 , 用边界元素法实现单个结构的寄生电容提取 , 用常数元即可 , 不要求用高次元 。第二:把数值求解的方法与工业界用的准三维查表法结合起来 , 实现一个针对大规模数据的寄生参数提取原型 。第三:把芯片器件结点提取的LVS流程与寄生参数提取流程结合起来 , 实现从gds到网表的全流程提取 。
这个要求有些高 , 要在短短的一年半时间内实现上述需求 , 是否达不到呢?关键问题是:每个课题的指标都是要求做出原型 , 不要求实用化 , 只要学生理解原理 , 对最基本的测试用例可以通过 , 就算完成指标 。
针对硕士生的EDA培养 , 我的建议是:该专业的3年学习时间 , 分解为6个学期 , 要求学生每个学期的主要任务就是完成一个大作业 , 开发一个特定的EDA工具原型 。比如:第一学期:要求学生开发一个DRC工具简化功能原型 , 第二学期 , 要求学生开发一个LVS工具简化功能原型 , 第三学期 , 要求学生开发一个RC Extraction简化功能原型 , 第四学期 , 要求学生开发一个SPICE工具简化功能原型 , 第五学期 , 要求开发一个Layout Editor简化功能原型 , 第六学期 , 要求学生开发一个Analog Router简化功能原型 。
上述6个小工具 , 如果全部串起来 , 就是一个典型的模拟电路全流程设计设计工具原型 。虽然学生开发出的工具原型与商业化的EDA工具有很大差距 , 但是通过每个大作业的实习 , 他把该领域内的关键问题都有了清晰的了解 , 知道在哪些方面存在不足 , 将来他加入EDA企业后 , 如果继续从事该领域的开发 , 就会快速入手 , 提升EDA企业的研发水平 。同时 , 也不排除某些出色的学生在从事大作业开发时 , 提出了一个很好的思路 , 实现的工具原型水平很高 , 将来可以把某些思路应用到EDA企业中 。
假设国内有10个高校开设类似的专业 , 每个专业每年培养10名类似的人才 , 则一年累计培养100名研发人员 , 5年左右就可以填补该领域在国内EDA产业的人才缺口 。
那么 , 这些研究生的指导教师从哪里来?除了目前国内高校的EDA教师外 , 还需要再补充一些兼职指导教师 , 从国内的EDA企业中选择研发能力强的工程师作为高校的兼职指导教师 , 指导研究生从工业界的应用出发 , 更符合产学研结合的需求 。这种培养方式强调了广度 , 没有强调深度 , 与传统人才培养的模式不一样 , 主要目标是:为了应对国内EDA人才短期内需要批量快速培养的目标 。因此 , 它是一个应急的策略 , 不是一个持久的策略 。

    推荐阅读