1、MAST语言建模MAST语言建模概述 MAST语言是一种硬件描述语言,它是用数学的方法来描述的,它可以描述硬件的结构,也可以描述硬件的功能。建立描述硬件结构的模型比较难,如果建立得比较好,其精度较高;建立描述功能的硬件模型相对比较简单,但在使用这种模型的时候受到比较多的限制。MAST语言的结构和功能 MAST语言可以描述很多种类型的器件,包括模拟器件、数字器件等。MAST语言的结构主要包括两种方式,一种是structured方式,另一种是unstructured方式。structured 方式就是将程序体分成许多段,即在程序体中包括许多程序段;unstructured的程序体中的程序没有分段。
2、structured和unstructured的比较理想恒流源的模型 template isource p m=is electrical p,m number is=100 equations i(p-m)+=is 理想恒流源模板简介 模板头、头说明和模板体,在模板体中包含方程段。模板头说明模板名、模板的连接点和使用模板时需要赋值的变量,这个变量必须是在网表中进行赋值。定义模板头的格式为:template template_name connection points=arguments 定义模板头的关键字为template和element template。这两者的区别一个是内部节点可见而
3、另一个是内部节点不可见。理想恒流源模板简介(续1)template_name是模板名,在通常情况下该模板的文件名和这个模板应该一致。Connection points是定义的端点名,而argument则是使用这个模板时需要赋值的变量,这个变量是通过网表来赋值的。模板头说明:说明在模板头中出现的除模板名以外的所有变量,它应位于模板头之下。在恒流源模板中,有两个类型的变量需要说明,一个是节点类型,另一个是变量类型。理想恒流源模板简介(续2)模板连接点是一种特殊的数据类型,在SABER中叫pin类型。它与建立的模板有关。pin 类型可以是机械连接点、热连接点电连接点。由于在恒流源的连接点是电,因此其
4、连接点说明为electrical p,m。作为头说明的另一部分就是对模板参数的说明,它需要说明的是模板参数的类型,即数的类型。关于数的类型将在后面讲述。在本模板中就定义了一个数。number is理想恒流源模板简介(续3)对于一个模板来讲,连接点和模板参数并不是必须的,在一些模板中并没有连接点,也有一些模板就可能没有参数。对于一个模板而言,通常情况下除了模板头以外还有模板体,模板体都是在一对括号中,在isource模板中的模板体就是一个方程段。理想恒流源模板简介(续4)isource 中的方程段是用MAST语言结构体的形式描述恒流源的特征,实际上就是用模板方程来描述器件模拟端口的特征。在恒流源
5、模型中,电流是从p点流进从m点流出,因此在方程段中要描述这一特征,在MAST中描述这一特征 i(p-m)+=is系统对模板的调用 假设有一个系统调用了这个恒流源模板isource,在这个系统中这个恒流源的名字为i1,这个恒流源的两端与节点a、b相连,恒流源电流的大小为2,则调用这个模板的语句为:isource.i1 a b=is=2,网表与模板间的对应关系:isource.i1 a b=is=2 template isource p m=is理想恒流源模型的创建 上述模型描述的电流从p点流进、m点流出,其电流的大小为is,在使用这个器件时在网表中要对这个值进行赋值。用任何文本编辑器编写上述这段
6、文本后,以文件的扩展名为.sin存盘。通常情况下文件名和模板名要一致,如果文件名和模板名不一致时在使用这个模板的网表中要包含这个文件。线性电容模板 template capacitor p m=cap electrical p,m number cap equations i(p-m)+=d_by_dt(cap*(v(p)-v(m)MAST模板的搜寻机制 当SABER仿真器遇到了先前没有定义的模板时x,它首先在x.sin文件中寻找该模板。如果没有这个文件,则SABER仿真器将在include语句中所包含的文件中去寻找x模板,如果在include文件中仍没有找到x模板,则将在映射文件中寻找x 模
7、板,如果仍没有找到该模板,就送出错误信息。pin 类型数据 在MAST语言中,所谓指针就是元件模板的对外连接点的一种形式,它也是模板对外连接的最常用的一种形式,定义指针实际上就是定义了元件的一种连接方式。pin 类型数据是SABER仿真器中定义的一种数据,这种数据是专门针对器件的连接点,它包括很多种类型的连接点,它们是通过量纲来定义连接端点的类型的。pin 类型数据(1)每定义一种连接点就定义了一对变量,一个是cross变量,另一个是through变量。定义一个端点和定义一个连接点的cross变量和through变量是等价的。在定义一个pin 变量的同时也定义了这个变量的量纲。模拟量单位的定义
8、 unit“缩写”,”全称”,”描述”名字 unit“rpm”,”revolutions/minute”,”argular velocity”w unit A,Amperes,Current i unit V,Volts,Voltage vcross 变量和through变量 cross 变量是系统变量,其主要特征是经过任何一个回路,cross变量值的和位0。在电气系统中的cross变量是系统中节点电位。through变量是与cross变量相对应的系统变量,through变量的主要特征是任意一节点其值的和为0。在电气系统中的through变量为电流。连接点的定义 pin identifer a
9、cross uint1 through unit2 或 pin identifer through unit1 across unit2 pin electrical through i across v pin rotational through w across t 在编程时,之所以可以利用electrical这样的端点定义,是因为在SABER中有一个文件unit.sin,在其中定义了这个端点。在这个文件中定义的所有其它端点,都可以在编程中不需要定义直接使用,但是如果要使用在该文件中没有定义的端点,则需要自己定义。SABER仿真的过程节点分析法 根据电路的结构,应用KCL定律,用节点电压
10、去表示之路电流,最后求解节点电压的方法叫节点电压法。从上面的叙述可以看出,节点电压法是根据电路的结构,首先求出电路的节点电压,然后再求电路中各个之路的电流。SABER仿真过程(续1)SABER仿真器解方程时采用的是节点法,在通常情况下器件端点电压是由系统的结构决定了,也就是说如果系统的结构一定则系统中各个器件端点电压就是一定的,因此SABER仿真器认为系统中各个器件的端点电压是已知的,而需要求的就是各个器件的电流。SABER仿真过程(续2)恒电压源的工作过程 从前面的介绍可以知道,仿真器是以获得电流为最终目的,如果一个系统的一个之路的电流没有获得,仿真器则认为没有达到最终的目。但是恒压源的的电
11、流受系统结构的限制,如果系统结构不能确定,则恒压源的电流将不能确定。恒电压源模板 template vsource p m=vs electrical p,m number vs var i ivs equations i(p-m)+=ivs ivs:v(p)-v(m)=vs 恒电压源模板简介 在SABER仿真器都是采用节点法解方程,并以求解之路电流为最终目的,也就是说如果求得了之路电流,SABER仿真器就认为完成了任务。在恒电压源模块中,由于电源电压和电流之间的关系受系统的影响,在系统不确定时不可能通过电源的电压来求得电源的电流。恒电压源模板简介(续)在模板体中设置一个变量,该变量为系统变量
12、(var型变量),用这个变量来描述电源的电流。电源电流的确定要满足两个条件,一要满足电源电压恒定,二要满足KVL定律。在模板中有多少个系统变量,在方程段中就应该有多少个方程。在模板体中设置系统变量的方法 var是在模板体中常用的变量,var型变量为系统变量。在系统中如果增加一个var变量,则在方程段中就要增加一个方程来求解该变量。var unit name,name.在方程段中指定方程的格式为:var_variable:expression1=expression2 template inductor p m=ind electrical p,m number ind var i il equ
13、ations i(p-m)+=il il:v(p)-v(m)=d_by_dt(ind*il)线性电感模板的特点 在前面已经讲过,SABER仿真器是以解之路电流为最终目的,因此在方程段中建立方程时都是以解电流为目的。但是在电感的特征方程中电流是电压的积分,为了将其转换为微分方式,在模板体中添加了一个系统变量,利用系统变量来转换这种关系。在模板间使用MAST系统变量 在本部分主要内容是模板间的参数相互调用而不需要连接点,这类器件比较多,在SABER元件库中也有这类器件,例如互感器件,受控源等。耦合元件的使用耦合器件的仿真波形在模板间使用MAST系统的方法 在一个模板中定义了一个through变量,
14、如果在系统中的其它模板要用这个变量的值,则可以在模板中定义一个端点变量,该变量的类型为ref 型,模板可以从ref型端点变量中输入through变量值,而不需要经过连接点。CCVS模板 template cvt ci p m=k ref i ci electrical p,m number k var i i equations i(p-m)+=i i:v(p)-v(m)=k*ci CCVS模板的特点 该模板在头说明中定义了一个ref变量,该变量为一个端口变量,其值为仿真系统中其它模板的through变量,但是ref型端点变量由两部分组成,一部分是引用模板名,另一部分是模板中被引用的变量名。r
15、ef型变量的特点 ref 变量和var变量都是系统变量,对于任何一个系统变量都因该有一个方程与之对应。对于一个pin类型数据,它有两个系统变量,一个是对应的through变量和cross变量,SABER仿真器认为cross变量为已知量,在通常情况下它通过KCL定律来求解through变量;对于设置的var变量,在方程段中因该指定方程来求解该变量;对于ref变量,也因该有一个方程来求解这个变量,但这个方程不在定义ref变量的模板内,而在被引用的模板内。ref型变量的特点(续)ref 变量的定义通常在模板头中。ref unit pname CCVS模板的引用方法:cvt.1 i(v.1)a b=1
16、k v.1 c d=5 v模板是SABER库中的模板,而i是其作为var 变量的分支电流。从这个引用中可以看到,ref变量的赋值有两部分,一个是模板的实例名,另一个是模板实例中的through变量名。CCVS模板方程段的特点 在本模板的方程段中添加了一个方程来求解系统变量,这个系统变量是在模板体中设置的,其设置的原因与恒电压源的情况相同。互感器件模板的使用 inductor.l1 p:p1 m:m1=ind=1 inductor.l2 p:p2 m:m2=ind=2 mutind.1 i1:il(inductor.l1)i2:il(inductor.l2)=m=0.98*sqrt(ind(in
17、ductor.l1)*ind(inductor.l2)互感器件模板 template mutind i1 i2=m ref i i1,i2 number m equations i1-=d_by_dt(m*i2)i2-=d_by_dt(m*i1)在本模板中,没有确定电流i1和i2,在这个模板中的i1和i2都是引入量,求这两个量的方程分别在电感模板中方程段il:v(p)-v(m)=_by_dt(ind*i)在本模板的方程段中定义了变量i1和i2的关系。CCVS模板和互感模板的区别 这两个模板的相同点就是这两个模板都用了ref型变量,从这两个模板中可以体会到ref变量的使用。这两个模板的不同点就是
18、在方程段中,CCVS模板在方程中没有方程来描述ref变量,但在互感模板中的方程段中的方程就描述了两个ref变量间的关系。无论在方程段中是否有方程来描述ref变量,但是该方程决不是求解ref变量,ref变量在本模板中不能求解,它的解因该在被引用的模板中。电容模板element template capacitor_1 p m=cap,icelectrical p,mnumber cap,ic=undefval q qcval v vcvalues vc=v(p)-v(m)#voltage across cap.qc=vc*cap#charge stored in cap.control_sect
19、ioninitial_condition(vc,ic)equations i(p-m)+=d_by_dt(qc)#current through cap.电容模板的特点 在模板定义中使用的是element template而不是template,这说明这个模板内部节点可见。在头说明中添加了一个量ic,这个量描述的是电容初始状况。在头说明还用了一个数字就是undef,这在SABER仿真器中是一个数,这个数可以对变量赋值,在本模板中它对ic赋值。它可以用在条件语句中,但是这个数不能计算。ic=undef表明如果没有其它值赋值的情况下,电容初始状况可以忽略不计。电容模板的特点(续1)在建立实际系统时
20、常常使用value段,这主要是因为:定义一种变量,val型变量,这种变量主要好处就是可以通过extract指令来提取,这样在不增加仿真时间的情况下可以获得更多的信息。一个val变量通常作为中间变量。而val变量的赋值就在value段中。调用foreign例程和噪声源的定义通常都是在这段。value段既是一个程序段,也是一个说明段。作为程序段,在执行该段程序时是从上到下的顺序,因此在编程时引用的变量一定要在前面定义;作为一个说明段,仿真认为需要该变量时才会执行该段对应的语句。电容模板的特点(续2)电容模板的另一个特点就是在仿真完成后需要提取一些变量,为仿真提供更多的信息。在仿真结束后,本模板可以
21、提供电容两端的电压和电容储存的电荷,这两个量可以通过extract命令来提取,也可以在siglist中设置。因此在Value中定义了两个val变量。Value段的特点 在value段中可以包括赋值语句和条件语句,赋值语句的格式为:variable=expression value段既是一个顺序段,也是一个说明段。作为程序段,在执行该段程序时是从上到下的顺序,因此在编程时引用的变量一定要在前面定义;作为一个说明段,仿真认为需要该变量时才会执行该段对应的语句。value段的关键词是value.Value段的特点(续)只有仿真器需要提取相关变量时才会执行Value段;当方程段中需要Value段中的变
22、量时才会执行Value段。如果不需要时,模板中的Value段是不会被执行的。因此在模板程序中编写Value段不会增加仿真时间(在提供相同信息的情况下),但是如果在需要的话,模板程序可以提供更多的信息。val变量的定义 val 变量必须为局部变量,即val变量必须在程序的模板体中定义。val unit name,name,name,.val q qc val v v val 型变量必须在value段中赋值。如果模板为unstructured,则必须在模板体中赋值。控制段 控制段是为仿真器提供仿真系统的系统信息而不是仿真系统中元件的信息,控制段的关键词是control_section,在关键词后接
23、 。在本模板中,使用了initial_condition(vc,ic),它确定的是系统仿真时的电容初始条件是端电压为vc。initial_condition的使用 在一些模板中,需要确定其初始条件,确定初始条件通常都是在控制段中。initial_condition(variable,value)其中variable为需要确定初始条件的系统变量或系统变量的差,value为初始条件的值。多类型电压源 下面将建立一个电压源模板,该模板有如下功能:1)提供恒压源在作直流分析和时域分析 2)在作时域分析时电压源提供一个指数函数的电压波形。3)在作小信号AC分析时,它可以作为一个频域信号。这个电压源模拟了
24、三种不同的输出函数。)1)(1()2()1()(teVVVtV多类型电压源模板1 element template vsource_1 p m=supply,tran,ac2 electrical p,m#header declarations3 number supply=045 struc#start of tran structure6 number v1=0,#initial voltage7 v2=0,#voltage at time=inf8 tau=0.000001#time constant9 tran=()#end of tran structure1011 struc#st
25、art of ac structure12 number mag=0,#AC magnitude13 phase=0#AC phase14 ac=()#end of ac structure/15#start template body16 var i is#local declarations17 val v vs组合数简单数多类型电压源模板(续)values 19 if(dc_domain|time_domain)#If large signal20 if(tran-v1=0|tran-v2=0)&tran-tau0)21#If waveform is defined22 vs=tran-
26、v1+(tran-v2-tran-v1)*(1-exp(-time/tran-tau)23#source voltage=waveform24#at current time25 else#otherwise26 vs=supply#source voltage=supply27 28 29 else if(freq_mag)#or if source is ac magnitude30 vs=ac-mag#source voltage=magnitude31 32 else if(freq_phase)#or if source is ac phase33 vs=ac-phase#sourc
27、e voltage=phase34 模板体结构模板体结构V V段的作用段的作用方程段方程段多类型电压源模板的特点 在模板头说明中定义了一个supply变量,该变量在直流分析或时域分析时提供恒压源。在头说明中,定义了两个结构体,用于确定时域分析时的指数电压源和频域分析的激励源。在结构体中,使用了仿真器变量(simvar),在value段中使用了使用了条件判据。MAST语言中的简单数 简单数据:简单数据有三种类型,它们分别是number,enum,string。它们分别是数值型数据,枚举型数据和字符数据。数值型数据:在MAST语言中,实数和整数都可以对数值型变量赋值,在使用是不区别。枚举型数据的定
28、义:对象的名字有有限个,而在一个时刻其中只有一个是正确的。字符数据:这些数据就是有字符串组成,其内容通常要用引号。数值数值枚举枚举字符字符电源电源MAST语言中的数值型数据 数值型变量的定义:number id1=init,id2=init e.g number vcc=5,dc_input,rload=10k,cload如果上述数据是一个中的变量,则可以通过网表赋值,其赋值的方式分别为(argument),(templatename.ref connection point5,2.7,10k,47n)(templatename.ref connection point=cload=47n,v
29、cc=5,dc_input=2.7,rload=10k)返回返回MAST语言中的枚举数enum evalue,evalue id=int1,int2 e.g.enum_n,_p bjt_type=_n 如果定义的枚举型数据为一个变量,则可以在网表中对该变量赋值(argument).templatename.ref connection point bjt_type=_n返回返回MAST语言中的字符数 字符数的定义 string id=init,init string coretype=“iron”如果字符为一个变量,则其值可以通过网表赋值,其赋值方式为:templatename.ref con
30、nection point coretype=“iron”返回返回MAST语言中组合数据 组合数据:组合数据有两种基本类型,一种是结构数据(struc),另一种是联合数据(union)。采用结构数据的目的是把一些相关变量构成一个整体,而采用联合变量的目的是希望一个变量在不同的时候处理不同类型的信息。组合数据都由四个部分组成,关键词、数据名、数据定义和数据对象的实体。但是联合数据的每一个实体只有数据定义中的一个对象,而结构数据则没有这个特点。电源联合联合结构结构结构体的定义结构体是一种数据类型,其定义的方式为:struc structurename membermember.id=initial
31、_value,id=initial_value,.struc为定义结果体的关键词,structurename为结构体的名,member为结构体成员,id为结构体变量。由于本设计中描述指数输出波形的函数为:Vout=V1+(V2-V1)(1-e)(-time/),因此在tran这个结构变量中的成员为3;结构体的定义实例 struc#start of tran structure number v1=0,#initial voltage v2=0,#voltage at time=inf tau=0.000001#time constant tran=()#end of tran structur
32、e/5 struc 6 number v1=0,7 v2=0,8 tau=0.0000019 tran=()struc number v1,v2,tau tran=(0,0,0.000001)结构体的使用 结构体变量的值要么在初始化结构体获得,要么通过网表传输进来,如果一个结构体的数据在初始化时就赋值了,在网表中又赋值,则仿真器将采用网表输入的数据,如果一个结构体在初始化时没有赋值,在网表中也没有赋值,则在仿真时将报错。返回返回联合数据的定义 联合数据的定义:定义结构数据用关键词union,其定义的语法为 union unionname declaration declaration id=i
33、nit,init.联合数据的定义实例 union source number dc struc number mag number phase ac input1=(dc=5),input2=(ac=()定义了一个联合类型的数据,该数据由两个选项dc和ac组成,其中ac为一个结构体。联合数据的定义实例(1)union source number dc struc number mag number phase ac input1,input2 union source input1=(dc=5),input2=(ac)在模板头中引用时为 t e m p l a t e n a m e.r e
34、f c o n n e c t i o n p o i n t input2=(ac=(mag=1,phase=0)返回返回模板函数体的结构电压源模板电压源模板仿真器变量仿真器变量条件判断条件判断仿真器系统变量 SABER仿真器中有一套仿真器系统变量,用它们来判断仿真器所进行的仿真类型和对仿真器的控制。这些变量为系统的内部变量,在使用这些变量时,不需要定义这些变量。如果将这些定义变量时使用了这些变量名,出现的后果不可预计。仿真器系统变量表直流时域控制模板体结构频域频域分析仿真器系统变量的说明 freq_domain:系统作频域分析时该变量值为1,其它情况下该变量值为0。freq_mag:在作频
35、域分析时且仿真器需要相量的幅值时该变量为1,其它情况该变量为0。freq_phase:在作频域分析时且仿真器需要相量的相角时该变量为1,其它情况该变量为0。freq:频域仿真当前时刻的频率。变量表时域分析仿真器系统变量的说明 time_domain确定的是系统是否在作时域暂态仿真,如果系统在作时域暂态仿真,该变量的值不为0,否则该变量的值为0。time_init和tr_start都是在时域分析开始时该变量的值为1,但是在使用continuous和alter命令时time_init将不会为1而tr_start将会为1。tr_done和time_step_done分别在时域仿真完成时和时域仿真的每
36、一个补偿完成时被设置为1。变量表控制型仿真器变量的说明 time 确定的是系统在作时域暂态分析时仿真器当前的时间,仿真器在作其它分析时该变量的值为0 Next_time 用于指定仿真的下一个时间点。Step_size 用于获得当前仿真步长值。Statistic:当系统在作统计仿真的时候,该变量的值为1。变量表直流分析仿真器系统变量的说明 dc_domain:系统在作直流分析时该变量的值为1,其它情况下该变量的值为0。dc_init:在开始作直流分析时该变量的值为1,这些直流分析包括工作点分析(dc)、dt分析和dctr分析的直流部分。dc_start:这时SABER早期版本的一个变量,为了与早
37、期版本兼容,仍保留了这个变量,这个变量的作用与dc_init相同,但在作dt分析时,该变量无效。在SABER的后期版本中,也是首先将dc_init量赋为1后dc_start才变为1。dc_done:就是在直流分析完成后该变量的值为1。变量表MAST语言中的条件判据 MAST语言的条件判据与其它高级语言的条件判据基本相同,其结构为 if(condition1)statement1 else if(condition2)statement2.else statementN if else是MAST语言的关键词,condition为MAST语言的条件,如果条件为假则其值为0,如果条件为真,则其不为0。MAST语言的运算符=等于=不等于 大于=大于或等于 小于 m)+=is is:v(p)-v(m)=vs 电源模板