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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 8045|回复: 15

[求助] 需要用verilog-a建模一个全差分的opamp,系统自带的是单端输出,应该怎么改?

[复制链接]
发表于 2013-10-11 11:45:06 | 显示全部楼层 |阅读模式

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

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

x
本人小白,刚接触verilog-a不久。需要用它编写一个opamp,需要理想的,全差分的。
跟白痴一样自己写了 :
voutp<+Gain*vinp;
voutn<+Gain*vinn;

感觉完全不对,,看到系统的自带opamp代码,想改成差分输出,求指点~~

以下是系统opamp的单端输出的代码





  1. `include "discipline.h"
  2. `include "constants.h"

  3. // $Date: 1997/08/28 05:45:21 $
  4. // $Revision: 1.1 $
  5. //
  6. //
  7. // Based on the OVI Verilog-A Language Reference Manual, version 1.0 1996
  8. //
  9. //

  10. `define PI          3.14159265358979323846264338327950288419716939937511



  11. //--------------------
  12. // opamp
  13. //
  14. // -  operational amplifier
  15. //
  16. // vin_p,vin_n:        differential input voltage [V,A]
  17. // vout:        output voltage [V,A]
  18. // vref:        reference voltage [V,A]
  19. // vspply_p:        positive supply voltage [V,A]
  20. // vspply_n:        negative supply voltage [V,A]
  21. //
  22. // INSTANCE parameters
  23. //    gain           = gain []
  24. //    freq_unitygain = unity gain frequency [Hz]
  25. //    rin            = input resistance [Ohms]
  26. //    vin_offset     = input offset voltage referred to negative [V]
  27. //    ibias          = input current [A]
  28. //    iin_max           = maximum current [A]
  29. //    slew_rate      = slew rate [A/F]
  30. //    rout           = output resistance [Ohms]
  31. //    vsoft          = soft output limiting value [V]
  32. //
  33. // MODEL parameters
  34. //    {none}
  35. //

  36. module opamp(vout, vref, vin_p, vin_n, vspply_p, vspply_n);
  37. input vref, vspply_p, vspply_n;
  38. inout vout, vin_p, vin_n;
  39. electrical vout, vref, vin_p, vin_n, vspply_p, vspply_n;
  40. parameter real gain = 835e3;
  41. parameter real freq_unitygain  = 1.0e6;
  42. parameter real rin = 1e6;
  43. parameter real vin_offset = 0.0;
  44. parameter real ibias = 0.0;
  45. parameter real iin_max = 100e-6;
  46. parameter real slew_rate = 0.5e6;
  47. parameter real rout = 80;
  48. parameter real vsoft = 0.5;
  49.    real c1;
  50.    real gm_nom;
  51.    real r1;
  52.    real vmax_in;
  53.    real vin_val;

  54.    electrical cout;


  55.    analog begin

  56.       @ ( initial_step or initial_step("dc") ) begin
  57.          c1 = iin_max/(slew_rate);
  58.          gm_nom = 2 * `PI * freq_unitygain * c1;
  59.          r1 = gain/gm_nom;
  60.          vmax_in = iin_max/gm_nom;
  61.       end

  62.       vin_val = V(vin_p,vin_n) + vin_offset;

  63.       //
  64.       // Input stage.
  65.       //
  66.       I(vin_p, vin_n) <+ (V(vin_p, vin_n) + vin_offset)/ rin;
  67.       I(vref, vin_p) <+ ibias;
  68.       I(vref, vin_n) <+ ibias;

  69.       //
  70.       // GM stage with slewing
  71.       //
  72.       I(vref, cout) <+ V(vref, cout)/100e6;

  73.       if (vin_val > vmax_in)
  74.          I(vref, cout) <+ iin_max;
  75.       else if (vin_val < -vmax_in)
  76.          I(vref, cout) <+ -iin_max;
  77.       else
  78.          I(vref, cout) <+ gm_nom*vin_val ;

  79.       //
  80.       // Dominant Pole.
  81.       //
  82.       I(cout, vref) <+ ddt(c1*V(cout, vref));
  83.       I(cout, vref) <+ V(cout, vref)/r1;

  84.       //
  85.       // Output Stage.
  86.       //
  87.       I(vref, vout) <+ V(cout, vref)/rout;
  88.       I(vout, vref) <+ V(vout, vref)/rout;

  89.       //
  90.       // Soft Output Limiting.
  91.       //
  92.       if (V(vout) > (V(vspply_p) - vsoft))
  93.          I(cout, vref) <+ gm_nom*(V(vout, vspply_p)+vsoft);
  94.       else if (V(vout) < (V(vspply_n) + vsoft))
  95.          I(cout, vref) <+ gm_nom*(V(vout, vspply_n)-vsoft);
  96.    end
  97. endmodule



复制代码
 楼主| 发表于 2013-11-12 15:14:39 | 显示全部楼层
已经解决!
发表于 2014-10-8 22:32:19 | 显示全部楼层
求verilog-A入门教材
发表于 2014-11-25 18:58:52 | 显示全部楼层
回复 1# zr3030


   楼主你好 本人刚接触理想运放 想请教一下像vref、freq_unitygain、vsoft 这几个参数是什么意思呢?谢谢!
发表于 2015-2-15 16:03:30 | 显示全部楼层
回复 4# IC.Michael

个人理解,vref是设置opamp的输出直流点,unity_gain是运放的增益带宽积,vsoft是运放输出最高的电位与VDD的差值。
发表于 2015-2-16 17:15:31 | 显示全部楼层
謝謝分享
发表于 2015-8-5 17:20:41 | 显示全部楼层
回复 2# zr3030


   楼主能共享一下 你当初编写的全差分运放的veriloga程序吗?
   谢谢!
发表于 2016-11-3 00:44:59 | 显示全部楼层
回复 7# liuzexue

在何乐年的书上有完整的运放代码  最后一章
发表于 2016-11-6 00:40:55 | 显示全部楼层
回复 8# 老猴子enjoy


    非常感谢!
发表于 2016-11-20 20:50:03 | 显示全部楼层
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-18 22:40 , Processed in 0.021583 second(s), 7 queries , Gzip On, Redis On.

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