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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 8785|回复: 9

[求助] analoglib switch 仿真问题

[复制链接]
发表于 2017-5-10 14:39:56 | 显示全部楼层 |阅读模式

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

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

x
各位大神,有个问题请教,调用anloglib 库里的switch器件,在spectre里仿真没问题,但是在HSPICED下仿真却无法创建网表,提示错误是:ERROR: Netlister: unable
to
descend
into any of the views defined in the view list: "hspiceS spice cmos_sch cmos.sch schematic...请大神们帮忙解决一下,谢谢!
发表于 2017-5-10 16:55:51 | 显示全部楼层
CDS生成了给HSPICE就行了
 楼主| 发表于 2017-5-10 17:30:44 | 显示全部楼层
回复 2# lwjee
能具体说下操作步骤吗?谢谢!在spectre下很简单,设置好switch的参数后,netlist and run 就行了,但是在HspiceD的模式下,却无法生成网表,导致无法仿真。
发表于 2017-5-11 14:06:40 | 显示全部楼层
本帖最后由 david_reg 于 2017-5-11 14:07 编辑

在hspice中没有switch这个基本元件,要使用它需要在icfb中load hspice目录下的cadence接口“$HSP_HOME\interface\HSPICE.ile”, 然后用icfb菜单中出现的“Tools/Hspice Library Update Utility” 把analogLib做一次转换,生成hspice view,这时switch这个cell就有了hspice view和veriloga view, 然后在ADE里面的把simulator选成HSPICE,产生hspice网表,可以看到网表中的switch模块是以veriloga的形式调用的。

另一个容易一点的方法,不用转换lib,是直接在switch里面建立一个veriloga模块(内容如下),然后在ade里面生成hspiceD网表时,把veriloga添加到switch veiw list和stop veiw list里面,写在hspiceD的后面即可。
--------------------------------
// VerilogA for analogLib, switch, veriloga


`include "constants.vams"
`include "disciplines.vams"

module switch(\N+ , \N- , \NC+ , \NC- );
inout \N+ ;
electrical \N+ ;
inout \N- ;
electrical \N- ;
inout \NC+ ;
electrical \NC+ ;
inout \NC- ;
electrical \NC- ;

parameter real r = 1K ;
parameter real vt1 = 0.0;
parameter real vt2 = vt1 + 1.0;
parameter real rc = 1.0 ;
parameter real ro = 1T ;
parameter real ts = 0.0 ;
parameter real td = 0.0 ;
parameter real vsw = 0.0 ;


   real vc;
   real gmin, gmax, g;
   real t1t2delta, gdelta, tmp;

   analog begin
      @(initial_step) begin
        if (ro <= 0) begin
          $strobe(" error: ro must be greater than zero.") ;
          $finish(1);
        end
        if (rc <= 0) begin
          $strobe(" error: rc must be greater than zero.") ;
          $finish(1);
        end
        gmin = 1.0 / ro;
        gmax = 1.0 / rc;
        gdelta = gmin - gmax;
        t1t2delta = vt2 - vt1;
        if ((vt1 == 0) && (vt2 == 0)) begin
          $strobe(" notice: vt2 defaults to 1.0 greater than vt1.") ;
          t1t2delta = 1.0;
        end
        if (t1t2delta == 0) begin
          $strobe(" error: vt2 should not be equal to vt1.") ;
          $finish(1);
        end
      end
      vc = V( \NC+ , \NC- );
      tmp = vc - vt1;
      if ( tmp * (vc-vt2) > 0 ) begin
        if ( ( (vt1 < vt2) && (vc < vt1) ) ||
            ( (vt1 > vt2) && (vc > vt1) ) )
          g = gmin;
        else
          g = gmax;
      end else begin
           tmp = tmp / t1t2delta;
           tmp = 2 * tmp * tmp * tmp - 3 * tmp * tmp;
           g = gmin + gdelta * tmp;
      end
      g = g * V(\N+ ,  \N- ) ;
      I(\N+ ,  \N- ) <+ g;
   end

endmodule

点评

会出现ERROR (OSSHNL-514): Netlist generation failed because of the errors reported above. The netlist might not have been generated at all, or the generated netlist could be corrupt. Fix the reported   发表于 2024-5-30 13:34
 楼主| 发表于 2017-5-11 14:21:09 | 显示全部楼层
回复 4# david_reg

   非常感谢!我试试看。
发表于 2017-5-12 16:20:39 | 显示全部楼层
高人啊
发表于 2017-7-23 14:06:18 | 显示全部楼层
回复 1# zhengqh123


你好,请问在spectre中怎么仿真switch?我调试的时候出现了问题,开关这头的信号传输的就是开关的输入信号,控制信号并没有起到作用,这个是我发在论坛的求助帖,能麻烦帮忙看下吗?谢谢了。
http://bbs.eetop.cn/thread-633369-1-1.html
发表于 2017-11-10 11:13:07 | 显示全部楼层
厉害啊
发表于 2022-9-15 14:36:16 | 显示全部楼层
不错。谢谢分享。。谁知道environment option在哪个文件下呀?.cdsenv和cdsinit中都没有直接找到
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-15 17:56 , Processed in 0.021732 second(s), 8 queries , Gzip On, Redis On.

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