微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 综合技术问答 > EDA使用问答 > SpectreHDL is no longer supported since MMSIM61

SpectreHDL is no longer supported since MMSIM61

时间:03-15 整理:3721RD 点击:
仿真时出现“Spectrehdl is no longer supported since MMSIM61。Exiting AHDL compilation”
请问该怎么解决?


修改相应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。
例如节点语法不通,前者是node,后者是electrical。
例如analog语法不通,前者是




  1. analog {……}


复制代码

后者是




  1. analog begin……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. electricaln2, 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


复制代码

参见
Modeling Diffusion Resistors Using Verilog-A
http://www.designers-guide.org/Modeling/diffusion-resistors.pdf


修改后还是不行
res.def 修改为:
`include "discipline.h"
module polyres_hdl (n2, n1, ctrl2, ctrl1);
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;
initial
begin
end
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
final
begin
end
endmodule
module diffres_hdl (n2, n1, ctrl2, ctrl1);
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, vc1, vc2, tcoef, vcoef, r0, weff;
initial
begin
end
analog begin
dt = (rtemp - tnom);
vc1 = jc1a + jc1b / lr;
vc2 = (jc2a + jc2b / lr) / lr;
tcoef = 1.0 + dt * (tc1 + dt * tc2);
vcoef = 1.0 + V(ctrl2, ctrl1) * (vc1 + V(ctrl2, ctrl1) * 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
final
begin
end
endmodule
module absrint_hdl (n2, n1, ctrl2, ctrl1);
electrical n2, n1, ctrl2, ctrl1;
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 rshc = 1;
parameter real rsh0 = 0;
parameter real rsh1 = 0;
parameter real rmaxvcoef = 3;
parameter real rminvcoef = 0.33;
real dt, absv, vc1, vc2, tcoef, vcoef, r0, weff;
initial
begin
end
analog begin
dt = (rtemp - tnom);
weff = (wr - 2.0 * etch);
vc1 = jc1a + jc1b * weff;
vc2 = jc2a + jc2b * weff;
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);
r0 = (rshc + rsh0 / weff + rsh1 / (weff * weff)) * tcoef * vcoef;
V(n2, n1) <+ I(n2, n1) * r0;
end
final
begin
end
endmodule
module rint_hdl (n2, n1, ctrl2, ctrl1);
electrical n2, n1, ctrl2, ctrl1;
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 rshc = 1;
parameter real rsh0 = 0;
parameter real rsh1 = 0;
parameter real rmaxvcoef = 3;
parameter real rminvcoef = 0.33;
real dt, vc1, vc2, tcoef, vcoef, r0, weff;
initial
begin
end
analog begin
dt = (rtemp - tnom);
weff = (wr - 2.0 * etch);
vc1 = jc1a + jc1b * weff;
vc2 = jc2a + jc2b * weff;
tcoef = 1.0 + dt * (tc1 + dt * tc2);
vcoef = 1.0 + V(ctrl2, ctrl1) * (vc1 + V(ctrl2, ctrl1) * vc2);
vcoef = min(vcoef, rmaxvcoef);
vcoef = max(vcoef, rminvcoef);
r0 = (rshc + rsh0 / weff + rsh1 / (weff * weff)) * tcoef * vcoef;
V(n2, n1) <+ I(n2, n1) * r0;
end
final
begin
end
endmodule

res_rf.def修改为:
`include "discipline.h"
module polyres_hdl (n2, n1, ctrl2, ctrl1);
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 dl = 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;
initial
begin
end
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 -2*dl) / weff * tcoef * vcoef;
V(n2, n1) <+ I(n2, n1) * r0;
end
final
begin
end
endmodule
module diffres_hdl (n2, n1, ctrl2, ctrl1);
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 dl = 0;
parameter real tnom = 25.0;
parameter real rsh0 = 1;
parameter real rmaxvcoef = 3;
parameter real rminvcoef = 0.33;
real dt, vc1, vc2, tcoef, vcoef, r0, weff;
initial
begin
end
analog begin
dt = (rtemp - tnom);
vc1 = jc1a + jc1b / lr;
vc2 = (jc2a + jc2b / lr) / lr;
tcoef = 1.0 + dt * (tc1 + dt * tc2);
vcoef = 1.0 + V(ctrl2, ctrl1) * (vc1 + V(ctrl2, ctrl1) * vc2);
vcoef = min(vcoef, rmaxvcoef);
vcoef = max(vcoef, rminvcoef);
weff = (wr - 2.0 * etch);
r0 = rsh0 * (lr -2*dl) / weff * tcoef * vcoef;
V(n2, n1) <+ I(n2, n1) * r0;
end
final
begin
end
endmodule

上一篇:有关Silvaco TCAD的入门
下一篇:最后一页

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top