diff options
author | couriersud <couriersud@arcor.de> | 2015-07-08 00:37:42 +0200 |
---|---|---|
committer | couriersud <couriersud@arcor.de> | 2015-07-08 00:37:59 +0200 |
commit | 78917506f2af7ed2954616b906b791cd5a1b505e (patch) | |
tree | 9f17cf52c6451ba1b517a54feeb26352fd974da1 /nl_examples | |
parent | b58f7812029d9706c8b0e10fab9c14b53da0bd83 (diff) |
Document progress on congo bongo. Gorilla sound now works. Performance
up from 30% to 170%. Use
./nltool -c run -f nl_examples/congoBongo.c -t 2
to test.
Minor enhancements and bugfixes.
[Couriersud]
Diffstat (limited to 'nl_examples')
-rw-r--r-- | nl_examples/congoBongo.c | 175 |
1 files changed, 110 insertions, 65 deletions
diff --git a/nl_examples/congoBongo.c b/nl_examples/congoBongo.c index ecb65d8679e..510f711b7c5 100644 --- a/nl_examples/congoBongo.c +++ b/nl_examples/congoBongo.c @@ -48,16 +48,27 @@ NETLIST_START(dummy) // IGNORED O_AUDIO0: O_AUDIO0 64 0 // .END - SOLVER(Solver, 12000) + SOLVER(Solver, 24000) + PARAM(Solver.ACCURACY, 1e-8) + PARAM(Solver.NR_LOOPS, 90) + PARAM(Solver.SOR_FACTOR, 0.00001) + PARAM(Solver.GS_LOOPS, 1) + //PARAM(Solver.GS_THRESHOLD, 99) + PARAM(Solver.ITERATIVE, "SOR") LOCAL_SOURCE(congob_lib) INCLUDE(congob_lib) TTL_INPUT(I_BASS_DRUM0, 0) + //CLOCK(I_BASS_DRUM0, 2) TTL_INPUT(I_CONGA_H0, 0) + //CLOCK(I_CONGA_H0, 2) TTL_INPUT(I_CONGA_L0, 0) - TTL_INPUT(I_GORILLA0, 0) + //CLOCK(I_CONGA_L0, 2) + //TTL_INPUT(I_GORILLA0, 0) + CLOCK(I_GORILLA0, 2) TTL_INPUT(I_RIM0, 0) + //CLOCK(I_RIM0, 2) ALIAS(I_V0.Q, GND.Q) @@ -65,11 +76,34 @@ NETLIST_START(dummy) ANALOG_INPUT(I_V5, 5) ANALOG_INPUT(I_V6, 6) + /* temporary output stage */ + RES(RO, RES_K(50)) + CAP(CO, CAP_U(10)) + + NET_C(R94.1, CO.1) + NET_C(CO.2, RO.1) + 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)") + INCLUDE(CongoBongo_schematics) + + OPTIMIZE_FRONTIER(C51.1, RES_K(50), 50) + OPTIMIZE_FRONTIER(R77.2, RES_K(20), 50) + + OPTIMIZE_FRONTIER(C25.2, RES_K(240), 50) + OPTIMIZE_FRONTIER(C29.2, RES_K(390), 50) + OPTIMIZE_FRONTIER(C37.2, RES_K(390), 50) + OPTIMIZE_FRONTIER(C44.2, RES_K(200), 50) + + OPTIMIZE_FRONTIER(R90.2, RES_K(100), 50) + OPTIMIZE_FRONTIER(R92.2, RES_K(15), 50) + +NETLIST_END() + +NETLIST_START(CongoBongo_schematics) CAP(C20, CAP_N(68)) CAP(C21, CAP_U(1)) CAP(C22, CAP_U(47)) @@ -95,11 +129,11 @@ NETLIST_START(dummy) CAP(C42, CAP_N(6.8)) CAP(C43, CAP_N(47)) CAP(C44, CAP_U(1)) - //CAP(C45, CAP_U(33)) - //CAP(C46, CAP_N(100)) - CAP(C47, CAP_U(470)) + CAP(C45, CAP_U(33)) + CAP(C46, CAP_N(100)) + CAP(C47, CAP_P(470)) CAP(C48, CAP_N(1.5)) - CAP(C49, CAP_U(220)) + CAP(C49, CAP_P(220)) CAP(C50, CAP_N(3.9)) CAP(C51, CAP_U(1)) CAP(C52, CAP_U(1)) @@ -110,8 +144,9 @@ NETLIST_START(dummy) CAP(C57, CAP_N(47)) CAP(C58, CAP_N(22)) CAP(C59, CAP_U(10)) - //CAP(C60, CAP_N(22)) + CAP(C60, CAP_N(22)) CAP(C62, CAP_N(22)) + CAP(C61, CAP_U(1)) DIODE(D1, "1S2075") DIODE(D2, "1S2075") DIODE(D3, "1S2075") @@ -194,6 +229,7 @@ NETLIST_START(dummy) RES(R91, RES_K(10)) RES(R92, RES_K(15)) RES(R93, RES_K(15)) + RES(R94, RES_K(51)) MB3614_DIP(XU13) G501534_DIP(XU15) MB3614_DIP(XU16) @@ -202,19 +238,19 @@ NETLIST_START(dummy) CD4538_DIP(XU19) MM5837_DIP(XU20) DM7416_DIP(XU6) - NET_C(D1.K, C21.2, R23.1) - NET_C(D1.A, C20.1, R22.1) + NET_C(D1.A, C21.2, R23.1) + NET_C(D1.K, C20.1, R22.1) NET_C(XU13.1, C37.2, C36.1, R48.1) NET_C(XU13.2, C35.2, R48.2) NET_C(XU13.3, R44.1, R46.2, R45.1) - NET_C(XU13.4, R27.1, R21.1, R37.1, R31.1, R47.1, R41.1, R57.1, R51.1, /*C46.2, C45.2,*/ XU17.4, R80.2, XU16.4, XU20.4, XU15.12, I_V12.Q) + NET_C(XU13.4, R27.1, R21.1, R37.1, R31.1, R47.1, R41.1, R57.1, R51.1, C46.2, C45.2, XU17.4, R80.2, XU16.4, XU20.4, XU15.12, I_V12.Q) NET_C(XU13.5, R54.1, R56.2, R55.1) NET_C(XU13.6, C41.2, R58.2, R60.2) NET_C(XU13.7, C44.2, C42.1, R58.1, R61.1) NET_C(XU13.8, C29.2, C31.1, R38.1) NET_C(XU13.9, C30.2, R38.2) NET_C(XU13.10, R34.1, R36.2, R35.1) - NET_C(XU13.11, C22.2, R29.2, R25.2, R23.2, R22.2, XU6.1, XU6.3, XU6.7, C28.2, R39.2, R35.2, R33.2, R32.2, C34.2, R49.2, R45.2, R43.2, R42.2, C40.2, R59.2, R55.2, R53.2, R52.2, C43.2, R69.1, R64.1, C49.2, C48.2, C47.2, /*C46.1, C45.1,*/ XU17.11, XU19.1, XU19.4, XU19.8, XU19.12, XU19.15, R81.1, C56.2, C55.2, C53.2, C52.2, XU18.1, XU18.2, XU18.7, XU18.12, XU18.13, C54.2, XU16.11, R84.1, R88.1, Q2.E, C58.2, /* C60.2, */ XU20.1, XU20.2, XU15.4, I_V0.Q) + NET_C(XU13.11, C22.2, R29.2, R25.2, R23.2, R22.2, XU6.1, XU6.3, XU6.7, C28.2, R39.2, R35.2, R33.2, R32.2, C34.2, R49.2, R45.2, R43.2, R42.2, C40.2, R59.2, R55.2, R53.2, R52.2, C43.2, R69.1, R64.1, C49.2, C48.2, C47.2, C46.1, C45.1, XU17.11, XU19.1, XU19.4, XU19.8, XU19.12, XU19.15, R81.1, C56.2, C55.2, C53.2, C52.2, XU18.1, XU18.2, XU18.7, XU18.12, XU18.13, C54.2, XU16.11, R84.1, R88.1, Q2.E, C58.2, C60.2, XU20.1, XU20.2, XU15.4, I_V0.Q) NET_C(XU13.12, R24.1, R26.2, R25.1) NET_C(XU13.13, C23.2, R28.2) NET_C(XU13.14, C25.2, C24.1, R28.1) @@ -223,7 +259,7 @@ NETLIST_START(dummy) NET_C(C21.1, R24.2) NET_C(C20.2, R21.2, XU6.8) NET_C(C22.1, R27.2, R26.1) - NET_C(R30.1, R40.1, R50.1, R62.1, XU15.3) + NET_C(R30.1, R40.1, R50.1, R62.1, R94.1) //NET_C(XU6.2, XU6.4, XU19.7, XU18.3, XU18.11, XU15.5, XU15.6, XU15.7, XU15.8, XU15.9, XU15.10, XU15.11, XU15.14) NET_C(XU6.5, I_CONGA_L0.Q) NET_C(XU6.6, C26.2, R31.2) @@ -232,27 +268,27 @@ NETLIST_START(dummy) NET_C(XU6.11, I_RIM0.Q) NET_C(XU6.12, C32.2, R41.2) NET_C(XU6.13, I_CONGA_H0.Q) - NET_C(XU6.14, D5.A, XU19.16, R70.2, R76.2, R71.2, XU18.14, I_V5.Q) - NET_C(D2.K, C27.2, R33.1) - NET_C(D2.A, C26.1, R32.1) + NET_C(XU6.14, D5.K, XU19.16, R70.2, R76.2, R71.2, XU18.14, I_V5.Q) + NET_C(D2.A, C27.2, R33.1) + NET_C(D2.K, C26.1, R32.1) NET_C(C29.1, R40.2) NET_C(C31.2, C30.1, R39.1) NET_C(C27.1, R34.2) NET_C(C28.1, R37.2, R36.1) - NET_C(D3.K, C33.2, R43.1) - NET_C(D3.A, C32.1, R42.1) + NET_C(D3.A, C33.2, R43.1) + NET_C(D3.K, C32.1, R42.1) NET_C(C37.1, R50.2) NET_C(C36.2, C35.1, R49.1) NET_C(C33.1, R44.2) NET_C(C34.1, R47.2, R46.1) - NET_C(D4.K, C39.2, R53.1) - NET_C(D4.A, C38.1, R52.1) + NET_C(D4.A, C39.2, R53.1) + NET_C(D4.K, C38.1, R52.1) NET_C(C44.1, R62.2) NET_C(C42.2, C41.1, R59.1) NET_C(C39.1, R54.2) NET_C(C40.1, R57.2, R56.1) NET_C(R60.1, R61.2, C43.1) - NET_C(R63.1, R64.2, C47.1, D5.K, XU18.5, XU18.6) + NET_C(R63.1, R64.2, C47.1, D5.A, XU18.5, XU18.6) NET_C(R63.2, XU20.3) NET_C(R65.1, R66.2, C48.1) NET_C(R65.2, XU18.4) @@ -274,26 +310,28 @@ NETLIST_START(dummy) NET_C(XU19.5, XU19.11, I_GORILLA0.Q) NET_C(XU19.6, XU18.9) NET_C(XU19.9, XU18.8) - NET_C(XU19.10, D7.K, R75.2) + NET_C(XU19.10, D7.A, R75.2) NET_C(XU19.14, R71.1, C53.1) - NET_C(R72.2, D6.K, XU18.10) - NET_C(R73.2, D6.A) - NET_C(D7.A, R74.2) + NET_C(R72.2, D6.A, XU18.10) + NET_C(R73.2, D6.K) + NET_C(D7.K, R74.2) NET_C(R74.1, R75.1, C54.1, XU16.10) NET_C(XU16.1, R91.1, R92.2) NET_C(XU16.2, R90.1, R91.2) NET_C(XU16.3, R86.2, I_V6.Q) NET_C(XU16.5, R86.1, R87.2) - NET_C(XU16.7, R87.1, D8.K, R90.2) + NET_C(XU16.7, R87.1, D8.A, R90.2) NET_C(XU16.8, XU16.9, XU15.13) NET_C(XU16.12, R93.1, C58.1) NET_C(XU16.13, XU16.14, C57.1, C59.2) NET_C(R85.1, Q2.C) - NET_C(R89.1, D8.A) + NET_C(R89.1, D8.K) NET_C(R89.2, R88.2, Q2.B) NET_C(R92.1, C57.2, R93.2) NET_C(C59.1, XU15.1) - //NET_C(C60.1, XU15.2) + NET_C(C60.1, XU15.2) + NET_C(XU15.3, C61.2) + NET_C(C61.1, R94.2) NETLIST_END() NETLIST_START(opamp) @@ -302,7 +340,18 @@ NETLIST_START(opamp) * * http://www.ecircuitcenter.com/Circuits/opmodel1/opmodel1.htm * - * Bandwidth 1Mhz + * MB3614 Unit Gain frequency is about 500 kHz and the first pole frequency + * about 5 Hz. We have to keep the Unity Gain Frequency below our sampling + * frequency of 24 Khz. + * + * Simple Opamp Model Calculation + * + * First Pole Frequency 5 Hz + * Unity Gain Frequency 11,000 Hz + * RP 100,000 Ohm + * DC Gain / Aol 2200 + * CP 0.318 uF + * KG 0.022 * */ @@ -312,52 +361,44 @@ NETLIST_START(opamp) ALIAS(MINUS, G1.IN) // Negative input ALIAS(OUT, EBUF.OP) // Opamp output ... - ALIAS(GND, EBUF.ON) // GND terminal - ALIAS(VCC, DUMMY.I) // VCC terminal - DUMMY_INPUT(DUMMY) + AFUNC(fUH, 1, "A0 1.2 -") + AFUNC(fUL, 1, "A0 1.2 +") + + ALIAS(VCC, fUH.A0) // VCC terminal + ALIAS(GND, fUL.A0) // VCC terminal + + AFUNC(fVREF, 2, "A0 A1 + 0.5 *") + NET_C(fUH.A0, fVREF.A0) + NET_C(fUL.A0, fVREF.A1) + NET_C(EBUF.ON, fVREF) /* The opamp model */ VCCS(G1) PARAM(G1.RI, RES_K(1000)) -#if 1 - PARAM(G1.G, 100) // typical OP-AMP amplification 100 * 1000 = 100000 - RES(RP1, 1000) - CAP(CP1, 1.59e-5) // <== change to 1.59e-3 for 10Khz bandwidth -#else - PARAM(G1.G, 1) // typical OP-AMP amplification 100 * 1000 = 100000 - RES(RP1, 100000) - CAP(CP1, 1.59e-7) // <== change to 1.59e-3 for 10Khz bandwidth -#endif + + PARAM(G1.G, 0.0022) + RES(RP1, 1e6) + CAP(CP1, 0.0318e-6) + VCVS(EBUF) PARAM(EBUF.RO, 50) PARAM(EBUF.G, 1) -// PARAM(EBUF.RI, 1e20) -// NET_C(EBUF.ON, GND) - - NET_C(G1.ON, GND) - NET_C(RP1.2, GND) - NET_C(CP1.2, GND) - NET_C(EBUF.IN, GND) + NET_C(G1.ON, fVREF) + NET_C(RP1.2, fVREF) + NET_C(CP1.2, fVREF) + NET_C(EBUF.IN, fVREF) NET_C(RP1.1, G1.OP) NET_C(CP1.1, RP1.1) - DIODE(DP,"1N914") - DIODE(DN,"1N914") + DIODE(DP,".model tt D(IS=1e-15 N=1)") + DIODE(DN,".model tt D(IS=1e-15 N=1)") - NET_C(DP.K, VCC) -#if 1 + NET_C(DP.K, fUH.Q) + NET_C(fUL.Q, DN.A) NET_C(DP.A, DN.K, RP1.1) -#else - RES(RDP, 1000) - RES(RDN, 1000) - NET_C(RDP.1, DP.A) - NET_C(RDN.1, DN.K) - NET_C(RDP.2, RDN.2, RP1.1) -#endif - NET_C(DN.A, GND) NET_C(EBUF.IP, RP1.1) @@ -449,7 +490,7 @@ NETLIST_START(CD4001_DIP) NETLIST_END() NETLIST_START(G501534_DIP) - FUNCTION(f, 2) + AFUNC(f, 2, "A0 A1 0.2 * *") /* * 12: VCC @@ -462,13 +503,17 @@ NETLIST_START(G501534_DIP) DUMMY_INPUT(DU1) DUMMY_INPUT(DU2) + DUMMY_INPUT(DU3) + + RES(RO, 1000) ALIAS(12, DU1.I) ALIAS(4, DU2.I) - ALIAS(2, DU2.I) - ALIAS(1, f.I0) - ALIAS(13, f.I1) - ALIAS(3, f.Q) + ALIAS(2, DU3.I) + ALIAS(1, f.A0) + ALIAS(13, f.A1) + NET_C(f.Q, RO.1) + ALIAS(3, RO.2) NETLIST_END() |