Exemple #1
0
        /// <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;
            }
        }
Exemple #2
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);
        }