null数、模混合模型的建立数、模混合模型的建立数模混合型模型的特点数模混合型模型的特点在一个器件中,它既有模拟端口,也有数字型的端口。在通常情况下,模拟端口的数据类型为pin-type型,而数字端口的类型为state型。
模拟端口的量纲与数字端口的量纲是不同的,因此它们有一个转换的关系,在作数字、模拟器件的时候需要将它们进行转换。电压型比较器电压型比较器设计电压型比较器的功能如下:通过比较输入端的电压,当p点电压大于m点电压时,其输出端为logic_1,当p点电压小于或等于m点电压时,其输出端为logic_0。比较器的MAST模型比较器的MAST模型element template comparator p m out = td # header
electrical p, m # pin declarations
state logic_4 out # pin declaration
number td=0 # argument declaration
{
state nu before, after # local variables
when (dc_init) { # DC initialization
schedule_event(time, out, l4_0)
when (threshold(v(p), v(m), before, after)) { # comparison
if (after > 0) schedule_event(time+td, out, l4_1)
else schedule_event(time+td, out, l4_0)
}
}头说明When段的作用小结a b 的意义比较器模型的头说明比较器模型的头说明比较器模型是一个数字、模拟混合的器件模型,其两个输入端为电气量,其输出端为一个逻辑量。因此在头说明为如下形式:
electrical p, m
state logic_4 out
在模板头中,定义了一个数值型的变量,该变量用于定义信号的延迟时间。模型模型中when段的作用模型中when段的作用在本模板中,其中第一个when段的作用是对数字变量的初始化。在数、模混合型器件中对数字变量的初始化是必须的。
第二个when段的作用是比较两个across 变量,当两个变量相等的时候触发一个事件,并记录事件发生前、后v(p)和v(m)的变化状态,根据记录结果对out变量赋值。
在模板体中定义的局部变量就是用于判断比较器的状态。
state nu before, after初始化模型比较函数数、模器件的初始化数、模器件的初始化在数、模器件中由于有数字状态量、模拟量和事件驱动的模拟状态量,而对于这些量在初始化时的方式不同,因此对于数字量在模板体中通常要初始化,如果不初始化,在仿真过程中可能会出现一些意想不到的问题。在本模板中,初始化程序在第一个when段中。比较器的结构简图比较器的结构简图数、模器件的初始化(1)数、模器件的初始化(1)在程序开始时,仿真器将p点和m点的值设置为0,将输出量out设置为logic_x。
假设将本模板中的第一个when段去掉,则在作dc_init时,out量仍为logic_x。
在作仿真
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
时,由于p点电压和m点电压相等,它不会产生cross,因此它不会产生一个事件,因此输出量out将不会改变。保持logic_x,这与设计的功能不同。返回MAST语言中的比较函数MAST语言中的比较函数threshold是MAST语言中的比较函数,它是一个内部函数,该函数在数、模器件的模型中有非常重要的作用。该函数能够提供两条曲线相交的时刻,并且还能提供曲线的过去和未来状态。
在本设计中,就是用threshold函数来监视模板p和m点的电压,当p点和m点电压相等时,触发一个事件。触发事件的时间与仿真步长没有关系。比较函数的用法比较函数的用法threshold(k, k1[, a, b]) 函数有4个变量,该函数的作用是起比较作用,其中k,k1是两个比较量,当k与k1相等时将触发一个事件。函数中的a、b为一个可选项,其值是用来记录变量k和k1相等前、后的状态。a b值的意义a b值的意义在第一种情况a=-1,b=1
在第二种情况a=1,b=-1在第三种情况a=1,b=1
在第四种情况a=-1,b=-1
在第五种情况a=-1,b=0
在第六种情况a=1,b=0由于a b为有限种状态,因此通常将a b设置为state类型的量。比较函数的使用返回模板比较函数的使用比较函数的使用threshold函数都是在由一个模拟量触发一个事件的时候使用这个函数,如果只需要触发一个事件,则只需要两个变量而不需要该函数的后两个变量,如果需要利用事件触发前后两个比较变量的状态,则需要使用该函数的后两个变量。
该函数通常都是作为when段的条件使用。返回比较器模板的小结比较器模板的小结这个比较器模板是一个比较简单的数、模器件模板,这个模板的主要特点就是在本模板中使用了MAST比较函数,这个比较函数是很重要的,在作很多数、模器件模型时都将用到这个函数。数控理想开关功能简介数控理想开关功能简介如图所示。一个数字事件通过开关的端点(cnt1)进入到模板,如果cnt1的信号为logic_1则开关导通,如果cnt1的信号不为logic_1则开关断开。开关导通时采用的是用ron电阻代替开关,在开关断开时是用roff电阻来代替开关。数控理想开关的MAST模板数控理想开关的MAST模板template sw p m cntl = ron, roff # template header
electrical p, m # analog pins
state logic_4 cntl # digital connection
number ron=1, roff=1meg # parameter declaration
{
state r res # internal state variable
when (event_on(cntl)) { # switch control
if (cntl == l4_1) res = ron
else res = roff
schedule_next_time(time)
}
equations { # switch analog equations
i(p->m) += (v(p) - v(m))/res
}
}头和局部变量的定义When段方程段开关器件的使用state类型的变量state类型的变量在本模板的端点采用了electrical型端点和state型端点,
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
明了该模板是一个数字和模拟的混合型模板,但是需要注意的是state型数据只能在when段中赋值,但它可以在其它段引用。
在本模板的局部定义中定义了一个state型变量res,其量纲为r,这说明了这个变量是离散的,这个值也必须在when段中赋值。它可以在模板体中其它任何地方引用。返回模板函数中的when段模板函数中的when段在本模板中event_on函数作为when段的条件,该函数的使用的变量cnt1必须事先放置进事件队列中,否则该函数将不会起作用。
在when段中使用了一个条件判断语句和赋值语句,这里没有使用schedule_event函数。
在when段中使用了schedule_next_time函数schedule_event和赋值函数schedule_next_time 函数模板赋值语句和schedule_event函数赋值语句和schedule_event函数res=ron 和 schedule_event(time, res, ron)这两种方式都可以获得相同结果,但是采用第一种方式具有更高的效率,因此在本模板中没有必要采用第二种方式。
如果需要知道利用电阻变化这个事件的时候才采用schedule_event函数,这时通常需要和event_on函数配合使用。
event_on (res)返回schedule_next_time(time)函数schedule_next_time(time)函数该函数的作用是强制仿真器在time时间点作仿真。在本模板中,当cnt1端点发生变化时,将触发when段的运行,这将引起电阻值的变化。但是对于模拟系统而言,仿真的步长是受系统的误差精度控制的,因此在执行when段的时候不一定就是仿真计算点,也就是说当系统的电阻值已经改变,但系统可能并不计算这个时刻电路的状态,这显然是不正确的。因此要在这里安排一次计算点。schedule_next_time(time)函数
和next_time仿真器变量schedule_next_time(time)函数
和next_time仿真器变量这个函数和这个变量的实现的功能是相同的,但是它们是有区别的。
next_time这个仿真器变量是在模拟子系统中仿真中的每一个步长完成后该变量就没有作用了,同时该变量是采用赋值语句。
schedule_next_time是一个函数,一旦该函数被激活,该函数就一直有效,直到使用descheduled函数取消或仿真时间到达指定时刻。返回模板的方程段模板的方程段equations { # switch analog equations
i(p->m) += (v(p) - v(m))/res
}
在本方程段中,ref为一个离散的状态量,但是这不会发生问题,主要是因为在前面使用了schedule_next_time函数。
模板开关器件的使用开关器件的使用sw.1 in mid gt
r.1 mid 0 = 47k
v.in in 0 = 5
when (dc_init) {
schedule_event(time, gt, l4_0)
}
when (time_init) {
schedule_event(1u, gt, l4_1)
schedule_event(2u, gt, l4_0)
}
a2d模板的MAST模型a2d模板的MAST模型这是一个将模拟量转换为数字量的器件,其模拟量的输入端为p、m,数字量的输出端out为一个逻辑量。当p、m间的值大于某一个值时,out为逻辑高电平;而当p、m间的值小于某一个值时,out为逻辑低电平。a2d模板的MAST模型a2d模板的MAST模型template a2d a m d = td, il, ih
electrical a, m
state logic_4 d
number td=0, # input/output time delay
il=0.8, # input low voltage
ih=2.4 # input high voltage
{
state nu before, # variables for threshold
after # direction
when (dc_init) { # dc initialization
schedule_event(time, d, l4_0)
}头说明a2d模板的MAST模型(续)a2d模板的MAST模型(续)# threshold crossing low
when (threshold(v(a)-v(m), il, before, after)) {
if ((after<0) & (driven(d)~=l4_0)) {
schedule_event(time+td, d, l4_0)
}
}
# threshold crossing high
when (threshold(v(a)-v(m), ih, before, after)) {
if ((after>0) & (driven(d)~=l4_1)) {
schedule_event(time+td, d, l4_1)
}
}When段数模转换模板的头说明模板的头说明在模板的头说明中,使用了electrical类型的数据和state类型的数据,这表明该模板为一个数字、模拟混合型的模板。而state型数据的量纲为logic_4。
在模板头定义中,定义了三个数值型变量,用于定义模拟量穿越门槛值到输出的时间(td)和高、低电平的门槛电压值(il和ih)。返回模板体中的when段模板体中的when段在模板体中有三个when段。第一个when段是在作直流分析的时候用于初始化模板的输出变量,第二个when段用于监测p、m间的信号穿越低电平信号的门槛值,第三个when段用于监测p、m信号穿越高电平信号的门槛值。在其中都是用的threshold函数。在局部定义中定义的两个变量就是在threshold函数需要用到的量。返回模拟量到数字量的转换(d2a)模板模拟量到数字量的转换(d2a)模板如图所示的模板为一个数字输入端和一对模拟输出节点,当数字输入量的状态发生变化的时候,模拟节点间的信号也将发生与之相应的变化。例如,当数字信号为logic_1的时候,其模拟节点间的电压也将为ho,反之也是一样。模板的MAST模型模板的MAST模型element template d2a d a m = td, ol, oh # template header
electrical a, m
state logic_4 d
number td=0, # input to output time delay
ol=0.5, # output logic low voltage level
oh=4.0 # output logic high voltage level
{
var i i # unknown branch current
state v vout=ol # output voltage
# process input events模板的MAST模型(续)模板的MAST模型(续)when (event_on(d)) {
if (d==l4_0) { # input low
schedule_event(time+td, vout, ol) # change vout
schedule_next_time(time+td) # force analog step
}
else if (d==l4_1) { # input high
schedule_event(time+td, vout, oh) # change vout
schedule_next_time(time+td) # force analog step
}
}
equations {
i(a->m) += i # analog branch current
i: v(a)-v(m) = vout # equation for branch current
}小结When段方程段模板中的when段的其它方式模板中的when段的其它方式when (event_on(d)) {
if (d==l4_0) {
vout = ol # vout assigned instead of scheduled
schedule_next_time(time+td)
}
else if (d==l4_1) {
vout = oh # vout assigned instead of scheduled
schedule_next_time(time+td)
}
}返回模板中的方程段模板中的方程段equations {
i(a->m) += i # analog branch current
i: v(a)-v(m) =vout # equation for branch current
}
返回数字信号转换为模拟信号小结数字信号转换为模拟信号小结当需要将数字信号转换模拟信号时,通常都是在when段中使用event_on和schedule_next_time函数。
when (event_on (state)) {
#set some values
}
schedule_next_time (time)模拟信号转换为数字信号小结模拟信号转换为数字信号小结模拟信号转换为数字信号通常是在when段,使用的函数通常为threshold和schedule_event函数。
when (threshold(input, condition, before, after)) {
#set some values
}
schedule_event(time, state, level)