今天再来讲一讲模拟电路中的时域仿真和频域仿真。主要想讲一讲各种仿真的特点、使用范围、使用注意事项等等,而不是一个包含每个设置步骤的仿真教程。
在模拟集成电路设计中我们需要用到各种各样的仿真类型。首先是基础三大件:DC仿真、TRAN仿真、AC仿真。在刚开始学习模拟电路时,我们最早接触到的仿真类型就是这三种。后来学习射频电路,引入了S参数的概念,又多了一个SP仿真。SpectreRF还提供了在VCO设计中很好用的周期性稳态分析(Periodic Steady State,PSS),以及同属于PSS旗下的QPSS、PAC、PSP、PXF等等。在Keysight的ADS平台下,还有谐波平衡分析(Harmonic Balance Analysis,HB),以及包络分析(Envelope Analysis)。
Spectre中的仿真类型
这么多令人眼花缭乱的仿真类型,每一种都有一些独特的假设,适合处理某一类情况。电路设计者需要根据自己的电路类型挑选出一种最合适的仿真方法。如果使用了错的仿真类型,不仅会降低效率,还有可能得到错误的结果。比如拿SP仿真去看放大器的线性度,很显然不可能得到正确的结果。
如果对这些仿真类型大致分类,可分为时域仿真、频域仿真。粗略来讲,如果一种电路处理的信号平滑、接近正弦信号,则适合于频域仿真,如LNA、PA、Mixer等;如果这种电路处理的信号有很多图片,接近方波,则适合用时域的仿真方法,如ADC/DAC、DC-DC converter等等。在一篇论文中总结出了下面的图。
不同电路适合的仿真类型 时域仿真 最主要的时域仿真是TRAN仿真。TRAN仿真直接模拟电路的工作过程,类似于暴力破解方法,可以用来仿所有的电路类型。但是,TRAN仿真可用于所有电路并不意味着我们就该都用TRAN仿真,就像屠龙刀什么都能干,并不意味着它是最合适的削苹果工具。天下没有免费的午餐,一种仿真方法,如果适用范围越广,那么针对某种特定的电路类型时效率越低。TRAN仿真也是这样。例如,我们需要仿真一个放大器的小信号增益和带宽,使用AC仿真,一次就能得到结果。如果使用TRAN仿真,则需要添加不同频率的正弦波激励,跑多次TRAN仿真,拿输出时域波形和输入时域波形做比较,求得此频率点的增益,最终画出整个放大器的增益,整个过程繁琐且计算量大。因此,如果有其他适用的仿真类型,我们倾向于不使用TRAN仿真来设计电路和优化参数,这些过程需要大量的迭代,采用TRAN仿真会导致效率很低。只有在没有其他更合适的仿真方法,或电路设计完成后的最终验证,我们会使用TRAN仿真。
在电路设计完成后拿TRAN仿真做一次最终验证很有必要。因为其他仿真类型会有一些假设,有一定的风险在最后的电路中这些假设不成立了。我遇到过这样一个例子,在ADS中设计一个差分压控振荡器,采用HB分析,电路工作的好好的,性能也不错。一跑TRAN仿真,电路振在了两倍频附近,与HB仿真结果对不上。进一步分析,发现振荡器的差分输出端电压波形几乎相同,电路工作在共模状态。当然这个问题很好解决,利用差分电路的虚地特性,在某个共模点引入损耗即可。但如果仅仅使用HB仿真,可能根本察觉不了这个问题。HB仿真中需要设置搜索频率范围,仿真器仅仅在搜索频率范围附近寻找某个振荡解,很容易忽略掉共模振荡。
TRAN仿真一个需要注意的地方是输入信号的幅度。我遇到过另一个例子,振荡器的脉冲敏感函数(Inpulse Sensitive Function,ISF)的仿真。大家可能知道,Hajimiri发展了一套线性时变理论来分析振荡器的相位噪声。这套理论非常好用,至少对写论文来说非常好用,我见过很多论文从这个理论出发,得到一些创新点来提高相噪性能。这个理论最核心的部分就是ISF函数,即微小的注入电荷对振荡器输出相位的扰动。根据它的定义在时域设置仿真环境很容易,但是得到精确的结果非常难。如果注入电荷过大,影响到了振荡器的状态,算出来的结果会有很大偏差;如果注入电荷过小,那么振荡器的输出相位改变非常小,小到我们需要把TRAN仿真的精度无限提高才能算得准。当时我拿这个理论去仿一个几GHz的振荡器,仿真精度要设到fs以下才能得到较光滑的曲线。这个仿真对输入幅度的敏感程度使得TRAN仿真在这里变得不实用了。因此有人专门研究了一套使用PSS和PXF仿真ISF函数的方法。有需求的同学可以进一步了解。
TRAN仿真另外一点需要注意的地方是仿真步长的设定。现在的仿真器一般都能够根据信号变化的速度自适应的设定仿真步长,仿真时不需要额外设置。有两类情况是例外,第一类是振荡器的仿真。对于振荡器,步长需要小于周期的百分之一,即每个周期内至少有一百个点,否则振荡器可能会不起振。第二类是高动态范围的情况。在仿真器的设置选项中,有一个相对误差(reltol)的设定,这个设定与动态范围有关,对应关系如下表。假如我们仿真一个12bit的ADC,其动态范围有74dB,我们可以把reltol设为1e-4,留6dB的裕度。在仿真移相器、相位插值器的香味变化时,将reltol设为1e-4可以得到更平滑更准确的相位过渡。
reltol与动态范围的关系 频域仿真
AC仿真、SP仿真、HB仿真和PSS仿真都属于频域仿真。
AC仿真和SP仿真都是频域仿真中的小信号仿真。所谓小信号,指的是仿真器在仿真开始时会先对电路在直流工作点上进行线性化,然后才开始求解。因此,这两种仿真得到的增益都与输入幅度无关,我们不能指望通过它们来得到电路的线性度。AC仿真和SP仿真的原理基本相同,对于相同的端口设置,他们的计算结果应该是完全一样的。但是,SP仿真有更强大的预设函数,如Gmax、Gumx、NFmin、Gmin等等。例如在设计LNA时,可以先拿单个晶体管来仿一次SP仿真,画出SP仿真预设的这些值,能够让我们快速了解到这只晶体管需要什么负载阻抗和源阻抗、能达到什么样的最优增益和噪声系数,即指明设计方向又给出了理论极限,对提高优化效率帮助极大。
SP仿真有丰富的预设函数
有时候我们需要仿真一个电路的输入电容或电阻有多大,SP仿真和AC仿真都能做到,但SP仿真更方便。
HB仿真和PSS仿真都是频域的大信号仿真。功能似乎较为重叠,都可以仿真PA的饱和输出功率、线性度、效率等,都可以仿真VCO的振荡频率和相位噪声,都可以仿真多个频点的混频。据我观察,在cadence的spectre平台下,大家更习惯于使用PSS仿真,而在keysight的ADS平台下,大家更习惯使用HB分析。当初我在设计毫米波功率放大器时,全部都在ADS平台下用HB仿真完成。ADS提供了非常多的设计实例,写了很漂亮的公式,我只需要把例子中的器件替换成我自己的器件,即可完成load pull分析、输入功率扫描等等,省时省力。
Cadence的PSS仿真与PXF或PAC等联合起来有一些很强大,且除了TRAN之外不太有替代的应用。比如我们之前提到的ISF函数的仿真。我最近还遇到了另一个例子,在时钟分布网络上,有时候我们需要了解电源噪声会给时钟带来多少jitter。大家最典型的仿真方法是在时钟上加入一个单频正弦波,然后把输出时钟的眼图打印出来,看带来了多大的jitter。这种方法一次只能看一个频点,而且仿真时间非常长。如果用PSS+PXF可以很好的解决这个问题,PXF可以计算出电源噪声到时钟边沿中点的转换增益,然后除以此处边沿的斜率,即可得出电源噪声到jitter的转换,一次可以计算整个频段,使用起来方便多了。
|