diff options
-rw-r--r-- | src/lib/netlist/analog/nld_opamps.cpp | 16 | ||||
-rw-r--r-- | src/lib/netlist/macro/nlm_opamp.cpp | 120 |
2 files changed, 120 insertions, 16 deletions
diff --git a/src/lib/netlist/analog/nld_opamps.cpp b/src/lib/netlist/analog/nld_opamps.cpp index 57d6f6a76f3..d587f691e56 100644 --- a/src/lib/netlist/analog/nld_opamps.cpp +++ b/src/lib/netlist/analog/nld_opamps.cpp @@ -48,6 +48,22 @@ namespace netlist * 2; opamp with first pole * 3: opamp with first pole + output limit * 4: opamp with input stage, first pole + output limit + * + * Type 1 parameters: + * FPF = frequency of first pole in Hz (ony used for open-loop gain) + * UGF = unity gain frequency in Hz (only used for open-loop gain) + * RI = input resistance in Ohms + * RO = output resistance in Ohms + * + * Type 3 parameters: + * VLH = high supply rail minus high output swing in V + * VLL = low output swing minus low supply rail in V + * FPF = frequency of first pole in Hz + * UGF = unity gain frequency (transition frequency) in Hz + * SLEW = unity gain slew rate in V/s + * RI = input resistance in Ohms + * RO = output resistance in Ohms + * DAB = quiescent supply current in A */ /* .model abc OPAMP(VLH=2.0 VLL=0.2 FPF=5 UGF=10k SLEW=0.6u RI=1000k RO=50 DAB=0.002) diff --git a/src/lib/netlist/macro/nlm_opamp.cpp b/src/lib/netlist/macro/nlm_opamp.cpp index e7571dfd910..38f47d5a68e 100644 --- a/src/lib/netlist/macro/nlm_opamp.cpp +++ b/src/lib/netlist/macro/nlm_opamp.cpp @@ -6,18 +6,18 @@ #include "devices/nld_system.h" /* - * Generic layout with 4 opamps, VCC on pint 4 and GND on pin 11 + * Generic layout with 4 opamps, VCC on pin 4 and GND on pin 11 */ static NETLIST_START(opamp_layout_4_4_11) - DIPPINS( /* +--------------+ */ - A.OUT, /* |1 ++ 14| */ D.OUT, - A.MINUS, /* |2 13| */ D.MINUS, - A.PLUS, /* |3 12| */ D.PLUS, - A.VCC, /* |4 11| */ A.GND, - B.PLUS, /* |5 10| */ C.PLUS, - B.MINUS, /* |6 9| */ C.MINUS, - B.OUT, /* |7 8| */ C.OUT + DIPPINS( /* +--------------+ */ + A.OUT, /* |1 ++ 14| */ D.OUT, + A.MINUS, /* |2 13| */ D.MINUS, + A.PLUS, /* |3 12| */ D.PLUS, + A.VCC, /* |4 11| */ A.GND, + B.PLUS, /* |5 10| */ C.PLUS, + B.MINUS, /* |6 9| */ C.MINUS, + B.OUT, /* |7 8| */ C.OUT /* +--------------+ */ ) NET_C(A.GND, B.GND, C.GND, D.GND) @@ -25,21 +25,82 @@ static NETLIST_START(opamp_layout_4_4_11) NETLIST_END() /* - * Generic layout with 2 opamps, VCC on pint 8 and GND on pin 4 + * Generic layout with 2 opamps, VCC on pin 8 and GND on pin 4 */ static NETLIST_START(opamp_layout_2_8_4) - DIPPINS( /* +--------------+ */ - A.OUT, /* |1 ++ 8| */ A.VCC, - A.MINUS, /* |2 7| */ B.OUT, - A.PLUS, /* |3 6| */ B.MINUS, - A.GND, /* |4 5| */ B.PLUS + DIPPINS( /* +--------------+ */ + A.OUT, /* |1 ++ 8| */ A.VCC, + A.MINUS, /* |2 7| */ B.OUT, + A.PLUS, /* |3 6| */ B.MINUS, + A.GND, /* |4 5| */ B.PLUS /* +--------------+ */ ) NET_C(A.GND, B.GND) NET_C(A.VCC, B.VCC) NETLIST_END() +/* + * Generic layout with 1 opamp, VCC+ on pin 7, VCC- on pin 4 and compensation + */ + +static NETLIST_START(opamp_layout_1_7_4) + DIPPINS( /* +--------------+ */ + OFFSET.N1, /* |1 ++ 8| */ NC, + MINUS, /* |2 7| */ VCC.PLUS, + PLUS, /* |3 6| */ OUT, + VCC.MINUS, /* |4 5| */ OFFSET.N2 + /* +--------------+ */ + ) + NET_C(A.GND, VCC.MINUS) + NET_C(A.VCC, VCC.PLUS) + NET_C(A.MINUS, MINUS) + NET_C(A.PLUS, PLUS) + NET_C(A.OUT, OUT) +NETLIST_END() + +/* + * Generic layout with 1 opamp, VCC+ on pin 8, VCC- on pin 5 and compensation + */ + +static NETLIST_START(opamp_layout_1_8_5) + DIPPINS( /* +--------------+ */ + NC.1, /* |1 10| */ NC.3, + OFFSET.N1, /* |2 9| */ NC.2, + MINUS, /* |3 8| */ VCC.PLUS, + PLUS, /* |4 7| */ OUT, + VCC.MINUS, /* |5 6| */ OFFSET.N2 + /* +--------------+ */ + ) + NET_C(A.GND, VCC.MINUS) + NET_C(A.VCC, VCC.PLUS) + NET_C(A.MINUS, MINUS) + NET_C(A.PLUS, PLUS) + NET_C(A.OUT, OUT) +NETLIST_END() + +/* + * Generic layout with 1 opamp, VCC+ on pin 11, VCC- on pin 6 and compensation + */ + +static NETLIST_START(opamp_layout_1_11_6) + DIPPINS( /* +--------------+ */ + NC.1, /* |1 ++ 14| */ NC.7, + NC.2, /* |2 13| */ NC.6, + OFFSET.N1, /* |3 12| */ NC.5, + MINUS, /* |4 11| */ VCC.PLUS, + PLUS, /* |5 10| */ OUT, + VCC.MINUS, /* |6 9| */ OFFSET.N2, + NC.3, /* |7 8| */ NC.4 + /* +--------------+ */ + ) + NET_C(A.GND, VCC.MINUS) + NET_C(A.VCC, VCC.PLUS) + NET_C(A.MINUS, MINUS) + NET_C(A.PLUS, PLUS) + NET_C(A.OUT, OUT) +NETLIST_END() + static NETLIST_START(MB3614_DIP) OPAMP(A, "MB3614") OPAMP(B, "MB3614") @@ -60,6 +121,27 @@ static NETLIST_START(LM324_DIP) NETLIST_END() +static NETLIST_START(UA741_DIP8) + OPAMP(A, "UA741") + + INCLUDE(opamp_layout_1_7_4) + +NETLIST_END() + +static NETLIST_START(UA741_DIP10) + OPAMP(A, "UA741") + + INCLUDE(opamp_layout_1_8_5) + +NETLIST_END() + +static NETLIST_START(UA741_DIP14) + OPAMP(A, "UA741") + + INCLUDE(opamp_layout_1_11_6) + +NETLIST_END() + static NETLIST_START(LM358_DIP) OPAMP(A, "LM358") OPAMP(B, "LM358") @@ -71,14 +153,20 @@ NETLIST_END() NETLIST_START(OPAMP_lib) LOCAL_LIB_ENTRY(opamp_layout_4_4_11) LOCAL_LIB_ENTRY(opamp_layout_2_8_4) + LOCAL_LIB_ENTRY(opamp_layout_1_7_4) + LOCAL_LIB_ENTRY(opamp_layout_1_8_5) + LOCAL_LIB_ENTRY(opamp_layout_1_11_6) NET_MODEL("LM324 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=500k SLEW=0.3M RI=1000k RO=50 DAB=0.00075)") NET_MODEL("LM358 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=500k SLEW=0.3M RI=1000k RO=50 DAB=0.001)") NET_MODEL("MB3614 OPAMP(TYPE=3 VLH=1.4 VLL=0.02 FPF=2 UGF=500k SLEW=0.6M RI=1000k RO=50 DAB=0.0002)") + NET_MODEL("UA741 OPAMP(TYPE=3 VLH=1.0 VLL=1.0 FPF=5 UGF=1000k SLEW=0.5M RI=2000k RO=75 DAB=0.0017)") LOCAL_LIB_ENTRY(MB3614_DIP) LOCAL_LIB_ENTRY(LM324_DIP) LOCAL_LIB_ENTRY(LM358_DIP) - + LOCAL_LIB_ENTRY(UA741_DIP8) + LOCAL_LIB_ENTRY(UA741_DIP10) + LOCAL_LIB_ENTRY(UA741_DIP14) NETLIST_END() |