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.

165 lines
6.0 KiB

  1. /*
  2. * This program source code file is part of KiCad, a free EDA CAD application.
  3. *
  4. * Copyright (C) 2022 Mikolaj Wielgus
  5. * Copyright (C) 2022 KiCad Developers, see AUTHORS.txt for contributors.
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License
  9. * as published by the Free Software Foundation; either version 3
  10. * of the License, or (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, you may find one here:
  19. * https://www.gnu.org/licenses/gpl-3.0.html
  20. * or you may search the http://www.gnu.org website for the version 3 license,
  21. * or you may write to the Free Software Foundation, Inc.,
  22. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
  23. */
  24. #include <sim/sim_model_ngspice.h>
  25. using TYPE = SIM_MODEL::TYPE;
  26. SIM_MODEL_NGSPICE::SIM_MODEL_NGSPICE( TYPE aType ) : SIM_MODEL( aType )
  27. {
  28. const NGSPICE::MODEL_INFO& modelInfo = NGSPICE::ModelInfo( getModelType() );
  29. for( const SIM_MODEL::PARAM::INFO& paramInfo : modelInfo.modelParams )
  30. {
  31. Params().emplace_back( paramInfo );
  32. Params().back().isOtherVariant = getIsOtherVariant();
  33. }
  34. for( const SIM_MODEL::PARAM::INFO& paramInfo : modelInfo.instanceParams )
  35. {
  36. Params().emplace_back( paramInfo );
  37. Params().back().isOtherVariant = getIsOtherVariant();
  38. }
  39. }
  40. void SIM_MODEL_NGSPICE::WriteCode( wxString& aCode )
  41. {
  42. // TODO
  43. }
  44. NGSPICE::MODEL_TYPE SIM_MODEL_NGSPICE::getModelType()
  45. {
  46. switch( GetType() )
  47. {
  48. case TYPE::NONE: return NGSPICE::MODEL_TYPE::NONE;
  49. case TYPE::RESISTOR_ADVANCED: return NGSPICE::MODEL_TYPE::RESISTOR;
  50. case TYPE::CAPACITOR_ADVANCED: return NGSPICE::MODEL_TYPE::CAPACITOR;
  51. case TYPE::INDUCTOR_ADVANCED: return NGSPICE::MODEL_TYPE::INDUCTOR;
  52. case TYPE::TLINE_LOSSY: return NGSPICE::MODEL_TYPE::LTRA;
  53. case TYPE::TLINE_LOSSLESS: return NGSPICE::MODEL_TYPE::TRANLINE;
  54. case TYPE::TLINE_UNIFORM_RC: return NGSPICE::MODEL_TYPE::URC;
  55. case TYPE::TLINE_KSPICE: return NGSPICE::MODEL_TYPE::TRANSLINE;
  56. case TYPE::SWITCH_VCTRL: return NGSPICE::MODEL_TYPE::SWITCH;
  57. case TYPE::SWITCH_ICTRL: return NGSPICE::MODEL_TYPE::CSWITCH;
  58. case TYPE::DIODE: return NGSPICE::MODEL_TYPE::DIODE;
  59. case TYPE::NPN_GUMMEL_POON:
  60. case TYPE::PNP_GUMMEL_POON: return NGSPICE::MODEL_TYPE::BJT;
  61. case TYPE::NPN_VBIC:
  62. case TYPE::PNP_VBIC: return NGSPICE::MODEL_TYPE::VBIC;
  63. case TYPE::NPN_HICUM_L2:
  64. case TYPE::PNP_HICUM_L2: return NGSPICE::MODEL_TYPE::HICUM2;
  65. case TYPE::NJF_SHICHMAN_HODGES:
  66. case TYPE::PJF_SHICHMAN_HODGES: return NGSPICE::MODEL_TYPE::JFET;
  67. case TYPE::NJF_PARKER_SKELLERN:
  68. case TYPE::PJF_PARKER_SKELLERN: return NGSPICE::MODEL_TYPE::JFET2;
  69. case TYPE::NMES_STATZ:
  70. case TYPE::PMES_STATZ: return NGSPICE::MODEL_TYPE::MES;
  71. case TYPE::NMES_YTTERDAL:
  72. case TYPE::PMES_YTTERDAL: return NGSPICE::MODEL_TYPE::MESA;
  73. case TYPE::NMES_HFET1:
  74. case TYPE::PMES_HFET1: return NGSPICE::MODEL_TYPE::HFET1;
  75. case TYPE::PMES_HFET2:
  76. case TYPE::NMES_HFET2: return NGSPICE::MODEL_TYPE::HFET2;
  77. case TYPE::NMOS_MOS1:
  78. case TYPE::PMOS_MOS1: return NGSPICE::MODEL_TYPE::MOS1;
  79. case TYPE::NMOS_MOS2:
  80. case TYPE::PMOS_MOS2: return NGSPICE::MODEL_TYPE::MOS2;
  81. case TYPE::NMOS_MOS3:
  82. case TYPE::PMOS_MOS3: return NGSPICE::MODEL_TYPE::MOS3;
  83. case TYPE::NMOS_BSIM1:
  84. case TYPE::PMOS_BSIM1: return NGSPICE::MODEL_TYPE::BSIM1;
  85. case TYPE::NMOS_BSIM2:
  86. case TYPE::PMOS_BSIM2: return NGSPICE::MODEL_TYPE::BSIM2;
  87. case TYPE::NMOS_MOS6:
  88. case TYPE::PMOS_MOS6: return NGSPICE::MODEL_TYPE::MOS6;
  89. case TYPE::NMOS_BSIM3:
  90. case TYPE::PMOS_BSIM3: return NGSPICE::MODEL_TYPE::BSIM3;
  91. case TYPE::NMOS_MOS9:
  92. case TYPE::PMOS_MOS9: return NGSPICE::MODEL_TYPE::MOS9;
  93. case TYPE::NMOS_B4SOI:
  94. case TYPE::PMOS_B4SOI: return NGSPICE::MODEL_TYPE::B4SOI;
  95. case TYPE::NMOS_BSIM4:
  96. case TYPE::PMOS_BSIM4: return NGSPICE::MODEL_TYPE::BSIM4;
  97. case TYPE::NMOS_B3SOIFD:
  98. case TYPE::PMOS_B3SOIFD: return NGSPICE::MODEL_TYPE::B3SOIFD;
  99. case TYPE::NMOS_B3SOIDD:
  100. case TYPE::PMOS_B3SOIDD: return NGSPICE::MODEL_TYPE::B3SOIDD;
  101. case TYPE::NMOS_B3SOIPD:
  102. case TYPE::PMOS_B3SOIPD: return NGSPICE::MODEL_TYPE::B3SOIPD;
  103. case TYPE::NMOS_HISIM2:
  104. case TYPE::PMOS_HISIM2: return NGSPICE::MODEL_TYPE::HISIM2;
  105. case TYPE::NMOS_HISIM_HV1:
  106. case TYPE::PMOS_HISIM_HV1: return NGSPICE::MODEL_TYPE::HISIMHV1;
  107. case TYPE::NMOS_HISIM_HV2:
  108. case TYPE::PMOS_HISIM_HV2: return NGSPICE::MODEL_TYPE::HISIMHV2;
  109. default:
  110. wxFAIL_MSG( "Unhandled SIM_MODEL type in SIM_MODEL_NGSPICE" );
  111. return NGSPICE::MODEL_TYPE::NONE;
  112. }
  113. }
  114. bool SIM_MODEL_NGSPICE::getIsOtherVariant()
  115. {
  116. switch( GetType() )
  117. {
  118. case TYPE::PNP_GUMMEL_POON:
  119. case TYPE::PNP_VBIC:
  120. case TYPE::PNP_HICUM_L2:
  121. case TYPE::PJF_SHICHMAN_HODGES:
  122. case TYPE::PJF_PARKER_SKELLERN:
  123. case TYPE::PMES_STATZ:
  124. case TYPE::PMES_YTTERDAL:
  125. case TYPE::PMES_HFET1:
  126. case TYPE::PMES_HFET2:
  127. case TYPE::PMOS_MOS1:
  128. case TYPE::PMOS_MOS2:
  129. case TYPE::PMOS_MOS3:
  130. case TYPE::PMOS_BSIM1:
  131. case TYPE::PMOS_BSIM2:
  132. case TYPE::PMOS_MOS6:
  133. case TYPE::PMOS_BSIM3:
  134. case TYPE::PMOS_MOS9:
  135. case TYPE::PMOS_B4SOI:
  136. case TYPE::PMOS_BSIM4:
  137. case TYPE::PMOS_B3SOIFD:
  138. case TYPE::PMOS_B3SOIDD:
  139. case TYPE::PMOS_B3SOIPD:
  140. case TYPE::PMOS_HISIM2:
  141. case TYPE::PMOS_HISIM_HV1:
  142. case TYPE::PMOS_HISIM_HV2:
  143. return true;
  144. default:
  145. return false;
  146. }
  147. }