|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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定义语法不同,前者是
- module (端口1,端口2,端口3……)(参数1,参数2,参数3,……)
- {
- ……
- }
复制代码
后者是
- module (端口1,端口2,端口3……);
- ……
- endmodule
复制代码
例如热力学温度定义不同,
前者是$temp(),后者是$temperature。
例如节点语法不通,前者是
后者是
。
例如analog语法不通,
前者是
后者是
在例如模拟赋值语法不同,
前者是
后者是
另外建议Verilog-A的文件开头加上一句
总的来说,举个例子,一个电阻的模型被修改成了Verilog-A格式如下:
- `include "discipline.h"
- module polyres_hdl (n2, n1, ctrl2, ctrl1); //(wr, lr, rtemp, jc1a, jc1b, jc2a, jc2b, tc1, tc2, etch, tnom, rsh0, rmaxvcoef, rminvcoef)
- electrical n2, n1, ctrl2, ctrl1;
- parameter real lr=0.0;parameter real wr=0.0;
- parameter real rtemp=($temperature - 273.15);
- parameter real jc1a = 0;parameter real jc1b = 0;
- parameter real jc2a = 0;parameter real jc2b= 0;
- parameter real tc1 = 0;parameter real tc2 = 0;
- parameter real etch = 0;parameter real tnom = 25.0;
- parameter real rsh0 = 1;parameter real rmaxvcoef = 3;
- parameter real rminvcoef = 0.33;
- real dt, absv, vc1, vc2, tcoef, vcoef, r0, weff;
- analog begin
- dt = (rtemp - tnom);
- vc1 = jc1a + jc1b / lr; vc2 = (jc2a + jc2b / lr) / lr;
- absv = abs(V(ctrl2, ctrl1));
- tcoef = 1.0 + dt * (tc1 + dt * tc2);
- vcoef = 1.0 + absv * (vc1 + absv * vc2);
- vcoef = min(vcoef, rmaxvcoef);
- vcoef = max(vcoef, rminvcoef);
- weff = (wr - 2.0 * etch);
- r0 = rsh0 * lr / weff * tcoef * vcoef;
- V(n2, n1) <+ I(n2, n1) * r0;
- end
- endmodule
复制代码
补充内容 (2020-12-21 11:13):
Spectre、Verilog-A的主要作者Ken Kundert在2020年10月在TCAD期刊发表了一篇论文,简要来说ADI一位工程师发现Verilog-A内建的Flicker Noise实现有bug,详见15楼 |
|