摘 要
Verilog-A/AMS是用于描述电路行为的硬件描述语言。Verilog-A用于描述模拟电路的工作行为。Verilog-AMS则用于描述混合信号电路。Verilog-A/AMS可以直接使用简单的数学公式对电路或器件进行描述,因此可以获得仿真速度和精度的良好平衡。下文将探讨一下在RF设计中使用硬件描述语言Verilog-A/AMS的优缺点以及一些实际问题。
【关键词】Verilog-A RF NQS Hidden StateRF设计中使用Verilog-A
为什么我们在RF设计中使用硬件描述语言而非传统的模型?主要原因有以下几个。
1 RF设计中使用硬件描述语言而非传统的模型的原因
1.1 RF设计并不需要传统模型中所有的计算参数
RF设计关心的往往是高频的工作状态。电路本身往往不涉及直流偏置点的大范围变化、DC工作的准确性等等。因此,很多传统模型中复杂的计算对RF设计来说没有必要。
1.2 Verilog-A/AMS简单而高效
RF设计很多的参数都是频域参数,而模拟仿真器大多基于时域仿真。由于RF的调制特性,在瞬态仿真中观测结果会消耗很长的仿真时间。使用Verilog-A/AMS这样的描述语言,可以针对频域特性建模,在仿真速度和精度中灵活地做折衷,加快仿真验证。
1.3 设计人员可以书写非物理特性的模型
利用Verilog-A可以描述那些不基于物理实现的、或者物理上具有理想特性的电路,帮助进行设计和验证。
1.4 灵活的噪声特性,并且容易实现相关的噪声源
在RF设计中噪声是一个很重要的参数。Verilog-A中支持所有基本的噪声分布类型,也可以使用查表方式实现自定义的噪声分布。同时由于Verilog-A代码的书写基于计算公式,可以很容易的实现相关、半相关的噪声。这在标准化结构的传统模型中是不容易实现的。
1.5 可以进行针对电荷的描述而非电容,适合解决NQS问题
NQS问题,Non-Quasi-Static,是指在传统模型中,器件的沟道被模拟为一个电容,也就是当Gate电压变化时,沟道电荷随之立即变化。但电荷的变化实际上滞后于Gate电压变化。在RF电路中高速开关的沟道所产生的效应没有被准确的预测。传统模型中解决这个问题被器件模型框架所限制。而在Verilog-A中,我们完全可以计算沟道电荷的迁移速度,再得到沟道电势的建立,从而很好的描述NQS问题。
1.6 数字控制在RF领域十分常见,使用Verilog-AMS进行混合仿真适合这些设计
数字控制在RF领域被广泛应用,例如在PLL中的分频器,以及AGC(自动增益控制)中的数字计算部分。这种情况下,使用AMS混合描述便于设计和验证。除此之外,RF设计的测试平台本身很多时候也是数模混合的,也可以采用AMS模型进行描述。
目前,现在主流的器件供应商、模型和仿真软件都支持Verilog-A。并且多种模型标准已经将Verilog-A作为新的模型规范公开提供给使用者,包括:VBIC, HICUM, PSP, Mextram, EKV, HISIM, BSIMSOI等。
2 Verilog-A/AMS书写RF模型存在的问题
2.1 不同的仿真器对Verilog-A/AMS的支持不一
不同仿真器对Verilog-A语言的语句和函数的支持不一样。代码设计的时候要考虑到使用语句的通用性以及适合的仿真器。这个问题随着Verilog-A模型的越来越流行正在被解决。
2.2 RF仿真器要求特殊的Verilog-A书写技巧
RF仿真大多数基于PSS仿真(Periodic Steady State)。PSS仿真的计算对模型有以下要求:
(1)不允许使用Z变换。
(2)不允许使用absdelay函数。
(3)不允许使用absdelta函数。
(4)不允许存在Hidden state。
Hidden State指的是,如果模块内部使用了一个变量,其值来源于以前的时间点,这就导致平均化在这个时间点上难以完成。我们下面着重分析一下Hidden State问题。
解决Hidden State问题的方法无外乎三种:一,不保存内部状态;二,使用物理实现;三,换一种实现方法。第一种方法只适合代码保留了无必要的状态的情况。多数时候,我们保留状态是有原因的,因此我们只能寻求第二种或者第三种方法。第二种方法就是利用电路中的反馈、带有延迟的实际单元来保留状态,这种实现方式其复杂度接近实际电路,在追求简化和仿真速度的时候,我们更愿意选择第三种方法。我们用下面这个代码例子来看一下解决Hidden State问题:(为了节省篇幅,下面的代码省略了一些首位关键词)
PWMvol = PWMref>V(VCC, GND)?V(VCC, GND):PWMref;
@(timer(0, cycle)) slope = PWMvol/(cycle-falltime); wstart = $abstime; polar = 1;
@(timer(cycle-falltime, cycle)) slope = -PWMvol/falltime; wstart = $abstime; polar = -1;
V(VPWM) <+ (1+polar)*0.5*slope*($abstime- wstart)+(1-polar)*0.5*(2.5 + slope*($abstime- wstart));
代码的目的是保存每个周期的起始时间点,通过计算上升和下降斜率产生斜坡信号。但是由于保存每个周期的起始时间,就会导致Hidden State错误。
我们换个思路来考虑上面的代码。既然不允许保存每个周期的起始时间点,则意味着我们要在每个时间点上计算得到其所属的周期开始时间。我们可以通过使用取余数计算符%来进行这个计算。我们可以这样实现:
PWMvol = PWMref>V(VCC, GND)?V(VCC, GND):PWMref;//the high level of PWM singal
wstart = $abstime-($abstime%cycle); //cycle start
wtime = $abstime%cycle; //remain time
polar = (wtime<(cycle-falltime))?1:-1; // rising or falling part
slope = (polar>0)?(PWMvol/(cycle-falltime)):(-PWMvol/falltime); // slope
V(VPWM) <+ (1+polar)*0.5*slope* ($abstime- wstart)+(1-polar)*0.5*(PWMvol + slope*($abstime- wstart - cycle + falltime));
我们通过计算,可以得到当前时间点所在的周期的起始时间,从而计算当前时间点应该具有的电位。由于每个时间点中变量都是当前计算得到的,就解决了Hidden State的问题。
3 总结
在RF设计中使用Verilog-A/AMS描述语言能够给我们带来很多的便利和优势。因此也有越来越多的器件厂商、设计师开始使用Verilog-A/AMS。同时我们也看到在RF仿真中使用Verilog-A有独特的限制,需要我们采用一些技巧来规避这些限制。
参考文献
[1]Boris Troyanovsky,Patrick O’Halloran, and MarekMierzwinski,“Analog RF Model Development with Verilog-A”
[2]Ken kundert,“Hidden State in Spectre RF”
[3]Xiaodong Jin,Kanyu Cao,Jia-JiunnOu,Weidong Liu, YuhuaCheng,MishelMatloubian and Chenming Hu,“An Accurate Non-Quasistatic MOSFET Model for Simulation of RF and High Speed Circuits”
[4]MarekMierzwinski,Patrick O"Halloran,Boris Troyanovsky,and DavidSharrit,”Verilog-A/MS for RF Simulation”
作者简介
吴顺珉(1979-),男,浙江省杭州市人。现为美信(Maxim Integrated)半导体工程师。
作者单位
美信(Maxim Integrated) 上海市 201203
相关热词搜索: 仿真 Verilog AMS RF