Esempio n. 1
0
        private Mosfet1Model CreateMOS1Model(string name, string parameters)
        {
            var model = new Mosfet1Model(name);

            ApplyParameters(model, parameters);
            return(model);
        }
Esempio n. 2
0
        public void When_BasicParameters_Expect_NoException()
        {
            // Create the mosfet
            var model      = new Mosfet1Model("M1");
            var parameters = model.GetParameterSet <SpiceSharp.Components.Mosfets.Level1.ModelParameters>();

            // <example_parameters_mos1_creategetter>
            // Create a getter for the nominal temperature of the mosfet1 model
            var tnomGetter  = parameters.CreatePropertyGetter <double>("tnom");
            var temperature = tnomGetter(); // In degrees Celsius
            // </example_parameters_mos1_creategetter>

            // <example_parameters_mos1_createsetter>
            // Create a setter for the gate-drain overlap capacitance of the mosfet1 model
            var cgdoSetter = parameters.CreateParameterSetter <double>("cgdo");

            cgdoSetter(1e-12); // 1pF
            // </example_parameters_mos1_createsetter>

            // <example_parameters_mos1_getparameter>
            // Get the parameter that describes the oxide thickness of the mosfet1 model
            var toxParameter = parameters.GetProperty <double>("tox");

            // </example_parameters_mos1_getparameter>

            // <example_parameters_mos1_setparameter>
            // Flag the model as a PMOS type
            parameters.SetParameter("pmos", true);
            // </example_parameters_mos1_setparameter>
        }
Esempio n. 3
0
        /// <summary>
        /// Create a MOSFET
        /// </summary>
        /// <param name="name">Name</param>
        /// <param name="d">Drain</param>
        /// <param name="g">Gate</param>
        /// <param name="s">Source</param>
        /// <param name="b">Bulk</param>
        /// <param name="modelname">Model name</param>
        /// <param name="modelparams">Model parameters</param>
        /// <returns></returns>
        protected Mosfet1 CreateMOS1(Identifier name, Identifier d, Identifier g, Identifier s, Identifier b,
                                     Identifier modelname, string modelparams)
        {
            // Create model
            Mosfet1Model model = new Mosfet1Model(modelname);

            ApplyParameters(model, modelparams);

            // Create mosfet
            Mosfet1 mos = new Mosfet1(name);

            mos.SetModel(model);
            mos.Connect(d, g, s, b);
            return(mos);
        }
Esempio n. 4
0
        /// <summary>
        /// Create a MOSFET
        /// </summary>
        /// <param name="name">Name</param>
        /// <param name="d">Drain</param>
        /// <param name="g">Gate</param>
        /// <param name="s">Source</param>
        /// <param name="b">Bulk</param>
        /// <param name="modelname">Model name</param>
        /// <param name="modelparams">Model parameters</param>
        /// <returns></returns>
        protected Mosfet1 CreateMOS1(string name, string d, string g, string s, string b,
                                     string modelname, string modelparams)
        {
            // Create model
            var model = new Mosfet1Model(modelname);

            ApplyParameters(model, modelparams);

            // Create mosfet
            var mos = new Mosfet1(name);

            mos.SetModel(model);
            mos.Connect(d, g, s, b);
            return(mos);
        }
Esempio n. 5
0
        public MosfetModelGenerator()
        {
            // Default MOS levels
            Levels.Add(1, (string name, string type, string version) =>
            {
                var m = new Mosfet1Model(name);
                switch (type.ToLower())
                {
                case "nmos": m.SetParameter("nmos", true); break;

                case "pmos": m.SetParameter("pmos", true); break;
                }

                return(m);
            });

            Levels.Add(2, (string name, string type, string version) =>
            {
                var m = new Mosfet2Model(name);
                switch (type.ToLower())
                {
                case "nmos": m.SetParameter("nmos", true); break;

                case "pmos": m.SetParameter("pmos", true); break;
                }

                return(m);
            });

            Levels.Add(3, (string name, string type, string version) =>
            {
                var m = new Mosfet3Model(name);
                switch (type.ToLower())
                {
                case "nmos": m.SetParameter("nmos", true); break;

                case "pmos": m.SetParameter("pmos", true); break;
                }

                return(m);
            });
        }
        public void When_NMOSIVCharacteristic_Expect_NoException()
        {
            // <example_DC>
            // Make the bipolar junction transistor
            var nmos = new Mosfet1("M1")
            {
                Model = "example"
            };

            nmos.Connect("d", "g", "0", "0");
            var nmosmodel = new Mosfet1Model("example");

            nmosmodel.SetParameter("kp", 150.0e-3);

            // Build the circuit
            var ckt = new Circuit(
                new VoltageSource("Vgs", "g", "0", 0),
                new VoltageSource("Vds", "d", "0", 0),
                nmosmodel,
                nmos
                );

            // Sweep the base current and vce voltage
            var dc = new DC("DC 1", new[]
            {
                new SweepConfiguration("Vgs", 0, 3, 0.2),
                new SweepConfiguration("Vds", 0, 5, 0.1),
            });

            // Export the collector current
            var currentExport = new RealPropertyExport(dc, "M1", "id");

            // Run the simulation
            dc.ExportSimulationData += (sender, args) =>
            {
                var vgsVoltage = dc.Sweeps[0].CurrentValue;
                var vdsVoltage = dc.Sweeps[1].CurrentValue;
                var current    = currentExport.Value;
            };
            dc.Run(ckt);
            // </example_DC>
        }
Esempio n. 7
0
        public void When_MOS1PMOSDifferentialPair_Expect_Reference()
        {
            var model = new Mosfet1Model("Model");

            model.SetParameter("pmos", true);
            model.SetParameter("vto", -0.7);
            model.SetParameter("kp", 12.57e-4);

            var ckt = new Circuit(
                new NodeMapper("VDD", "B12", "B13", "CTRL", "B14", "TH"),
                model,
                new VoltageSource("Vsupply", "VDD", "0", 5.0),
                new CurrentSource("IBBIAS", "VDD", "B12", 10e-6),
                new Mosfet1("MB1", "B13", "CTRL", "B12", "VDD", "Model"),
                new Mosfet1("MB2", "B14", "TH", "B12", "VDD", "Model"),
                new Resistor("RBD1", "B13", "0", 10e3),
                new Resistor("RBD2", "B14", "0", 10e3),

                // These resistors seem to be necessary for convergence... Any higher and the operating point can't be calculated
                // new Resistor("Racc1", "B12", "B13", 1e6),
                // new Resistor("Racc2", "B12", "B14", 1e6),

                new VoltageSource("INA", "CTRL", "0", 3.333333333),
                new VoltageSource("INB", "TH", "0", 1.6631)
                );

            // Calculate the operating point
            var op = new OP("op");

            op.ExportSimulationData += (sender, args) =>
            {
                var v = op.RealState.Solution;
            };

            // Disable source stepping and see if it converges
            var config = op.Configurations.Get <BaseConfiguration>();

            // config.SourceSteps = 0;

            op.Run(ckt);
        }
Esempio n. 8
0
        public void When_NMOSIVCharacteristic_Expect_NoException()
        {
            // <example_DC>
            // Create the mosfet and its model
            var nmos      = new Mosfet1("M1", "d", "g", "0", "0", "example");
            var nmosmodel = new Mosfet1Model("example");

            nmosmodel.SetParameter("kp", 150.0e-3);

            // Build the circuit
            var ckt = new Circuit(
                new VoltageSource("Vgs", "g", "0", 0),
                new VoltageSource("Vds", "d", "0", 0),
                nmosmodel,
                nmos
                );

            // Sweep the base current and vce voltage
            var dc = new DC("DC 1", new[]
            {
                new ParameterSweep("Vgs", new LinearSweep(0, 3, 0.2)),
                new ParameterSweep("Vds", new LinearSweep(0, 5, 0.1)),
            });

            // Export the collector current
            var currentExport = new RealPropertyExport(dc, "M1", "id");

            // Run the simulation
            dc.ExportSimulationData += (sender, args) =>
            {
                var vgsVoltage = dc.GetCurrentSweepValue()[0];
                var vdsVoltage = dc.GetCurrentSweepValue()[1];
                var current    = currentExport.Value;
            };
            dc.Run(ckt);
            // </example_DC>
        }