经常有人问,有没有能直接推导出符号化的传输函数?要不然手工推导太麻烦,还容易出错。我就找到了一个。matlab网站上有个scam的程序,可以干这件事。我去那个网站下下来程序,结合他的说明仔细看了一遍,大有收获。原理很简单,应该有不少人大学时上iccad课,老师让编写过spice like的程序,就是读网表,然后填矩阵,之后矩阵分解法或者迭代法求解矩阵方程。这里是同样的工作,只是需要借用matlab的符号运算功能去求解符号形式的矩阵方程。(网址
http://www.swarthmore.edu/NatSci/echeeve1/Ref/mna/MNA6.html,原理介绍
http://www.swarthmore.edu/NatSci/echeeve1/Ref/mna/MNA1.html)
不过原来的程序并不完善,有一些诸如压控电流源之类的没做进去(这可是mos里的基本模块),所以要想使用,还是需要自己改改的。另外还可以做进一步的改进,比如可以直接读mos,然后在里面自己把它分解成若干电容和gm,ro的组合。再比如可以让符号和数值同时存在,在最后给出符号解和数值解,做一下对比。
使用这个软件还是很有意思的,太复杂的东西它也能给算出来,而如果对于手工分析,可能东西一多就容易出错了。这也是电脑的长处所在。
不过要是电路太复杂了,比如阶数大于3阶,这时候要想理解结果也很困难,因为我们通常都愿意得到一个比较简单的结论,好记也好理解,但是如果有复极点,或者doublet之类,就很容易把我们绕晕了。我拿这个程序最复杂的是分析gain boost opa的小信号模型。可以考虑不同的情况,比如上面的负载也是gainboost,或者在小运放输出存在一个对地cap,或者只有cgs,等等,到最后公式逐渐变得复杂,想努力解释极零点是怎么产生的也开始困难了(不过这拿去发文章,估计有人会喜欢)。
所以对这个程序,我最想做的改动就是智能分析与简化最终结果,比如对最后的公式,用数值替代后,看看哪些项是可以忽略的,再看看是不是满足什么极点分离的原则,可以搞出两个很远的极点,再或者可以看出来有doublet。可惜我对matlab的用法还不是太熟,一直没能写出这样的程序。
不过程序再厉害,还是需要有人来写。而且分析的结果未必合人的口味。这点我很佩服那篇gainboost运放的经典文章作者,里面也没太多小信号分析,但是给出的结论却是设计中常用的。换句话说,那个作者"智能”的在分析过程中就知道哪些可以忽略哪些不能忽略,哪些是主要的。这种方法是小信号分析所给不出的。
说到这里,需要补充一下,离开学校后对我印象最深的文章应该是那个运放稳定性的系列文章(原文最早出于
www.en-genius.net,但目前只能找到一部分,在电子工程专辑网站有翻译版,在各处往往被称作TI工程师写的运放稳定性系列。奇怪的是作者可能原计划写15篇,最后只有十篇面世,而且从最后一篇看,作者已经不在TI工作了)。主要是它的分析方法,强调用图直观的观察而不是推导,这是和学校完全不同的。我刚开始在学校读那篇gainboost设计的文章时,一直不是很理解他的一些推导过程,于是又自己推导了一遍。后来读了运放稳定性的文章之后,才理解了这种方法。回过头去再看gain boost设计的文章,就好理解多了。两种方法殊途同归,但是图解法要直观而且简单多了。可是只用图解法,我又总是担心自己会犯错(这不是不可能,其实图解法里用了大量的近似,那些近似什么时候有效,有时真的会搞错),所以我的结论是图解法用于理解原理最好,数学分析用于严格定量最好。