mame/nl_examples/2N6027.cpp
Vas Crabb 97b6717027 (nw) Clean up the mess on master
This effectively reverts b380514764 and
c24473ddff, restoring the state at
598cd52272.

Before pushing, please check that what you're about to push is sane.
Check your local commit log and ensure there isn't anything out-of-place
before pushing to mainline.  When things like this happen, it wastes
everyone's time.  I really don't need this in a week when real work™ is
busting my balls and I'm behind where I want to be with preparing for
MAME release.
2019-03-26 11:13:37 +11:00

101 lines
2.3 KiB
C++

// license:GPL-2.0+
// copyright-holders:Couriersud
#include "netlist/devices/net_lib.h"
/*
* Run with
* ./nltool -t 1 -f nl_examples/2N6027.cpp -l PUT.A -l PUT.K -l PUT.G -v
*/
/* ----------------------------------------------------------------------------
* Library section header START
* ---------------------------------------------------------------------------*/
#ifndef __PLIB_PREPROCESSOR__
#define PUT_2N6027(_name) \
NET_REGISTER_DEV(G501534_DIP, _name)
//NETLIST_EXTERNAL(ex2N6027)
NETLIST_EXTERNAL(loc_lib)
#endif
/* ----------------------------------------------------------------------------
* Library section header END
* ---------------------------------------------------------------------------*/
NETLIST_START(ex2N6027)
/* This is a circuit pushing the solvers to the limits
* 50,000 maximum NR loops.
*/
SOLVER(Solver, 48000)
PARAM(Solver.ACCURACY, 1e-5)
PARAM(Solver.DYNAMIC_TS, 1)
PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 1e-9)
PARAM(Solver.NR_LOOPS, 50000)
PARAM(Solver.METHOD, "MAT_CR")
LOCAL_SOURCE(loc_lib)
INCLUDE(loc_lib)
ANALOG_INPUT(VB, 10)
PUT_2N6027(PUT)
// Figure 3 from datasheet
RES(R1, RES_K(510))
RES(R2, RES_K(16))
RES(R3, RES_K(27))
RES(R4, 20)
CAP(C, CAP_U(0.1))
NET_C(VB, R1.1, R2.1)
NET_C(R1.2, C.1, PUT.A)
NET_C(PUT.K, R4.1)
NET_C(PUT.G, R2.2, R3.1)
NET_C(GND, C.2, R4.2, R3.2)
NETLIST_END()
NETLIST_START(PUT_2N6027)
NET_MODEL("2N6027_NPN NPN(IS=5E-15 VAF=100 IKF=0.3 ISE=1.85E-12 NE=1.45 RE=0.15 RC=0.15 CJE=7E-10 TF=0.6E-8 CJC=2.2E-10 TR=4.76E-8 XTB=3)")
NET_MODEL("2N6027_PNP PNP(IS=2E-15 VAF=100 IKF=0.3 ISE=1.90E-12 NE=1.5 RE=0.15 RC=0.15 CJE=7E-10 TF=1.6E-8 CJC=2.2E-10 TR=5.1E-8 XTB=3)")
QBJT_EB(Q1, "2N6027_NPN")
QBJT_EB(Q2, "2N6027_PNP")
/* The netlist transistor model currently doesn't support
* BE and BC capacitances.
* Adding those here significantly reduces NR loops.
* FIXME: Needs to be removed when added to the
* transistor EB model.
*/
#if 0
CAP(CJE1, CAP_N(1))
CAP(CJE2, CAP_N(1))
NET_C(CJE1.1, Q1.B)
NET_C(CJE1.2, Q1.E)
NET_C(CJE2.1, Q2.B)
NET_C(CJE2.2, Q2.E)
#endif
NET_C(Q1.C, Q2.B)
NET_C(Q1.B, Q2.C)
ALIAS(G, Q2.B)
ALIAS(A, Q2.E)
ALIAS(K, Q1.E)
NETLIST_END()
NETLIST_START(loc_lib)
LOCAL_LIB_ENTRY(PUT_2N6027)
NETLIST_END()