当前我们形势下,我们的电子产业面临这诸多“卡脖子”环节,作为整个芯片产业的第一环,EDA是急需引起重视的。

尽管,国内IC产业发展非常迅速,IOT,AI带来的新市场给IC产业诸多新的方向,也为国内EDA公司带来了新的机遇。然而,EDA产业不仅仅只是投入大量资金就能达到目标的,除了技术门槛和工程经验积累,人才的缺失早已成为产业之伤。

有报道称"国内EDA工具市场95%以上被外资占据" ,“国内EDA厂商第一个短板就是工具不够全,没有能力全面支撑产业发展 ”,“国内EDA厂商与先进工艺结合比较弱”,最重要的,就是缺人!“国内做EDA研发的人大约有1500人,其中约有1200人在国际EDA公司的中国研发中心工作, 真正为本土EDA做研发的人员, 只有300人左右。”

人这么少,要怎么提升呢?EDA人才如何培养?下面这篇文章是一位EDA从业人员以自身经历的总结。

作者:edaeda

今天想回顾一下:我在读EDA学科时的过程和多年后的得失总结,希望对今后高校EDA学科的建设提供一些有益的经验。

我在本科毕业一年半前开始进入EDA领域,本科期间花了一年半的时间做EDA学科的毕业设计课题,本科毕业后,读博士期间总计花了4年半时间进行EDA的课题研究,因此,在学校攻读期间合计总计有6年时间做EDA的学术研究。

本科刚刚开始接触EDA学科时,研究领域是寄生参数提取的算法研究。由于之前对此一无所知,导师给我安排的是:首先自学一本《偏微分方程数值解法》的教材。为什么一上来就要学这个教材呢?因为寄生参数提取的本质就是求解静电场的拉普拉斯方程,这是偏微分方程的典型应用。只有把偏微分方程的求解原理理解清楚了,才能真正进入该领域。我大概花了一个月左右的时间把这本数学教材看完了,看完后总的感觉就是一知半解,由于本科专业是计算机科学,并不是数学专业,因此对其中很多的数学公式和数学变换都理解不深。遇到这个情况,下一步该如何应对呢?是继续花一段时间把这本教材理解透彻再进行工程实践呢?还是在实践中反过来促使理论水平的提高呢?

我当时的实际操作是:先实践后理论。先仔细阅读实验室的前辈已经开发出的基本算法原理和程序,在分析和阅读中逐步理解其本质。当时的情况是:直接边界元素法是我们导师率先在国际上提出的求解寄生电阻和电容的领先方案,我们实验室已经采用该原理做出了二维的常数元边界元素法的源程序,为了进一步提高精度,需要把常数元提高到线性元或者更高精度的二次元等。我的本科毕业设计课题就是:针对任意形状的二维图形,采用边界元素法计算出任意两个terminal之间的电阻值。测试用例是一个典型的圆环器件,采用边界元素法计算出外环边到内环边的电阻。针对这种典型的圆环器件,理论上有一个精确公式,要求采用边界元素法的数值求解方法的精度与理论值误差在1%以内。

该如何提高计算精度呢?理论上,如果每个离散化区间内的多项式次数越高,边界元素法达到的精度越高。但是,如果采用高次插值策略,会带来数值求解稳定性的问题。因此,我当时想到了曾经学习过的样条函数插值策略,样条函数插值的好处是:不仅在两个区间的交界处连续,而且在交界处的导数也是连续的,可以有效避免稳定性的问题。我把这个策略与导师交流后,导师认为想法不错,不过,为了能更好地提高效率和精度,建议我再考虑一下还有哪些更好的策略。

我经过仔细思考,在样条函数的基础上,又进一步提出了“圆弧样条插值”的策略,在函数多项式次数不高(2次)的条件下,可以更好地模拟任意形状的二维结构。该策略得到了导师的认可,建议可以基于该思路进行编程实现。

要把一套复杂的偏微分方程数值求解实现,针对刚刚从事EDA研究的我来说,还是有一定难度的,其主要实现过程有3个难点:第一是复杂二维图形结构的几何离散化,第二是根据边界元素法的原理计算线性方程组的系数,第三是求解大型线性方程组。其中第2点是难点,我花了较长时间才逐步理解和学会该方法。这个方法其实奠定了今后博士期间从事三维寄生参数提取的基础,只有把这个步骤理解透彻了,才能真正掌握边界元素法的本质。

理解了上述3个难点后,开始编程实现,然后进行调试分析。编程实现和调试总计花了半年左右的时间。这个时间事后来看是显得比较长了,但是当时是我第一次接触边界元素法,理解起来确实很有难度,而且又提出了圆弧样条的新策略,在一个本来理解比较困难的算法上添加了自己提出的新策略,编程实现确实需要花一定时间。这个时间主要不在于程序量的多少,而是有些步骤的不好理解。

该策略实现后,经过测试,针对典型的圆环器件,理论值与采用数值离散方法实现的值误差为1e-6,比预期的1%精度高了很多,这个有些出乎我的意料。我原来对能否达到1%这个指标都没有信心,没想到精度超出了预期。主要原因就是:我提出的采用圆弧样条策略刚好符合了圆环的几何特征,因此精度较高。不过,在毕业设计期间,有很长一段时间,我一直提心吊胆,到底实现策略是否能达到预期?在程序没有实现之前,心里一点底都没有,甚至担心万一结果做不出来怎么办,毕竟,在实现中有多个关键环节,任何一个环节只要有一点理解不对,它的结果就会差十万八千里。而且,要分析错在哪里比较困难,因为它的中间运行数据是没有具体判断标准的,一旦最终的结果错了,要一步步去推导到底是哪步错了比较困难。数值计算的一个典型特征就是:输入和输出之间的中间过程的结果无法预知,不好分析每个步骤的对错。

经过1年半的毕业设计课题的学习,我开始对EDA学科有了一个初步认识,它是一门交叉学科:需要用到计算数学、微电子学、物理学、计算机科学等多门学科的知识。本科毕业时,我并没有思考:这个一年半的本科毕业课题时间到底是否合理?我当时觉得自己投入了几乎100%的时间从事本科毕业设计,似乎用一年半时间做这样一个课题达到了预期效果已经很不错了,并且还获得了本科的优秀毕业论文。难道还有哪些不足吗?

多年后,我再去回顾这个过程,觉得花费一年半的时间有些长了。在本科的一年半时间中,如果能够像前文章中提到的:每半年做一个课题和大作业。那么一年半时间就可以做出3个课题,这3个课题最好是3个不同的领域,而不是在一个领域做3个不同方法的研究。也就是说,在本科期间可以尽可能地提高知识的广度,还不急于在深度上下功夫。我当时是在深度上下功夫较多,为了能够使得计算精度和计算效率足够好,花了很多时间进行优化,虽然对个人的创新性培养大有好处,但是从全局领域看,如果EDA学科都按照这个模式培养人才,人才培训速度不够,无法满足国内EDA产业的快速补充人才缺口的需求。

因此,如果现在让我回到高校去培养本科生的EDA人才,我会采取与我当初不同的模式,给同一个学生布置多个不同的课题,每个课题给定一个完成时间节点,在时间约束条件下,完成各个不同的课题。比如,如果还是从事寄生参数提取,还是一年半的时间。我会给学生3个不同课题:第一,用边界元素法实现单个结构的寄生电容提取,用常数元即可,不要求用高次元。第二:把数值求解的方法与工业界用的查表法结合起来,实现一个针对大规模数据的寄生参数提取原型。第三:把芯片的LVS流程与寄生参数提取流程结合起来,实现从gds到网表的全流程提取。

这个要求有些高,要在短短的一年半时间内实现上述需求,是否达不到呢?关键问题是:每个课题的指标都是要求做出原型,不要求实用化,只要学生理解原理,对最基本的测试用例可以通过,就算完成指标。

这种培养方式强调了广度,没有强调深度,与传统人才培养的模式不一样,主要目标是:为了应对国内EDA人才短期内需要批量快速培养的目标。因此,它是一个短期见效快的策略,并不是一个持久的策略。

来源:
水木社区https://exp.newsmth.net/topic/bb8e5e5b810c3728bdcf2e5c84966e8b
<工程师每天都在用,电子产业要害,国内从业人数不足全球1%!>https://mbb.eet-china.com/forum/topic/69543_1_1.html