770 likes | 1.11k Views
MAST 语言建模. MAST 语言建模概述. MAST 语言是一种硬件描述语言,它是用数学的方法来描述的,它可以描述硬件的结构,也可以描述硬件的功能。建立描述硬件结构的模型比较难,如果建立得比较好,其精度较高;建立描述功能的硬件模型相对比较简单,但在使用这种模型的时候受到比较多的限制。. MAST 语言的结构和功能. MAST 语言可以描述很多种类型的器件,包括模拟器件、数字器件等。 MAST 语言的结构主要包括两种方式,一种是 structured 方式,另一种是 unstructured 方式。
E N D
MAST语言建模概述 • MAST语言是一种硬件描述语言,它是用数学的方法来描述的,它可以描述硬件的结构,也可以描述硬件的功能。建立描述硬件结构的模型比较难,如果建立得比较好,其精度较高;建立描述功能的硬件模型相对比较简单,但在使用这种模型的时候受到比较多的限制。
MAST语言的结构和功能 • MAST语言可以描述很多种类型的器件,包括模拟器件、数字器件等。 • MAST语言的结构主要包括两种方式,一种是structured方式,另一种是unstructured方式。 • 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。这两者的区别一个是内部节点可见而另一个是内部节点不可见。
理想恒流源模板简介(续1) • template_name是模板名,在通常情况下该模板的文件名和这个模板应该一致。Connection points是定义的端点名,而argument则是使用这个模板时需要赋值的变量,这个变量是通过网表来赋值的。 • 模板头说明:说明在模板头中出现的除模板名以外的所有变量,它应位于模板头之下。在恒流源模板中,有两个类型的变量需要说明,一个是节点类型,另一个是变量类型。
理想恒流源模板简介(续2) • 模板连接点是一种特殊的数据类型,在SABER中叫pin类型。它与建立的模板有关。pin 类型可以是机械连接点、热连接点电连接点。由于在恒流源的连接点是电,因此其连接点说明为electrical p,m。 • 作为头说明的另一部分就是对模板参数的说明,它需要说明的是模板参数的类型,即数的类型。关于数的类型将在后面讲述。在本模板中就定义了一个数。number is
理想恒流源模板简介(续3) • 对于一个模板来讲,连接点和模板参数并不是必须的,在一些模板中并没有连接点,也有一些模板就可能没有参数。 • 对于一个模板而言,通常情况下除了模板头以外还有模板体,模板体都是在一对括号中,在isource模板中的模板体就是一个方程段。
理想恒流源模板简介(续4) • isource 中的方程段是用MAST语言结构体的形式描述恒流源的特征,实际上就是用模板方程来描述器件模拟端口的特征。 • 在恒流源模型中,电流是从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,在使用这个器件时在网表中要对这个值进行赋值。 • 用任何文本编辑器编写上述这段文本后,以文件的扩展名为.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 模板,如果仍没有找到该模板,就送出错误信息。
pin 类型数据 • 在MAST语言中,所谓指针就是元件模板的对外连接点的一种形式,它也是模板对外连接的最常用的一种形式,定义指针实际上就是定义了元件的一种连接方式。 • pin 类型数据是SABER仿真器中定义的一种数据,这种数据是专门针对器件的连接点,它包括很多种类型的连接点,它们是通过量纲来定义连接端点的类型的。
pin 类型数据(1) • 每定义一种连接点就定义了一对变量,一个是cross变量,另一个是through变量。定义一个端点和定义一个连接点的cross变量和through变量是等价的。 • 在定义一个pin 变量的同时也定义了这个变量的量纲。
模拟量单位的定义 • unit{“缩写”,”全称”,”描述”} 名字 • unit{“rpm”,”revolutions/minute”,”argular velocity”} w • unit {"A","Amperes","Current"} i • unit {"V","Volts","Voltage"} v
cross 变量和through变量 • cross 变量是系统变量,其主要特征是经过任何一个回路,cross变量值的和位0。在电气系统中的cross变量是系统中节点电位。 • through变量是与cross变量相对应的系统变量,through变量的主要特征是任意一节点其值的和为0。在电气系统中的through变量为电流。
连接点的定义 • pin identifer across 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,在其中定义了这个端点。在这个文件中定义的所有其它端点,都可以在编程中不需要定义直接使用,但是如果要使用在该文件中没有定义的端点,则需要自己定义。
节点分析法 • 根据电路的结构,应用KCL定律,用节点电压去表示之路电流,最后求解节点电压的方法叫节点电压法。 • 从上面的叙述可以看出,节点电压法是根据电路的结构,首先求出电路的节点电压,然后再求电路中各个之路的电流。
SABER仿真过程(续1) • SABER仿真器解方程时采用的是节点法,在通常情况下器件端点电压是由系统的结构决定了,也就是说如果系统的结构一定则系统中各个器件端点电压就是一定的,因此SABER仿真器认为系统中各个器件的端点电压是已知的,而需要求的就是各个器件的电流。
恒电压源的工作过程 • 从前面的介绍可以知道,仿真器是以获得电流为最终目的,如果一个系统的一个之路的电流没有获得,仿真器则认为没有达到最终的目。但是恒压源的的电流受系统结构的限制,如果系统结构不能确定,则恒压源的电流将不能确定。
恒电压源模板 • 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仿真器就认为完成了任务。 • 在恒电压源模块中,由于电源电压和电流之间的关系受系统的影响,在系统不确定时不可能通过电源的电压来求得电源的电流。
恒电压源模板简介(续) • 在模板体中设置一个变量,该变量为系统变量(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 • equations { • i(p->m) += il • il: v(p) - v(m) = d_by_dt(ind*il) • } • }
线性电感模板的特点 • 在前面已经讲过,SABER仿真器是以解之路电流为最终目的,因此在方程段中建立方程时都是以解电流为目的。但是在电感的特征方程中电流是电压的积分,为了将其转换为微分方式,在模板体中添加了一个系统变量,利用系统变量来转换这种关系。
在模板间使用MAST系统变量 • 在本部分主要内容是模板间的参数相互调用而不需要连接点,这类器件比较多,在SABER元件库中也有这类器件,例如互感器件,受控源等。
在模板间使用MAST系统的方法 • 在一个模板中定义了一个through变量,如果在系统中的其它模板要用这个变量的值,则可以在模板中定义一个端点变量,该变量的类型为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型端点变量由两部分组成,一部分是引用模板名,另一部分是模板中被引用的变量名。
ref型变量的特点 • 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 = 1k • 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(inductor.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变量的使用。 • 这两个模板的不同点就是在方程段中,CCVS模板在方程中没有方程来描述ref变量,但在互感模板中的方程段中的方程就描述了两个ref变量间的关系。 • 无论在方程段中是否有方程来描述ref变量,但是该方程决不是求解ref变量,ref变量在本模板中不能求解,它的解因该在被引用的模板中。
电容模板 • element template capacitor_1 p m = cap, ic • electrical p, m • number cap, ic=undef • { • val q qc • val v vc • values { • vc = v(p) - v(m) # voltage across cap. • qc = vc * cap # charge stored in cap. • } • control_section{ • initial_condition(vc,ic) • } • equations { • i(p->m) += d_by_dt(qc)# current through cap. • } • }
电容模板的特点 • 在模板定义中使用的是element template而不是template,这说明这个模板内部节点可见。 • 在头说明中添加了一个量ic,这个量描述的是电容初始状况。在头说明还用了一个数字就是undef,这在SABER仿真器中是一个数,这个数可以对变量赋值,在本模板中它对ic赋值。它可以用在条件语句中,但是这个数不能计算。 • ic=undef表明如果没有其它值赋值的情况下,电容初始状况可以忽略不计。
电容模板的特点(续1) • 在建立实际系统时常常使用value段,这主要是因为:定义一种变量,val型变量,这种变量主要好处就是可以通过extract指令来提取,这样在不增加仿真时间的情况下可以获得更多的信息。一个val变量通常作为中间变量。而val变量的赋值就在value段中。 • 调用foreign例程和噪声源的定义通常都是在这段。value段既是一个程序段,也是一个说明段。作为程序段,在执行该段程序时是从上到下的顺序,因此在编程时引用的变量一定要在前面定义;作为一个说明段,仿真认为需要该变量时才会执行该段对应的语句。
电容模板的特点(续2) • 电容模板的另一个特点就是在仿真完成后需要提取一些变量,为仿真提供更多的信息。在仿真结束后,本模板可以提供电容两端的电压和电容储存的电荷,这两个量可以通过extract命令来提取,也可以在siglist中设置。因此在Value中定义了两个val变量。
Value段的特点 • 在value段中可以包括赋值语句和条件语句,赋值语句的格式为: • variable = expression • value段既是一个顺序段,也是一个说明段。作为程序段,在执行该段程序时是从上到下的顺序,因此在编程时引用的变量一定要在前面定义;作为一个说明段,仿真认为需要该变量时才会执行该段对应的语句。 • value段的关键词是value.
Value段的特点(续) • 只有仿真器需要提取相关变量时才会执行Value段;当方程段中需要Value段中的变量时才会执行Value段。如果不需要时,模板中的Value段是不会被执行的。因此在模板程序中编写Value段不会增加仿真时间(在提供相同信息的情况下),但是如果在需要的话,模板程序可以提供更多的信息。
val变量的定义 • val 变量必须为局部变量,即val变量必须在程序的模板体中定义。 • val unit name [,name, name, ...] • val q qc • val v v • val 型变量必须在value段中赋值。如果模板为unstructured,则必须在模板体中赋值。
控制段 • 控制段是为仿真器提供仿真系统的系统信息而不是仿真系统中元件的信息,控制段的关键词是control_section,在关键词后接{ }。在本模板中,使用了initial_condition(vc,ic),它确定的是系统仿真时的电容初始条件是端电压为vc。