mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
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:
parent
907a751fc4
commit
c2a192ec92
@ -70,16 +70,18 @@ NETLIST_START(dummy)
|
||||
NET_C(RO.2, GND)
|
||||
|
||||
// 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(".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("1S2075 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)")
|
||||
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)
|
||||
|
||||
/* 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.
|
||||
*/
|
||||
PARAM(XU16.B.MODEL, "MB3614_SLOW")
|
||||
PARAM(XU17.C.MODEL, "MB3614_SLOW")
|
||||
PARAM(XU16.B.MODEL, "MB3614(UGF=11k)")
|
||||
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(R77.2, RES_K(20), 50)
|
||||
@ -390,8 +392,8 @@ NETLIST_START(opamp_mod)
|
||||
NET_C(RP1.1, G1.OP)
|
||||
NET_C(CP1.1, RP1.1)
|
||||
|
||||
DIODE(DP,".model tt D(IS=1e-15 N=1)")
|
||||
DIODE(DN,".model tt D(IS=1e-15 N=1)")
|
||||
DIODE(DP,"D(IS=1e-15 N=1)")
|
||||
DIODE(DN,"D(IS=1e-15 N=1)")
|
||||
#if 1
|
||||
NET_C(DP.K, fUH.Q)
|
||||
NET_C(fUL.Q, DN.A)
|
||||
|
@ -20,8 +20,8 @@ NETLIST_START(dummy)
|
||||
PARAM(Solver.LTE, 1e-1)
|
||||
#endif
|
||||
//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(".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("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("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)
|
||||
|
||||
|
@ -24,7 +24,7 @@ NETLIST_START(msx)
|
||||
ANALOG_INPUT(SOUND, 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(R23, RES_K(5))
|
||||
|
@ -118,9 +118,9 @@ NETLIB_UPDATE(QBJT_switch)
|
||||
|
||||
NETLIB_UPDATE_PARAM(QBJT_switch)
|
||||
{
|
||||
nl_double IS = m_model.model_value("IS", 1e-15);
|
||||
nl_double BF = m_model.model_value("BF", 100);
|
||||
nl_double NF = m_model.model_value("NF", 1);
|
||||
nl_double IS = m_model.model_value("IS");
|
||||
nl_double BF = m_model.model_value("BF");
|
||||
nl_double NF = m_model.model_value("NF");
|
||||
//nl_double VJE = m_model.dValue("VJE", 0.75);
|
||||
|
||||
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)
|
||||
{
|
||||
nl_double IS = m_model.model_value("IS", 1e-15);
|
||||
nl_double BF = m_model.model_value("BF", 100);
|
||||
nl_double NF = m_model.model_value("NF", 1);
|
||||
nl_double BR = m_model.model_value("BR", 1);
|
||||
nl_double NR = m_model.model_value("NR", 1);
|
||||
nl_double IS = m_model.model_value("IS");
|
||||
nl_double BF = m_model.model_value("BF");
|
||||
nl_double NF = m_model.model_value("NF");
|
||||
nl_double BR = m_model.model_value("BR");
|
||||
nl_double NR = m_model.model_value("NR");
|
||||
//nl_double VJE = m_model.dValue("VJE", 0.75);
|
||||
|
||||
set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP);
|
||||
|
@ -121,8 +121,8 @@ NETLIB_RESET(OPAMP)
|
||||
m_EBUF.m_G.setTo(1.0);
|
||||
m_G1.m_RI.setTo(m_model.model_value("RI"));
|
||||
m_EBUF.m_RO.setTo(m_model.model_value("RO"));
|
||||
m_DP.m_model.setTo(".model tt D(IS=1e-15 N=1)");
|
||||
m_DN.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("D(IS=1e-15 N=1)");
|
||||
|
||||
double CP = m_model.model_value("DAB") / m_model.model_value("SLEW");
|
||||
double RP = 0.5 / 3.1459 / CP / m_model.model_value("FPF");
|
||||
|
@ -273,8 +273,8 @@ NETLIB_START(D)
|
||||
|
||||
NETLIB_UPDATE_PARAM(D)
|
||||
{
|
||||
nl_double Is = m_model.model_value("Is", 1e-15);
|
||||
nl_double n = m_model.model_value("N", 1);
|
||||
nl_double Is = m_model.model_value("IS");
|
||||
nl_double n = m_model.model_value("N");
|
||||
|
||||
m_D.set_param(Is, n, netlist().gmin());
|
||||
}
|
||||
|
@ -13,37 +13,45 @@
|
||||
#include "../nl_factory.h"
|
||||
|
||||
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(".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(".model 1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)")
|
||||
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(".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(".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(".model LedWhite D(Is=0.27n Rs=5.65 N=6.79 Cjo=42p Iave=30m Vpk=5 type=LED)")
|
||||
NET_MODEL("D _(IS=1e-15 N=1)")
|
||||
|
||||
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("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("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("1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)")
|
||||
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("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_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(".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("NPN _(IS=1e-15 BF=100 NF=1 BR=1 NR=1)")
|
||||
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(".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("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("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
|
||||
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
|
||||
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(".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("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("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(".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("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("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("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_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(".model CD4XXX FAMILY(TYPE=CD4XXX)")
|
||||
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("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()
|
||||
|
||||
|
||||
|
@ -134,8 +134,8 @@ NETLIB_UPDATE(extclock)
|
||||
NETLIB_START(logic_input)
|
||||
{
|
||||
/* make sure we get the family first */
|
||||
register_param("FAMILY", m_FAMILY, ".model FAMILY(TYPE=TTL)");
|
||||
set_logic_family(logic_family_desc_t::from_model(m_FAMILY.Value()));
|
||||
register_param("FAMILY", m_FAMILY, "FAMILY(TYPE=TTL)");
|
||||
set_logic_family(netlist().setup().family_from_model(m_FAMILY.Value()));
|
||||
|
||||
register_output("Q", m_Q);
|
||||
register_param("IN", m_IN, 0);
|
||||
|
@ -36,7 +36,7 @@
|
||||
ttd->m_desc.add(_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() \
|
||||
setup.factory().register_device(ttd); \
|
||||
|
@ -39,8 +39,8 @@ NETLIST_END()
|
||||
NETLIST_START(OPAMP_lib)
|
||||
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(".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 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_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)
|
||||
|
||||
|
||||
|
@ -87,36 +87,6 @@ public:
|
||||
logic_family_desc_t *netlist_family_TTL = palloc(logic_family_ttl_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
|
||||
// ----------------------------------------------------------------------------------------
|
||||
@ -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();
|
||||
// .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)
|
||||
int p = tmp.find("(");
|
||||
int p1 = p;
|
||||
while (--p >= 0 && tmp[p] != ' ')
|
||||
;
|
||||
|
||||
return tmp.substr(p+1, p1-p-1).ucase();
|
||||
if (m_map.size() == 0)
|
||||
netlist().setup().model_parse(this->Value(), m_map);
|
||||
return m_map["COREMODEL"];
|
||||
}
|
||||
|
||||
|
||||
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
|
||||
|
@ -305,6 +305,12 @@ namespace netlist
|
||||
class core_device_t;
|
||||
class param_model_t;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// model_map_t
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
typedef phashmap_t<pstring, pstring> model_map_t;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// netlist_output_family_t
|
||||
// -----------------------------------------------------------------------------
|
||||
@ -324,8 +330,6 @@ namespace netlist
|
||||
nl_double m_R_high;
|
||||
|
||||
bool m_is_static;
|
||||
|
||||
static logic_family_desc_t *from_model(const pstring &model);
|
||||
};
|
||||
|
||||
class logic_family_t
|
||||
@ -946,6 +950,7 @@ namespace netlist
|
||||
param_t::save_register();
|
||||
}
|
||||
|
||||
virtual void changed() { }
|
||||
C m_param;
|
||||
private:
|
||||
};
|
||||
@ -968,9 +973,16 @@ namespace netlist
|
||||
ATTR_COLD param_model_t() : param_template_t<pstring, param_t::MODEL>() { }
|
||||
|
||||
/* these should be cached! */
|
||||
ATTR_COLD nl_double model_value(const pstring &entity, const nl_double defval = 0.0) const;
|
||||
ATTR_COLD const pstring model_value_str(const pstring &entity, const pstring defval = "") const;
|
||||
ATTR_COLD const pstring model_type() const;
|
||||
ATTR_COLD nl_double model_value(const pstring &entity);
|
||||
ATTR_COLD const pstring model_value_str(const pstring &entity);
|
||||
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)
|
||||
{
|
||||
m_param = param;
|
||||
changed();
|
||||
device().update_param();
|
||||
}
|
||||
}
|
||||
|
@ -196,7 +196,7 @@ void parser_t::net_truthtable_start()
|
||||
else if (token.is(m_tok_TT_FAMILY))
|
||||
{
|
||||
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);
|
||||
}
|
||||
else
|
||||
|
@ -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)
|
||||
@ -194,25 +200,6 @@ pstring setup_t::objtype_as_astr(object_t &in) const
|
||||
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)
|
||||
{
|
||||
@ -276,7 +263,8 @@ void setup_t::register_object(device_t &dev, const pstring &name, object_t &obj)
|
||||
}
|
||||
break;
|
||||
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;
|
||||
default:
|
||||
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);
|
||||
|
||||
if (connect(*t1, *t2))
|
||||
{
|
||||
m_links.remove_at(li);
|
||||
}
|
||||
else
|
||||
{
|
||||
li++;
|
||||
}
|
||||
}
|
||||
tries--;
|
||||
}
|
||||
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;
|
||||
// .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)
|
||||
int p = tmp.ucase().find(entity.ucase() + "=");
|
||||
if (p>=0)
|
||||
public:
|
||||
logic_family_std_proxy_t() { }
|
||||
virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(logic_output_t *proxied) const
|
||||
{
|
||||
int pblank = tmp.find(" ", p);
|
||||
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;
|
||||
return palloc(devices::nld_d_to_a_proxy(proxied));
|
||||
}
|
||||
};
|
||||
|
||||
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
|
||||
{
|
||||
//netlist().log("Entity %s not found in model %s\n", entity.cstr(), tmp.cstr());
|
||||
//printf("Entity %s not found in model %s\n", entity.cstr(), tmp.cstr());
|
||||
return defval;
|
||||
if (m_models.contains(xmodel))
|
||||
model_parse(xmodel, map);
|
||||
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);
|
||||
if (tmp != "NOTFOUND")
|
||||
{
|
||||
char numfac = *(tmp.right(1).cstr());
|
||||
switch (numfac)
|
||||
{
|
||||
@ -947,12 +1001,6 @@ nl_double setup_t::model_value(const pstring &model_str, const pstring &entity,
|
||||
if (factor != NL_FCONST(1.0))
|
||||
tmp = tmp.left(tmp.len() - 1);
|
||||
return tmp.as_double() * factor;
|
||||
}
|
||||
else
|
||||
{
|
||||
//netlist().log("Entity %s not found in model %s\n", entity.cstr(), tmp.cstr());
|
||||
return defval;
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------
|
||||
|
@ -143,7 +143,7 @@ namespace netlist
|
||||
|
||||
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_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 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);
|
||||
bool connect(core_terminal_t &t1, core_terminal_t &t2);
|
||||
|
||||
@ -192,11 +190,13 @@ namespace netlist
|
||||
|
||||
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);
|
||||
static nl_double model_value(const pstring &model_str, const pstring &entity, const nl_double defval);
|
||||
logic_family_desc_t *family_from_model(const pstring &model);
|
||||
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:
|
||||
|
||||
private:
|
||||
@ -224,7 +224,7 @@ namespace netlist
|
||||
|
||||
factory_list_t *m_factory;
|
||||
|
||||
plist_t<pstring> m_models;
|
||||
phashmap_t<pstring, pstring> m_models;
|
||||
|
||||
int m_proxy_cnt;
|
||||
|
||||
|
@ -799,7 +799,7 @@ public:
|
||||
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; }
|
||||
|
||||
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:
|
||||
|
||||
int get_idx(const K &key) const
|
||||
|
@ -81,6 +81,9 @@ public:
|
||||
bool startsWith(const pstring &arg) const { return (pcmp(cstr(), arg.cstr(), arg.len()) == 0); }
|
||||
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;
|
||||
|
||||
// these return nstring ...
|
||||
|
@ -452,7 +452,7 @@ NETLIST_START(kidniki_interface)
|
||||
ALIAS(I_SINH0, SINH_DUMMY.2)
|
||||
#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")
|
||||
//CLOCK(I_SD0, 5)
|
||||
|
@ -473,7 +473,7 @@ NETLIST_START(kidniki_lib)
|
||||
TT_HEAD(" A | Q ")
|
||||
TT_LINE(" 0 | 1 |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()
|
||||
|
||||
LOCAL_LIB_ENTRY(LM324_DIP)
|
||||
|
Loading…
Reference in New Issue
Block a user