summaryrefslogtreecommitdiff
path: root/plugins/models-bsim/BSIM450/wrapper.h
blob: f8da23714e0cf6d7b43e44f4a0996a0e988c6fc6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
extern "C" {
  #include "bsim4def.h"
  #define DEV_bsim4
  #include "bsim4itf.h"
}

#define info	 B4info
#define INSTANCE BSIM4instance
#define MODEL	 BSIM4model

#define SPICE_LETTER "M"
#define DEVICE_TYPE "bsim450|bsim4"
#define MIN_NET_NODES 4
#define MAX_NET_NODES 4
#define INTERNAL_NODES 8
#define MODEL_TYPE "nmos14|pmos14|nmos54|pmos54|nmos60|pmos60|nmos450|pmos450"

static std::string port_names[] = {"d", "g", "s", "b"};
static std::string state_names[] = {"vbd",   "vbs",   "vgs",    "vds",  "vdbs", "vdbd",
				    "vsbs",  "vges",  "vgms",   "vses", "vdes", "qb",
				    "cqb",   "qg",    "cqg",    "qd",   "cqd",  "qgmid",
				    "cqgmid","qbs",   "cqbs",   "qbd",  "cqbd", "qcheq",
				    "cqcheq","qcdump","cqcdump","qdef", "qs"};

#define IS_VALID {itested();							\
    assert(d);									\
    const COMMON_PARAMLIST* c = dynamic_cast<const COMMON_PARAMLIST*>(d->common());	\
    assert(c);									\
    double l_in = c->_params["l"].e_val(OPT::defl, d->scope());			\
    double w_in = c->_params["w"].e_val(OPT::defw, d->scope());			\
    double l_min = _params["lmin"].e_val(0, scope());				\
    double w_min = _params["wmin"].e_val(0, scope());				\
    double l_max = _params["lmax"].e_val(1, scope());				\
    double w_max = _params["wmax"].e_val(1, scope());				\
    trace2(d->long_label().c_str(), l_in, w_in);				\
    trace4(long_label().c_str(), l_min, l_max, w_min, w_max);			\
    return l_in >= l_min && l_in <= l_max && w_in >= w_min && w_in <= w_max;	\
  }