diff --git a/src/spicelib/devices/relmodel/relmodel.c b/src/spicelib/devices/relmodel/relmodel.c index 9a48c6ead..2ddda835d 100644 --- a/src/spicelib/devices/relmodel/relmodel.c +++ b/src/spicelib/devices/relmodel/relmodel.c @@ -11,6 +11,8 @@ IFparm RELMODELpTable [] = { /* parameters */ } ; IFparm RELMODELmPTable [] = { /* model parameters */ +IOP ("type", RELMODEL_MOD_TYPE, IF_INTEGER, "Aging Model Type"), + IOP ("k_b", RELMODEL_MOD_KB, IF_REAL, "Boltzmann Constant"), IOP ("h_cut", RELMODEL_MOD_HCUT, IF_REAL, "h_cut"), IOP ("nts", RELMODEL_MOD_NTS, IF_REAL, "Nts"), @@ -23,20 +25,19 @@ IOP ("beta", RELMODEL_MOD_BETA, IF_REAL, "beta"), IOP ("tau_e", RELMODEL_MOD_TAUE, IF_REAL, "tau_e"), IOP ("beta1", RELMODEL_MOD_BETA1, IF_REAL, "beta1"), -IOP ("type", RELMODEL_MOD_TYPE, IF_INTEGER, "beta1"), +IOP ("alpha_new", RELMODEL_MOD_ALPHA_NEW, IF_REAL, "alpha"), +IOP ("b_new", RELMODEL_MOD_B_NEW, IF_REAL, "b"), +IOP ("beta_new", RELMODEL_MOD_BETA_NEW, IF_REAL, "beta"), +IOP ("e0_new", RELMODEL_MOD_E0_NEW, IF_REAL, "e0"), +IOP ("k_new", RELMODEL_MOD_K_NEW, IF_REAL, "k"), +IOP ("kb_new", RELMODEL_MOD_KB_NEW, IF_REAL, "Boltzmann Constant"), +IOP ("tau_c_fast_new", RELMODEL_MOD_TAU_C_FAST_NEW, IF_REAL, "tau_c_fast"), +IOP ("tau_c_slow_new", RELMODEL_MOD_TAU_C_SLOW_NEW, IF_REAL, "tau_c_slow"), +IOP ("tau_e_fast_new", RELMODEL_MOD_TAU_E_FAST_NEW, IF_REAL, "tau_e_fast"), +IOP ("tau_e_slow_new", RELMODEL_MOD_TAU_E_SLOW_NEW, IF_REAL, "tau_e_slow"), +IOP ("t_r_new", RELMODEL_MOD_T_R_NEW, IF_REAL, "t_r"), +IOP ("t_s_new", RELMODEL_MOD_T_S_NEW, IF_REAL, "t_s"), -IOP ("alpha_new", RELMODEL_MOD_ALPHA_NEW, IF_REAL, "beta1"), -IOP ("b_new", RELMODEL_MOD_B_NEW, IF_REAL, "beta1"), -IOP ("beta_new", RELMODEL_MOD_BETA_NEW, IF_REAL, "beta1"), -IOP ("e0_new", RELMODEL_MOD_E0_NEW, IF_REAL, "beta1"), -IOP ("k_new", RELMODEL_MOD_K_NEW, IF_REAL, "beta1"), -IOP ("kb_new", RELMODEL_MOD_K_NEW, IF_REAL, "beta1"), -IOP ("tau_c_fast_new", RELMODEL_MOD_TAU_C_FAST_NEW, IF_REAL, "beta1"), -IOP ("tau_c_slow_new", RELMODEL_MOD_TAU_C_SLOW_NEW, IF_REAL, "beta1"), -IOP ("tau_e_fast_new", RELMODEL_MOD_TAU_E_FAST_NEW, IF_REAL, "beta1"), -IOP ("tau_e_slow_new", RELMODEL_MOD_TAU_E_SLOW_NEW, IF_REAL, "beta1"), -IOP ("t_r_new", RELMODEL_MOD_T_R_NEW, IF_REAL, "beta1"), -IOP ("t_s_new", RELMODEL_MOD_T_S_NEW, IF_REAL, "beta1"), IP ("relmodel", RELMODEL_MOD_RELMODEL, IF_FLAG, "Flag to indicate RELMODEL") } ; diff --git a/src/spicelib/devices/relmodel/relmodelmask.c b/src/spicelib/devices/relmodel/relmodelmask.c index ba451d05e..a6a15bea7 100644 --- a/src/spicelib/devices/relmodel/relmodelmask.c +++ b/src/spicelib/devices/relmodel/relmodelmask.c @@ -19,6 +19,17 @@ RELMODELmAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) switch (which) { + // RELMODEL type + case RELMODEL_MOD_TYPE: + value->iValue = model->RELMODELtype ; + return (OK) ; + + // RELMODEL flag + case RELMODEL_MOD_RELMODEL: + value->iValue = model->RELMODELrelmodel ; + return (OK) ; + + // 1: Giorgio Liatis (Sapienza University - DIET - Ultra Thin Oxide) case RELMODEL_MOD_KB: value->rValue = model->RELMODELk_b ; return (OK) ; @@ -63,12 +74,53 @@ RELMODELmAsk (CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) value->rValue = model->RELMODELbeta1 ; return (OK) ; - case RELMODEL_MOD_TYPE: - value->iValue = model->RELMODELtype ; + // 2: 65nm found over Internet + case RELMODEL_MOD_ALPHA_NEW: + value->rValue = model->RELMODELalpha_new ; return (OK) ; - case RELMODEL_MOD_RELMODEL: - value->iValue = model->RELMODELrelmodel ; + case RELMODEL_MOD_B_NEW: + value->rValue = model->RELMODELb_new ; + return (OK) ; + + case RELMODEL_MOD_BETA_NEW: + value->rValue = model->RELMODELbeta_new ; + return (OK) ; + + case RELMODEL_MOD_E0_NEW: + value->rValue = model->RELMODELe0_new ; + return (OK) ; + + case RELMODEL_MOD_K_NEW: + value->rValue = model->RELMODELk_new ; + return (OK) ; + + case RELMODEL_MOD_KB_NEW: + value->rValue = model->RELMODELkb_new ; + return (OK) ; + + case RELMODEL_MOD_TAU_C_FAST_NEW: + value->rValue = model->RELMODELtau_c_fast_new ; + return (OK) ; + + case RELMODEL_MOD_TAU_C_SLOW_NEW: + value->rValue = model->RELMODELtau_c_slow_new ; + return (OK) ; + + case RELMODEL_MOD_TAU_E_FAST_NEW: + value->rValue = model->RELMODELtau_e_fast_new ; + return (OK) ; + + case RELMODEL_MOD_TAU_E_SLOW_NEW: + value->rValue = model->RELMODELtau_e_slow_new ; + return (OK) ; + + case RELMODEL_MOD_T_R_NEW: + value->rValue = model->RELMODELt_r_new ; + return (OK) ; + + case RELMODEL_MOD_T_S_NEW: + value->rValue = model->RELMODELt_s_new ; return (OK) ; default: diff --git a/src/spicelib/devices/relmodel/relmodelmpar.c b/src/spicelib/devices/relmodel/relmodelmpar.c index 845693b0d..5c5556a40 100644 --- a/src/spicelib/devices/relmodel/relmodelmpar.c +++ b/src/spicelib/devices/relmodel/relmodelmpar.c @@ -16,6 +16,19 @@ RELMODELmParam (int param, IFvalue *value, GENmodel *inMod) switch (param) { + // RELMODEL type + case RELMODEL_MOD_TYPE: + model->RELMODELtype = value->iValue ; + model->RELMODELtypeGiven = TRUE ; + return (OK) ; + + // RELMODEL flag + case RELMODEL_MOD_RELMODEL: + model->RELMODELrelmodel = 1 ; + model->RELMODELrelmodelGiven = TRUE ; + return (OK) ; + + // 1: Giorgio Liatis (Sapienza University - DIET - Ultra Thin Oxide) case RELMODEL_MOD_KB: model->RELMODELk_b = value->rValue ; model->RELMODELk_bGiven = TRUE ; @@ -71,19 +84,68 @@ RELMODELmParam (int param, IFvalue *value, GENmodel *inMod) model->RELMODELbeta1Given = TRUE ; return (OK) ; - case RELMODEL_MOD_TYPE: - model->RELMODELtype = value->iValue ; - model->RELMODELtypeGiven = TRUE ; + // 2: 65nm found over Internet + case RELMODEL_MOD_ALPHA_NEW: + model->RELMODELalpha_new = value->rValue ; + model->RELMODELalpha_newGiven = TRUE ; return (OK) ; - case RELMODEL_MOD_RELMODEL: - model->RELMODELrelmodel = 1 ; - model->RELMODELrelmodelGiven = TRUE ; - break ; + case RELMODEL_MOD_B_NEW: + model->RELMODELb_new = value->rValue ; + model->RELMODELb_newGiven = TRUE ; + return (OK) ; + + case RELMODEL_MOD_BETA_NEW: + model->RELMODELbeta_new = value->rValue ; + model->RELMODELbeta_newGiven = TRUE ; + return (OK) ; + + case RELMODEL_MOD_E0_NEW: + model->RELMODELe0_new = value->rValue ; + model->RELMODELe0_newGiven = TRUE ; + return (OK) ; + + case RELMODEL_MOD_K_NEW: + model->RELMODELk_new = value->rValue ; + model->RELMODELk_newGiven = TRUE ; + return (OK) ; + + case RELMODEL_MOD_KB_NEW: + model->RELMODELkb_new = value->rValue ; + model->RELMODELkb_newGiven = TRUE ; + return (OK) ; + + case RELMODEL_MOD_TAU_C_FAST_NEW: + model->RELMODELtau_c_fast_new = value->rValue ; + model->RELMODELtau_c_fast_newGiven = TRUE ; + return (OK) ; + + case RELMODEL_MOD_TAU_C_SLOW_NEW: + model->RELMODELtau_c_slow_new = value->rValue ; + model->RELMODELtau_c_slow_new = TRUE ; + return (OK) ; + + case RELMODEL_MOD_TAU_E_FAST_NEW: + model->RELMODELtau_e_fast_new = value->rValue ; + model->RELMODELtau_e_fast_newGiven = TRUE ; + return (OK) ; + + case RELMODEL_MOD_TAU_E_SLOW_NEW: + model->RELMODELtau_e_slow_new = value->rValue ; + model->RELMODELtau_e_slow_newGiven = TRUE ; + return (OK) ; + + case RELMODEL_MOD_T_R_NEW: + model->RELMODELt_r_new = value->rValue ; + model->RELMODELt_r_newGiven = TRUE ; + return (OK) ; + + case RELMODEL_MOD_T_S_NEW: + model->RELMODELt_s_new = value->rValue ; + model->RELMODELt_s_newGiven = TRUE ; + return (OK) ; default: return (E_BADPARM) ; } - - return (OK) ; } diff --git a/src/spicelib/devices/relmodel/relmodelsetup.c b/src/spicelib/devices/relmodel/relmodelsetup.c index 68f4f0d66..eb35c90ba 100644 --- a/src/spicelib/devices/relmodel/relmodelsetup.c +++ b/src/spicelib/devices/relmodel/relmodelsetup.c @@ -20,6 +20,16 @@ RELMODELsetup (SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *state /* loop through all the RELMODEL device models */ for ( ; model != NULL ; model = model->RELMODELnextModel) { + // RELMODEL type + // 1: Giorgio Liatis (Sapienza University - DIET - Ultra Thin Oxide) + // 2: 65nm found over Internet + + if (!model->RELMODELtypeGiven) + { + model->RELMODELtype = 2 ; + } + + // 1: Giorgio Liatis (Sapienza University - DIET - Ultra Thin Oxide) if (!model->RELMODELk_bGiven) { model->RELMODELk_b = 8.6e-5 ; @@ -75,15 +85,7 @@ RELMODELsetup (SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *state model->RELMODELbeta1 = 0.112 ; } -///// - - if (!model->RELMODELtypeGiven) - { - model->RELMODELtype = 2 ; - } - - - + // 2: 65nm found over Internet if (!model->RELMODELalpha_newGiven) { model->RELMODELalpha_new = 0.3 ;