/// <summary> /// Setup the device /// </summary> /// <param name="ckt">The circuit</param> public override void Setup(Circuit ckt) { var model = Model as BSIM3v30Model; pParam = null; // Allocate nodes var nodes = BindNodes(ckt); BSIM3dNode = nodes[0].Index; BSIM3gNode = nodes[1].Index; BSIM3sNode = nodes[2].Index; BSIM3bNode = nodes[3].Index; // Allocate states BSIM3states = ckt.State.GetState(17); /* allocate a chunk of the state vector */ /* perform the parameter defaulting */ if (!BSIM3acnqsMod.Given) { BSIM3acnqsMod.Value = model.BSIM3acnqsMod; } else if ((BSIM3acnqsMod != 0) && (BSIM3acnqsMod != 1)) { BSIM3acnqsMod.Value = model.BSIM3acnqsMod; CircuitWarning.Warning(this, $"Warning: acnqsMod has been set to its global value {model.BSIM3acnqsMod}."); } /* process drain series resistance */ if ((model.BSIM3sheetResistance > 0.0) && (BSIM3drainSquares > 0.0)) { BSIM3dNodePrime = CreateNode(ckt, Name.Grow("#drain")).Index; } else { BSIM3dNodePrime = BSIM3dNode; } /* process source series resistance */ if ((model.BSIM3sheetResistance > 0.0) && (BSIM3sourceSquares > 0.0)) { BSIM3sNodePrime = CreateNode(ckt, Name.Grow("#source")).Index; } else { BSIM3sNodePrime = BSIM3sNode; } /* internal charge node */ if ((BSIM3nqsMod > 0) && (BSIM3qNode == 0)) { BSIM3qNode = CreateNode(ckt, Name.Grow("#charge")).Index; } else { BSIM3qNode = 0; } }
/// <summary> /// Setup the device /// </summary> /// <param name="ckt">The circuit</param> public override void Setup(Circuit ckt) { var model = Model as BSIM3v24Model; pParam = null; // Allocate nodes var nodes = BindNodes(ckt); BSIM3dNode = nodes[0].Index; BSIM3gNode = nodes[1].Index; BSIM3sNode = nodes[2].Index; BSIM3bNode = nodes[3].Index; // process drain series resistance if ((model.BSIM3sheetResistance > 0.0) && (BSIM3drainSquares > 0.0)) { BSIM3dNodePrime = CreateNode(ckt, Name.Grow("#drain")).Index; } else { BSIM3dNodePrime = BSIM3dNode; } // process source series resistance if ((model.BSIM3sheetResistance > 0.0) && (BSIM3sourceSquares > 0.0)) { BSIM3sNodePrime = CreateNode(ckt, Name.Grow("#source")).Index; } else { BSIM3sNodePrime = BSIM3sNode; } // internal charge node if (BSIM3nqsMod != 0) { BSIM3qNode = CreateNode(ckt, Name.Grow("#nqs")).Index; } else { BSIM3qNode = 0; } // Allocate states BSIM3states = ckt.State.GetState(17); }