• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

数字信号Delay模型的MAST建模

Dear All:

  用Saber有段时间了,发现其模型中少了一个数字信号的delay模型;此功能在仿真时,仿真时还是会用到的;虽然saber有buffer模型可以进行delay,但其是同时对上升沿和下降沿进行delay的;对于一些只对单边延时的需要,此模型就爱莫能助了。因此我利用MAST语言写了一个delay模型,此模型可对上升沿、下降沿、双沿delay进行单独配置,方便实际应用。有需要的朋友,可以试一下,以下为MAST代码。

//  ..................................//

template delay_mast in out=Td,type

state logic_4 in,out

enum {Rising,Falling,Dual} type=Dual

number Td=0 #Define delay time

{

  number del_ID=0 # Identifier of delay type: 1--Rising;-1--Falling;0--Dual

  parameters {

   if(Td<0) {

     error("%:Td should be not less than 0:Td=%",instance(),Td) # error information for Td<0

   }

   if(type==Rising) {

del_ID=1

}

else if(type==Falling) {

del_ID=-1

}

else {

del_ID=0

}

  }

  when(dc_init){

    schedule_event(time,out,in) #Setting out=in at DC analysis

  }

  when(event_on(in)){

    if(del_ID==0) {

      schedule_event(time+Td,out,in)

}

else if(del_ID==1){

 if(in==l4_1) {

   schedule_event(time+Td,out,in)

 }

 else {

   schedule_event(time,out,in)

 }

}

else {

 if(in==l4_0){

   schedule_event(time+Td,out,in)

 }

 else {

    schedule_event(time,out,in)

 }

}

  }

}

//..........................................................// 
有关如何使用代码生成模型并在saber中使用,就不多说了;记得domono兄之前的文章提到用法,大家可以参考一下。

全部回复(16)
正序查看
倒序查看
bingyuytp
LV.3
2
2012-06-08 22:47

好东东,多谢大侠,学习中

0
回复
2012-06-13 11:01
@bingyuytp
好东东,多谢大侠,学习中
看看这个效果 是否是你想要的?\
0
回复
bingyuytp
LV.3
4
2012-06-13 11:28
@andy.zhou.nuaa
看看这个效果[图片] 是否是你想要的?\
酷!
0
回复
bingyuytp
LV.3
5
2012-06-13 11:29
@bingyuytp
酷!

大侠 如何实现?

0
回复
2012-06-13 11:38
@bingyuytp
大侠如何实现?
template pulse_5v inp inm outp outm =td
electrical inp,inm,outp,outm
number td
{
  state time tnow=-1
  val v vin
  state v vout
  var i i
  state nu before,after

 values{
  vin=v(inp)-v(inm)  
}
    
  when(threshold(vin,2.5,before,after)){
    if((after==1)|(after==-1))  {
  schedule_event(time,vout,2.5) 
  tnow=time
  }
     }
  
  when(dc_domain | time_domain){
      
   if(vout==2.5) { 
       if(time>=(tnow+td))  {

     vout=vin
      schedule_next_time(time+td)
        }
  }
     }
  
  equations{
     i(outp)+=i
     i(outm)-=i
i:v(outp)-v(outm)=vout
  }
}
//上面是mast代码,根据这个自己建立一个模型即可。
0
回复
bingyuytp
LV.3
7
2012-06-13 11:50
@andy.zhou.nuaa
templatepulse_5vinpinmoutpoutm=tdelectricalinp,inm,outp,outmnumbertd{ statetimetnow=-1 valvvin statevvout varii statenubefore,after values{ vin=v(inp)-v(inm) }    when(threshold(vin,2.5,before,after)){  if((after==1)|(after==-1)) { schedule_event(time,vout,2.5)  tnow=time }   }   when(dc_domain|time_domain){      if(vout==2.5){     if(time>=(tnow+td)) {   vout=vin   schedule_next_time(time+td)    } }   }   equations{   i(outp)+=i   i(outm)-=ii:v(outp)-v(outm)=vout }}//上面是mast代码,根据这个自己建立一个模型即可。
0
回复
bingyuytp
LV.3
8
2012-06-13 23:33
@andy.zhou.nuaa
templatepulse_5vinpinmoutpoutm=tdelectricalinp,inm,outp,outmnumbertd{ statetimetnow=-1 valvvin statevvout varii statenubefore,after values{ vin=v(inp)-v(inm) }    when(threshold(vin,2.5,before,after)){  if((after==1)|(after==-1)) { schedule_event(time,vout,2.5)  tnow=time }   }   when(dc_domain|time_domain){      if(vout==2.5){     if(time>=(tnow+td)) {   vout=vin   schedule_next_time(time+td)    } }   }   equations{   i(outp)+=i   i(outm)-=ii:v(outp)-v(outm)=vout }}//上面是mast代码,根据这个自己建立一个模型即可。
大侠您好, 
0
回复
2012-06-14 10:39
@bingyuytp
大侠您好,[图片] 

pulse 

这是源文件,你需要更改输入源的上升沿和下升沿时间

0
回复
bingyuytp
LV.3
10
2012-06-14 13:24
@andy.zhou.nuaa
[图片]pulse 这是源文件,你需要更改输入源的上升沿和下升沿时间
请您查看。 
0
回复
2012-06-14 13:42
@bingyuytp
请您查看。[图片] 
告诉我你需要更改哪段波形
0
回复
bingyuytp
LV.3
12
2012-06-14 13:57
@andy.zhou.nuaa
告诉我你需要更改哪段波形
图中
0
回复
2012-06-14 15:54
@bingyuytp
图中
// 将源代码换成下面的试试、
 when(dc_domain | time_domain){
      
   if(vout==2.5) { 
       if(time>=(tnow+td))  {

     vout=vin
      schedule_next_time(time+td)
        }
  }
    else vout=vin 
     }
0
回复
2012-06-20 13:57
@bingyuytp
图中
 
0
回复
qingq40
LV.1
15
2012-07-09 02:38
@andy.zhou.nuaa
//将源代码换成下面的试试、 when(dc_domain|time_domain){      if(vout==2.5){     if(time>=(tnow+td)) {   vout=vin   schedule_next_time(time+td)    } }  elsevout=vin    }
o
0
回复
qingq40
LV.1
16
2012-07-09 02:38
@qingq40
o[图片]
0
回复
2014-11-01 22:23
@andy.zhou.nuaa
//将源代码换成下面的试试、 when(dc_domain|time_domain){      if(vout==2.5){     if(time>=(tnow+td)) {   vout=vin   schedule_next_time(time+td)    } }  elsevout=vin    }

大神,求教如何把MAST语言编写的模型导入到saber的仿真界面啊!找不到相关教程,急哭了啊

0
回复