在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6216|回复: 8

[求助] veriloga求助

[复制链接]
发表于 2012-12-14 15:04:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
`include "discipline.h"
`include "constants.h"

module diff_opamp(vout_p,vout_n,vref,vin_p,vin_n,vsupply_p,vsupply_n);
input vref,vsupply_p,vsupply_n;
inout vout_p,vout_n,vin_p,vin_n;
parameter  freq_unitygain=1e6;
parameter  gain=1000;
parameter  r_in=10e6;
parameter  i_bias=0;
parameter  r_out=100;
parameter real  iin_max=100e-6;
parameter real  slew_rate=20e6;
parameter  vin_offset=0;
parameter  vsoft=0.5;
real  gm_nom;
real  vmax_in;
real  vin_al,c1,r1;
electrical vout_p,vout_n,vref,vin_p,vin_n,vsupply_n,vsupply_p;
electrical cout_n,cout_p;

analog begin
     @(initial_step or initial_step("dc"))begin
      c1=iin_max/slew_rate;
      gm_nom=2*3.14*freq_unitygain*c1;
      r1=gain/gm_nom;
      vmax_in=iin_max/gm_nom;
      end
   //
   //input stage
   //
  V(vref)<+ V(vsupply_n)+0.5*V(vsupply_p,vsupply_n);
    vin_al=V(vin_p,vin_n)/2+vin_offset;
    I(vref,vin_n)<+i_bias;
    I(vref,vin_p)<+i_bias;
    I(vin_p,vin_n)<+V(vin_p,vin_n)/r_in+vin_offset/r_in;
   //
   //GM stage with slew rating
   //
   I(cout_n,vref)<+ V(cout_n,vref)/100e6;
   I(cout_p,vref)<+ V(cout_p,vref)/100e6;
  if(vin_al>vmax_in)begin
     I(vref,cout_p)<+ iin_max;
     I(vref,cout_n)<+ -iin_max;
        end
     else if(vin_al<-vmax_in)begin
       I(vref,cout_p)<+ -iin_max;
       I(vref,cout_n)<+  iin_max;
         end
      else begin
          I(vref,cout_p)<+0.5*gm_nom*vin_al;
          I(vref,cout_n)<+ -0.5*gm_nom*vin_al;
           end
     //  
     //dominate pole
     //
    I(vref,cout_n)<+ c1*ddt(V(vref,cout_n));
    I(vref,cout_p)<+ c1*ddt(V(vref,cout_p));
    I(vref,cout_n)<+ V(vref,cout_n)/r1;
    I(vref,cout_p)<+ V(vref,cout_p)/r1;
    //
    //output stage
    //
    I(vout_n,vref)<+ V(vref,cout_n)/r1;
    I(vout_n,vref)<+ V(vout_n,vref)/r1;
    I(vout_p,vref)<+ V(vref,cout_p)/r1;
    I(vout_p,vref)<+ V(vout_p,vref)/r1;
    //
    //soft output limiting
    //
    if(V(vout_p)>(V(vsupply_p)-vsoft))begin
     I(cout_p,vref)<+gm_nom*(V(vout_p,vsupply_p)+vsoft);
                 end
      else if(V(vout_p)<(V(vsupply_n)+vsoft))begin
         I(cout_p,vref)<+gm_nom*(V(vout_p,vsupply_n)-vsoft);
        end
    if(V(vout_n)>(V(vsupply_n)-vsoft))begin
     I(cout_n,vref)<+gm_nom*(V(vout_n,vsupply_p)+vsoft);
                 end
      else if(V(vout_n)<(V(vsupply_n)+vsoft))begin
         I(cout_n,vref)<+gm_nom*(V(vout_n,vsupply_n)-vsoft);
        end
end
endmodule
这是何乐年书上的差分运放的veriloga程序,可是当我在仿真时出现了这个错误:
vref上我接的是0.5V的电压,但是仿真时出错,错误提示:FATAL;The following branches form a loop of rigid branches(shorts)when added to the circuit,
怎么会短路呢?
发表于 2012-12-14 16:23:50 | 显示全部楼层
“V(vref)<+ V(vsupply_n)+0.5*V(vsupply_p,vsupply_n);

vref是运放内部已经指定了,不需要再外接。
发表于 2012-12-14 16:26:33 | 显示全部楼层
cout_n cout_p  的类型没定义?
发表于 2012-12-14 16:29:23 | 显示全部楼层
"electrical cout_n,cout_p;"
不是定义了吗?
发表于 2012-12-19 10:07:27 | 显示全部楼层
input vref,vsupply_p,vsupply_n;
从这句可以看出vref被定义为输入Pin

V(vref)<+ V(vsupply_n)+0.5*V(vsupply_p,vsupply_n);
从这句可以看出vref是输出Pin

结论:这段代码是垃圾,哪怕是何乐年写的,也是垃圾。
发表于 2013-9-17 20:28:38 | 显示全部楼层
何乐年书上不是这么写的,我最近也在研究这个,也看了那段程序
发表于 2015-3-24 18:59:53 | 显示全部楼层
请问有谁用verilog-a语言建立过霍尔模型么
发表于 2016-3-13 11:39:38 | 显示全部楼层
回复 5# wind2000sp3


   您好,我也是在用何乐年书上面全差分运放那段veriloga代码,语法倒是没提醒错误,只是交流仿真感觉有问题,但又无从下手怎么改,网上也没有别的全差分运放的veriloga代码,请问大神这里有资源吗?求助啊~~
发表于 2016-12-28 09:03:14 | 显示全部楼层
回复 7# 小小的爱


   你好,请问后来有研究过霍尔器件的建模吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-1-23 07:05 , Processed in 0.032308 second(s), 25 queries , Gzip On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表