Verwendeter Programmcode in Studienarbeit für ESY1B zum Thema "Verifikation mit SystemVerilog und Python"
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

demo.va 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. `include "disciplines.vams"
  2. `include "constants.vams"
  3. module myfet(d, g, s);
  4. inout electrical d, g, s;
  5. parameter real kp = 1m;
  6. parameter real vt = 1;
  7. real vgst;
  8. real cur;
  9. analog begin
  10. vgst = V(g,s)-vt;
  11. cur = 0.0;
  12. if (vgst > 0)
  13. if (vgst > V(d,s))
  14. cur = (vgst-0.5*V(d,s))*V(d,s);
  15. else
  16. cur = 0.5*pow(vgst, 2);
  17. I(d,s) <+ kp*cur;
  18. end
  19. endmodule
  20. module lccap(a,b);
  21. inout a,b; //Interface ports
  22. electrical a,b;
  23. electrical force_node; //Internal node
  24. real vext=0;
  25. real vv=0;
  26. real vforce=0;
  27. parameter real rforce=1; // Rd
  28. parameter real cforce=0.001; // Cd
  29. parameter real tau = rforce*cforce; // tau=Rd*Cd
  30. real vcontrol= 0; // RMS Voltage to control the angle
  31. // capacitance
  32. real cap = 0;
  33. real qlc = 0;
  34. parameter real cmin=2.5e-15; // C
  35. parameter real cmax=8.0e-15; // Cparallel
  36. real alpha = 0;
  37. parameter real delta_sq = 0.1;
  38. parameter real vtc = 2;
  39. parameter real vmc = 0.1;
  40. // transmittance / reflectance
  41. real beta = 0;
  42. real trans=0;
  43. parameter real tmin = 0.01;
  44. parameter real eta_sq = 0.1;
  45. parameter real vmo = 0.9;
  46. parameter real vto = 2;
  47. analog
  48. begin
  49. @(initial_step)
  50. begin
  51. //Initial voltage for internal node
  52. vforce = 0;
  53. end
  54. begin
  55. //Probing terminal voltage
  56. vext = V(a,b);
  57. vv = vext * vext;
  58. // Calculation of Internal node voltage
  59. I(force_node) <+ ddt(cforce * V(force_node)); // current into Cd
  60. I(force_node) <+ (V(force_node)-vv) / rforce; // current from Rd
  61. vforce = V(force_node);
  62. vcontrol = sqrt(vforce); // calculate RMS Voltage
  63. // C-V calculation
  64. alpha = (vcontrol - vtc) / vmc;
  65. cap = cmin + (2/`M_PI) * (cmax-cmin) * atan( (alpha + sqrt(alpha * alpha + delta_sq ))/2);
  66. qlc = cap * vext; // delta Q
  67. I(a,b) <+ ddt(qlc); // dQ / dt
  68. // T-V calculation
  69. beta = (vcontrol - vto)/ vmo;
  70. trans = 1 - (1-tmin)*tanh( (beta+sqrt(beta*beta + eta_sq)) / 2 );
  71. end
  72. end
  73. endmodule
  74. module demo;
  75. electrical src_out, gate, out, gnd;
  76. ground gnd;
  77. parameter real on_V = 10.0;
  78. parameter real off_V = -1;
  79. parameter real on_T = 2m; // on 1s
  80. parameter real off_T = 0;
  81. parameter real startDelay = 1m; // switch to on_V on 2ms
  82. analog begin
  83. $bound_step(10u); // bessere Aufloesung
  84. end
  85. // Puls-Quelle
  86. /*prameters expected for 'pulse' are '[dc] [mag [phase]] val0 val1 [td [rise [fall [width [period]]]]] */
  87. vpulse #(.val0(off_V), .val1(on_V), .td(startDelay), .rise(1n), .fall(1n), .width(on_T)) PL(gate, gnd);
  88. vdc #(.dc(3.2)) VDC (src_out, gnd);
  89. myfet #(.kp(1m)) FET1 (src_out, gate, out);
  90. lccap lcc(out, gnd);
  91. endmodule