|
|
|
@ -22,9 +22,16 @@ |
|
|
|
*/ |
|
|
|
|
|
|
|
#include <qa_utils/wx_utils/unit_test_utils.h>
|
|
|
|
#include <sim/ngspice.h>
|
|
|
|
#include <sim/sim_model_ngspice.h>
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_SUITE( Ngspice ) |
|
|
|
class TEST_SIM_MODEL_NGSPICE_FIXTURE : public SIM_MODEL_NGSPICE |
|
|
|
{ |
|
|
|
public: |
|
|
|
TEST_SIM_MODEL_NGSPICE_FIXTURE() : SIM_MODEL_NGSPICE( TYPE::NONE ) {} |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
BOOST_FIXTURE_TEST_SUITE( SimModelNgspice, TEST_SIM_MODEL_NGSPICE_FIXTURE ) |
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE( Models ) |
|
|
|
@ -32,188 +39,188 @@ BOOST_AUTO_TEST_CASE( Models ) |
|
|
|
// Count the total number of model and instance parameters for each model so that there will be
|
|
|
|
// an error if someone accidentally removes a parameter.
|
|
|
|
|
|
|
|
for( NGSPICE::MODEL_TYPE type : NGSPICE::MODEL_TYPE_ITERATOR() ) |
|
|
|
for( MODEL_TYPE type : MODEL_TYPE_ITERATOR() ) |
|
|
|
{ |
|
|
|
unsigned modelParamCount = NGSPICE::ModelInfo( type ).modelParams.size(); |
|
|
|
unsigned instanceParamCount = NGSPICE::ModelInfo( type ).instanceParams.size(); |
|
|
|
|
|
|
|
unsigned modelParamCount = ModelInfo( type ).modelParams.size(); |
|
|
|
unsigned instanceParamCount = ModelInfo( type ).instanceParams.size(); |
|
|
|
|
|
|
|
switch( type ) |
|
|
|
{ |
|
|
|
case NGSPICE::MODEL_TYPE::NONE: |
|
|
|
case NGSPICE::MODEL_TYPE::_ENUM_END: |
|
|
|
case MODEL_TYPE::NONE: |
|
|
|
case MODEL_TYPE::_ENUM_END: |
|
|
|
break; |
|
|
|
|
|
|
|
/*case NGSPICE::MODEL_TYPE::RESISTOR:
|
|
|
|
/*case MODEL_TYPE::RESISTOR:
|
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 22 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 25 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::CAPACITOR: |
|
|
|
case MODEL_TYPE::CAPACITOR: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 19 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 22 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::INDUCTOR: |
|
|
|
case MODEL_TYPE::INDUCTOR: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 9 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 20 ); |
|
|
|
break;*/ |
|
|
|
|
|
|
|
/*case NGSPICE::MODEL_TYPE::LTRA:
|
|
|
|
/*case MODEL_TYPE::LTRA:
|
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 18 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 9 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::TRANLINE: |
|
|
|
case MODEL_TYPE::TRANLINE: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 0 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 17 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::URC: |
|
|
|
case MODEL_TYPE::URC: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 7 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 5 ); |
|
|
|
break;*/ |
|
|
|
|
|
|
|
/*case NGSPICE::MODEL_TYPE::TRANSLINE:
|
|
|
|
/*case MODEL_TYPE::TRANSLINE:
|
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 6 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 3 ); |
|
|
|
break;*/ |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::SWITCH: |
|
|
|
case MODEL_TYPE::SWITCH: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 7 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 8 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::CSWITCH: |
|
|
|
case MODEL_TYPE::CSWITCH: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 7 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 7 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::DIODE: |
|
|
|
case MODEL_TYPE::DIODE: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 76 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 30 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::BJT: |
|
|
|
case MODEL_TYPE::BJT: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 152 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 53 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::VBIC: |
|
|
|
case MODEL_TYPE::VBIC: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 117 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 45 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::HICUM2: |
|
|
|
case MODEL_TYPE::HICUM2: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 149 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 61 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::JFET: |
|
|
|
case MODEL_TYPE::JFET: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 28 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 28 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::JFET2: |
|
|
|
case MODEL_TYPE::JFET2: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 46 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 30 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::MES: |
|
|
|
case MODEL_TYPE::MES: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 22 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 25 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::MESA: |
|
|
|
case MODEL_TYPE::MESA: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 71 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 30 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::HFET1: |
|
|
|
case MODEL_TYPE::HFET1: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 68 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 28 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::HFET2: |
|
|
|
case MODEL_TYPE::HFET2: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 40 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 28 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::MOS1: |
|
|
|
case MODEL_TYPE::MOS1: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 35 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 76 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::MOS2: |
|
|
|
case MODEL_TYPE::MOS2: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 42 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 76 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::MOS3: |
|
|
|
case MODEL_TYPE::MOS3: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 48 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 81 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::BSIM1: |
|
|
|
case MODEL_TYPE::BSIM1: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 81 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 14 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::BSIM2: |
|
|
|
case MODEL_TYPE::BSIM2: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 137 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 14 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::MOS6: |
|
|
|
case MODEL_TYPE::MOS6: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 42 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 78 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::BSIM3: |
|
|
|
case MODEL_TYPE::BSIM3: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 429 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 46 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::MOS9: |
|
|
|
case MODEL_TYPE::MOS9: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 48 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 81 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::B4SOI: |
|
|
|
case MODEL_TYPE::B4SOI: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 915 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 74 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::BSIM4: |
|
|
|
case MODEL_TYPE::BSIM4: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 892 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 84 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::B3SOIFD: |
|
|
|
case MODEL_TYPE::B3SOIFD: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 393 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 27 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::B3SOIDD: |
|
|
|
case MODEL_TYPE::B3SOIDD: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 393 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 27 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::B3SOIPD: |
|
|
|
case MODEL_TYPE::B3SOIPD: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 470 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 36 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::HISIM2: |
|
|
|
case MODEL_TYPE::HISIM2: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 486 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 59 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::HISIMHV1: |
|
|
|
case MODEL_TYPE::HISIMHV1: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 610 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 72 ); |
|
|
|
break; |
|
|
|
|
|
|
|
case NGSPICE::MODEL_TYPE::HISIMHV2: |
|
|
|
case MODEL_TYPE::HISIMHV2: |
|
|
|
BOOST_CHECK_EQUAL( modelParamCount, 730 ); |
|
|
|
BOOST_CHECK_EQUAL( instanceParamCount, 74 ); |
|
|
|
break; |