MAST语言建模课件_第1页
MAST语言建模课件_第2页
MAST语言建模课件_第3页
MAST语言建模课件_第4页
MAST语言建模课件_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MAST语言建模MAST语言建模概述MAST语言是一种硬件描述语言,它是用数学的方法来描述的,它可以描述硬件的结构,也可以描述硬件的功能。建立描述硬件结构的模型比较难,如果建立得比较好,其精度较高;建立描述功能的硬件模型相对比较简单,但在使用这种模型的时候受到比较多的限制。MAST语言的结构和功能MAST语言可以描述很多种类型的器件,包括模拟器件、数字器件等。MAST语言的结构主要包括两种方式,一种是structured方式,另一种是unstructured方式。structured方式就是将程序体分成许多段,即在程序体中包括许多程序段;unstructured的程序体中的程序没有分段。理想恒流源的模型templateisourcepm=iselectricalp,mnumberis=100{equations{i(p->m)+=is}}理想恒流源模板简介模板头、头说明和模板体,在模板体中包含方程段。模板头说明模板名、模板的连接点和使用模板时需要赋值的变量,这个变量必须是在网表中进行赋值。定义模板头的格式为:templatetemplate_nameconnectionpoints=arguments定义模板头的关键字为template和elementtemplate。这两者的区别一个是内部节点可见而另一个是内部节点不可见。理想恒流源模板简介(续1)template_name是模板名,在通常情况下该模板的文件名和这个模板应该一致。Connectionpoints是定义的端点名,而argument则是使用这个模板时需要赋值的变量,这个变量是通过网表来赋值的。模板头说明:说明在模板头中出现的除模板名以外的所有变量,它应位于模板头之下。在恒流源模板中,有两个类型的变量需要说明,一个是节点类型,另一个是变量类型。理想恒流源模板简介(续3)对于一个模板来讲,连接点和模板参数并不是必须的,在一些模板中并没有连接点,也有一些模板就可能没有参数。对于一个模板而言,通常情况下除了模板头以外还有模板体,模板体都是在一对括号中,在isource模板中的模板体就是一个方程段。理想恒流源模板简介(续4)isource中的方程段是用MAST语言结构体的形式描述恒流源的特征,实际上就是用模板方程来描述器件模拟端口的特征。在恒流源模型中,电流是从p点流进从m点流出,因此在方程段中要描述这一特征,在MAST中描述这一特征i(p->m)+=is系统对模板的调用假设有一个系统调用了这个恒流源模板isource,在这个系统中这个恒流源的名字为i1,这个恒流源的两端与节点a、b相连,恒流源电流的大小为2,则调用这个模板的语句为:isource.i1ab=is=2,网表与模板间的对应关系:isource.i1ab=is=2templateisourcepm=is线性电容模板templatecapacitorpm=capelectricalp,mnumbercap{equations{i(p->m)+=d_by_dt(cap*(v(p)-v(m)))}}MAST模板的搜寻机制当SABER仿真器遇到了先前没有定义的模板时x,它首先在x.sin文件中寻找该模板。如果没有这个文件,则SABER仿真器将在include语句中所包含的文件中去寻找x模板,如果在include文件中仍没有找到x模板,则将在映射文件中寻找x模板,如果仍没有找到该模板,就送出错误信息。pin类型数据在MAST语言中,所谓指针就是元件模板的对外连接点的一种形式,它也是模板对外连接的最常用的一种形式,定义指针实际上就是定义了元件的一种连接方式。pin类型数据是SABER仿真器中定义的一种数据,这种数据是专门针对器件的连接点,它包括很多种类型的连接点,它们是通过量纲来定义连接端点的类型的。模拟量单位的定义unit{“缩写”,”全称”,”描述”}名字unit{“rpm”,”revolutions/minute”,”argularvelocity”}wunit{"A","Amperes","Current"}iunit{"V","Volts","Voltage"}vcross变量和through变量cross变量是系统变量,其主要特征是经过任何一个回路,cross变量值的和位0。在电气系统中的cross变量是系统中节点电位。through变量是与cross变量相对应的系统变量,through变量的主要特征是任意一节点其值的和为0。在电气系统中的through变量为电流。连接点的定义pinidentiferacrossuint1throughunit2或pinidentiferthroughunit1acrossunit2pinelectricalthroughiacrossvpinrotationalthroughwacrosst在编程时,之所以可以利用electrical这样的端点定义,是因为在SABER中有一个文件unit.sin,在其中定义了这个端点。在这个文件中定义的所有其它端点,都可以在编程中不需要定义直接使用,但是如果要使用在该文件中没有定义的端点,则需要自己定义。节点分析法根据电路的结构,应用KCL定律,用节点电压去表示之路电流,最后求解节点电压的方法叫节点电压法。从上面的叙述可以看出,节点电压法是根据电路的结构,首先求出电路的节点电压,然后再求电路中各个之路的电流。SABER仿真过程(续1)SABER仿真器解方程时采用的是节点法,在通常情况下器件端点电压是由系统的结构决定了,也就是说如果系统的结构一定则系统中各个器件端点电压就是一定的,因此SABER仿真器认为系统中各个器件的端点电压是已知的,而需要求的就是各个器件的电流。SABER仿真过程(续2)恒电压源模板templatevsourcepm=vselectricalp,mnumbervs{variivsequations{i(p->m)+=ivsivs:v(p)-v(m)=vs}}恒电压源模板简介在SABER仿真器都是采用节点法解方程,并以求解之路电流为最终目的,也就是说如果求得了之路电流,SABER仿真器就认为完成了任务。在恒电压源模块中,由于电源电压和电流之间的关系受系统的影响,在系统不确定时不可能通过电源的电压来求得电源的电流。

templateinductorpm=indelectricalp,mnumberind{variilequations{i(p->m)+=ilil:v(p)-v(m)=d_by_dt(ind*il)}}线性电感模板的特点在前面已经讲过,SABER仿真器是以解之路电流为最终目的,因此在方程段中建立方程时都是以解电流为目的。但是在电感的特征方程中电流是电压的积分,为了将其转换为微分方式,在模板体中添加了一个系统变量,利用系统变量来转换这种关系。在模板间使用MAST系统变量在本部分主要内容是模板间的参数相互调用而不需要连接点,这类器件比较多,在SABER元件库中也有这类器件,例如互感器件,受控源等。耦合元件的使用耦合器件的仿真波形在模板间使用MAST系统的方法在一个模板中定义了一个through变量,如果在系统中的其它模板要用这个变量的值,则可以在模板中定义一个端点变量,该变量的类型为ref型,模板可以从ref型端点变量中输入through变量值,而不需要经过连接点。CCVS模板templatecvtcipm=kreficielectricalp,mnumberk{variiequations{i(p->m)+=ii:v(p)-v(m)=k*ci}}CCVS模板的特点该模板在头说明中定义了一个ref变量,该变量为一个端口变量,其值为仿真系统中其它模板的through变量,但是ref型端点变量由两部分组成,一部分是引用模板名,另一部分是模板中被引用的变量名。ref型变量的特点ref变量和var变量都是系统变量,对于任何一个系统变量都因该有一个方程与之对应。对于一个pin类型数据,它有两个系统变量,一个是对应的through变量和cross变量,SABER仿真器认为cross变量为已知量,在通常情况下它通过KCL定律来求解through变量;对于设置的var变量,在方程段中因该指定方程来求解该变量;对于ref变量,也因该有一个方程来求解这个变量,但这个方程不在定义ref变量的模板内,而在被引用的模板内。ref型变量的特点(续)ref变量的定义通常在模板头中。refunitpnameCCVS模板的引用方法:cvt.1i(v.1)ab=1kv.1cd=5v模板是SABER库中的模板,而i是其作为var变量的分支电流。从这个引用中可以看到,ref变量的赋值有两部分,一个是模板的实例名,另一个是模板实例中的through变量名。CCVS模板方程段的特点在本模板的方程段中添加了一个方程来求解系统变量,这个系统变量是在模板体中设置的,其设置的原因与恒电压源的情况相同。互感器件模板的使用inductor.l1p:p1m:m1=ind=1inductor.l2p:p2m:m2=ind=2mutind.1i1:il(inductor.l1)i2:il(inductor.l2)=\m=0.98*sqrt(ind(inductor.l1)*ind(inductor.l2))互感器件模板templatemutindi1i2=mrefii1,i2numberm{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变量的使用。这两个模板的不同点就是在方程段中,CCVS模板在方程中没有方程来描述ref变量,但在互感模板中的方程段中的方程就描述了两个ref变量间的关系。无论在方程段中是否有方程来描述ref变量,但是该方程决不是求解ref变量,ref变量在本模板中不能求解,它的解因该在被引用的模板中。电容模板elementtemplatecapacitor_1pm=cap,icelectricalp,mnumbercap,ic=undef{valqqcvalvvcvalues{vc=v(p)-v(m)#voltageacrosscap.qc=vc*cap#chargestoredincap.}control_section{initial_condition(vc,ic)}equations{i(p->m)+=d_by_dt(qc)#currentthroughcap.}}电容模板的特点在模板定义中使用的是elementtemplate而不是template,这说明这个模板内部节点可见。在头说明中添加了一个量ic,这个量描述的是电容初始状况。在头说明还用了一个数字就是undef,这在SABER仿真器中是一个数,这个数可以对变量赋值,在本模板中它对ic赋值。它可以用在条件语句中,但是这个数不能计算。ic=undef表明如果没有其它值赋值的情况下,电容初始状况可以忽略不计。电容模板的特点(续1)在建立实际系统时常常使用value段,这主要是因为:定义一种变量,val型变量,这种变量主要好处就是可以通过extract指令来提取,这样在不增加仿真时间的情况下可以获得更多的信息。一个val变量通常作为中间变量。而val变量的赋值就在value段中。调用foreign例程和噪声源的定义通常都是在这段。value段既是一个程序段,也是一个说明段。作为程序段,在执行该段程序时是从上到下的顺序,因此在编程时引用的变量一定要在前面定义;作为一个说明段,仿真认为需要该变量时才会执行该段对应的语句。电容模板的特点(续2)电容模板的另一个特点就是在仿真完成后需要提取一些变量,为仿真提供更多的信息。在仿真结束后,本模板可以提供电容两端的电压和电容储存的电荷,这两个量可以通过extract命令来提取,也可以在siglist中设置。因此在Value中定义了两个val变量。Value段的特点在value段中可以包括赋值语句和条件语句,赋值语句的格式为:variable=expressionvalue段既是一个顺序段,也是一个说明段。作为程序段,在执行该段程序时是从上到下的顺序,因此在编程时引用的变量一定要在前面定义;作为一个说明段,仿真认为需要该变量时才会执行该段对应的语句。

value段的关键词是value.Value段的特点(续)只有仿真器需要提取相关变量时才会执行Value段;当方程段中需要Value段中的变量时才会执行Value段。如果不需要时,模板中的Value段是不会被执行的。因此在模板程序中编写Value段不会增加仿真时间(在提供相同信息的情况下),但是如果在需要的话,模板程序可以提供更多的信息。val变量的定义val变量必须为局部变量,即val变量必须在程序的模板体中定义。valunitname[,name,name,...]valqqcvalvvval型变量必须在value段中赋值。如果模板为unstructured,则必须在模板体中赋值。控制段控制段是为仿真器提供仿真系统的系统信息而不是仿真系统中元件的信息,控制段的关键词是control_section,在关键词后接{}。在本模板中,使用了initial_condition(vc,ic),它确定的是系统仿真时的电容初始条件是端电压为vc。initial_condition的使用在一些模板中,需要确定其初始条件,确定初始条件通常都是在控制段中。initial_condition(variable,value)其中variable为需要确定初始条件的系统变量或系统变量的差,value为初始条件的值。多类型电压源下面将建立一个电压源模板,该模板有如下功能:1)提供恒压源在作直流分析和时域分析2)在作时域分析时电压源提供一个指数函数的电压波形。3)在作小信号AC分析时,它可以作为一个频域信号。这个电压源模拟了三种不同的输出函数。多类型电压源模板1elementtemplatevsource_1pm=supply,tran,ac2electricalp,m#headerdeclarations3numbersupply=045struc{#startoftranstructure6numberv1=0,#initialvoltage7v2=0,#voltageattime=inf8tau=0.000001#timeconstant9}tran=()#endoftranstructure1011struc{#startofacstructure12numbermag=0,#ACmagnitude13phase=0#ACphase14}ac=()#endofacstructure//////////////////////////////////////////////////////////////////////////////////////////////////15{#starttemplatebody16variis#localdeclarations17valvvs组合数简单数多类型电压源模板(续)values{19if(dc_domain|time_domain){#Iflargesignal20if((tran->v1~=0|tran->v2~=0)&tran->tau>0){21#Ifwaveformisdefined22vs=tran->v1+(tran->v2-tran->v1)*(1-exp(-time/tran->tau))23}#sourcevoltage=waveform24#atcurrenttime25else{#otherwise26vs=supply#sourcevoltage=supply27}28}29elseif(freq_mag){#orifsourceisacmagnitude30vs=ac->mag#sourcevoltage=magnitude31}32elseif(freq_phase){#orifsourceisacphase33vs=ac->phase#sourcevoltage=phase34}模板体结构V段的作用方程段多类型电压源模板的特点在模板头说明中定义了一个supply变量,该变量在直流分析或时域分析时提供恒压源。在头说明中,定义了两个结构体,用于确定时域分析时的指数电压源和频域分析的激励源。在结构体中,使用了仿真器变量(simvar),在value段中使用了使用了条件判据。MAST语言中的简单数简单数据:简单数据有三种类型,它们分别是number,enum,string。它们分别是数值型数据,枚举型数据和字符数据。数值型数据:在MAST语言中,实数和整数都可以对数值型变量赋值,在使用是不区别。枚举型数据的定义:对象的名字有有限个,而在一个时刻其中只有一个是正确的。字符数据:这些数据就是有字符串组成,其内容通常要用引号。数值枚举字符电源MAST语言中的数值型数据数值型变量的定义:numberid1[=init],id2[=init]e.gnumbervcc=5,dc_input,rload=10k,cload如果上述数据是一个中的变量,则可以通过网表赋值,其赋值的方式分别为(argument),(templatename.refconnectionpoint=5,2.7,10k,47n)(templatename.refconnectionpoint=cload=47n,vcc=5,dc_input=2.7,rload=10k)返回MAST语言中的枚举数enum{evalue[,evalue]}id[=[int1],[int2]]e.g.enum{_n,_p}bjt_type=_n如果定义的枚举型数据为一个变量,则可以在网表中对该变量赋值(argument).templatename.refconnectionpoint=bjt_type=_n返回MAST语言中的字符数字符数的定义stringid[[=init][,init]]stringcoretype=“iron”如果字符为一个变量,则其值可以通过网表赋值,其赋值方式为:templatename.refconnectionpoint=coretype=“iron”

返回MAST语言中组合数据组合数据:组合数据有两种基本类型,一种是结构数据(struc),另一种是联合数据(union)。采用结构数据的目的是把一些相关变量构成一个整体,而采用联合变量的目的是希望一个变量在不同的时候处理不同类型的信息。组合数据都由四个部分组成,关键词、数据名、数据定义和数据对象的实体。但是联合数据的每一个实体只有数据定义中的一个对象,而结构数据则没有这个特点。电源联合结构结构体的定义结构体是一种数据类型,其定义的方式为:struc[structurename]{member[member][...]}id[=initial_value][,id=initial_value,...]struc为定义结果体的关键词,structurename为结构体的名,member为结构体成员,id为结构体变量。由于本设计中描述指数输出波形的函数为:Vout=V1+(V2-V1)•(1-e)(-time/t),因此在tran这个结构变量中的成员为3;结构体的定义实例

struc{#startoftranstructurenumberv1=0,#initialvoltagev2=0,#voltageattime=inftau=0.000001#timeconstant}tran=()#endoftranstructure///////////////////////////////////////////////////////5struc{6numberv1=0,7v2=0,8tau=0.0000019}tran=()struc{numberv1,v2,tau}tran=(0,0,0.000001)

结构体的使用结构体变量的值要么在初始化结构体获得,要么通过网表传输进来,如果一个结构体的数据在初始化时就赋值了,在网表中又赋值,则仿真器将采用网表输入的数据,如果一个结构体在初始化时没有赋值,在网表中也没有赋值,则在仿真时将报错。返回联合数据的定义联合数据的定义:定义结构数据用关键词union,其定义的语法为unionunionname{declarationdeclaration}id[[=init],[init]….]联合数据的定义实例unionsource{numberdcstruc{numbermagnumberphase}ac}input1=(dc=5),input2=(ac=())定义了一个联合类型的数据,该数据由两个选项dc和ac组成,其中ac为一个结构体。联合数据的定义实例(1)unionsource{numberdcstruc{numbermagnumberphase}ac}input1,input2unionsourceinput1=(dc=5),input2=(ac)在模板头中引用时为templatename.refconnectionpoint=input2=(ac=(mag=1,phase=0))返回模板函数体的结构电压源模板仿真器变量条件判断仿真器系统变量SABER仿真器中有一套仿真器系统变量,用它们来判断仿真器所进行的仿真类型和对仿真器的控制。这些变量为系统的内部变量,在使用这些变量时,不需要定义这些变量。如果将这些定义变量时使用了这些变量名,出现的后果不可预计。仿真器系统变量表直流时域控制模板体结构频域频域分析仿真器系统变量的说明freq_domain:系统作频域分析时该变量值为1,其它情况下该变量值为0。freq_mag:在作频域分析时且仿真器需要相量的幅值时该变量为1,其它

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论