Consolidate the scattered model parsing code. Now models support

recursive models,e.g. DIODE("1N914(IS=1e-15)"). Removed ".model" from
model definitions. (nw)
This commit is contained in:
couriersud 2015-07-22 23:13:01 +02:00
parent 907a751fc4
commit c2a192ec92
19 changed files with 219 additions and 176 deletions

View File

@ -70,16 +70,18 @@ NETLIST_START(dummy)
NET_C(RO.2, GND) NET_C(RO.2, GND)
// FIXME: Same as 1N4148 // FIXME: Same as 1N4148
NET_MODEL(".model 1S2075 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)") NET_MODEL("1S2075 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)")
NET_MODEL(".model 2SC1941 NPN(IS=46.416f BF=210 NF=1.0022 VAF=600 IKF=500m ISE=60f NE=1.5 BR=2.0122 NR=1.0022 VAR=10G IKR=10G ISC=300p NC=2 RB=13.22 IRB=10G RBM=13.22 RE=100m RC=790m CJE=26.52p VJE=900m MJE=518m TF=1.25n XTF=10 VTF=10 ITF=500m PTF=0 CJC=4.89p VJC=750m MJC=237m XCJC=500m TR=100n CJS=0 VJS=750m MJS=500m XTB=1.5 EG=1.11 XTI=3 KF=0 AF=1 FC=500m)") NET_MODEL("2SC1941 NPN(IS=46.416f BF=210 NF=1.0022 VAF=600 IKF=500m ISE=60f NE=1.5 BR=2.0122 NR=1.0022 VAR=10G IKR=10G ISC=300p NC=2 RB=13.22 IRB=10G RBM=13.22 RE=100m RC=790m CJE=26.52p VJE=900m MJE=518m TF=1.25n XTF=10 VTF=10 ITF=500m PTF=0 CJC=4.89p VJC=750m MJC=237m XCJC=500m TR=100n CJS=0 VJS=750m MJS=500m XTB=1.5 EG=1.11 XTI=3 KF=0 AF=1 FC=500m)")
INCLUDE(CongoBongo_schematics) INCLUDE(CongoBongo_schematics)
/* The opamp actually has an FPF of about 500k. This doesn't work here and causes oscillations. /* The opamp actually has an FPF of about 500k. This doesn't work here and causes oscillations.
* FPF here therefore about half the Solver clock. * FPF here therefore about half the Solver clock.
*/ */
PARAM(XU16.B.MODEL, "MB3614_SLOW") PARAM(XU16.B.MODEL, "MB3614(UGF=11k)")
PARAM(XU17.C.MODEL, "MB3614_SLOW") PARAM(XU17.C.MODEL, "MB3614(UGF=11k)")
//PARAM(XU16.B.MODEL, "MB3614_SLOW")
//PARAM(XU17.C.MODEL, "MB3614_SLOW")
OPTIMIZE_FRONTIER(C51.1, RES_K(20), 50) OPTIMIZE_FRONTIER(C51.1, RES_K(20), 50)
OPTIMIZE_FRONTIER(R77.2, RES_K(20), 50) OPTIMIZE_FRONTIER(R77.2, RES_K(20), 50)
@ -390,8 +392,8 @@ NETLIST_START(opamp_mod)
NET_C(RP1.1, G1.OP) NET_C(RP1.1, G1.OP)
NET_C(CP1.1, RP1.1) NET_C(CP1.1, RP1.1)
DIODE(DP,".model tt D(IS=1e-15 N=1)") DIODE(DP,"D(IS=1e-15 N=1)")
DIODE(DN,".model tt D(IS=1e-15 N=1)") DIODE(DN,"D(IS=1e-15 N=1)")
#if 1 #if 1
NET_C(DP.K, fUH.Q) NET_C(DP.K, fUH.Q)
NET_C(fUL.Q, DN.A) NET_C(fUL.Q, DN.A)

View File

@ -20,8 +20,8 @@ NETLIST_START(dummy)
PARAM(Solver.LTE, 1e-1) PARAM(Solver.LTE, 1e-1)
#endif #endif
//FIXME proper models! //FIXME proper models!
NET_MODEL(".model 2SC945 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ikf=20m Xtb=1.5 Br=3.377 Rc=1 Cjc=1p Mjc=.3333 Vjc=.75 Fc=.5 Cje=25p Mje=.3333 Vje=.75 Tr=450n Tf=20n Itf=0 Vtf=0 Xtf=0 VCEO=45V ICrating=150M MFG=Toshiba)") NET_MODEL("2SC945 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ikf=20m Xtb=1.5 Br=3.377 Rc=1 Cjc=1p Mjc=.3333 Vjc=.75 Fc=.5 Cje=25p Mje=.3333 Vje=.75 Tr=450n Tf=20n Itf=0 Vtf=0 Xtf=0 VCEO=45V ICrating=150M MFG=Toshiba)")
NET_MODEL(".model 1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)") NET_MODEL("1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
//NET_C(R44.1, XU1.7) //NET_C(R44.1, XU1.7)

View File

@ -24,7 +24,7 @@ NETLIST_START(msx)
ANALOG_INPUT(SOUND, 5) ANALOG_INPUT(SOUND, 5)
ANALOG_INPUT(SND, 5) ANALOG_INPUT(SND, 5)
NET_MODEL(".model ss9014 NPN(is=2.87599e-14 bf=377.5 vaf=123 ikf=1.1841 ise=4.7863e-15 ne=1.5 br=4.79 var=11.29 ikr=0.275423 isc=1.44544e-14 nc=1.5 rb=200 irb=1e-5 rbm=10 re=0.56 rc=5 cje=1.7205e-11 vje=0.6905907 mje=0.3193434 tf=5.89463e-10 cjc=6.2956p vjc=0.4164212 mjc=0.2559546 xcjc=0.451391 xtb=1.8881 eg=1.2415 xti=3 fc=0.5 Vceo=45 Icrating=0.1 mfg=Fairchild)") NET_MODEL("ss9014 NPN(is=2.87599e-14 bf=377.5 vaf=123 ikf=1.1841 ise=4.7863e-15 ne=1.5 br=4.79 var=11.29 ikr=0.275423 isc=1.44544e-14 nc=1.5 rb=200 irb=1e-5 rbm=10 re=0.56 rc=5 cje=1.7205e-11 vje=0.6905907 mje=0.3193434 tf=5.89463e-10 cjc=6.2956p vjc=0.4164212 mjc=0.2559546 xcjc=0.451391 xtb=1.8881 eg=1.2415 xti=3 fc=0.5 Vceo=45 Icrating=0.1 mfg=Fairchild)")
RES(R24, RES_K(51)) RES(R24, RES_K(51))
RES(R23, RES_K(5)) RES(R23, RES_K(5))

View File

@ -118,9 +118,9 @@ NETLIB_UPDATE(QBJT_switch)
NETLIB_UPDATE_PARAM(QBJT_switch) NETLIB_UPDATE_PARAM(QBJT_switch)
{ {
nl_double IS = m_model.model_value("IS", 1e-15); nl_double IS = m_model.model_value("IS");
nl_double BF = m_model.model_value("BF", 100); nl_double BF = m_model.model_value("BF");
nl_double NF = m_model.model_value("NF", 1); nl_double NF = m_model.model_value("NF");
//nl_double VJE = m_model.dValue("VJE", 0.75); //nl_double VJE = m_model.dValue("VJE", 0.75);
set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP); set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP);
@ -230,11 +230,11 @@ NETLIB_UPDATE_TERMINALS(QBJT_EB)
NETLIB_UPDATE_PARAM(QBJT_EB) NETLIB_UPDATE_PARAM(QBJT_EB)
{ {
nl_double IS = m_model.model_value("IS", 1e-15); nl_double IS = m_model.model_value("IS");
nl_double BF = m_model.model_value("BF", 100); nl_double BF = m_model.model_value("BF");
nl_double NF = m_model.model_value("NF", 1); nl_double NF = m_model.model_value("NF");
nl_double BR = m_model.model_value("BR", 1); nl_double BR = m_model.model_value("BR");
nl_double NR = m_model.model_value("NR", 1); nl_double NR = m_model.model_value("NR");
//nl_double VJE = m_model.dValue("VJE", 0.75); //nl_double VJE = m_model.dValue("VJE", 0.75);
set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP); set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP);

View File

@ -121,8 +121,8 @@ NETLIB_RESET(OPAMP)
m_EBUF.m_G.setTo(1.0); m_EBUF.m_G.setTo(1.0);
m_G1.m_RI.setTo(m_model.model_value("RI")); m_G1.m_RI.setTo(m_model.model_value("RI"));
m_EBUF.m_RO.setTo(m_model.model_value("RO")); m_EBUF.m_RO.setTo(m_model.model_value("RO"));
m_DP.m_model.setTo(".model tt D(IS=1e-15 N=1)"); m_DP.m_model.setTo("D(IS=1e-15 N=1)");
m_DN.m_model.setTo(".model tt D(IS=1e-15 N=1)"); m_DN.m_model.setTo("D(IS=1e-15 N=1)");
double CP = m_model.model_value("DAB") / m_model.model_value("SLEW"); double CP = m_model.model_value("DAB") / m_model.model_value("SLEW");
double RP = 0.5 / 3.1459 / CP / m_model.model_value("FPF"); double RP = 0.5 / 3.1459 / CP / m_model.model_value("FPF");

View File

@ -273,8 +273,8 @@ NETLIB_START(D)
NETLIB_UPDATE_PARAM(D) NETLIB_UPDATE_PARAM(D)
{ {
nl_double Is = m_model.model_value("Is", 1e-15); nl_double Is = m_model.model_value("IS");
nl_double n = m_model.model_value("N", 1); nl_double n = m_model.model_value("N");
m_D.set_param(Is, n, netlist().gmin()); m_D.set_param(Is, n, netlist().gmin());
} }

View File

@ -13,37 +13,45 @@
#include "../nl_factory.h" #include "../nl_factory.h"
NETLIST_START(diode_models) NETLIST_START(diode_models)
NET_MODEL(".model 1N914 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)") NET_MODEL("D _(IS=1e-15 N=1)")
NET_MODEL(".model 1N4001 D(Is=14.11n N=1.984 Rs=33.89m Ikf=94.81 Xti=3 Eg=1.11 Cjo=25.89p M=.44 Vj=.3245 Fc=.5 Bv=75 Ibv=10u Tt=5.7u Iave=1 Vpk=50 mfg=GI type=silicon)")
NET_MODEL(".model 1N4148 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)") NET_MODEL("1N914 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
NET_MODEL(".model 1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)") NET_MODEL("1N4001 D(Is=14.11n N=1.984 Rs=33.89m Ikf=94.81 Xti=3 Eg=1.11 Cjo=25.89p M=.44 Vj=.3245 Fc=.5 Bv=75 Ibv=10u Tt=5.7u Iave=1 Vpk=50 mfg=GI type=silicon)")
NET_MODEL(".model LedRed D(IS=93.2p RS=42M N=3.73 BV=4 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=4 type=LED)") NET_MODEL("1N4148 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
NET_MODEL(".model LedGreen D(IS=93.2p RS=42M N=4.61 BV=4 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=4 type=LED)") NET_MODEL("1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)")
NET_MODEL(".model LedBlue D(IS=93.2p RS=42M N=7.47 BV=5 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=5 type=LED)") NET_MODEL("LedRed D(IS=93.2p RS=42M N=3.73 BV=4 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=4 type=LED)")
NET_MODEL(".model LedWhite D(Is=0.27n Rs=5.65 N=6.79 Cjo=42p Iave=30m Vpk=5 type=LED)") NET_MODEL("LedGreen D(IS=93.2p RS=42M N=4.61 BV=4 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=4 type=LED)")
NET_MODEL("LedBlue D(IS=93.2p RS=42M N=7.47 BV=5 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=5 type=LED)")
NET_MODEL("LedWhite D(Is=0.27n Rs=5.65 N=6.79 Cjo=42p Iave=30m Vpk=5 type=LED)")
NETLIST_END() NETLIST_END()
NETLIST_START(bjt_models) NETLIST_START(bjt_models)
NET_MODEL(".model 2SA1015 PNP(Is=295.1E-18 Xti=3 Eg=1.11 Vaf=100 Bf=110 Xtb=1.5 Br=10.45 Rc=15 Cjc=66.2p Mjc=1.054 Vjc=.75 Fc=.5 Cje=5p Mje=.3333 Vje=.75 Tr=10n Tf=1.661n VCEO=45V ICrating=150M MFG=Toshiba)") NET_MODEL("NPN _(IS=1e-15 BF=100 NF=1 BR=1 NR=1)")
NET_MODEL(".model 2SC1815 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ikf=20m Xtb=1.5 Br=3.377 Rc=1 Cjc=1p Mjc=.3333 Vjc=.75 Fc=.5 Cje=25p Mje=.3333 Vje=.75 Tr=450n Tf=20n Itf=0 Vtf=0 Xtf=0 VCEO=45V ICrating=150M MFG=Toshiba)") NET_MODEL("PNP _(IS=1e-15 BF=100 NF=1 BR=1 NR=1)")
NET_MODEL(".model 2N3643 NPN(IS=14.34E-15 ISE=14.34E-15 ISC=0 XTI=3 BF=255.9 BR=6.092 IKF=0.2847 IKR=0 XTB=1.5 VAF=74.03 VAR=28 VJE=0.65 VJC=0.65 RE=0.1 RC=1 RB=10 CJE=22.01E-12 CJC=7.306E-12 XCJC=0.75 FC=0.5 NF=1 NR=1 NE=1.307 NC=2 MJE=0.377 MJC=0.3416 TF=411.1E-12 TR=46.91E-9 ITF=0.6 VTF=1.7 XTF=3 EG=1.11 KF=0 AF=1 VCEO=30 ICRATING=500m MFG=NSC)") NET_MODEL("2SA1015 PNP(Is=295.1E-18 Xti=3 Eg=1.11 Vaf=100 Bf=110 Xtb=1.5 Br=10.45 Rc=15 Cjc=66.2p Mjc=1.054 Vjc=.75 Fc=.5 Cje=5p Mje=.3333 Vje=.75 Tr=10n Tf=1.661n VCEO=45V ICrating=150M MFG=Toshiba)")
NET_MODEL(".model 2N3645 PNP(IS=650.6E-18 ISE=54.81E-15 ISC=0 XTI=3 BF=231.7 BR=3.563 IKF=1.079 IKR=0 XTB=1.5 VAF=115.7 VAR=35 VJE=0.65 VJC=0.65 RE=0.15 RC=0.715 RB=10 CJE=19.82E-12 CJC=14.76E-12 XCJC=0.75 FC=0.5 NF=1 NR=1 NE=1.829 NC=2 MJE=0.3357 MJC=0.5383 TF=603.7E-12 TR=111.3E-9 ITF=0.65 VTF=5 XTF=1.7 EG=1.11 KF=0 AF=1 VCEO=60 ICRATING=500m MFG=NSC)") NET_MODEL("2SC1815 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ikf=20m Xtb=1.5 Br=3.377 Rc=1 Cjc=1p Mjc=.3333 Vjc=.75 Fc=.5 Cje=25p Mje=.3333 Vje=.75 Tr=450n Tf=20n Itf=0 Vtf=0 Xtf=0 VCEO=45V ICrating=150M MFG=Toshiba)")
NET_MODEL("2N3643 NPN(IS=14.34E-15 ISE=14.34E-15 ISC=0 XTI=3 BF=255.9 BR=6.092 IKF=0.2847 IKR=0 XTB=1.5 VAF=74.03 VAR=28 VJE=0.65 VJC=0.65 RE=0.1 RC=1 RB=10 CJE=22.01E-12 CJC=7.306E-12 XCJC=0.75 FC=0.5 NF=1 NR=1 NE=1.307 NC=2 MJE=0.377 MJC=0.3416 TF=411.1E-12 TR=46.91E-9 ITF=0.6 VTF=1.7 XTF=3 EG=1.11 KF=0 AF=1 VCEO=30 ICRATING=500m MFG=NSC)")
NET_MODEL("2N3645 PNP(IS=650.6E-18 ISE=54.81E-15 ISC=0 XTI=3 BF=231.7 BR=3.563 IKF=1.079 IKR=0 XTB=1.5 VAF=115.7 VAR=35 VJE=0.65 VJC=0.65 RE=0.15 RC=0.715 RB=10 CJE=19.82E-12 CJC=14.76E-12 XCJC=0.75 FC=0.5 NF=1 NR=1 NE=1.829 NC=2 MJE=0.3357 MJC=0.5383 TF=603.7E-12 TR=111.3E-9 ITF=0.65 VTF=5 XTF=1.7 EG=1.11 KF=0 AF=1 VCEO=60 ICRATING=500m MFG=NSC)")
// 3644 = 3645 Difference between 3644 and 3645 is voltage rating. 3644: VCBO=45, 3645: VCBO=60 // 3644 = 3645 Difference between 3644 and 3645 is voltage rating. 3644: VCBO=45, 3645: VCBO=60
NET_MODEL(".model 2N3644 PNP(IS=650.6E-18 ISE=54.81E-15 ISC=0 XTI=3 BF=231.7 BR=3.563 IKF=1.079 IKR=0 XTB=1.5 VAF=115.7 VAR=35 VJE=0.65 VJC=0.65 RE=0.15 RC=0.715 RB=10 CJE=19.82E-12 CJC=14.76E-12 XCJC=0.75 FC=0.5 NF=1 NR=1 NE=1.829 NC=2 MJE=0.3357 MJC=0.5383 TF=603.7E-12 TR=111.3E-9 ITF=0.65 VTF=5 XTF=1.7 EG=1.11 KF=0 AF=1 VCEO=60 ICRATING=500m MFG=NSC)") NET_MODEL("2N3644 PNP(IS=650.6E-18 ISE=54.81E-15 ISC=0 XTI=3 BF=231.7 BR=3.563 IKF=1.079 IKR=0 XTB=1.5 VAF=115.7 VAR=35 VJE=0.65 VJC=0.65 RE=0.15 RC=0.715 RB=10 CJE=19.82E-12 CJC=14.76E-12 XCJC=0.75 FC=0.5 NF=1 NR=1 NE=1.829 NC=2 MJE=0.3357 MJC=0.5383 TF=603.7E-12 TR=111.3E-9 ITF=0.65 VTF=5 XTF=1.7 EG=1.11 KF=0 AF=1 VCEO=60 ICRATING=500m MFG=NSC)")
// 2N5190 = BC817-25 // 2N5190 = BC817-25
NET_MODEL(".model 2N5190 NPN(IS=9.198E-14 NF=1.003 ISE=4.468E-16 NE=1.65 BF=338.8 IKF=0.4913 VAF=107.9 NR=1.002 ISC=5.109E-15 NC=1.071 BR=29.48 IKR=0.193 VAR=25 RB=1 IRB=1000 RBM=1 RE=0.2126 RC=0.143 XTB=0 EG=1.11 XTI=3 CJE=3.825E-11 VJE=0.7004 MJE=0.364 TF=5.229E-10 XTF=219.7 VTF=3.502 ITF=7.257 PTF=0 CJC=1.27E-11 VJC=0.4431 MJC=0.3983 XCJC=0.4555 TR=7E-11 CJS=0 VJS=0.75 MJS=0.333 FC=0.905 Vceo=45 Icrating=500m mfg=Philips)") NET_MODEL("2N5190 NPN(IS=9.198E-14 NF=1.003 ISE=4.468E-16 NE=1.65 BF=338.8 IKF=0.4913 VAF=107.9 NR=1.002 ISC=5.109E-15 NC=1.071 BR=29.48 IKR=0.193 VAR=25 RB=1 IRB=1000 RBM=1 RE=0.2126 RC=0.143 XTB=0 EG=1.11 XTI=3 CJE=3.825E-11 VJE=0.7004 MJE=0.364 TF=5.229E-10 XTF=219.7 VTF=3.502 ITF=7.257 PTF=0 CJC=1.27E-11 VJC=0.4431 MJC=0.3983 XCJC=0.4555 TR=7E-11 CJS=0 VJS=0.75 MJS=0.333 FC=0.905 Vceo=45 Icrating=500m mfg=Philips)")
NET_MODEL(".model 2SC945 NPN(IS=3.577E-14 BF=2.382E+02 NF=1.01 VAF=1.206E+02 IKF=3.332E-01 ISE=3.038E-16 NE=1.205 BR=1.289E+01 NR=1.015 VAR=1.533E+01 IKR=2.037E-01 ISC=3.972E-14 NC=1.115 RB=3.680E+01 IRB=1.004E-04 RBM=1 RE=8.338E-01 RC=1.557E+00 CJE=1.877E-11 VJE=7.211E-01 MJE=3.486E-01 TF=4.149E-10 XTF=1.000E+02 VTF=9.956 ITF=5.118E-01 PTF=0 CJC=6.876p VJC=3.645E-01 MJC=3.074E-01 TR=5.145E-08 XTB=1.5 EG=1.11 XTI=3 FC=0.5 Vceo=50 Icrating=100m MFG=NEC)") NET_MODEL("2SC945 NPN(IS=3.577E-14 BF=2.382E+02 NF=1.01 VAF=1.206E+02 IKF=3.332E-01 ISE=3.038E-16 NE=1.205 BR=1.289E+01 NR=1.015 VAR=1.533E+01 IKR=2.037E-01 ISC=3.972E-14 NC=1.115 RB=3.680E+01 IRB=1.004E-04 RBM=1 RE=8.338E-01 RC=1.557E+00 CJE=1.877E-11 VJE=7.211E-01 MJE=3.486E-01 TF=4.149E-10 XTF=1.000E+02 VTF=9.956 ITF=5.118E-01 PTF=0 CJC=6.876p VJC=3.645E-01 MJC=3.074E-01 TR=5.145E-08 XTB=1.5 EG=1.11 XTI=3 FC=0.5 Vceo=50 Icrating=100m MFG=NEC)")
NET_MODEL(".model BC237B NPN(IS=1.8E-14 ISE=5.0E-14 ISC=1.72E-13 XTI=3 BF=400 BR=35.5 IKF=0.14 IKR=0.03 XTB=1.5 VAF=80 VAR=12.5 VJE=0.58 VJC=0.54 RE=0.6 RC=0.25 RB=0.56 CJE=13E-12 CJC=4E-12 XCJC=0.75 FC=0.5 NF=0.9955 NR=1.005 NE=1.46 NC=1.27 MJE=0.33 MJC=0.33 TF=0.64E-9 TR=50.72E-9 EG=1.11 KF=0 AF=1 VCEO=45V ICRATING=100M MFG=ZETEX)") NET_MODEL("BC237B NPN(IS=1.8E-14 ISE=5.0E-14 ISC=1.72E-13 XTI=3 BF=400 BR=35.5 IKF=0.14 IKR=0.03 XTB=1.5 VAF=80 VAR=12.5 VJE=0.58 VJC=0.54 RE=0.6 RC=0.25 RB=0.56 CJE=13E-12 CJC=4E-12 XCJC=0.75 FC=0.5 NF=0.9955 NR=1.005 NE=1.46 NC=1.27 MJE=0.33 MJC=0.33 TF=0.64E-9 TR=50.72E-9 EG=1.11 KF=0 AF=1 VCEO=45V ICRATING=100M MFG=ZETEX)")
NET_MODEL(".model BC556B PNP(IS=3.83E-14 NF=1.008 ISE=1.22E-14 NE=1.528 BF=344.4 IKF=0.08039 VAF=21.11 NR=1.005 ISC=2.85E-13 NC=1.28 BR=14.84 IKR=0.047 VAR=32.02 RB=1 IRB=1.00E-06 RBM=1 RE=0.6202 RC=0.5713 XTB=0 EG=1.11 XTI=3 CJE=1.23E-11 VJE=0.6106 MJE=0.378 TF=5.60E-10 XTF=3.414 VTF=5.23 ITF=0.1483 PTF=0 CJC=1.08E-11 VJC=0.1022 MJC=0.3563 XCJC=0.6288 TR=1.00E-32 CJS=0 VJS=0.75 MJS=0.333 FC=0.8027 Vceo=65 Icrating=100m mfg=Philips)") NET_MODEL("BC556B PNP(IS=3.83E-14 NF=1.008 ISE=1.22E-14 NE=1.528 BF=344.4 IKF=0.08039 VAF=21.11 NR=1.005 ISC=2.85E-13 NC=1.28 BR=14.84 IKR=0.047 VAR=32.02 RB=1 IRB=1.00E-06 RBM=1 RE=0.6202 RC=0.5713 XTB=0 EG=1.11 XTI=3 CJE=1.23E-11 VJE=0.6106 MJE=0.378 TF=5.60E-10 XTF=3.414 VTF=5.23 ITF=0.1483 PTF=0 CJC=1.08E-11 VJC=0.1022 MJC=0.3563 XCJC=0.6288 TR=1.00E-32 CJS=0 VJS=0.75 MJS=0.333 FC=0.8027 Vceo=65 Icrating=100m mfg=Philips)")
NET_MODEL(".model BC817-25 NPN(IS=9.198E-14 NF=1.003 ISE=4.468E-16 NE=1.65 BF=338.8 IKF=0.4913 VAF=107.9 NR=1.002 ISC=5.109E-15 NC=1.071 BR=29.48 IKR=0.193 VAR=25 RB=1 IRB=1000 RBM=1 RE=0.2126 RC=0.143 XTB=0 EG=1.11 XTI=3 CJE=3.825E-11 VJE=0.7004 MJE=0.364 TF=5.229E-10 XTF=219.7 VTF=3.502 ITF=7.257 PTF=0 CJC=1.27E-11 VJC=0.4431 MJC=0.3983 XCJC=0.4555 TR=7E-11 CJS=0 VJS=0.75 MJS=0.333 FC=0.905 Vceo=45 Icrating=500m mfg=Philips)") NET_MODEL("BC817-25 NPN(IS=9.198E-14 NF=1.003 ISE=4.468E-16 NE=1.65 BF=338.8 IKF=0.4913 VAF=107.9 NR=1.002 ISC=5.109E-15 NC=1.071 BR=29.48 IKR=0.193 VAR=25 RB=1 IRB=1000 RBM=1 RE=0.2126 RC=0.143 XTB=0 EG=1.11 XTI=3 CJE=3.825E-11 VJE=0.7004 MJE=0.364 TF=5.229E-10 XTF=219.7 VTF=3.502 ITF=7.257 PTF=0 CJC=1.27E-11 VJC=0.4431 MJC=0.3983 XCJC=0.4555 TR=7E-11 CJS=0 VJS=0.75 MJS=0.333 FC=0.905 Vceo=45 Icrating=500m mfg=Philips)")
NETLIST_END() NETLIST_END()
NETLIST_START(family_models) NETLIST_START(family_models)
NET_MODEL(".model 74XXOC FAMILY(IVL=0.8 IVH=2.0 OVL=0.1 OVH=4.95 ORL=10.0 ORH=1.0e8)") NET_MODEL("FAMILY _(TYPE=CUSTOM IVL=0.8 IVH=2.0 OVL=0.1 OVH=4.0 ORL=1.0 ORH=130.0)")
NET_MODEL(".model CD4XXX FAMILY(TYPE=CD4XXX)") NET_MODEL("OPAMP _()")
NET_MODEL("74XXOC FAMILY(IVL=0.8 IVH=2.0 OVL=0.1 OVH=4.95 ORL=10.0 ORH=1.0e8)")
NET_MODEL("CD4XXX FAMILY(TYPE=CD4XXX)")
NETLIST_END() NETLIST_END()

View File

@ -134,8 +134,8 @@ NETLIB_UPDATE(extclock)
NETLIB_START(logic_input) NETLIB_START(logic_input)
{ {
/* make sure we get the family first */ /* make sure we get the family first */
register_param("FAMILY", m_FAMILY, ".model FAMILY(TYPE=TTL)"); register_param("FAMILY", m_FAMILY, "FAMILY(TYPE=TTL)");
set_logic_family(logic_family_desc_t::from_model(m_FAMILY.Value())); set_logic_family(netlist().setup().family_from_model(m_FAMILY.Value()));
register_output("Q", m_Q); register_output("Q", m_Q);
register_param("IN", m_IN, 0); register_param("IN", m_IN, 0);

View File

@ -36,7 +36,7 @@
ttd->m_desc.add(_x); ttd->m_desc.add(_x);
#define TT_FAMILY(_x) \ #define TT_FAMILY(_x) \
ttd->m_family = netlist::logic_family_desc_t::from_model(setup.get_model_str(_x)); ttd->m_family = setup.family_from_model(_x);
#define TRUTHTABLE_END() \ #define TRUTHTABLE_END() \
setup.factory().register_device(ttd); \ setup.factory().register_device(ttd); \

View File

@ -39,8 +39,8 @@ NETLIST_END()
NETLIST_START(OPAMP_lib) NETLIST_START(OPAMP_lib)
LOCAL_LIB_ENTRY(opamp_layout_4_4_11) LOCAL_LIB_ENTRY(opamp_layout_4_4_11)
NET_MODEL(".model MB3614 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=500k SLEW=0.6M RI=1000k RO=50 DAB=0.002)") NET_MODEL("MB3614 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=500k SLEW=0.6M RI=1000k RO=50 DAB=0.002)")
NET_MODEL(".model MB3614_SLOW OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=11k SLEW=0.6M RI=1000k RO=50 DAB=0.002)") NET_MODEL("MB3614_SLOW OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=11k SLEW=0.6M RI=1000k RO=50 DAB=0.002)")
LOCAL_LIB_ENTRY(MB3614_DIP) LOCAL_LIB_ENTRY(MB3614_DIP)

View File

@ -87,36 +87,6 @@ public:
logic_family_desc_t *netlist_family_TTL = palloc(logic_family_ttl_t); logic_family_desc_t *netlist_family_TTL = palloc(logic_family_ttl_t);
logic_family_desc_t *netlist_family_CD4XXX = palloc(logic_family_cd4xxx_t); logic_family_desc_t *netlist_family_CD4XXX = palloc(logic_family_cd4xxx_t);
class logic_family_std_proxy_t : public logic_family_desc_t
{
public:
logic_family_std_proxy_t() { }
virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(logic_output_t *proxied) const
{
return palloc(devices::nld_d_to_a_proxy(proxied));
}
};
logic_family_desc_t *logic_family_desc_t::from_model(const pstring &model)
{
if (setup_t::model_value_str(model, "TYPE", "") == "TTL")
return netlist_family_TTL;
if (setup_t::model_value_str(model, "TYPE", "") == "CD4XXX")
return netlist_family_CD4XXX;
logic_family_std_proxy_t *ret = palloc(logic_family_std_proxy_t);
ret->m_low_thresh_V = setup_t::model_value(model, "IVL", 0.8);
ret->m_high_thresh_V = setup_t::model_value(model, "IVH", 2.0);
ret->m_low_V = setup_t::model_value(model, "OVL", 0.1);
ret->m_high_V = setup_t::model_value(model, "OVH", 4.0);
ret->m_R_low = setup_t::model_value(model, "ORL", 1.0);
ret->m_R_high = setup_t::model_value(model, "ORH", 130.0);
return ret;
}
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
// netlist_queue_t // netlist_queue_t
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
@ -1065,27 +1035,26 @@ ATTR_COLD param_t::param_t(const param_type_t atype)
{ {
} }
ATTR_COLD const pstring param_model_t::model_type() const ATTR_COLD const pstring param_model_t::model_type()
{ {
pstring tmp = this->Value(); if (m_map.size() == 0)
// .model 1N914 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon) netlist().setup().model_parse(this->Value(), m_map);
int p = tmp.find("("); return m_map["COREMODEL"];
int p1 = p;
while (--p >= 0 && tmp[p] != ' ')
;
return tmp.substr(p+1, p1-p-1).ucase();
} }
ATTR_COLD const pstring param_model_t::model_value_str(const pstring &entity, const pstring defval) const ATTR_COLD const pstring param_model_t::model_value_str(const pstring &entity)
{ {
return setup_t::model_value_str(this->Value(), entity, defval); if (m_map.size() == 0)
netlist().setup().model_parse(this->Value(), m_map);
return netlist().setup().model_value_str(m_map, entity);
} }
ATTR_COLD nl_double param_model_t::model_value(const pstring &entity, const nl_double defval) const ATTR_COLD nl_double param_model_t::model_value(const pstring &entity)
{ {
return setup_t::model_value(this->Value(), entity, defval); if (m_map.size() == 0)
netlist().setup().model_parse(this->Value(), m_map);
return netlist().setup().model_value(m_map, entity);
} }
} // namespace } // namespace

View File

@ -305,6 +305,12 @@ namespace netlist
class core_device_t; class core_device_t;
class param_model_t; class param_model_t;
// -----------------------------------------------------------------------------
// model_map_t
// -----------------------------------------------------------------------------
typedef phashmap_t<pstring, pstring> model_map_t;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// netlist_output_family_t // netlist_output_family_t
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
@ -324,8 +330,6 @@ namespace netlist
nl_double m_R_high; nl_double m_R_high;
bool m_is_static; bool m_is_static;
static logic_family_desc_t *from_model(const pstring &model);
}; };
class logic_family_t class logic_family_t
@ -946,6 +950,7 @@ namespace netlist
param_t::save_register(); param_t::save_register();
} }
virtual void changed() { }
C m_param; C m_param;
private: private:
}; };
@ -968,9 +973,16 @@ namespace netlist
ATTR_COLD param_model_t() : param_template_t<pstring, param_t::MODEL>() { } ATTR_COLD param_model_t() : param_template_t<pstring, param_t::MODEL>() { }
/* these should be cached! */ /* these should be cached! */
ATTR_COLD nl_double model_value(const pstring &entity, const nl_double defval = 0.0) const; ATTR_COLD nl_double model_value(const pstring &entity);
ATTR_COLD const pstring model_value_str(const pstring &entity, const pstring defval = "") const; ATTR_COLD const pstring model_value_str(const pstring &entity);
ATTR_COLD const pstring model_type() const; ATTR_COLD const pstring model_type();
protected:
void changed()
{
m_map.clear();
}
private:
model_map_t m_map;
}; };
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
@ -1284,6 +1296,7 @@ namespace netlist
if (m_param != param) if (m_param != param)
{ {
m_param = param; m_param = param;
changed();
device().update_param(); device().update_param();
} }
} }

View File

@ -196,7 +196,7 @@ void parser_t::net_truthtable_start()
else if (token.is(m_tok_TT_FAMILY)) else if (token.is(m_tok_TT_FAMILY))
{ {
require_token(m_tok_param_left); require_token(m_tok_param_left);
ttd->m_family = netlist::logic_family_desc_t::from_model(m_setup.get_model_str(get_string())); ttd->m_family = m_setup.family_from_model(get_string());
require_token(m_tok_param_right); require_token(m_tok_param_right);
} }
else else

View File

@ -137,9 +137,15 @@ device_t *setup_t::register_dev(const pstring &classname, const pstring &name)
} }
} }
void setup_t::register_model(const pstring &model) void setup_t::register_model(const pstring &model_in)
{ {
m_models.add(model); int pos = model_in.find(' ');
if (pos < 0)
netlist().error("Unable to parse model: %s", model_in.cstr());
pstring model = model_in.left(pos).trim().ucase();
pstring def = model_in.substr(pos + 1).trim();
if (!m_models.add(model, def))
netlist().error("Model already exists: %s", model_in.cstr());
} }
void setup_t::register_alias_nofqn(const pstring &alias, const pstring &out) void setup_t::register_alias_nofqn(const pstring &alias, const pstring &out)
@ -194,25 +200,6 @@ pstring setup_t::objtype_as_astr(object_t &in) const
return "Error"; return "Error";
} }
const pstring setup_t::get_model_str(const pstring val) const
{
if (val.startsWith(".model ") || val.find("(") >= 0)
{
return val;
}
else
{
pstring search = (".model " + val + " ").ucase();
for (std::size_t i=0; i < m_models.size(); i++)
{
if (m_models[i].ucase().startsWith(search))
return m_models[i];
}
netlist().error("Model %s not found\n", val.cstr());
return ""; /* please compiler */
}
}
void setup_t::register_object(device_t &dev, const pstring &name, object_t &obj) void setup_t::register_object(device_t &dev, const pstring &name, object_t &obj)
{ {
@ -276,7 +263,8 @@ void setup_t::register_object(device_t &dev, const pstring &name, object_t &obj)
} }
break; break;
case param_t::MODEL: case param_t::MODEL:
dynamic_cast<param_model_t &>(param).initial(get_model_str(val)); //dynamic_cast<param_model_t &>(param).initial(val);
dynamic_cast<param_model_t &>(param).initial(val);
break; break;
default: default:
netlist().error("Parameter is not supported %s : %s\n", name.cstr(), val.cstr()); netlist().error("Parameter is not supported %s : %s\n", name.cstr(), val.cstr());
@ -763,14 +751,10 @@ void setup_t::resolve_inputs()
core_terminal_t *t2 = find_terminal(t2s); core_terminal_t *t2 = find_terminal(t2s);
if (connect(*t1, *t2)) if (connect(*t1, *t2))
{
m_links.remove_at(li); m_links.remove_at(li);
}
else else
{
li++; li++;
} }
}
tries--; tries--;
} }
if (tries == 0) if (tries == 0)
@ -893,42 +877,112 @@ void setup_t::print_stats() const
} }
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
// Static // Model / family
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
const pstring setup_t::model_value_str(const pstring &model_str, const pstring &entity, const pstring defval) class logic_family_std_proxy_t : public logic_family_desc_t
{ {
pstring tmp = model_str; public:
// .model 1N914 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon) logic_family_std_proxy_t() { }
int p = tmp.ucase().find(entity.ucase() + "="); virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(logic_output_t *proxied) const
if (p>=0)
{ {
int pblank = tmp.find(" ", p); return palloc(devices::nld_d_to_a_proxy(proxied));
if (pblank < 0) pblank = tmp.len() + 1;
tmp = tmp.substr(p, pblank - p);
if (tmp.right(1) == ")")
tmp = tmp.left(tmp.len()-1);
int pequal = tmp.find("=", 0);
if (pequal < 0)
fatalerror_e("parameter %s misformat in model %s temp %s\n", entity.cstr(), model_str.cstr(), tmp.cstr());
tmp = tmp.substr(pequal+1);
return tmp;
} }
};
logic_family_desc_t *setup_t::family_from_model(const pstring &model)
{
model_map_t map;
model_parse(model, map);
if (setup_t::model_value_str(map, "TYPE") == "TTL")
return netlist_family_TTL;
if (setup_t::model_value_str(map, "TYPE") == "CD4XXX")
return netlist_family_CD4XXX;
logic_family_std_proxy_t *ret = palloc(logic_family_std_proxy_t);
ret->m_low_thresh_V = setup_t::model_value(map, "IVL");
ret->m_high_thresh_V = setup_t::model_value(map, "IVH");
ret->m_low_V = setup_t::model_value(map, "OVL");
ret->m_high_V = setup_t::model_value(map, "OVH");
ret->m_R_low = setup_t::model_value(map, "ORL");
ret->m_R_high = setup_t::model_value(map, "ORH");
return ret;
}
static pstring model_string(model_map_t &map)
{
pstring ret = map["COREMODEL"] + "(";
for (unsigned i=0; i<map.size(); i++)
ret = ret + map.key_at(i) + "=" + map.value_at(i) + " ";
return ret + ")";
}
void setup_t::model_parse(const pstring &model_in, model_map_t &map)
{
pstring model = model_in;
int pos = 0;
pstring key;
while (true)
{
pos = model.find("(");
if (pos >= 0) break;
key = model.ucase();
if (!m_models.contains(key))
netlist().error("Model %s not found\n", model.cstr());
model = m_models[key];
}
pstring xmodel = model.left(pos);
if (xmodel.equals("_"))
map["COREMODEL"] = key;
else else
{ {
//netlist().log("Entity %s not found in model %s\n", entity.cstr(), tmp.cstr()); if (m_models.contains(xmodel))
//printf("Entity %s not found in model %s\n", entity.cstr(), tmp.cstr()); model_parse(xmodel, map);
return defval; else
netlist().error("Model doesn't exist %s\n", xmodel.cstr());
}
pstring remainder=model.substr(pos+1).trim();
if (!remainder.endsWith(")"))
netlist().error("Model error %s\n", model.cstr());
remainder = remainder.left(remainder.len() - 1);
pstring_list_t pairs(remainder," ", true);
for (unsigned i=0; i<pairs.size(); i++)
{
int pose = pairs[i].find('=');
if (pose < 0)
netlist().error("Model error on pair %s\n", model.cstr());
map[pairs[i].left(pose).ucase()] = pairs[i].substr(pose+1);
} }
} }
nl_double setup_t::model_value(const pstring &model_str, const pstring &entity, const nl_double defval) const pstring setup_t::model_value_str(model_map_t &map, const pstring &entity)
{ {
pstring tmp = model_value_str(model_str, entity, "NOTFOUND"); pstring ret;
if (entity != entity.ucase())
netlist().error("model parameters should be uppercase:%s %s\n", entity.cstr(), model_string(map).cstr());
if (!map.contains(entity))
netlist().error("Entity %s not found in model %s\n", entity.cstr(), model_string(map).cstr());
else
ret = map[entity];
return ret;
}
nl_double setup_t::model_value(model_map_t &map, const pstring &entity)
{
pstring tmp = model_value_str(map, entity);
nl_double factor = NL_FCONST(1.0); nl_double factor = NL_FCONST(1.0);
if (tmp != "NOTFOUND")
{
char numfac = *(tmp.right(1).cstr()); char numfac = *(tmp.right(1).cstr());
switch (numfac) switch (numfac)
{ {
@ -948,12 +1002,6 @@ nl_double setup_t::model_value(const pstring &model_str, const pstring &entity,
tmp = tmp.left(tmp.len() - 1); tmp = tmp.left(tmp.len() - 1);
return tmp.as_double() * factor; return tmp.as_double() * factor;
} }
else
{
//netlist().log("Entity %s not found in model %s\n", entity.cstr(), tmp.cstr());
return defval;
}
}
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
// Sources // Sources

View File

@ -143,7 +143,7 @@ namespace netlist
void register_lib_entry(const pstring &name); void register_lib_entry(const pstring &name);
void register_model(const pstring &model); void register_model(const pstring &model_in);
void register_alias(const pstring &alias, const pstring &out); void register_alias(const pstring &alias, const pstring &out);
void register_dippins_arr(const pstring &terms); void register_dippins_arr(const pstring &terms);
@ -159,8 +159,6 @@ namespace netlist
void register_frontier(const pstring attach, const double r_IN, const double r_OUT); void register_frontier(const pstring attach, const double r_IN, const double r_OUT);
void remove_connections(const pstring attach); void remove_connections(const pstring attach);
const pstring get_model_str(const pstring val) const;
void register_object(device_t &dev, const pstring &name, object_t &obj); void register_object(device_t &dev, const pstring &name, object_t &obj);
bool connect(core_terminal_t &t1, core_terminal_t &t2); bool connect(core_terminal_t &t1, core_terminal_t &t2);
@ -192,11 +190,13 @@ namespace netlist
void print_stats() const; void print_stats() const;
/* static support functions */ /* model / family related */
static const pstring model_value_str(const pstring &model_str, const pstring &entity, const pstring defval); logic_family_desc_t *family_from_model(const pstring &model);
static nl_double model_value(const pstring &model_str, const pstring &entity, const nl_double defval); const pstring model_value_str(model_map_t &map, const pstring &entity);
nl_double model_value(model_map_t &map, const pstring &entity);
void model_parse(const pstring &model, model_map_t &map);
protected: protected:
private: private:
@ -224,7 +224,7 @@ namespace netlist
factory_list_t *m_factory; factory_list_t *m_factory;
plist_t<pstring> m_models; phashmap_t<pstring, pstring> m_models;
int m_proxy_cnt; int m_proxy_cnt;

View File

@ -799,7 +799,7 @@ public:
V& value_at(const unsigned pos) { return m_values[pos].m_value; } V& value_at(const unsigned pos) { return m_values[pos].m_value; }
const V& value_at(const unsigned pos) const { return m_values[pos].m_value; } const V& value_at(const unsigned pos) const { return m_values[pos].m_value; }
V& key_at(const unsigned pos) const { return m_values[pos].m_key; } V& key_at(const unsigned pos) { return m_values[pos].m_key; }
private: private:
int get_idx(const K &key) const int get_idx(const K &key) const

View File

@ -81,6 +81,9 @@ public:
bool startsWith(const pstring &arg) const { return (pcmp(cstr(), arg.cstr(), arg.len()) == 0); } bool startsWith(const pstring &arg) const { return (pcmp(cstr(), arg.cstr(), arg.len()) == 0); }
bool startsWith(const char *arg) const; bool startsWith(const char *arg) const;
bool endsWith(const pstring &arg) const { return (this->right(arg.len()) == arg); }
bool endsWith(const char *arg) const { return endsWith(pstring(arg)); }
pstring replace(const pstring &search, const pstring &replace) const; pstring replace(const pstring &search, const pstring &replace) const;
// these return nstring ... // these return nstring ...

View File

@ -452,7 +452,7 @@ NETLIST_START(kidniki_interface)
ALIAS(I_SINH0, SINH_DUMMY.2) ALIAS(I_SINH0, SINH_DUMMY.2)
#endif #endif
NET_MODEL(".model AY8910PORT FAMILY(OVL=0.05 OVH=4.95 ORL=100.0 ORH=0.5k)") NET_MODEL("AY8910PORT FAMILY(OVL=0.05 OVH=4.95 ORL=100.0 ORH=0.5k)")
LOGIC_INPUT(I_SD0, 1, "AY8910PORT") LOGIC_INPUT(I_SD0, 1, "AY8910PORT")
//CLOCK(I_SD0, 5) //CLOCK(I_SD0, 5)

View File

@ -473,7 +473,7 @@ NETLIST_START(kidniki_lib)
TT_HEAD(" A | Q ") TT_HEAD(" A | Q ")
TT_LINE(" 0 | 1 |100") TT_LINE(" 0 | 1 |100")
TT_LINE(" 1 | 0 |100") TT_LINE(" 1 | 0 |100")
TT_FAMILY(".model MC14584B FAMILY(IVL=2.1 IVH=2.7 OVL=0.05 OVH=4.95 ORL=10.0 ORH=10.0)") TT_FAMILY("MC14584B FAMILY(IVL=2.1 IVH=2.7 OVL=0.05 OVH=4.95 ORL=10.0 ORH=10.0)")
TRUTHTABLE_END() TRUTHTABLE_END()
LOCAL_LIB_ENTRY(LM324_DIP) LOCAL_LIB_ENTRY(LM324_DIP)