模拟IC设计-我的成长经历
我想讲讲自己的成长历程,主要是技术能力是怎么提升的。先简单介绍一下。本人一直从事audio dac/adc的,也就是sigma delta dac/adc,在audio中,dac远比adc重要,所以重点还是在dac上。目前dac的水平是做到了100多个db的动态范围,关键在于功耗很低面积很小,是在公司原来70多个db的基础上,不仅将性能做到了100多个db,还将功耗面积都大大减少了,性能功耗面积全面超出了国外知名的IP供应商。
你买mp3之类的东西,你说是播放重要还是录音重要呢?所以dac比adc重要。
我不是什么大牛,只不过有点心得感悟,拿出来分享而已。写得不好,见笑了。
在学校的时候我一直想做个程序设计师,自己摸索编程(编称对一个模拟电路设计工程师来说是很重要的,后面会提到),毕业后却成了模拟电路设计师。实际的我的专业不是计算机也不是微电子。刚进公司时实际上只懂得一点点带隙基准的设计,实际上连ac/tran仿真都没有弄明白,还不知道电路一定要经过tran仿真,密勒补偿也不知道是什么意思。现在回想起来笑死人了。刚分给项目组时,主管在忙项目,刚好项目遇到瓶颈,他又不喜欢带人,觉得我又用不上,干脆就分给我一个课题:研究一下classd吧,现在挺火的,研究好了你就是专家了,公司没有人研究过。于是我就开始了长达半年多的放羊式的工作生涯,大部分的基础都是在这个时候建立的。在这些时间内我干吗呢?看看拉扎维,gray的书,发现跟classd也没什么关系阿,在网上找paper,看了将近100多篇,还是没有头绪,毕竟paper中的垃圾太多了,找出真正好的paper不容易。后来终于找到TI的一篇classd论文,讲得很好,于是试着做电路,并且开始仿真。后面我将讲一些自己感觉对学习模拟电路真正有用的方法。
说的没错,机遇还是很重要的,重要的是自己善于把握机遇。人生就这样,什么时间段就做什么事情,如果把握不住,以后就再没有这么好的时光了,珍惜现在非常重要。到目前为止,我工作3年多了。IP供应商是ChipIdea,现在被mips收购了。classd几年前还是挺火的,现在就成了白菜了。不少人有误解,说classD的性能比不上ClassAB,更比不上ClassA,实际上是不对的。ClassD照样可以做到非常好,好好设计的话,96dB动态范围,-80dB以上的性能是很容易得到的,ClassAB反而不容易做好谐波失真。ADI有个AD1991,性能很高,远比一般的ClassAB高,但是我看其架构一般,有更好的架构可以做到同样的性能,但是功耗更低,很重要的是,开发周期可以更短。关键在于架构。其实所有的电路都这样,关键在于架构。做电路有4点是非常重要的,
1、性能;
2、功耗;
3、面积;
4、开发周期
决定这4个范围的折衷关系的关键就是架构。
1. 作模拟的一定要基础,所谓的基础!用来分析模拟电路的通用工具:信号与系统和电路理论,这两本本科教材恰恰是做模拟的基础
2. 深刻理解基本的模拟电路模块,比如current mirror,2 stage miller OTA,folded-cascode OTA等。不是说看了Allen的书,懂了其中的公式,而是能琢磨出书中不曾提过的方面,即使书中的东西,也能有自己的理解甚至修正。这个过程既是一个需要理论严格推倒的过程,又是一个需要培养直觉的过程;既是一个看书学习别人的过程,又是一个独立思考,形成自己设计方法的过程。毕竟,真正的做出产品有所创新,教科书远远是不够的。
3. 在2的基础上形成对于模拟电路设计的一种直觉以及经验值,这是实际设计中的最有用,比如一个current mirror Vdsat取多少,面积取多大;另外对于各种电路的优劣有了更加深刻认识,知道对于所需要的性能,能够选取最简单可靠的结构来实现(这一点是很重要的)。
4. 在流片基础上积累工程经验,知道模拟电路在实际过程还有哪些仿真无法预测的东西,这往往不是一个电路的问题,而是可能各个模块之间配合之类的。
5. 针对流片中的问题进一步加深了对电路的理解,并且在此基础上能够有所创新。在实际中发现很多做模拟的,论文也许看了不少,书也看过不少,可是拿他们的电路做一下DC,发现很多current mirror Vdsat只有几十mV,一个差分对工作状态都十分不合理,比如输入差分对vdsat,active load Vdsat取的都不合理,比如输出级馆子的L。
还有很多人做电路是拿大炮打蚊子,很普通的要求,硬是做的很复杂的结构,不计面积。
开始看classd,我是怎么都看不懂,搞不懂原理。方波能表示谐波失真很低的正弦波?开始用开环结构,即使用最理想的PWM产生器,也很难产生谐波失真很低的波形,何况模拟电路有那么多非理想性呢?当时还看到文献说要做死区时间。我想这怎么可能呢?那不是就制造非线性吗?但是没有死区时间的话,功耗很大,EMI问题也很难解决。真是太矛盾了,简直就是没有办法折中。大家知道,开关电路仿真速度是很慢的,半个小时才能够仿真一个周期,精度还不是很高,所以一有什么想法,我都需要花至少半个小时以上的时间去验证。实际上,使用的时间远比半个小时要长,因为hspice经常碰到收敛性问题,而且经常是仿真到一半的时候不收敛!前功尽弃!痛苦了很长时间。后来发现spectre的收敛性比较好,以后就一直用spectre了。但是还是时常有收敛性的问题。为了这个问题,我找了一本专门将spectre仿真的书(是开发spectreRF的那个牛人写的),研究spectre是如何计算,做电路的时候如何帮助仿真器收敛,建模的时候要考虑那些不收敛因素。这是我做设计的风格,遇到不懂的问题,总是去找专业的书或者文献,认认真真研究,即使花很多时间也要去做,重要的是一定要弄懂!在那之后我就很少碰到收敛性问题了,即使碰到了也能够很快解决。classD的矛盾问题当时没有办法解决,最后我想,一定是我的思路错了。这个时候的我,还是从时域去思考问题的。不过在研究文献的时候,我找到了方向:
1、要从频域解决问题;
2、ClassD的重点是noise shaping;
于是开始学习信号与系统。当时感觉,很多人都觉得信号于系统很重要,但是真正花时间去学习的人并不多,因为真正用信号的概念去解决问题的人并不多。我看书的习惯是通读一遍,一般使用3天到1个星期的时间,然后就结合自己的实际工作开始研究相关章节。但是信号与系统太理论化了,还是不知道怎么应用到实际中。我想ClassD怎么说也算一个模拟滤波器吧,又研究起了滤波器的书,其间也是需要用拉普拉斯算子推导传输函数的。在推导的过程中,慢慢建立起信号与系统的概念。但是对于ClassD的noise shaping,我还是不懂。ClassD的重点是noise shaping,这点我是从sigma delta调制器中了解到的。sigma delta是7 C4 D 相当成熟的理论,现在几乎很少人去研究它了。我想,干嘛不先弄懂sigma delta再做ClassD呢?于是我找这方面的资料。恰好我的一位同事非常喜欢搜集各种模拟电路的书籍,他给我推荐了一本ADI牛人写的《Delta- Sigma Data Converters - Theory, Design and Simulation》,我现在把这本书称为sigma delta bible,我的大部分sigma delta的知识都是从这本书中得来的。同样还有一本很重要的书是:《Understanding Delta Sigma Data Converters》_这本书也是ADI的牛人写的。如果有人问我,做模拟电路从做什么开始最好?我会说从sigma delta adc/dac做起最好,因为它会告诉你什么是信号,什么是传输函数,什么是建模,什么是噪声等等模拟电路中最核心的内容。如果问学习sigma delta要看什么书的话,我就推荐这两本书。我之所以在这个领域能做出一些东西来,这两本书的作用是最大的!
但是不是说我学完这两本书就什么都会了。还差太远了,因为吸收知识是不容易的。而且,说句实话,做电路可不是学教科书,书上讲得都是对的。现实情况是我们经常不知道哪些是对的,哪些是错的,paper满天下,但是错误或者含糊不清的东西也满天下。当我们遇到没有资料讲过的问题时,甚至不相信自己的推导是否正确。很多人做完电路后也经常疑惑,自己做的电路真的可以工作吗?性能能够达到要求吗?有bug吗?有什么地方没有考虑到吗?
做模拟电路和做数字电路或者软件最大的不同并不是两者之间的难度的差距,而且模拟面对太多不确定的问题,软件可以运行,FPGA可以跑逻辑,但是模拟电路没有,只有比蜗牛还慢的仿真软件,而且还没有办法模拟真实的情况。在回片之前很难有100%的把握说自己是对的!做模拟电路的信心实际上来自于你自己怎样去判断哪些仿真结果是可信的,哪些 仿真结果是不可信的。真正的提高来自于对已有芯片的debug。当时公司刚好有一款芯片正在debug,出了了不少问题,其中一个问题就是sigma delta DAC的问题。我在开会和其他情况下,我知道了这个问题的现象,那就是输出居然有三角波!这个严重的问题过了很长时间都没有能够解决。当时我拿到了设计文档,对 里面的结构进行matlab建模,当然还是学习阶段。说到matlab建模,我得重点说一下,matlab是非常重要的工具,做sigma delta的优点是,你必须掌握这个重要的工具,否则是很难进步的。前面说过,我原来是想当程序员的,写过一些代码,这个时候,我写代码的经验马上帮了我大忙,我很快就进入了状态,对matlab非常有感觉,于是我就用matlab 对sigma delta系统开始进行建模了。这里我又要介绍一本书了,那就是《数字信号处理实践方法》,这本书我花了一个黄金周看完,一个黄金周除了看书吃饭睡觉几乎不做别的事情,黄金假期就这样给我毁了,但是这是我最不后悔的一个黄金周,因为这事我学习信号与系统的关键转折点。这本书深入浅出,很多我原来看信号与系统没有看懂的内容都在这本书中看懂了。而且与matlab的结合,使得本书特别适合sigma delta建模的指导书。这本书讲数字滤波器的,与其说数字滤波器,不如说是离散时间滤波器,所谓ADC/DAC不就是离散时间滤波器吗? 而且我连数字滤波器的算法也研究了,为我以后接下整个codec的设计打下了基础。这个领域是比较奇怪的,做模拟电路的人觉得这个是数字电路的领域,做数 字电路的人又忙于做实现,没有时间去研究,就成了真空地带。只有我不忙项目,想学什么就学什么,自己又有兴趣,刚好自己又在学习数字信号处理。所以就研究了起来。有matlab作为实践工具,学习还是很快的。当时就一边写代码,一边优化算法去了。《Delta-Sigma Data Converters - Theory, Design and Simulation》这本书我也一直在看,直到有一天,我在书中看到了这个现象的描述,而且规律和测试结果相似,于是我对这个现象用matlab进行了建模,建模结果表明,三角波是可以建模出来!而且其它现象也类似!于是,我把建模结构给领导演示了,我说问题应该应该是这个,但是我也不知道电路是在哪里出了问题,给我时间,我相信可以把问题找出来!
做事情重要的不是你本身有多厉害,而是你有多投入。
就自己的经验来说,收获最多的总是投入最大的时候,而且投入的多少和得到的多少是相差很多的。假如投入80%的话,收益可能是20%,但是如果再加20% 的投入,你却可能得到另外的80%的收益。所谓行百里者半于九十也就是这样的道理。
实际上问题的现象和书中所讲是有区别的,甚至有矛盾的地方。在建模中我对发生问题的可能性进行了研究,对问题发生的可能行也进行了猜测,同时对电路进行了仿真。为了做仿真,我又学习了VerilogA语言,进行了简单建模,同时研究dft算法,研究用什么样的方法可以提高仿真精度,同时减少仿真时间。 sigma delta的仿真是非常缓慢的,经常是一天才能够仿真一个case。在仿真的时候,我几乎绝望了,因为仿真结果表明,设计没有问题,找不到任何问题的迹象。我不断变换条件去仿真,同时也在不断建模。在建模的时候,我发现,这个问题在某某电路之前不可能出现这个问题,在某某电路之后也不可能出现这个问题! 推理和建模都说明了这个问题,但是拿电路一仿真,发现又没有这个问题!无法重现。当时的心情就是:绝望!问题看起来近在咫尺又远在天边,看到了希望,又好像没有希望!就这样我仿真了两个多月的时间,几乎要放弃了。在不断的仿真中,终于有一次,我把这个问题仿真出来了,但是表现和测试结果又有不一致的地方。当时我的判断是,问题并没有找出来,我不过是找到了另外一个没有那么严重的问题而已。debug过程又进入了绝望的阶段。
当时有新的项目要开始做了,里面刚好有这个模块,项目组内分模块的时候,大家都不愿意选这个模块,不过我倒是很愿意。我的思路是一定要把问题找到,才开始做电路。实际上是很冒风险的,项目是有进度要求的,但是debug这种事情是没有办法控制进度的,很容易把项目变得不可控。但是问题不找出来怎么能够保证下一版就没有问题呢?难道问题会凭空消失吗?我决定把时间继续投入到debug中,坚持到最后时刻,才开始这个模块的设计。正好领导也重视这个问题,所以才能够继续坚持下去。在某天看波形的时候,我看到问题了!波形有不对的地方,我对这个问题进行抽象,从信号与系统的角度来看,应该跟测试结果吻合。我建立了新的模型,建模仿真表明,跟测试结果的表现是一致的,对电路做了调整,在做spice仿真,发现问题真的不见了!最让我激动的是:我做到了理论/建模/测试/仿真的一致性!让我100%的确定,我找到了问题的根源,唯一担心的是,不知道是否还有未发现的问题。毕竟模拟电路和数字电路不同,数字电路对就是 对,错就是错,模拟电路却是模糊的,仿真经常还是会出现盲点的。不过幸运的是,电路修改后就没有问题了。让我感到惊讶的是,实际上问题出现的地方跟原来一大早的推论是一致的,在那一点之前的通路不可能出现这个问题,在后面的通路也不可能出现这个问题。问题就在那个点上。这个困扰人那么久的问题,说白了其实是小小的错误,修复这个错误,我所做到的不过是修改了一根线而已。但是收获很多,远比一根线多多了!做sigma delta最重要的是噪声,就是在那段时间,我获取了不少数据,利用这些数据,并且修改仿真方法,最终做到了仿真与测试的一致,这对噪声计算的信心增加了很多。有句话说:lowpowermeans understand more about noise,这句话是非常正确的,懂得了噪声,你就知道怎么去简化电路,降低非关键电路的功耗,并且恰当地规划关键电路的功耗。对电路也能够提出很多创新的地方出来,包括结构的创新。debug完成之后,就开始做项目中的DAC了,我马上对结构进行了全面的修改,减少了没有必要的噪声源,同时合理规划噪声,降低了功耗。那个时候时间已经很紧张了,但是完成这个电路的速度很快,最后还是赶上了项目进度,tapeout出去了。不过项目也因为其它原因夭折了。一般人第一次都是不怎么敢创新的,都希望求稳,但是我当时的想法却是,创新才是最稳妥的,对自己有足够的信心,牛气十足。现在回过来看当时的情形,自己也感觉很吃惊,明明是第一次做电路,却好像自己是一个专家一样,几乎没有投片的经验,却信誓旦旦地说自己的电路没有问题,一定可以达到很高的水平。其实除了自己,其他人都不怎么相信,特别是有好几年工作经验的老员工。不过也不怪他们,如果我处于他们的位置,我的想法恐怕和也他们一样。
没有想到帖子居然给加入精华了。我做事情比较固执,很多东西我都想研究清楚,不喜欢似懂非懂的状态,所以会花很多时间去学习。这是看起来比较慢的学习方法,却让我学到不少别人没有学到的知识。上面提到的项目完成后,我又回头去做了一下classd项目,花了一个星期的时间定义了top结构,对信号传递函数,噪声传递函数都进行了计算,并搭建了veriloga模型,在这个模型中研究了各种非理想性,同时也加入了扩频算法。并且仿真验证(都是建模的)。在系统中就保证了电路的非理想性对电路性能的影响是微乎其微的。通过这种方法,把电路设计的难点转移到系统函数中,而非模拟电路设计中。和将电路难点转移到数字电路中是相同的道理。做完之后,我发现classd是非常简单的东西,而且肯定可以做到比较低的功耗,最后,以至于自己连做classd电路的兴趣都没有了,因为在我眼中,这是一个已经充分论证的论题,没有必要再投片去验证了。后来这个电路就交给其他同事去做了,因为我又有了新的项目。最后这个项目做出来,性能非常好,相比之下,TI的classd的性能只能说是非常一般。总结起来,classd技术与我原来所想的其实是一样的,利用了噪音整形技术,但是比sigma delta ADC/DAC更简单,因为没有真正意义的数模转换部分,电路实现是很简单的。
原帖地址:http://bbs.eetop.cn/thread-141642-1-1.html
整理后的地址:http://bbs.eetop.cn/thread-313574-1-1.html