马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 老干部金戈 于 2021-4-18 16:18 编辑
本人大三学生,自学cadence EDA软件一月左右,遇到了在MMSIM610或以上版本仿真遇到SpectreHDL is no longer supported的问题,这个问题论坛上已经有大神解决了(http://bbs.eetop.cn/forum.php?mod=viewthread&tid=393251(解决方案))
根据前文的大神的提示修改SMIC_018_MMRF中的res.def和res.df.def,目前已经可以使用,现在分享给大家,建议大家使用前先备份原件,本人的代码基础不是很好,有错误的话希望大佬们多多指正,也希望能帮助各位
res.def 修改后的:
- `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
-
-
-
- module diffres_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, vc1, vc2, tcoef, vcoef, r0, weff;
-
-
-
- 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
- endmodule
-
-
-
- module absrint_hdl (n2, n1, ctrl2, ctrl1); //(wr, rtemp, jc1a, jc1b, jc2a, jc2b, tc1, tc2, etch, tnom, rshc, rsh0, rsh1, rmaxvcoef, rminvcoef)
- 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;
-
-
-
- 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
- endmodule
-
-
-
- module rint_hdl (n2, n1, ctrl2, ctrl1); //(wr, rtemp, jc1a, jc1b, jc2a, jc2b, tc1, tc2, etch, tnom, rshc, rsh0, rsh1, rmaxvcoef, rminvcoef)
- 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;
-
-
-
- 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
- endmodule
-
-
-
复制代码
res.df.def修改后的:
- `include "discipline.h"
- module polyres_hdl (n2, n1, ctrl2, ctrl1); //(wr, lr, rtemp, jc1a, jc1b, jc2a, jc2b, tc1, tc2, etch, dl, 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 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;
-
-
-
- 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
- endmodule
-
-
-
- module diffres_hdl (n2, n1, ctrl2, ctrl1); //(wr, lr, rtemp, jc1a, jc1b, jc2a, jc2b, tc1, tc2, etch, dl, 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 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;
-
-
-
- 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
- endmodule
-
-
-
复制代码
|