340 likes | 486 Views
非线性模型器件的建立. 理想二极管的工作特性. 二极管的工作过程是当二极管在正向电压情况下处于导通状态,当二极管在反向电压情况下处于截至状态。要实现上述过程的方案有很多,在不同的情况下可以使用不同的方案。 用二极管的 i-v 特性曲线来描述二极管的特性就是实现二极管的一个方案。. 电阻方案. 伏安曲线方案. 最简单二极管的 MAST 模型. element template diode p m electrical p,m { val v vpm var i id state r rdiode state nu a,b number ron=1u
E N D
理想二极管的工作特性 • 二极管的工作过程是当二极管在正向电压情况下处于导通状态,当二极管在反向电压情况下处于截至状态。要实现上述过程的方案有很多,在不同的情况下可以使用不同的方案。 • 用二极管的i-v特性曲线来描述二极管的特性就是实现二极管的一个方案。 电阻方案 伏安曲线方案
最简单二极管的MAST模型 • element template diode p m • electrical p,m • { • val v vpm • var i id • state r rdiode • state nu a,b • number ron=1u • number roff=100meg • when(dc_domain|time_init){ • schedule_event(time,rdiode,roff) • } • values{ • vpm=v(p)-v(m) • }
最简单二极管的MAST模型1 • when(threshold(id,0,a,b)){ • if((a==1|a==0)&b==-1){ • schedule_event(time,rdiode,roff) • schedule_next_time(time) • schedule_next_time(time+1n) • } • } • when(threshold(vpm,1,a,b)){ • if((a==-1|a==0)&b==1){ • schedule_event(time,rdiode,ron) • schedule_next_time(time) • schedule_next_time(time+1n) • } • }
最简单二极管的MAST模型2 • equations{ • i(p->m)+=id • id:vpm=id*rdiode • } • } 返回
理想二极管的特性曲线 • 图为二极管典型的伏安特性曲线,从图可以看出,该设备为一个非线性设备,起特征方程为 • id = is • (e (vd • q)/k • T - 1)) • 式中is与二极管型号有关的常量、q、k都是常数,T为绝对温度
二极管的MAST模型 • 1 element template diode p m = is, ic # template header • 2 electrical p, m # header declarations • 3 number is = 1e-16, • 4 ic = undef • 5 external number temp • { # start of template body • 7 number k = 1.318e-23, # local declarations • 8 qe = 1.602e-19, • 9 vt • 10 val v vd • 11 val i id • 12 struc { • 13 number bp, inc; # Newton steps • 14 } nvd[*] = [(0,.001),(2,0)] • 15 parameters { # start of parameters section • 16 vt = k * (temp+273.15) / qe # compute thermal voltage • 17 } 头说明 局部定义 参数段 牛顿步长
二极管的MAST模型(1) • 18 values { # start of values section • 19 vd = v(p) - v(m) # diode voltage • 20 id = is * (limexp(vd/vt)-1) # diode current • 21 } # end of values section • 22 control_section { # start of control section • 23 newton_step (vd,nvd) # Newton steps assigned to vd • 24 initial_condition(vd,ic) • 25 start_value(vd,0.6) • 26 device_type("diode","example") • 27 small_signal(vd,voltage,"p-m voltage", vd) • 28 } # end of control section • 29 equations { # start of equations section • 30 i(p->m) += id # current contribut. of diode • 31 } # end of equations section • 32 } 初始化 小信号 线性化
头说明 • 在头说明中,定义了器件的连接点和argument,其argument量为is和ic,is是器件特征方程中的量,而ic是器件的初始值。 • 在头说明中还出现量另一个变量,就是temp变量,该变量描述的是器件工作的环境温度,而这个温度在本模块中不能找到,该变量设置为external。 返回
参数段 • 由于temp变量获得的温度参数为0c,本模板的参数段的主要作用就是将获得的温度转换为绝对温度,用专门的参数段来处理将不会增加仿真时间,影响仿真的速度。 返回
局部定义 • 在模板体中定义量三个数值型变量和一个结构体,其中有两个数值型变量为二极管特征方程中的常量,而另一个为中间变量。定义的结构体为两个数值型成员,在定义该结构体时就对该结构体初始化。定义该结构体的目的就是要对仿真步长进行控制。 返回
牛顿步长的控制 • 采用牛顿步长控制的目的就是在跌代过程中要对特征方程中自变量的变化量进行控制,牛顿步长控制的参数都定义为一个结构体,其中的两个成员通常表示breakpoint和increment。 • 12 struc { • 13 number bp, inc; • 14 } nvd[*] = [(0,0.001),(2,0)] • newton_step(vd,nvd)
牛顿步长的控制1 • ndv[*] 定义的是一个数组,该数组中的元素不确定,但其中的每一个元素都是一个结构数据。在本模板中,在定义该数组时就初始化了,因此该数组的元素为两个,每一个都是一个结构数据。 • 对于ndv数组和控制段中的牛顿步长控制就可以得出如下结果:当自变量在vd在0到2之间变化时,需要控制该变量的步长,其步长增益为0.001。 返回
二极管模板的初始化 • 在控制段中采用了两个初始化命令,它们是initial_condition和start_value。这两个函数的用法是相似的。initial_condition( vd, ic)和start_value( vd,ic),它们的作用都是将初始条件ic赋给变量vd,但是它们也有区别。 • 仿真器在作DC分析时,默认情况下是将系统中的每个节点电压赋值为0,但是如果器件中使用了start_value函数,则在作DC分析时与该器件连接的节点将满足start_value函数确定值的要求。而initial_condition函数确定的值将在整个DC分析时满足该条件。 返回
小信号参数 • 在本模板的控制段使用了小信号参数。小信号参数主要用于ssp命令提取的参数。其中的 device_type(“diode”,“example”)为提取报告的名称,而small_signal为小信号提取的参数。其语法定义为:small_signal为关键词,通常情况下它是由4栏组成(也可以是5栏,在这里只讲4栏的情况)。 • small_signal(Parameter Name Classification Value ) 返回
指数函数 • 在saber中有两个指数函数,一个是exp(x)函数,另一个是limexp(x)函数。Exp(x)的定义与数学上的指数函数的定义相同,而在saber中linexp(x)的定义如下: 返回
非线性器件的线性化 • 从前面的模型可以看出,对于模拟器件的仿真而言其仿真过程就是解方程的过程,但是我们知道,如果描述器件特征的方程是非线性方程,在数学中还没有很好的有效的办法来解非线性微分方程组,在通常情况下都是将模型线性化。对于saber仿真器而言也不例外,对于非线性模型的线性化方法将作简单的讲述。
非线性模型的线性化方法1 • 通常的方法就是给出特征方程中的点和在该点的斜率的方法。使用该方法就需要特征方程本身和特征方程的一阶导数,同时要求特征方程和其一阶导数必须连续,否则该方法可能不能发挥作用。但是对于有些模型而言,要满足这个条件是比较困难的,例如限幅模型等。
非线性模型的线性化方法2 • 另一种解决非线性化模型的方法就是建立折线模型,用折线模型来近似的代替曲线模型。解这种方程通常只需要方程本身连续而不需要方程的一解导数连续。但是该方法建立的模型就是一个近似模型,仿真的精度完全取决于建立模型的精度,不能在仿真中提高精度
非线性模型的线性化方法3 • 折线线性化估算模型。saber中采用的就是这个模型。它解决问题的思路与方法2相似,也是用近似的折线模型,因此它需要的是方程本身连续而不需要其一阶导数连续,但是它克服方法2中缺点。它在建立的模型时候采用的是曲线模型(精确模型)和采样点,但是它是仿真器根据精度的需要来线性化该模型。
建立vsqr模型 • vsqr模型可以作为一个电压源模型,其输出电压为输入电压的平方,因此这个模型是一个典型的非线性模型。
vsqr的MAST模型 • element template vsqr ip im op om • electrical ip, im, op, om # header declarations • { • var i iout # local declarations • val v vin, vout • # sample points defined • struc {number bp, inc;} svin[*]=\ • [(-100k,1),(-1k,.1),(10,.01),\ • (0,.01),(10,.1),(1k,1),(100k,0)] • values { • vin = v(ip) - v(im) # input voltage • vout = v(op) - v(om) # output voltage • } # end of values section
vsqr的MAST模型1 • control_section { • sample_points(vin, svin) # sample points associated • # with input voltage • } # end of control section • equations { • i(op->om) += iout # current contribution • iout: vout = vin * vin • } # end of equations section • } 头、value段和方程段 控制段 小结
模板的头和value段和方程段 • 在本模板的头中定义了4个连接点,4个连接点均为电气型,该模板中没有argument。 • 在模板中的value段中,定义了该模板的输入端电压和输出端电压,而其端电压变量均定义为val型变量。 • 该模板的方程段与其它电压型器件完全相同。但是该模板的方程段没有完全描述该器件的特征,它需要采样点。 返回
模板的控制段 • 在本模板的控制段中采用了sample_points (variable, sa_points) 这种形式,这就是指定变量并且指定采样点的形式。该语法的关键词为sample_points,其中需要指定采样点的变量为variable,变量的采样值为sa_points,sa_points通常为一个数组,数组中的元素为一个结构。 • 采样点的指定:struc {number bp, inc;} svin[*]其中的bp为breakpoint,而inc为breakpoint间的增量。
采样点的指定规则 • struc {number bp, inc;} svin[*]=\ • [(-100k,1),(-1k,.1),(-10,.01),(0,.01),\ • (10,.1),(1k,1),(100k,0)] • 在指定采样点时,其breakpoint点必须要过0点,并且其采样点要以0点对称。 • 上述svin的变化范围在-100k到100k之间,在其间增加了一些breakpoint,这主要是在各个变化区间其增益不同。
采样密度 • 在建立模型时虽然已经指定了某个变量的采样点,但是如果在仿真时发现每个模型的精度不够或精度过于而仿真时间过长,可以在不修改模型的情况下修改其采样点,这就是修改density参数。这个参数的修改将改变采样点中的增益项,实际的增益为设置的增益/density的值。但它不会改变breakpoint的值。但是任意两个breakpoint间的点不能超过231-1。在默认设置下( density为1),在仿真中实际执行的采样点与设置的采样点相同。
默认采样点 • [(-1t,1meg), (-1g,1k), (-1meg,1), (-1k,1m),\ • (1,1u),(1m,1n), (-1u,1p), (0,1p), (1u,1n),\ • (1m,1u), (1,1m),(1k,1), (1meg,1k), 1g,1meg),\ • (1t,0)] • [(-1d12,1d6), (-1d9,1d3), (-1d6,1d0), \ • (-1d3,1d-3), (-1d0,1d-6), (-1d-3,1d-9), \ • (-1d-6,1d-12), (0d0,1d-12), (1d-6,1d 9), \ • (1d-3,1d-6), (1d0,1d-3), (1d3,1d0),\ • (1d6,1d3), (1d9,1d6), (1d12,0d0)]
logsam函数 • logsam函数是saber自带的一个获得采样点的函数,使用该函数可以获得对数坐标系下的采样点,该函数的返回值为一个结构数据,该结构数据有两个元素。该函数有4个变量logsam(min, max, step_per_decade, density_per_density,[sa_points])
logsam函数1 • 其中min和max为breakpoint的最大值和最小值,step_per_decade在对数坐标中的一个单位量中breakpoint的个数,其中每个点间的距离是相等的(在对数坐标系中)在对数坐标中的一个单位量中的采样密度。该量决定的是增益量,也就是在两个相邻的breakpoint中需要插入的点数。
logsam函数使用实例 • logsap (1u,1meg,1,x) • -1e6, -1e5, -1e4, -1e3, -1e2, -10, -1, -1e-1, -1e-2, • -1e3, -1e-4, -1e-5, -1e-6, 0, 1e-6,...,1e6 • logsap (1u,1meg,3,x) • -1e6, -4.641e5, -2.154e5, -1e5, -4.641e4, -2.154e4, • -1e4,...0, 1e-6,-4.641e-5, -2.154e-5,...,1e6 • logsap (1u,1meg,0.5,x) • -1e6, -1e4, -1e2, -1, -1e-2, -1e-4, -1e-6, 0, 1e-6,...,1e6 • logsap (1u,1meg,1,90) • (-1e6,1e4) (-1e5,1e3), (-1e4,1e2), (-1e3,1e1),(-1e2,1e0), (-1e1,1e-1), (-1e0,1e-2), (-1e-1,1e-3),(-1e-2,1e-4), (-1e3,1e-5), (-1e-4,1e-6), (-1e-5,1e-7),(-1e-6,1e-8), (0,1e-8), (1e-6,1e-7), (1e-5,1e-6),(1e-4,1e-5), (1e-3,1e-4), (1e-2,1e-3), (1e-1,1e-2),(1e0,1e-1), (1e1,1e0), (1e2,1e1), (1e3,1e2), (1e4,1e3),(1e5,1e4), (1e6,0) 返回
MAST建模小结 • MAST语言建模通常分为两个大类,一种是结构化模型,另一种是非结构化模型,非结构化模型通常用在比较简单的模型中。 • 结构化模型就是根据功能的不同将模板分为许多段,对于结构化模型通常拥有以下一个或多个段,这要根据模板的复杂程度。
结构化模板的组成 • 模板通常是由这11个部分组成,通常情况在写模板的时候单位的定义和连接点的定义是不需要的,在saber的内部文件中已经定义了(units.sin),如果使用的单位和连接点在该文件中没有定义,则需要这部分。 • Unit definitions • Connection point definitions • Template header • Header declarations • { • Local declarations • Parameters section • Netlist section • When statements • Values section • Control section • Equations section • }