diff --git a/src/spicelib/devices/adms/psp102/admsva/PSP102_ChargesNQS.include b/src/spicelib/devices/adms/psp102/admsva/PSP102_ChargesNQS.include deleted file mode 100644 index 6ebe651fd..000000000 --- a/src/spicelib/devices/adms/psp102/admsva/PSP102_ChargesNQS.include +++ /dev/null @@ -1,303 +0,0 @@ -//====================================================================================== -//====================================================================================== -// Filename: PSP102_ChargesNQS.include -//====================================================================================== -//====================================================================================== -// -// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors -// -// -// Version: 102.1, April 2007 (Simkit 2.5) -// -//====================================================================================== -//====================================================================================== -// -// Further information can be found in the file readme.txt -// - - - /////////////////////////////////////////////// - // - // Calculate NQS-charge contributions - // - /////////////////////////////////////////////// - - Qp1 = vnorm * V(SPLINE1); - Qp2 = vnorm * V(SPLINE2); - Qp3 = vnorm * V(SPLINE3); - Qp4 = vnorm * V(SPLINE4); - Qp5 = vnorm * V(SPLINE5); - Qp6 = vnorm * V(SPLINE6); - Qp7 = vnorm * V(SPLINE7); - Qp8 = vnorm * V(SPLINE8); - Qp9 = vnorm * V(SPLINE9); - - Tnorm = 0.0; - - if (SWNQS_i != 0) begin - // Dimension and mobility information is included in Tnorm - Tnorm = MUNQS_i * phit1 * BET_i / (COX_qm * Gmob_dL); - thesat2 = thesat1 * thesat1 * phit1 * phit1; - - if (SWNQS_i == 1) begin - dQy = QpN - Qp0; - d2Qy = 6.0 * (Qp0 + QpN) - 12.0 * Qp1; - end else if (SWNQS_i == 2) begin - dQy = (-7.0 * Qp0 - 3.0 * Qp1 + 12.0 * Qp2 - 2.0 * QpN) / 5.0; - d2Qy = -18.0 / 5.0 * (-4.0 * Qp0 + 9.0 * Qp1 - 6.0 * Qp2 + QpN); - end else if (SWNQS_i == 3) begin - dQy = (-13.0 * Qp0 - 6.0 * Qp1 + 24.0 * Qp2 - 6.0 * Qp3 + QpN) / 7.0; - d2Qy = (180.0 * Qp0 - 408.0 * Qp1 + 288.0 * Qp2 - 72.0 * Qp3 + 12.0 * QpN) / 7.0; - end else if (SWNQS_i == 5) begin - dQy = (-181.0 * Qp0 - 84.0 * Qp1 + 24.0 * Qp4 - 6.0 * Qp5 - 90.0 * Qp3 + QpN - + 336.0 * Qp2) / 65.0; - d2Qy = (432.0 * Qp4 - 108.0 * Qp5 - 1620.0 * Qp3 + 18.0 * QpN + 3762.0 * Qp0 - - 8532.0 * Qp1 + 6048.0 * Qp2) / 65.0; - end else if (SWNQS_i == 9) begin - dQy = (1680.0 * Qp6 + 23400.0 * Qp4 + 5.0 * QpN - 87330.0 * Qp3 + 120.0 * Qp8 - - 450.0 * Qp7 - 81480.0 * Qp1 + 325920.0 * Qp2 - -175565.0 * Qp0 - 30.0 * Qp9) / 37829.0 - 30.0 / 181.0 * Qp5; - d2Qy = (-13500.0 * Qp7 + 702000.0 * Qp4 - 2619900 * Qp3 - 13793100.0 * Qp1 - + 9777600.0 * Qp2 + 6081750.0 * Qp0 + 150.0 * QpN + 3600.0 * Qp8 - - 900.0 * Qp9 + 50400 * Qp6) / 37829.0 - 900.0 / 181.0 * Qp5; - end else begin - dQy = 0; - d2Qy = 0; - end - `fq(Qp1, xg, dQy, d2Qy, fk1) - end - - if (SWNQS_i >= 2) begin - if (SWNQS_i == 2) begin - dQy = (2.0 * Qp0 - 12.0 * Qp1 + 3.0 * Qp2 + 7.0 * QpN) / 5.0; - d2Qy = -18.0 / 5.0 * (-4.0 * QpN + 9.0 * Qp2 - 6.0 * Qp1 + Qp0); - end else if (SWNQS_i == 3) begin - dQy = 0.5 * Qp0 - 3.0 * Qp1 + 3.0 * Qp3 - 0.5 * QpN; - d2Qy = (-48.0 * Qp0 + 288.0 * Qp1 - 480.0 * Qp2 + 288.0 * Qp3 - 48.0 * QpN) / 7.0; - end else if (SWNQS_i == 5) begin - dQy = (-291.0 * Qp1 - 6.0 * Qp2 - 84.0 * Qp4 + 21.0 * Qp5) / 65.0 - + (630.0 * Qp3 - 7.0 * QpN + 97.0 * Qp0) / 130.0; - d2Qy = (-1728.0 * Qp4 + 432.0 * Qp5 + 6480.0 * Qp3 - 72.0 * QpN - 1008 * Qp0 - + 6048 * Qp1 - 10152 * Qp2) / 65.0; - end else if (SWNQS_i == 9) begin - dQy = (-5880.0 * Qp6 - 81900.0 * Qp4 + 305655.0 * Qp3 - 420.0 * Qp8 - + 105.0 * Qp9 - 282255.0 * Qp1 + 1575.0 * Qp7 - 5850.0 * Qp2) / 37829.0 - + 105.0 / 181.0 * Qp5 + (94085.0 * Qp0 - 35.0 * QpN) / 75658.0; - d2Qy = (9777600.0 * Qp1 + 54000.0 * Qp7 - 2808000.0 * Qp4 + 10479600.0 * Qp3 - - 16413000.0 * Qp2 - 1629600.0 * Qp0 - 600.0 * QpN - 14400.0 * Qp8 - + 3600.0 * Qp9 - 201600.0 * Qp6) / 37829.0 + 3600.0 * Qp5 / 181.0; - end else begin - dQy = 0; - d2Qy = 0; - end - `fq(Qp2, xg, dQy, d2Qy, fk2) - end - - if (SWNQS_i >= 3) begin - if (SWNQS_i == 3) begin - dQy = (13.0 * QpN + 6.0 * Qp3 - 24.0 * Qp2 + 6.0 * Qp1 - Qp0) / 7.0; - d2Qy = (180.0 * QpN - 408.0 * Qp3 + 288.0 * Qp2 - 72.0 * Qp1 + 12.0 * Qp0) / 7.0; - end else if (SWNQS_i == 5) begin - dQy = (QpN - 6.0 * Qp5 + 24.0 * Qp4 - 24.0 * Qp2 + 6.0 * Qp1 - Qp0) / 5.0; - d2Qy = (1296.0 * (Qp4 + Qp2) - 324.0 * (Qp5 + Qp1) - 2052.0 * Qp3 - + 54.0 * (QpN + Qp0)) / 13.0; - end else if (SWNQS_i == 9) begin - dQy = (21840.0 * Qp6 + 304200.0 * Qp4 + 65.0 * QpN - 420.0 * Qp3 + 1560.0 * Qp8 - - 12605.0 * Qp0-390.0 * Qp9 + 75630.0 * Qp1 - 5850.0 * Qp7 - - 302520.0 * Qp2) / 37829.0 - 390.0 / 181.0 * Qp5; - d2Qy = (-2619900.0 * Qp1 - 202500.0 * Qp7 + 10530000.0 * Qp4 - 16601100.0 * Qp3 - + 10479600.0 * Qp2 + 436650.0 * Qp0 + 2250.0 * QpN + 54000.0 * Qp8 - - 13500.0 * Qp9 + 756000.0 * Qp6) / 37829.0 - 13500.0 * Qp5 / 181.0; - end else begin - dQy = 0; - d2Qy = 0; - end - `fq(Qp3, xg, dQy, d2Qy, fk3) - end - - if (SWNQS_i >= 4) begin - if (SWNQS_i == 5) begin - dQy = (-630.0 * Qp3 + 12.0 * Qp4 + 582.0 * Qp5 - 97.0 * QpN + 7.0 * Qp0 - - 42.0 * Qp1 + 168.0 * Qp2)/130.0; - d2Qy = (-10152.0 * Qp4 + 6048.0 * Qp5 + 6480.0 * Qp3 - 1008.0 * QpN - - 72.0 * Qp0 + 432.0 * Qp1 - 1728.0 * Qp2) / 65.0; - end - else if (SWNQS_i == 9) begin - dQy = (-81480.0 * Qp6 - 30.0 * Qp4 - 303975.0 * Qp3 - 5820.0 * Qp8 - + 1455.0 * Qp9 - 20265.0 * Qp1 + 21825.0 * Qp7 + 81060.0 * Qp2) / 37829.0 - - 485.0 / 75658.0 * QpN + 1455.0 * Qp5 / 181.0 + 6755.0 * Qp0 / 75658.0; - d2Qy = (702000.0 * Qp1 + 756000.0 * Qp7 - 16614600.0 * Qp4 + 10530000.0 * Qp3 - - 2808000.0 * Qp2 - 117000.0 * Qp0 - 8400.0 * QpN - 201600.0 * Qp8 - + 50400.0 * Qp9 - 2822400.0 * Qp6) / 37829.0 + 50400.0 * Qp5 / 181.0; - end else begin - dQy = 0; - d2Qy = 0; - end - `fq(Qp4, xg, dQy, d2Qy, fk4) - end - - if (SWNQS_i >= 5) begin - if (SWNQS_i == 5) begin - dQy = (-336.0 * Qp4 + 84.0 * Qp5 + 90.0 * Qp3 + 181.0 * QpN - Qp0 + 6.0 * Qp1 - - 24.0 * Qp2) / 65.0; - d2Qy = (18.0 * Qp0 + 3762.0 * QpN + 6048.0 * Qp4 + 432.0 * Qp2 - 1620.0 * Qp3 - - 108.0 * Qp1 - 8532.0 * Qp5) / 65.0; - end else if (SWNQS_i == 9) begin - dQy = (1680.0 * (Qp6 - Qp4) + 5.0 * (QpN - Qp0) + 450.0 * (Qp3 - Qp7) - + 120.0 * (Qp8 - Qp2) - 30.0 * (Qp9 - Qp1)) / 209.0; - d2Qy = (-900.0 * (Qp1 + Qp9) - 13500.0 * (Qp7 + Qp3) - 79500.0 * Qp5 - + 50400.0 * (Qp4 + Qp6) + 3600.0 * (Qp2 + Qp8) + 150.0 * (Qp0 + QpN)) / 181.0; - end else begin - dQy = 0; - d2Qy = 0; - end - `fq(Qp5, xg, dQy, d2Qy, fk5) - end - - if (SWNQS_i >= 6) begin - if (SWNQS_i == 9) begin - dQy = (30.0 * Qp6 + 81480.0 * Qp4 - 21825.0 * Qp3 - 81060.0 * Qp8 + 20265.0 * Qp9 - - 1455.0 * Qp1 + 303975.0 * Qp7 + 5820.0 * Qp2) / 37829.0 - -(6755.0 * QpN - 485.0 * Qp0) / 75658.0 - 1455.0 / 181.0 * Qp5; - d2Qy = (50400.0 * Qp1 + 10530000.0 * Qp7 - 2822400.0 * Qp4 + 756000.0 * Qp3 - - 201600.0 * Qp2 - 8400.0 * Qp0 - 117000.0 * QpN - 2808000.0 * Qp8 - + 702000.0 * Qp9 - 16614600.0 * Qp6) / 37829.0 + 50400.0 * Qp5 / 181.0; - end else begin - dQy = 0; - d2Qy = 0; - end - `fq(Qp6, xg, dQy, d2Qy, fk6) - end - - if (SWNQS_i >= 7) begin - if (SWNQS_i == 9) begin - dQy = (-304200.0 * Qp6 - 21840.0 * Qp4 + 12605.0 * QpN + 5850.0 * Qp3 - + 302520.0 * Qp8 - 65.0 * Qp0 - 75630.0 * Qp9 + 390.0 * Qp1 + 420.0 * Qp7 - - 1560.0 * Qp2) / 37829.0 + 390.0 / 181.0 * Qp5; - d2Qy = (-13500.0 * Qp1 - 16601100.0 * Qp7 + 756000.0 * Qp4 - 202500.0 * Qp3 - + 54000.0 * Qp2 + 2250.0 * Qp0 + 436650.0 * QpN + 10479600.0 * Qp8 - - 2619900.0 * Qp9 + 10530000.0 * Qp6) / 37829.0 - 13500.0 * Qp5 / 181.0; - end else begin - dQy = 0; - d2Qy = 0; - end - `fq(Qp7, xg, dQy, d2Qy, fk7) - end - - if (SWNQS_i >= 8) begin - if (SWNQS_i == 9) begin - dQy = (81900.0 * Qp6 + 5880.0 * Qp4 - 1575.0 * Qp3 + 5850.0 * Qp8 + 282255.0 * Qp9 - - 105.0 * Qp1 - 305655.0 * Qp7 + 420.0 * Qp2) / 37829.0 + (35.0 * Qp0 - - 94085.0 * QpN) / 75658.0 - 105.0 / 181.0 * Qp5; - d2Qy = (3600.0 * Qp1 + 10479600.0 * Qp7 - 201600.0 * Qp4 + 54000.0 * Qp3 - - 14400.0 * Qp2 - 600.0 * Qp0 - 1629600.0 * QpN - 16413000.0 * Qp8 - + 9777600.0 * Qp9 - 2808000.0 * Qp6) / 37829.0 + 3600.0 * Qp5 / 181.0; - end else begin - dQy = 0; - d2Qy = 0; - end - `fq(Qp8, xg, dQy, d2Qy, fk8) - end - - if (SWNQS_i >= 9) begin - if (SWNQS_i == 9) begin - dQy = (-23400.0 * Qp6 - 1680.0 * Qp4 + 175565.0 * QpN + 450.0 * Qp3 - - 325920.0 * Qp8 - 5.0 * Qp0 + 81480.0 * Qp9 + 30.0 * Qp1 - + 87330.0 * Qp7 - 120.0 * Qp2) / 37829.0 + 30.0 * Qp5 / 181.0; - d2Qy = (-900.0 * Qp1 - 2619900.0 * Qp7 + 50400.0 * Qp4 - 13500.0 * Qp3 - + 3600.0 * Qp2 + 150.0 * Qp0 + 6081750.0 * QpN + 9777600.0 * Qp8 - - 13793100.0 * Qp9 + 702000.0 * Qp6) / 37829.0 - 900.0 * Qp5 / 181.0; - end else begin - dQy = 0; - d2Qy = 0; - end - `fq(Qp9, xg, dQy, d2Qy, fk9) - end - - //-------------------------------------------------------------------- - - // Terminal charges for NQS - if (SWNQS_i != 0) begin - if (SWNQS_i == 1) begin - QS_NQS = (17.0 * Qp0 + 30.0 * Qp1 + QpN) / 96.0; - QD_NQS = (Qp0 + 30.0 * Qp1 + 17.0 * QpN) / 96.0; - `QiToPhi(Qp1,xg, temp1) - QG_NQS = xg - (x_sp + 4.0 * temp1 + x_dp) * `oneSixth; - end else if (SWNQS_i == 2) begin - QS_NQS = (11.0 * Qp0 + 24.0 * Qp1 + 9.0 * Qp2 + QpN) / 90.0; - QD_NQS = (11.0 * QpN + 24.0 * Qp2 + 9.0 * Qp1 + Qp0) / 90.0; - `QiToPhi(Qp1, xg, temp1) - `QiToPhi(Qp2, xg, temp2) - QG_NQS = xg - (x_sp + 3.0 * (temp1 + temp2) + x_dp) * 0.125; - end else if (SWNQS_i == 3) begin - QS_NQS = (251.0 * Qp0 + 594.0 * Qp1 + 312.0 * Qp2 + 174.0 * Qp3 + 13.0 * QpN) / 2688.0; - QD_NQS = (251.0 * QpN + 594.0 * Qp3 + 312.0 * Qp2 + 174.0 * Qp1 + 13.0 * Qp0) / 2688.0; - `QiToPhi(Qp1, xg, temp1) - `QiToPhi(Qp2, xg, temp2) - `QiToPhi(Qp3, xg, temp3) - QG_NQS = xg - (x_sp + 4.0 * temp1 + 2.0 * temp2 + 4.0 * temp3 + x_dp) / 12.0; - end else if (SWNQS_i == 5) begin - QS_NQS = (1187.0 * Qp0 + 43.0 * QpN) / 18720.0 + (503.0 * Qp1 + 172.0 * Qp4 - + 87.0 * Qp5 + 265.0 * Qp3 + 328.0 * Qp2) / 3120.0; - QD_NQS = (1187.0 * QpN + 43.0 * Qp0) / 18720.0 + (503.0 * Qp5 + 172.0 * Qp2 - + 87.0 * Qp1 + 265.0 * Qp3 + 328.0 * Qp4) / 3120.0; - `QiToPhi(Qp1, xg, temp1) - `QiToPhi(Qp2, xg, temp2) - `QiToPhi(Qp3, xg, temp3) - `QiToPhi(Qp4, xg, temp4) - `QiToPhi(Qp5, xg, temp5) - QG_NQS = xg - (x_sp + 4.0 * (temp1 + temp3 + temp5) + 2.0 * (temp2 + temp4) + x_dp) / 18.0; - end else if (SWNQS_i == 9) begin - QS_NQS = (75653.0 * Qp8 + 225999.0 * Qp4) / 3782900.0 + (151321.0 * Qp9 - + 454023.0 * Qp7 + 1073767.0 * Qp3 + 1564569.0 * Qp1) / 15131600.0 - + 75623.0 * Qp6 / 1891450.0 + 145.0 * Qp5 / 2896.0 + 72263.0 * Qp2 / 945725.0 - + (3504517.0 * Qp0 + 75653.0 * QpN) / 90789600.0; - QD_NQS = (75653.0 * Qp2 + 225999.0 * Qp6) / 3782900.0 + (151321.0 * Qp1 - + 454023.0 * Qp3 + 1073767.0 * Qp7 + 1564569.0 * Qp9) / 15131600.0 - + 75623.0 * Qp4 / 1891450.0 + 145.0 * Qp5 / 2896.0 + 72263.0 * Qp8 / 945725.0 - + (3504517.0 * QpN + 75653.0 * Qp0) / 90789600.0; - `QiToPhi(Qp1, xg, temp1) - `QiToPhi(Qp2, xg, temp2) - `QiToPhi(Qp3, xg, temp3) - `QiToPhi(Qp4, xg, temp4) - `QiToPhi(Qp5, xg, temp5) - `QiToPhi(Qp6, xg, temp6) - `QiToPhi(Qp7, xg, temp7) - `QiToPhi(Qp8, xg, temp8) - `QiToPhi(Qp9, xg, temp9) - QG_NQS = xg - (x_sp + 4.0 * (temp1 + temp3 + temp5 + temp7 + temp9) - + 2.0 * (temp2 + temp4 + temp6 + temp8) + x_dp) / 30.0; - end - QG_NQS = pd * QG_NQS; - - if (sigVds > 0) begin - Qs = COX_qm * phit1 * QS_NQS; - Qd = COX_qm * phit1 * QD_NQS; - end else begin - Qs = COX_qm * phit1 * QD_NQS; - Qd = COX_qm * phit1 * QS_NQS; - end - Qg = COX_qm * phit1 * QG_NQS; - Qb = -Qg - Qs - Qd; - end - - // Update internal nodes - V(RES1) <+ vnorm_inv * I(RES1) * r_nqs; - V(SPLINE1) <+ idt(-vnorm_inv * Tnorm * fk1, Qp1_0); - V(RES2) <+ vnorm_inv * I(RES2) * r_nqs; - V(SPLINE2) <+ idt(-vnorm_inv * Tnorm * fk2, Qp2_0); - V(RES3) <+ vnorm_inv * I(RES3) * r_nqs; - V(SPLINE3) <+ idt(-vnorm_inv * Tnorm * fk3, Qp3_0); - V(RES4) <+ vnorm_inv * I(RES4) * r_nqs; - V(SPLINE4) <+ idt(-vnorm_inv * Tnorm * fk4, Qp4_0); - V(RES5) <+ vnorm_inv * I(RES5) * r_nqs; - V(SPLINE5) <+ idt(-vnorm_inv * Tnorm * fk5, Qp5_0); - V(RES6) <+ vnorm_inv * I(RES6) * r_nqs; - V(SPLINE6) <+ idt(-vnorm_inv * Tnorm * fk6, Qp6_0); - V(RES7) <+ vnorm_inv * I(RES7) * r_nqs; - V(SPLINE7) <+ idt(-vnorm_inv * Tnorm * fk7, Qp7_0); - V(RES8) <+ vnorm_inv * I(RES8) * r_nqs; - V(SPLINE8) <+ idt(-vnorm_inv * Tnorm * fk8, Qp8_0); - V(RES9) <+ vnorm_inv * I(RES9) * r_nqs; - V(SPLINE9) <+ idt(-vnorm_inv * Tnorm * fk9, Qp9_0); - diff --git a/src/spicelib/devices/adms/psp102/admsva/PSP102_InitNQS.include b/src/spicelib/devices/adms/psp102/admsva/PSP102_InitNQS.include deleted file mode 100644 index a42383d16..000000000 --- a/src/spicelib/devices/adms/psp102/admsva/PSP102_InitNQS.include +++ /dev/null @@ -1,190 +0,0 @@ -//====================================================================================== -//====================================================================================== -// Filename: PSP102_InitNQS.include -//====================================================================================== -//====================================================================================== -// -// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors -// -// -// Version: 102.1, April 2007 (Simkit 2.5) -// -//====================================================================================== -//====================================================================================== -// -// Further information can be found in the file readme.txt -// - - ///////////////////////////////////////////////////////////////////////////// - // - // Computing initial (dc) values for internal nodes. - // This code is independent of internal-node voltages - // - ///////////////////////////////////////////////////////////////////////////// - - Qp1_0 = 0.0; - Qp2_0 = 0.0; - Qp3_0 = 0.0; - Qp4_0 = 0.0; - Qp5_0 = 0.0; - Qp6_0 = 0.0; - Qp7_0 = 0.0; - Qp8_0 = 0.0; - Qp9_0 = 0.0; - fk1 = 0.0; - fk2 = 0.0; - fk3 = 0.0; - fk4 = 0.0; - fk5 = 0.0; - fk6 = 0.0; - fk7 = 0.0; - fk8 = 0.0; - fk9 = 0.0; - if (SWNQS_i != 0) begin - dQis = 0.0; - dQy = 0.0; - dfQi = 0.0; - fQi = 0.0; - d2Qy = 0.0; - - Qp1 = 0.0; - Qp2 = 0.0; - Qp3 = 0.0; - Qp4 = 0.0; - Qp5 = 0.0; - Qp6 = 0.0; - Qp7 = 0.0; - Qp8 = 0.0; - Qp9 = 0.0; - - phi_p1 = 0.0; - phi_p2 = 0.0; - phi_p3 = 0.0; - phi_p4 = 0.0; - phi_p5 = 0.0; - phi_p6 = 0.0; - phi_p7 = 0.0; - phi_p8 = 0.0; - phi_p9 = 0.0; - - // Setting initial values for charge along the channel - // from interpolated DC-solution - if (xg > 0) begin - if (SWNQS_i == 1) begin - phi_p1 = `Phiy(0.5); - `PhiToQb(phi_p1,Qb_tmp) - Qp1_0 = -pd * (xg - phi_p1) - Qb_tmp; - end else if (SWNQS_i == 2) begin - phi_p1 = `Phiy(`oneThird); - `PhiToQb(phi_p1,Qb_tmp) - Qp1_0 = -pd * (xg - phi_p1) - Qb_tmp; - - phi_p2 = `Phiy(`twoThirds); - `PhiToQb(phi_p2,Qb_tmp) - Qp2_0 = -pd * (xg - phi_p2) - Qb_tmp; - if (sigVds < 0) begin - `swap(Qp1_0, Qp2_0) - end - end else if (SWNQS_i == 3) begin - phi_p1 = `Phiy(0.25); - `PhiToQb(phi_p1,Qb_tmp) - Qp1_0 = -pd * (xg - phi_p1) - Qb_tmp; - - phi_p2 = `Phiy(0.5); - `PhiToQb(phi_p2,Qb_tmp) - Qp2_0 = -pd * (xg - phi_p2) - Qb_tmp; - - phi_p3 = `Phiy(0.75); - `PhiToQb(phi_p3,Qb_tmp) - Qp3_0 = -pd * (xg - phi_p3) - Qb_tmp; - if (sigVds < 0) begin - `swap(Qp1_0, Qp3_0) - end - end else if (SWNQS_i == 5) begin - phi_p1 = `Phiy(`oneSixth); - `PhiToQb(phi_p1,Qb_tmp) - Qp1_0 = -pd * (xg - phi_p1) - Qb_tmp; - - phi_p2 = `Phiy(`oneThird); - `PhiToQb(phi_p2,Qb_tmp) - Qp2_0 = -pd * (xg - phi_p2) - Qb_tmp; - - phi_p3 = `Phiy(0.5); - `PhiToQb(phi_p3,Qb_tmp) - Qp3_0 = -pd * (xg - phi_p3) - Qb_tmp; - - phi_p4 = `Phiy(`twoThirds); - `PhiToQb(phi_p4,Qb_tmp) - Qp4_0 = -pd * (xg - phi_p4) - Qb_tmp; - - phi_p5 = `Phiy(0.8333333333333333); - `PhiToQb(phi_p5,Qb_tmp) - Qp5_0 = -pd * (xg - phi_p5) - Qb_tmp; - if (sigVds < 0) begin - `swap(Qp1_0, Qp5_0) - `swap(Qp2_0, Qp4_0) - end - end else if (SWNQS_i == 9) begin - phi_p1 = `Phiy(0.1); - `PhiToQb(phi_p1,Qb_tmp) - Qp1_0 = -pd * (xg - phi_p1) - Qb_tmp; - - phi_p2 = `Phiy(0.2); - `PhiToQb(phi_p2,Qb_tmp) - Qp2_0 = -pd * (xg - phi_p2) - Qb_tmp; - - phi_p3 = `Phiy(0.3); - `PhiToQb(phi_p3,Qb_tmp) - Qp3_0 = -pd * (xg - phi_p3) - Qb_tmp; - - phi_p4 = `Phiy(0.4); - `PhiToQb(phi_p4,Qb_tmp) - Qp4_0 = -pd * (xg - phi_p4) - Qb_tmp; - - phi_p5 = `Phiy(0.5); - `PhiToQb(phi_p5,Qb_tmp) - Qp5_0 = -pd * (xg - phi_p5) - Qb_tmp; - - phi_p6 = `Phiy(0.6); - `PhiToQb(phi_p6,Qb_tmp) - Qp6_0 = -pd * (xg - phi_p6) - Qb_tmp; - - phi_p7 = `Phiy(0.7); - `PhiToQb(phi_p7,Qb_tmp) - Qp7_0 = -pd * (xg - phi_p7) - Qb_tmp; - - phi_p8 = `Phiy(0.8); - `PhiToQb(phi_p8,Qb_tmp) - Qp8_0 = -pd * (xg - phi_p8) - Qb_tmp; - - phi_p9 = `Phiy(0.9); - `PhiToQb(phi_p9,Qb_tmp) - Qp9_0 = -pd * (xg - phi_p9) - Qb_tmp; - if (sigVds < 0) begin - `swap(Qp1_0, Qp9_0) - `swap(Qp2_0, Qp8_0) - `swap(Qp3_0, Qp7_0) - `swap(Qp4_0, Qp6_0) - end - end - end // (x_g >0) - end // (SWNQS_i != 0) - - x_sp = 0.0; - x_dp = 0.0; - Qp0 = 0.0; - QpN = 0.0; - if (SWNQS_i != 0.0) begin - x_sp = x_m - sigVds * 0.5 * dps * inv_phit1; - x_dp = x_m + sigVds * 0.5 * dps * inv_phit1; - Qp0 = 0.0; - QpN = 0.0; - if (x_sp > 0) begin - `PhiToQb(x_sp, QbSIGN) - Qp0 = -pd * (xg - x_sp) - QbSIGN; - end - if (x_dp > 0) begin - `PhiToQb(x_dp, QbSIGN) - QpN = -pd * (xg - x_dp) - QbSIGN; - end - end diff --git a/src/spicelib/devices/adms/psp102/admsva/PSP102_binning.include b/src/spicelib/devices/adms/psp102/admsva/PSP102_binning.include deleted file mode 100644 index 2c044e0ff..000000000 --- a/src/spicelib/devices/adms/psp102/admsva/PSP102_binning.include +++ /dev/null @@ -1,127 +0,0 @@ -//====================================================================================== -//====================================================================================== -// Filename: PSP102_binning.include -//====================================================================================== -//====================================================================================== -// -// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors -// -// -// Version: 102.1, April 2007 (Simkit 2.5) -// -//====================================================================================== -//====================================================================================== -// -// Further information can be found in the file readme.txt -// - - // auxiliary variables - iLEWE = iLE * iWE; - iiLE = LE / LEN; - iiWE = WE / WEN; - iiLEWE = iiLE * iiWE; - iiiLEWE = iiWE / iiLE; - - // auxiliary variables for COX only - iiLEcv = LEcv / LEN; - iiWEcv = WEcv / WEN; - iiLEWEcv = iiLEcv * iiWEcv; - - // auxiliary variables for CGOV only - iLEcv = LEN / LEcv; - iiiLEWEcv = iiWEcv / iiLEcv; - - // auxiliary variables for CGBOV only - iiLcv = Lcv / LEN; - iiWcv = Wcv / WEN; - iiLWcv = iiLcv * iiWcv; - - // auxiliary variables for CFR only - iLcv = LEN / Lcv; - iiiLWcv = iiWcv / iiLcv; - - // Process parameters - VFB = POVFB + iLE * PLVFB + iWE * PWVFB + iLEWE * PLWVFB; - STVFB = POSTVFB + iLE * PLSTVFB + iWE * PWSTVFB + iLEWE * PLWSTVFB; - TOX = POTOX; - NEFF = PONEFF + iLE * PLNEFF + iWE * PWNEFF + iLEWE * PLWNEFF; - VNSUB = POVNSUB; - NSLP = PONSLP; - DNSUB = PODNSUB; - DPHIB = PODPHIB + iLE * PLDPHIB + iWE * PWDPHIB + iLEWE * PLWDPHIB; - NP = PONP + iLE * PLNP + iWE * PWNP + iLEWE * PLWNP; - CT = POCT + iLE * PLCT + iWE * PWCT + iLEWE * PLWCT; - TOXOV = POTOXOV; - NOV = PONOV + iLE * PLNOV + iWE * PWNOV + iLEWE * PLWNOV; - - // DIBL parameters - CF = POCF + iLE * PLCF + iWE * PWCF + iLEWE * PLWCF; - CFB = POCFB; - - // Mobility parameters - BETN = POBETN + iLE * PLBETN + iiWE * PWBETN + iiiLEWE * PLWBETN; - STBET = POSTBET + iLE * PLSTBET + iWE * PWSTBET + iLEWE * PLWSTBET; - MUE = POMUE + iLE * PLMUE + iWE * PWMUE + iLEWE * PLWMUE; - STMUE = POSTMUE; - THEMU = POTHEMU; - STTHEMU = POSTTHEMU; - CS = POCS + iLE * PLCS + iWE * PWCS + iLEWE * PLWCS; - STCS = POSTCS; - XCOR = POXCOR + iLE * PLXCOR + iWE * PWXCOR + iLEWE * PLWXCOR; - STXCOR = POSTXCOR; - FETA = POFETA; - - // Series resistance parameters - RS = PORS + iLE * PLRS + iWE * PWRS + iLEWE * PLWRS; - STRS = POSTRS; - RSB = PORSB; - RSG = PORSG; - - // Velocity saturation parameters - THESAT = POTHESAT + iLE * PLTHESAT + iWE * PWTHESAT + iLEWE * PLWTHESAT; - STTHESAT = POSTTHESAT + iLE * PLSTTHESAT + iWE * PWSTTHESAT + iLEWE * PLWSTTHESAT; - THESATB = POTHESATB + iLE * PLTHESATB + iWE * PWTHESATB + iLEWE * PLWTHESATB; - THESATG = POTHESATG + iLE * PLTHESATG + iWE * PWTHESATG + iLEWE * PLWTHESATG; - - // Saturation voltage parameters - AX = POAX + iLE * PLAX + iWE * PWAX + iLEWE * PLWAX; - - // Channel length modulation (CLM) parameters - ALP = POALP + iLE * PLALP + iWE * PWALP + iLEWE * PLWALP; - ALP1 = POALP1 + iLE * PLALP1 + iWE * PWALP1 + iLEWE * PLWALP1; - ALP2 = POALP2 + iLE * PLALP2 + iWE * PWALP2 + iLEWE * PLWALP2; - VP = POVP; - - // Impact ionization parameters - A1 = POA1 + iLE * PLA1 + iWE * PWA1 + iLEWE * PLWA1; - A2 = POA2; - STA2 = POSTA2; - A3 = POA3 + iLE * PLA3 + iWE * PWA3 + iLEWE * PLWA3; - A4 = POA4 + iLE * PLA4 + iWE * PWA4 + iLEWE * PLWA4; - GCO = POGCO; - - // Gate current parameters - IGINV = POIGINV + iiLE * PLIGINV + iiWE * PWIGINV + iiLEWE * PLWIGINV; - IGOV = POIGOV + iLE * PLIGOV + iiWE * PWIGOV + iiiLEWE * PLWIGOV; - STIG = POSTIG; - GC2 = POGC2; - GC3 = POGC3; - CHIB = POCHIB; - - // Gate-induced drain leakage (GIDL) parameters - AGIDL = POAGIDL + iLE * PLAGIDL + iiWE * PWAGIDL + iiiLEWE * PLWAGIDL; - BGIDL = POBGIDL; - STBGIDL = POSTBGIDL; - CGIDL = POCGIDL; - - // Charge model parameters - COX = POCOX + iiLEcv * PLCOX + iiWEcv * PWCOX + iiLEWEcv * PLWCOX; - CGOV = POCGOV + iLEcv * PLCGOV + iiWEcv * PWCGOV + iiiLEWEcv * PLWCGOV; - CGBOV = POCGBOV + iiLcv * PLCGBOV + iiWcv * PWCGBOV + iiLWcv * PLWCGBOV; - CFR = POCFR + iLcv * PLCFR + iiWcv * PWCFR + iiiLWcv * PLWCFR; - - // Noise model parameters - FNT = POFNT; - NFA = PONFA + iLE * PLNFA + iWE * PWNFA + iLEWE * PLWNFA; - NFB = PONFB + iLE * PLNFB + iWE * PWNFB + iLEWE * PLWNFB; - NFC = PONFC + iLE * PLNFC + iWE * PWNFC + iLEWE * PLWNFC; diff --git a/src/spicelib/devices/adms/psp102/admsva/PSP102_binpars.include b/src/spicelib/devices/adms/psp102/admsva/PSP102_binpars.include deleted file mode 100644 index 625bb1e1a..000000000 --- a/src/spicelib/devices/adms/psp102/admsva/PSP102_binpars.include +++ /dev/null @@ -1,233 +0,0 @@ -//====================================================================================== -//====================================================================================== -// Filename: PSP102_binpars.include -//====================================================================================== -//====================================================================================== -// -// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors -// -// -// Version: 102.1, April 2007 (Simkit 2.5) -// -//====================================================================================== -//====================================================================================== -// -// Further information can be found in the file readme.txt -// - - /////////////////////////////////////////////////// - // PSP global model parameters (binning) - /////////////////////////////////////////////////// - - parameter real LEVEL = 1021 `P(info="Model level" unit="" ); - parameter real TYPE = 1 `from( -1.0,1.0 ) `P(info="Channel type parameter, +1=NMOS -1=PMOS" unit="" ); - parameter real TR = 21 `from( -273.0,inf ) `P(info="nominal (reference) temperature" unit="C" ); - - // Switch parameters - parameter real SWIGATE = 0 `from( 0.0,1.0 ) `P(info="Flag for gate current, 0=turn off IG" unit="" ); - parameter real SWIMPACT = 0 `from( 0.0,1.0 ) `P(info="Flag for impact ionization current, 0=turn off II" unit="" ); - parameter real SWGIDL = 0 `from( 0.0,1.0 ) `P(info="Flag for GIDL current, 0=turn off IGIDL" unit="" ); - parameter real SWJUNCAP = 0 `from( 0.0,3.0 ) `P(info="Flag for juncap, 0=turn off juncap" unit="" ); - parameter real QMC = 1 `from( 0.0,inf ) `P(info="Quantum-mechanical correction factor" unit="" ); - - // Process parameters - parameter real LVARO = 0 `P(info="Geometry independent difference between actual and programmed poly-silicon gate length" unit="m" ); - parameter real LVARL = 0 `P(info="Length dependence of difference between actual and programmed poly-silicon gate length" unit="" ); - parameter real LAP = 0 `P(info="Effective channel length reduction per side due to lateral diffusion of source/drain dopant ions" unit="m" ); - parameter real WVARO = 0 `P(info="Geometry independent difference between actual and programmed field-oxide opening" unit="m" ); - parameter real WVARW = 0 `P(info="Width dependence of difference between actual and programmed field-oxide opening" unit="" ); - parameter real WOT = 0 `P(info="Effective reduction of channel width per side due to lateral diffusion of channel-stop dopant ions" unit="m" ); - parameter real DLQ = 0 `P(info="Effective channel length reduction for CV" unit="m" ); - parameter real DWQ = 0 `P(info="Effective channel width reduction for CV" unit="m" ); - parameter real POVFB = -1 `P(info="Coefficient for the geometry independent part of VFB" unit="V" ); - parameter real PLVFB = 0.0 `P(info="Coefficient for the length dependence of VFB" unit="V" ); - parameter real PWVFB = 0.0 `P(info="Coefficient for the width dependence of VFB" unit="V" ); - parameter real PLWVFB = 0.0 `P(info="Coefficient for the length times width dependence of VFB" unit="V" ); - parameter real POSTVFB = 0.0005 `P(info="Coefficient for the geometry independent part of STVFB" unit="V/K" ); - parameter real PLSTVFB = 0.0 `P(info="Coefficient for the length dependence of STVFB" unit="V/K" ); - parameter real PWSTVFB = 0.0 `P(info="Coefficient for the width dependence of STVFB" unit="V/K" ); - parameter real PLWSTVFB = 0.0 `P(info="Coefficient for the length times width dependence of STVFB" unit="V/K" ); - parameter real POTOX = 2E-09 `P(info="Coefficient for the geometry independent part of TOX" unit="m" ); - parameter real PONEFF = 5E+23 `P(info="Coefficient for the geometry independent part of NEFF" unit="m^-3" ); - parameter real PLNEFF = 0.0 `P(info="Coefficient for the length dependence of NEFF" unit="m^-3" ); - parameter real PWNEFF = 0.0 `P(info="Coefficient for the width dependence of NEFF" unit="m^-3" ); - parameter real PLWNEFF = 0.0 `P(info="Coefficient for the length times width dependence of NEFF" unit="m^-3" ); - parameter real POVNSUB = 0 `P(info="Coefficient for the geometry independent part of VNSUB" unit="V" ); - parameter real PONSLP = 0.05 `P(info="Coefficient for the geometry independent part of NSLP" unit="V" ); - parameter real PODNSUB = 0 `P(info="Coefficient for the geometry independent part of DNSUB" unit="V^-1" ); - parameter real PODPHIB = 0 `P(info="Coefficient for the geometry independent part of DPHIB" unit="V" ); - parameter real PLDPHIB = 0.0 `P(info="Coefficient for the length dependence of DPHIB" unit="V" ); - parameter real PWDPHIB = 0.0 `P(info="Coefficient for the width dependence of DPHIB" unit="V" ); - parameter real PLWDPHIB = 0.0 `P(info="Coefficient for the length times width dependence of DPHIB" unit="V" ); - parameter real PONP = 1E+26 `P(info="Coefficient for the geometry independent part of NP" unit="m^-3" ); - parameter real PLNP = 0.0 `P(info="Coefficient for the length dependence of NP" unit="m^-3" ); - parameter real PWNP = 0.0 `P(info="Coefficient for the width dependence of NP" unit="m^-3" ); - parameter real PLWNP = 0.0 `P(info="Coefficient for the length times width dependence of NP" unit="m^-3" ); - parameter real POCT = 0 `P(info="Coefficient for the geometry independent part of CT" unit="" ); - parameter real PLCT = 0.0 `P(info="Coefficient for the length dependence of CT" unit="" ); - parameter real PWCT = 0.0 `P(info="Coefficient for the width dependence of CT" unit="" ); - parameter real PLWCT = 0.0 `P(info="Coefficient for the length times width dependence of CT" unit="" ); - parameter real POTOXOV = 2E-09 `P(info="Coefficient for the geometry independent part of TOXOV" unit="m" ); - parameter real PONOV = 5E+25 `P(info="Coefficient for the geometry independent part of NOV" unit="m^-3" ); - parameter real PLNOV = 0.0 `P(info="Coefficient for the length dependence of NOV" unit="m^-3" ); - parameter real PWNOV = 0.0 `P(info="Coefficient for the width dependence of NOV" unit="m^-3" ); - parameter real PLWNOV = 0.0 `P(info="Coefficient for the length times width dependence of NOV" unit="m^-3" ); - - // DIBL parameters - parameter real POCF = 0 `P(info="Coefficient for the geometry independent part of CF" unit="V^-1" ); - parameter real PLCF = 0.0 `P(info="Coefficient for the length dependence of CF" unit="V^-1" ); - parameter real PWCF = 0.0 `P(info="Coefficient for the width dependence of CF" unit="V^-1" ); - parameter real PLWCF = 0.0 `P(info="Coefficient for the length times width dependence of CF" unit="V^-1" ); - parameter real POCFB = 0 `P(info="Coefficient for the geometry independent part of CFB" unit="V^-1" ); - - // Mobility parameters - parameter real POBETN = 0.07 `P(info="Coefficient for the geometry independent part of BETN" unit="m^2/V/s" ); - parameter real PLBETN = 0.0 `P(info="Coefficient for the length dependence of BETN" unit="m^2/V/s" ); - parameter real PWBETN = 0.0 `P(info="Coefficient for the width dependence of BETN" unit="m^2/V/s" ); - parameter real PLWBETN = 0.0 `P(info="Coefficient for the length times width dependence of BETN" unit="m^2/V/s" ); - parameter real POSTBET = 1 `P(info="Coefficient for the geometry independent part of STBET" unit="" ); - parameter real PLSTBET = 0.0 `P(info="Coefficient for the length dependence of STBET" unit="" ); - parameter real PWSTBET = 0.0 `P(info="Coefficient for the width dependence of STBET" unit="" ); - parameter real PLWSTBET = 0.0 `P(info="Coefficient for the length times width dependence of STBET" unit="" ); - parameter real POMUE = 0.5 `P(info="Coefficient for the geometry independent part of MUE" unit="m/V" ); - parameter real PLMUE = 0.0 `P(info="Coefficient for the length dependence of MUE" unit="m/V" ); - parameter real PWMUE = 0.0 `P(info="Coefficient for the width dependence of MUE" unit="m/V" ); - parameter real PLWMUE = 0.0 `P(info="Coefficient for the length times width dependence of MUE" unit="m/V" ); - parameter real POSTMUE = 0 `P(info="Coefficient for the geometry independent part of STMUE" unit="" ); - parameter real POTHEMU = 1.5 `P(info="Coefficient for the geometry independent part of THEMU" unit="" ); - parameter real POSTTHEMU = 1.5 `P(info="Coefficient for the geometry independent part of STTHEMU" unit="" ); - parameter real POCS = 0 `P(info="Coefficient for the geometry independent part of CS" unit="" ); - parameter real PLCS = 0.0 `P(info="Coefficient for the length dependence of CS" unit="" ); - parameter real PWCS = 0.0 `P(info="Coefficient for the width dependence of CS" unit="" ); - parameter real PLWCS = 0.0 `P(info="Coefficient for the length times width dependence of CS" unit="" ); - parameter real POSTCS = 0 `P(info="Coefficient for the geometry independent part of STCS" unit="" ); - parameter real POXCOR = 0 `P(info="Coefficient for the geometry independent part of XCOR" unit="V^-1" ); - parameter real PLXCOR = 0.0 `P(info="Coefficient for the length dependence of XCOR" unit="V^-1" ); - parameter real PWXCOR = 0.0 `P(info="Coefficient for the width dependence of XCOR" unit="V^-1" ); - parameter real PLWXCOR = 0.0 `P(info="Coefficient for the length times width dependence of XCOR" unit="V^-1" ); - parameter real POSTXCOR = 0 `P(info="Coefficient for the geometry independent part of STXCOR" unit="" ); - parameter real POFETA = 1 `P(info="Coefficient for the geometry independent part of FETA" unit="" ); - - // Series resistance parameters - parameter real PORS = 30 `P(info="Coefficient for the geometry independent part of RS" unit="Ohm" ); - parameter real PLRS = 0.0 `P(info="Coefficient for the length dependence of RS" unit="Ohm" ); - parameter real PWRS = 0.0 `P(info="Coefficient for the width dependence of RS" unit="Ohm" ); - parameter real PLWRS = 0.0 `P(info="Coefficient for the length times width dependence of RS" unit="Ohm" ); - parameter real POSTRS = 1 `P(info="Coefficient for the geometry independent part of STRS" unit="" ); - parameter real PORSB = 0 `P(info="Coefficient for the geometry independent part of RSB" unit="V^-1" ); - parameter real PORSG = 0 `P(info="Coefficient for the geometry independent part of RSG" unit="V^-1" ); - - // Velocity saturation parameters - parameter real POTHESAT = 1 `P(info="Coefficient for the geometry independent part of THESAT" unit="V^-1" ); - parameter real PLTHESAT = 0.0 `P(info="Coefficient for the length dependence of THESAT" unit="V^-1" ); - parameter real PWTHESAT = 0.0 `P(info="Coefficient for the width dependence of THESAT" unit="V^-1" ); - parameter real PLWTHESAT = 0.0 `P(info="Coefficient for the length times width dependence of THESAT" unit="V^-1" ); - parameter real POSTTHESAT = 1 `P(info="Coefficient for the geometry independent part of STTHESAT" unit="" ); - parameter real PLSTTHESAT = 0.0 `P(info="Coefficient for the length dependence of STTHESAT" unit="" ); - parameter real PWSTTHESAT = 0.0 `P(info="Coefficient for the width dependence of STTHESAT" unit="" ); - parameter real PLWSTTHESAT = 0.0 `P(info="Coefficient for the length times width dependence of STTHESAT" unit="" ); - parameter real POTHESATB = 0 `P(info="Coefficient for the geometry independent part of THESATB" unit="V^-1" ); - parameter real PLTHESATB = 0.0 `P(info="Coefficient for the length dependence of THESATB" unit="V^-1" ); - parameter real PWTHESATB = 0.0 `P(info="Coefficient for the width dependence of THESATB" unit="V^-1" ); - parameter real PLWTHESATB = 0.0 `P(info="Coefficient for the length times width dependence of THESATB" unit="V^-1" ); - parameter real POTHESATG = 0 `P(info="Coefficient for the geometry independent part of THESATG" unit="V^-1" ); - parameter real PLTHESATG = 0.0 `P(info="Coefficient for the length dependence of THESATG" unit="V^-1" ); - parameter real PWTHESATG = 0.0 `P(info="Coefficient for the width dependence of THESATG" unit="V^-1" ); - parameter real PLWTHESATG = 0.0 `P(info="Coefficient for the length times width dependence of THESATG" unit="V^-1" ); - - // Saturation voltage parameters - parameter real POAX = 3 `P(info="Coefficient for the geometry independent part of AX" unit="" ); - parameter real PLAX = 0.0 `P(info="Coefficient for the length dependence of AX" unit="" ); - parameter real PWAX = 0.0 `P(info="Coefficient for the width dependence of AX" unit="" ); - parameter real PLWAX = 0.0 `P(info="Coefficient for the length times width dependence of AX" unit="" ); - - // Channel length modulation (CLM) parameters - parameter real POALP = 0.01 `P(info="Coefficient for the geometry independent part of ALP" unit="" ); - parameter real PLALP = 0.0 `P(info="Coefficient for the length dependence of ALP" unit="" ); - parameter real PWALP = 0.0 `P(info="Coefficient for the width dependence of ALP" unit="" ); - parameter real PLWALP = 0.0 `P(info="Coefficient for the length times width dependence of ALP" unit="" ); - parameter real POALP1 = 0 `P(info="Coefficient for the geometry independent part of ALP1" unit="V" ); - parameter real PLALP1 = 0.0 `P(info="Coefficient for the length dependence of ALP1" unit="V" ); - parameter real PWALP1 = 0.0 `P(info="Coefficient for the width dependence of ALP1" unit="V" ); - parameter real PLWALP1 = 0.0 `P(info="Coefficient for the length times width dependence of ALP1" unit="V" ); - parameter real POALP2 = 0 `P(info="Coefficient for the geometry independent part of ALP2" unit="V^-1" ); - parameter real PLALP2 = 0.0 `P(info="Coefficient for the length dependence of ALP2" unit="V^-1" ); - parameter real PWALP2 = 0.0 `P(info="Coefficient for the width dependence of ALP2" unit="V^-1" ); - parameter real PLWALP2 = 0.0 `P(info="Coefficient for the length times width dependence of ALP2" unit="V^-1" ); - parameter real POVP = 0.05 `P(info="Coefficient for the geometry independent part of VP" unit="V" ); - - // Impact ionization parameters - parameter real POA1 = 1 `P(info="Coefficient for the geometry independent part of A1" unit="" ); - parameter real PLA1 = 0.0 `P(info="Coefficient for the length dependence of A1" unit="" ); - parameter real PWA1 = 0.0 `P(info="Coefficient for the width dependence of A1" unit="" ); - parameter real PLWA1 = 0.0 `P(info="Coefficient for the length times width dependence of A1" unit="" ); - parameter real POA2 = 10 `P(info="Coefficient for the geometry independent part of A2" unit="V" ); - parameter real POSTA2 = 0 `P(info="Coefficient for the geometry independent part of STA2" unit="V" ); - parameter real POA3 = 1 `P(info="Coefficient for the geometry independent part of A3" unit="" ); - parameter real PLA3 = 0.0 `P(info="Coefficient for the length dependence of A3" unit="" ); - parameter real PWA3 = 0.0 `P(info="Coefficient for the width dependence of A3" unit="" ); - parameter real PLWA3 = 0.0 `P(info="Coefficient for the length times width dependence of A3" unit="" ); - parameter real POA4 = 0 `P(info="Coefficient for the geometry independent part of A4" unit="V^-0.5" ); - parameter real PLA4 = 0.0 `P(info="Coefficient for the length dependence of A4" unit="V^-0.5" ); - parameter real PWA4 = 0.0 `P(info="Coefficient for the width dependence of A4" unit="V^-0.5" ); - parameter real PLWA4 = 0.0 `P(info="Coefficient for the length times width dependence of A4" unit="V^-0.5" ); - parameter real POGCO = 0 `P(info="Coefficient for the geometry independent part of GCO" unit="" ); - - // Gate current parameters - parameter real POIGINV = 0 `P(info="Coefficient for the geometry independent part of IGINV" unit="A" ); - parameter real PLIGINV = 0.0 `P(info="Coefficient for the length dependence of IGINV" unit="A" ); - parameter real PWIGINV = 0.0 `P(info="Coefficient for the width dependence of IGINV" unit="A" ); - parameter real PLWIGINV = 0.0 `P(info="Coefficient for the length times width dependence of IGINV" unit="A" ); - parameter real POIGOV = 0 `P(info="Coefficient for the geometry independent part of IGOV" unit="A" ); - parameter real PLIGOV = 0.0 `P(info="Coefficient for the length dependence of IGOV" unit="A" ); - parameter real PWIGOV = 0.0 `P(info="Coefficient for the width dependence of IGOV" unit="A" ); - parameter real PLWIGOV = 0.0 `P(info="Coefficient for the length times width dependence of IGOV" unit="A" ); - parameter real POSTIG = 2 `P(info="Coefficient for the geometry independent part of STIG" unit="" ); - parameter real POGC2 = 0.375 `P(info="Coefficient for the geometry independent part of GC2" unit="" ); - parameter real POGC3 = 0.063 `P(info="Coefficient for the geometry independent part of GC3" unit="" ); - parameter real POCHIB = 3.1 `P(info="Coefficient for the geometry independent part of CHIB" unit="V" ); - - // Gate-induced drain leakage (GIDL) parameters - parameter real POAGIDL = 0 `P(info="Coefficient for the geometry independent part of AGIDL" unit="A/V^3" ); - parameter real PLAGIDL = 0.0 `P(info="Coefficient for the length dependence of AGIDL" unit="A/V^3" ); - parameter real PWAGIDL = 0.0 `P(info="Coefficient for the width dependence of AGIDL" unit="A/V^3" ); - parameter real PLWAGIDL = 0.0 `P(info="Coefficient for the length times width dependence of AGIDL" unit="A/V^3" ); - parameter real POBGIDL = 41 `P(info="Coefficient for the geometry independent part of BGIDL" unit="V" ); - parameter real POSTBGIDL = 0 `P(info="Coefficient for the geometry independent part of STBGIDL" unit="V/K" ); - parameter real POCGIDL = 0 `P(info="Coefficient for the geometry independent part of CGIDL" unit="" ); - - // Charge model parameters - parameter real POCOX = 1E-14 `P(info="Coefficient for the geometry independent part of COX" unit="F" ); - parameter real PLCOX = 0.0 `P(info="Coefficient for the length dependence of COX" unit="F" ); - parameter real PWCOX = 0.0 `P(info="Coefficient for the width dependence of COX" unit="F" ); - parameter real PLWCOX = 0.0 `P(info="Coefficient for the length times width dependence of COX" unit="F" ); - parameter real POCGOV = 1E-15 `P(info="Coefficient for the geometry independent part of CGOV" unit="F" ); - parameter real PLCGOV = 0.0 `P(info="Coefficient for the length dependence of CGOV" unit="F" ); - parameter real PWCGOV = 0.0 `P(info="Coefficient for the width dependence of CGOV" unit="F" ); - parameter real PLWCGOV = 0.0 `P(info="Coefficient for the length times width dependence of CGOV" unit="F" ); - parameter real POCGBOV = 0 `P(info="Coefficient for the geometry independent part of CGBOV" unit="F" ); - parameter real PLCGBOV = 0.0 `P(info="Coefficient for the length dependence of CGBOV" unit="F" ); - parameter real PWCGBOV = 0.0 `P(info="Coefficient for the width dependence of CGBOV" unit="F" ); - parameter real PLWCGBOV = 0.0 `P(info="Coefficient for the length times width dependence of CGBOV" unit="F" ); - parameter real POCFR = 0 `P(info="Coefficient for the geometry independent part of CFR" unit="F" ); - parameter real PLCFR = 0.0 `P(info="Coefficient for the length dependence of CFR" unit="F" ); - parameter real PWCFR = 0.0 `P(info="Coefficient for the width dependence of CFR" unit="F" ); - parameter real PLWCFR = 0.0 `P(info="Coefficient for the length times width dependence of CFR" unit="F" ); - - // Noise model parameters - parameter real POFNT = 1 `P(info="Coefficient for the geometry independent part of FNT" unit="" ); - parameter real PONFA = 8E+22 `P(info="Coefficient for the geometry independent part of NFA" unit="V^-1/m^4" ); - parameter real PLNFA = 0.0 `P(info="Coefficient for the length dependence of NFA" unit="V^-1/m^4" ); - parameter real PWNFA = 0.0 `P(info="Coefficient for the width dependence of NFA" unit="V^-1/m^4" ); - parameter real PLWNFA = 0.0 `P(info="Coefficient for the length times width dependence of NFA" unit="V^-1/m^4" ); - parameter real PONFB = 3E+07 `P(info="Coefficient for the geometry independent part of NFB" unit="V^-1/m^2" ); - parameter real PLNFB = 0.0 `P(info="Coefficient for the length dependence of NFB" unit="V^-1/m^2" ); - parameter real PWNFB = 0.0 `P(info="Coefficient for the width dependence of NFB" unit="V^-1/m^2" ); - parameter real PLWNFB = 0.0 `P(info="Coefficient for the length times width dependence of NFB" unit="V^-1/m^2" ); - parameter real PONFC = 0 `P(info="Coefficient for the geometry independent part of NFC" unit="V^-1" ); - parameter real PLNFC = 0.0 `P(info="Coefficient for the length dependence of NFC" unit="V^-1" ); - parameter real PWNFC = 0.0 `P(info="Coefficient for the width dependence of NFC" unit="V^-1" ); - parameter real PLWNFC = 0.0 `P(info="Coefficient for the length times width dependence of NFC" unit="V^-1" ); - - // Other parameters - parameter real DTA = 0 `P(info="Temperature offset w.r.t. ambient temperature" unit="K" ); diff --git a/src/spicelib/devices/adms/psp102/admsva/PSP102_nqs_macrodefs.include b/src/spicelib/devices/adms/psp102/admsva/PSP102_nqs_macrodefs.include deleted file mode 100644 index e14819dfe..000000000 --- a/src/spicelib/devices/adms/psp102/admsva/PSP102_nqs_macrodefs.include +++ /dev/null @@ -1,117 +0,0 @@ -//====================================================================================== -//====================================================================================== -// Filename: PSP102_nqs_macrodefs.include -//====================================================================================== -//====================================================================================== -// -// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors -// -// -// Version: 102.1, April 2007 (Simkit 2.5) -// -//====================================================================================== -//====================================================================================== -// -// Further information can be found in the file readme.txt -// - -////////////////////////////////////////// -// -// Macros used in PSP-NQS -// -////////////////////////////////////////// - -// Function to calculate bulk charge from surface potential -`define PhiToQb(phi,Qb_tmp) \ -if (abs(phi) <= margin) \ - Qb_tmp = -0.70710678 * phi * Gf * (1.0 - `oneSixth * phi * (1.0 - `oneSixth * phi)); \ -else begin \ - `expl((-phi), temp) \ - Qb_tmp = Gf * sqrt(temp + phi - 1.0); \ - if (phi > margin) \ - Qb_tmp = -Qb_tmp; \ -end - - -// Function used in fq-macro -`define PhiTod2Qis(xphi,d2Qis) \ -if (abs(xphi) <= margin) begin \ - Qb_tmp = -0.70710678 * xphi * Gf * (1.0 - `oneSixth * xphi * (1.0 - `oneSixth * xphi)); \ - dQbs = -0.70710678 * Gf * (1.0 - `oneThird * xphi * (1.0 - 0.25 * xphi)); \ - d2Qis = -0.235702 * Gf * (1.0 - 0.5 * xphi); \ -end else begin \ - `expl((-xphi),temp) \ - Qb_tmp = Gf * sqrt(temp + xphi - 1.0); \ - if (xphi > margin) \ - Qb_tmp = -Qb_tmp; \ - dQbs = 0.5 * Gf2 * (1.0 - temp) / Qb_tmp; \ - d2Qis = (dQbs * dQbs - 0.5 * Gf * Gf) / Qb_tmp + dQbs; \ -end - - - -// Function used in QiToPhi -`define sps(sp, xg) \ -if (abs(xg) <= marginp) begin \ - sp = xg / a_factrp; \ -end else begin \ - if (xg < -marginp) begin \ - NQS_yg = -xg; \ - NQS_z = 1.25 * NQS_yg / a_factrp; \ - NQS_eta = (NQS_z + 10.0 - sqrt((NQS_z - 6.0) * (NQS_z - 6.0) + 64.0)) * 0.5; \ - NQS_a = (NQS_yg - NQS_eta) * (NQS_yg - NQS_eta) + Gp2 * (NQS_eta + 1.0); \ - NQS_c = 2.0 * (NQS_yg - NQS_eta) - Gp2; \ - NQS_tau = ln(NQS_a / Gp2) - NQS_eta; \ - `sigma(NQS_a, NQS_c, NQS_tau, NQS_eta, NQS_y0) \ - `expl(NQS_y0, NQS_D0) \ - NQS_xi = 1.0 - Gp2 * NQS_D0 * 0.5; \ - NQS_p = 2.0 * (NQS_yg - NQS_y0) + Gp2 * (NQS_D0 - 1.0); \ - NQS_q = (NQS_yg - NQS_y0) * (NQS_yg - NQS_y0) + Gp2 * (NQS_y0 + 1.0 - NQS_D0); \ - NQS_temp = NQS_p * NQS_p - 4.0 * NQS_xi * NQS_q; \ - NQS_w = 2.0 * NQS_q / (NQS_p + sqrt(NQS_temp)); \ - sp = -(NQS_y0 + NQS_w); \ - end else begin \ - NQS_xg1 = 1.0 / ( 1.25 + 7.32464877560822e-01 * Gp); \ - NQS_A_fac = (1.25 * a_factrp * NQS_xg1 - 1.0) * NQS_xg1; \ - NQS_xbar = xg / a_factrp * (1.0 + NQS_A_fac * xg); \ - `expl(-NQS_xbar, NQS_temp) \ - NQS_w = 1.0 - NQS_temp; \ - NQS_x0 = xg + Gp2 * 0.5 - Gp * sqrt(xg + Gp2 * 0.25 - NQS_w); \ - `expl((-NQS_x0), NQS_D0) \ - NQS_xi = 1.0 - Gp2 * 0.5 * NQS_D0; \ - NQS_p = 2.0 * (xg - NQS_x0) + Gp2 * (1.0 - NQS_D0); \ - NQS_q = (xg - NQS_x0) * (xg - NQS_x0) - Gp2 * (NQS_x0 - 1.0 + NQS_D0); \ - NQS_temp = NQS_p * NQS_p - 4.0 * NQS_xi * NQS_q; \ - NQS_u = 2.0 * NQS_q / (NQS_p + sqrt(NQS_temp)); \ - sp = NQS_x0 + NQS_u; \ - end \ -end - - -// Function to calculate surface potential from inversion charge -`define QiToPhi(Qi,xg,xphi) \ - temp = Qi / pd + xg; \ - `sps(xphi,temp) - -// Calculation of fk -`define fq(Qi,xg,dQy,d2Qy,fk) \ - `QiToPhi(Qi, xg, xphi) \ - `PhiTod2Qis(xphi, d2Qis) \ - dQis = pd - dQbs; \ - dQis_1 = 1.0 / dQis; \ - fQi = Qi * dQis_1 - 1.0; \ - dfQi = (1.0 - Qi * d2Qis * dQis_1 * dQis_1) * dQis_1; \ - fk0 = dfQi * dQy * dQy + fQi * d2Qy; \ - dpsy2 = dQy * dQy * dQis_1 * dQis_1; \ - zsat = thesat2 * dpsy2; \ - if (CHNL_TYPE == `PMOS) \ - zsat = zsat / (1.0 + thesat1 * dps); \ - temp = sqrt(1.0 + 2.0 * zsat); \ - Fvsat = 2.0 / (1.0 + temp); \ - temp1 = d2Qy - dpsy2 * d2Qis; \ - fk = Fvsat * (fk0 - zsat * fQi * temp1 * Fvsat / temp); - - -// Interpolation of surface potential along channel -`define Phiy(y) \ - x_m + H * (1.0 - sqrt(1.0 - 2.0 * dps / H * ((y) - ym))) * inv_phit1