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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
EETOP诚邀模拟IC相关培训讲师 创芯人才网--重磅上线啦!
查看: 8600|回复: 5

[求助] 请教下大家ADS仿真出现No DC convergence错误的原因

[复制链接]
发表于 2020-4-11 14:50:03 | 显示全部楼层 |阅读模式

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

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

x


     在使用ADS2017 verilog A仿真VCO中出现No DC convergence 错误,我觉得挺奇怪,向大家请教下什么原因,万分感谢!

     具体情况是这样的: 我先用verilog A语言写了一个最简单的VCO的行为级描述,是从ADS自身带的例程中复制出来的,内容如下:

     `include "disciplines.vams"
     `include "constants.vams"
    // Voltage Controlled Oscillator
     module vco_test(in, out);
     inout in, out;
     electrical in, out;
     parameter real gain = 1e6, fc = 1e6;
     analog
        V(out) <+ sin(2*`M_PI*(fc*$realtime + idt(gain*V(in))));
     endmodule

    然后生成symbol,之后调用,给直流电压输入,原理图如下
    VCO_va原理图.PNG
   按照原理分析,观察Vout的瞬态仿真,应该是2MHz的正弦波,但在仿真中出现错误,提示:No DC convergence。
    DC convergence.PNG
  详细内容如下:
  Processing VAMS source 'F:/workspace/ADS/Tutorial_wrk/veriloga/vco_test.va'
  compiled source cache is valid
  Analog module platform compile:
          [17] amswork.vco_test (valid object cache, no platform compile required)
          Analog module design library exists, no link required.
   Done with exporting 1 VerilogA device(s).
          Matrix is singular (detected at node or branch `X1._opidt0').

          Matrix is singular (detected at node or branch `X1._opidt0').
..
.................................................................................................................................
           Matrix is singular (detected at node or branch `X1._opidt0').
..
-------------------------------------------------------------------------------
Simulation finished with errors.
-------------------------------------------------------------------------------
    错误原因我看到是:Matrix is singular (detected at node or branch `X1._opidt0'),是说vco_test中idt这个模块异常,而且如果把idt函数去掉,程序正常,说明错误原因就在idt函数这里。idt是一个积分函数,对频率进行积分得到相位,频率为gain*V(in)=1e6,时间长度为0——1us,这个积分应该是正常的啊。

    请大家指导下是什么原因,怎么解决这个问题呢,谢谢!


发表于 2020-4-11 20:05:26 | 显示全部楼层
低通滤波器的仿真你是怎么进行的?
 楼主| 发表于 2020-4-14 21:50:25 | 显示全部楼层
找到原因了,是需要给初值,不太清楚为什么那么多别人的程序包括官网的程序都没赋初值。
我将 idt(gain*V(in))修改为 idt(gain*V(in), 0),就没有错误了。

另外这个问题在schematic原理图中也会出现,比如一个电流源对电容进行充电,如果不赋初值,电容两端的会非常大,测试中到了GV。
电流源过电容.PNG


 楼主| 发表于 2020-4-14 22:08:17 | 显示全部楼层


曦玄 发表于 2020-4-11 20:05
低通滤波器的仿真你是怎么进行的?




    我也是新手,低通滤波器我也没有做过,可以探讨一下,我觉得有两种方式,第一种是以原理图的形式实现,最简单的二阶滤波器可以搭出来
    电流源过电容.PNG
    第二种是以Verilog A语言描写,可以参考下官网的例程,官网的就是一个RC低通滤波器。
    VerilogA语言就是基尔霍夫定律,用语言构建电路,然后把所有电路节点的电流电压描述出来。
    // Phase Locked Loop
module pll(rf, out, ref, if_);
   inout rf, out, ref, if_;
   electrical rf, out, ref, if_;
   electrical lo;
   parameter real tau = 1m from (0:inf);
   parameter real loopGain = 1 from (0:inf);
   parameter real fc = 2.0k from (0:inf);
   real cap, res;

   phaseDetector #(.gain(2)) pd1(lo, rf, if_);
   vco #(.gain(loopGain/2), .fc(fc) ) vco1(out, lo);

   analog begin
      cap = 150e-9;
      res = tau/cap;

      V(out, if_) <+ I(out, if_)*res;
      I(out, ref) <+ ddt(cap*V(out,ref));
   end
endmodule


发表于 2020-4-15 11:19:46 | 显示全部楼层


自由的飞 发表于 2020-4-14 21:50
找到原因了,是需要给初值,不太清楚为什么那么多别人的程序包括官网的程序都没赋初值。
我将 idt(gain*V(i ...


idt(gain*V(in))修改为 idt(gain*V(in), 0)

是什么意思?0设置的是什么?
我在也遇到了低通滤波器电压高达GV。


 楼主| 发表于 2020-4-15 22:32:33 | 显示全部楼层


曦玄 发表于 2020-4-15 11:19
idt(gain*V(in))修改为 idt(gain*V(in), 0)

是什么意思?0设置的是什么?



   0是初值啊,电容对应积分函数,就是零时刻的电压值。

    解决方法我在上面图片里展示了的,用一个switch,t=0的接地,赋初值为0.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-26 14:15 , Processed in 0.021331 second(s), 7 queries , Gzip On, Redis On.

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