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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 12317|回复: 24

在MMSIM610或以上版本仿真遇到SpectreHDL is no longer supported的解决办法

[复制链接]
发表于 2013-4-30 22:29:08 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 02015678 于 2013-5-15 16:23 编辑

原因是这样子的,Cadence自己有做一个SpectreHDL用来描述模拟和混合信号集成电路,是私有的开放使用的。然后有了开放的Verilog-AMS或者叫做Verilog-A的模拟与混合信号硬件描述语言之后,SpectreHDL自然停止开发。

自MMSIM61起,Cadence停止支持SpectreHDL改投入Verilog-A阵营。
因此如果你目前使用的PDK或者前辈的设计用到了SpectreHDL模型,你只有两个选择:
1)使用IC5141自带spectre
2)将原SpectreHDL修改为Verilog-A模型
不过据说两者还是有渊源的,所以修改起来也不是很难,下面介绍一下目前我发现的主要区别:


修改相应SpectreHDL文件为等效的Verilog-A文件,或者使用5141自带spectre。

通常这是电阻的AHDL模型出了问题,不过SpectreHDL和Verilog-A语法还算接近,所以修改还算容易。
例如module定义语法不同,前者是




  1. module  (端口1,端口2,端口3……)(参数1,参数2,参数3,……)
  2. {
  3. ……
  4. }


复制代码

后者是




  1. module (端口1,端口2,端口3……);
  2. ……
  3. endmodule


复制代码

例如热力学温度定义不同,
前者是$temp(),后者是$temperature。

例如节点语法不通,前者是




  1. node [V,I]


复制代码

后者是




  1. electrical


复制代码

例如analog语法不通,
前者是




  1. analog {
  2. ……
  3. }


复制代码

后者是




  1. analog begin
  2. ……
  3. end


复制代码
在例如模拟赋值语法不同,
前者是




  1. V(p,n)  <-  Expression


复制代码

后者是




  1. V(p,n)   <+   Expression


复制代码


另外建议Verilog-A的文件开头加上一句




  1. `include "discipline.h"


复制代码


总的来说,举个例子,一个电阻的模型被修改成了Verilog-A格式如下:




  1. `include "discipline.h"

  2. module polyres_hdl (n2, n1, ctrl2, ctrl1); //(wr, lr, rtemp, jc1a, jc1b, jc2a, jc2b, tc1, tc2, etch, tnom, rsh0, rmaxvcoef, rminvcoef)
  3. electrical     n2, n1, ctrl2, ctrl1;

  4. parameter real lr=0.0;parameter real wr=0.0;
  5. parameter real rtemp=($temperature - 273.15);
  6. parameter real jc1a = 0;parameter real jc1b = 0;
  7. parameter real jc2a = 0;parameter real jc2b= 0;
  8. parameter real tc1 = 0;parameter real tc2 = 0;
  9. parameter real etch = 0;parameter real tnom = 25.0;
  10. parameter real rsh0 = 1;parameter real rmaxvcoef = 3;
  11. parameter real rminvcoef = 0.33;

  12. real dt, absv, vc1, vc2, tcoef, vcoef, r0, weff;

  13.     analog begin   
  14. dt = (rtemp - tnom);        
  15. vc1 = jc1a + jc1b / lr;        vc2 = (jc2a + jc2b / lr) / lr;        
  16. absv = abs(V(ctrl2, ctrl1));        
  17. tcoef = 1.0 + dt * (tc1 + dt * tc2);        
  18. vcoef = 1.0 + absv * (vc1 + absv * vc2);      
  19.   vcoef = min(vcoef, rmaxvcoef);     
  20.   vcoef = max(vcoef, rminvcoef);      
  21. weff = (wr - 2.0 * etch);        
  22. r0 = rsh0 * lr / weff * tcoef * vcoef;        
  23. V(n2, n1) <+ I(n2, n1) * r0;   
  24. end
  25. endmodule


复制代码

补充内容 (2020-12-21 11:13):
Spectre、Verilog-A的主要作者Ken Kundert在2020年10月在TCAD期刊发表了一篇论文,简要来说ADI一位工程师发现Verilog-A内建的Flicker Noise实现有bug,详见15楼
 楼主| 发表于 2013-4-30 22:33:53 | 显示全部楼层
参见
Modeling Diffusion Resistors Using Verilog-A
http://www.designers-guide.org/Modeling/diffusion-resistors.pdf
发表于 2014-4-28 16:54:24 | 显示全部楼层
赞一个,,,找到解决办法了。
发表于 2014-4-28 17:16:52 | 显示全部楼层
啦啦啦。、、。修改可以仿真了。。真是感谢啊~
发表于 2015-3-26 17:28:35 | 显示全部楼层
发表于 2015-5-19 10:55:49 | 显示全部楼层
回复 5# lasang123


我的也不行,请问你解决了吗?
 楼主| 发表于 2015-6-22 11:44:39 | 显示全部楼层
回复 6# tornadoet


   仔细检查语法,要理解语法,不要照抄。不同PDK对电阻的描述可能不完全一样。
发表于 2015-9-21 03:45:50 | 显示全部楼层
回复 6# tornadoet

你改完后需要把文件后缀改成.va
发表于 2015-9-21 10:19:18 | 显示全部楼层
回复 8# lovekeduo

谢谢
 楼主| 发表于 2016-5-21 19:32:05 | 显示全部楼层
Cadence 官方似乎有提供一个叫做 shdl2vloga 的脚本给Foundry,用于把resistor的SpectreHDL的模型转换为Verilog-A的。但这一文件似乎并未对用户提供。 不知道谁会有 shdl2vloga 这个脚本?相信一定会比我楼主位提到的手动修改要方便的多。

参考:
http://community.cadence.com/cad ... forums/f/38/t/29190
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-25 13:54 , Processed in 0.026735 second(s), 7 queries , Gzip On, Redis On.

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