Browse Source

* src/Makefile.am src/main.c src/ngspice.c


			
			
				pre-master-46
			
			
		
arno 26 years ago
parent
commit
7472642832
  1. 4
      ChangeLog
  2. 1
      src/Makefile.am
  3. 6
      src/main.c
  4. 189
      src/ngspice.c
  5. 5
      src/spicelib/devices/Makefile.am
  6. 126
      src/spicelib/devices/dev.c
  7. 10
      src/spicelib/devices/dev.h

4
ChangeLog

@ -1,5 +1,9 @@
2000-05-01 Arno W. Peters <A.W.Peters@ieee.org> 2000-05-01 Arno W. Peters <A.W.Peters@ieee.org>
* src/devices/Makefile.am, src/devices/dev.c, src/devices/dev.h,
src/Makefile.am, src/ngspice.c, src/main.c: Refactored devices
initialization code into the devices dir.
* tests/respart.cir, tests/respart.out, tests/respart.sh: * tests/respart.cir, tests/respart.out, tests/respart.sh:
additional tests for resistor. additional tests for resistor.

1
src/Makefile.am

@ -67,6 +67,7 @@ ngspice_SOURCES = \
ngspice_LDADD = \ ngspice_LDADD = \
spice.o \ spice.o \
frontend/libfte.a \ frontend/libfte.a \
devices/libdev.a \
$(DYNAMIC_DEVICELIBS) \ $(DYNAMIC_DEVICELIBS) \
analysis/libckt.a \ analysis/libckt.a \
parser/libparser.a \ parser/libparser.a \

6
src/main.c

@ -23,6 +23,7 @@
#include "ftedev.h" #include "ftedev.h"
#include "ftedebug.h" #include "ftedebug.h"
#include "const.h" #include "const.h"
#include "devices/dev.h"
#ifdef HAVE_PWD_H #ifdef HAVE_PWD_H
#include <pwd.h> #include <pwd.h>
@ -160,6 +161,11 @@ IFfrontEnd *SPfrontEnd = NULL;
int SIMinit(IFfrontEnd *frontEnd, IFsimulator **simulator) int SIMinit(IFfrontEnd *frontEnd, IFsimulator **simulator)
{ {
#ifdef SIMULATOR
SIMinfo.numDevices = num_devices();
SIMinfo.devices = devices_ptr();
#endif /* SIMULATOR */
SPfrontEnd = frontEnd; SPfrontEnd = frontEnd;
*simulator = &SIMinfo; *simulator = &SIMinfo;
CONSTroot2 = sqrt(2.); CONSTroot2 = sqrt(2.);

189
src/ngspice.c

@ -16,41 +16,6 @@
#define AN_noise #define AN_noise
#define AN_sense #define AN_sense
/*
* Devices
*/
#define DEV_asrc
#define DEV_bjt
#define DEV_bsim1
#define DEV_bsim2
#define DEV_bsim3
#define DEV_bsim4
#define DEV_bsim3v1
#define DEV_bsim3v2
#define DEV_cap
#define DEV_cccs
#define DEV_ccvs
#define DEV_csw
#define DEV_dio
#define DEV_ind
#define DEV_isrc
#define DEV_jfet
#define DEV_jfet2
#define DEV_ltra
#define DEV_mes
#define DEV_mos1
#define DEV_mos2
#define DEV_mos3
#define DEV_mos6
#define DEV_res
#define DEV_sw
#define DEV_tra
#define DEV_urc
#define DEV_vccs
#define DEV_vcvs
#define DEV_vsrc
#define DEVICES_USED "asrc bjt bsim1 bsim2 bsim3 bsim3v2 bsim3v1 cap cccs ccvs csw dio ind isrc jfet ltra mes mos1 mos2 mos3 mos6 res sw tra urc vccs vcvs vsrc"
#define ANALYSES_USED "op dc tf ac tran pz disto noise sense" #define ANALYSES_USED "op dc tf ac tran pz disto noise sense"
/********** /**********
@ -65,42 +30,10 @@ Copyright 1990 Regents of the University of California. All rights reserved.
#include <stdio.h> #include <stdio.h>
#include "noisedef.h"
#include "devdefs.h" #include "devdefs.h"
#include "noisedef.h"
#include "suffix.h" #include "suffix.h"
#include "asrc/asrcitf.h"
#include "bjt/bjtitf.h"
#include "cap/capitf.h"
#include "cccs/cccsitf.h"
#include "ccvs/ccvsitf.h"
#include "csw/cswitf.h"
#include "dio/dioitf.h"
#include "ind/inditf.h"
#include "isrc/isrcitf.h"
#include "mos1/mos1itf.h"
#include "mos6/mos6itf.h"
#include "res/resitf.h"
#include "sw/switf.h"
#include "vccs/vccsitf.h"
#include "vcvs/vcvsitf.h"
#include "vsrc/vsrcitf.h"
#include "bsim1/bsim1itf.h"
#include "bsim2/bsim2itf.h"
#include "bsim3/bsim3itf.h"
#include "bsim4/bsim4itf.h"
#include "bsim3v1/bsim3v1itf.h"
#include "bsim3v2/bsim3v2itf.h"
#include "mos2/mos2itf.h"
#include "mos3/mos3itf.h"
#include "jfet/jfetitf.h"
#include "jfet2/jfet2itf.h"
#include "mes/mesitf.h"
#include "ltra/ltraitf.h"
#include "tra/traitf.h"
#include "urc/urcitf.h"
extern SPICEanalysis OPTinfo; extern SPICEanalysis OPTinfo;
extern SPICEanalysis ACinfo; extern SPICEanalysis ACinfo;
@ -129,44 +62,6 @@ SPICEanalysis *analInfo[] = {
}; };
int ANALmaxnum = sizeof(analInfo)/sizeof(SPICEanalysis*); int ANALmaxnum = sizeof(analInfo)/sizeof(SPICEanalysis*);
SPICEdev *DEVices[] = {
/* URC must appear before the resistor, capacitor, and diode */
&URCinfo,
&ASRCinfo,
&BJTinfo,
&B1info,
&B2info,
&BSIM3info,
&B4info,
&BSIM3V2info,
&BSIM3V1info,
&CAPinfo,
&CCCSinfo,
&CCVSinfo,
&CSWinfo,
&DIOinfo,
&INDinfo,
&MUTinfo,
&ISRCinfo,
&JFETinfo,
&JFET2info,
&LTRAinfo,
&MESinfo,
&MOS1info,
&MOS2info,
&MOS3info,
&MOS6info,
&RESinfo,
&SWinfo,
&TRAinfo,
&VCCSinfo,
&VCVSinfo,
&VSRCinfo,
};
/* my internal global constant for number of device types */
int DEVmaxnum = sizeof(DEVices)/sizeof(SPICEdev *);
/* XXX Should be -1 ? There is always an extra null element at the end ? */ /* XXX Should be -1 ? There is always an extra null element at the end ? */
static char * specSigList[] = { static char * specSigList[] = {
"time" "time"
@ -179,47 +74,47 @@ static IFparm nodeParms[] = {
}; };
IFsimulator SIMinfo = { IFsimulator SIMinfo = {
"ngspice", /* name */
"Circuit level simulation program", /* more about me */
Spice_Version, /* version */
CKTinit, /* newCircuit function */
CKTdestroy, /* deleteCircuit function */
CKTnewNode, /* newNode function */
CKTground, /* groundNode function */
CKTbindNode, /* bindNode function */
CKTfndNode, /* findNode function */
CKTinst2Node, /* instToNode function */
CKTsetNodPm, /* setNodeParm function */
CKTaskNodQst, /* askNodeQuest function */
CKTdltNod, /* deleteNode function */
CKTcrtElt, /* newInstance function */
CKTparam, /* setInstanceParm function */
CKTask, /* askInstanceQuest function */
CKTfndDev, /* findInstance funciton */
CKTdltInst, /* deleteInstance function */
CKTmodCrt, /* newModel function */
CKTmodParam, /* setModelParm function */
CKTmodAsk, /* askModelQuest function */
CKTfndMod, /* findModel function */
CKTdltMod, /* deleteModel function */
CKTnewTask, /* newTask function */
CKTnewAnal, /* newAnalysis function */
CKTsetAnalPm, /* setAnalysisParm function */
CKTaskAnalQ, /* askAnalysisQuest function */
CKTfndAnal, /* findAnalysis function */
CKTfndTask, /* findTask function */
CKTdelTask, /* deleteTask function */
CKTdoJob, /* doAnalyses function */
CKTtrouble, /* non-convergence message function */
sizeof(DEVices)/sizeof(SPICEdev *),
(IFdevice**)DEVices,
"ngspice", /* name */
"Circuit level simulation program", /* more about me */
Spice_Version, /* version */
CKTinit, /* newCircuit function */
CKTdestroy, /* deleteCircuit function */
CKTnewNode, /* newNode function */
CKTground, /* groundNode function */
CKTbindNode, /* bindNode function */
CKTfndNode, /* findNode function */
CKTinst2Node, /* instToNode function */
CKTsetNodPm, /* setNodeParm function */
CKTaskNodQst, /* askNodeQuest function */
CKTdltNod, /* deleteNode function */
CKTcrtElt, /* newInstance function */
CKTparam, /* setInstanceParm function */
CKTask, /* askInstanceQuest function */
CKTfndDev, /* findInstance funciton */
CKTdltInst, /* deleteInstance function */
CKTmodCrt, /* newModel function */
CKTmodParam, /* setModelParm function */
CKTmodAsk, /* askModelQuest function */
CKTfndMod, /* findModel function */
CKTdltMod, /* deleteModel function */
CKTnewTask, /* newTask function */
CKTnewAnal, /* newAnalysis function */
CKTsetAnalPm, /* setAnalysisParm function */
CKTaskAnalQ, /* askAnalysisQuest function */
CKTfndAnal, /* findAnalysis function */
CKTfndTask, /* findTask function */
CKTdelTask, /* deleteTask function */
CKTdoJob, /* doAnalyses function */
CKTtrouble, /* non-convergence message function */
0, /* Initialized in SIMinit() */
NULL, /* Initialized in SIMinit() */
sizeof(analInfo)/sizeof(SPICEanalysis *), sizeof(analInfo)/sizeof(SPICEanalysis *),
(IFanalysis **)analInfo, (IFanalysis **)analInfo,

5
src/spicelib/devices/Makefile.am

@ -34,5 +34,10 @@ SUBDIRS = \
vcvs \ vcvs \
vsrc vsrc
lib_LIBRARIES = libdev.a
libdev_a_SOURCES = dev.c
INCLUDES = -I$(top_srcdir)/src/include
MAINTAINERCLEANFILES = Makefile.in MAINTAINERCLEANFILES = Makefile.in

126
src/spicelib/devices/dev.c

@ -0,0 +1,126 @@
/* Configuration file for ng-spice */
#include <config.h>
#include "dev.h"
#include "devdefs.h"
/*
* Devices
*/
#define DEV_asrc
#define DEV_bjt
#define DEV_bsim1
#define DEV_bsim2
#define DEV_bsim3
#define DEV_bsim4
#define DEV_bsim3v1
#define DEV_bsim3v2
#define DEV_cap
#define DEV_cccs
#define DEV_ccvs
#define DEV_csw
#define DEV_dio
#define DEV_ind
#define DEV_isrc
#define DEV_jfet
#define DEV_jfet2
#define DEV_ltra
#define DEV_mes
#define DEV_mos1
#define DEV_mos2
#define DEV_mos3
#define DEV_mos6
#define DEV_res
#define DEV_sw
#define DEV_tra
#define DEV_urc
#define DEV_vccs
#define DEV_vcvs
#define DEV_vsrc
#define DEVICES_USED "asrc bjt bsim1 bsim2 bsim3 bsim3v2 bsim3v1 cap cccs ccvs csw dio ind isrc jfet ltra mes mos1 mos2 mos3 mos6 res sw tra urc vccs vcvs vsrc"
#include "asrc/asrcitf.h"
#include "bjt/bjtitf.h"
#include "cap/capitf.h"
#include "cccs/cccsitf.h"
#include "ccvs/ccvsitf.h"
#include "csw/cswitf.h"
#include "dio/dioitf.h"
#include "ind/inditf.h"
#include "isrc/isrcitf.h"
#include "mos1/mos1itf.h"
#include "mos6/mos6itf.h"
#include "res/resitf.h"
#include "sw/switf.h"
#include "vccs/vccsitf.h"
#include "vcvs/vcvsitf.h"
#include "vsrc/vsrcitf.h"
#include "bsim1/bsim1itf.h"
#include "bsim2/bsim2itf.h"
#include "bsim3/bsim3itf.h"
#include "bsim4/bsim4itf.h"
#include "bsim3v1/bsim3v1itf.h"
#include "bsim3v2/bsim3v2itf.h"
#include "mos2/mos2itf.h"
#include "mos3/mos3itf.h"
#include "jfet/jfetitf.h"
#include "jfet2/jfet2itf.h"
#include "mes/mesitf.h"
#include "ltra/ltraitf.h"
#include "tra/traitf.h"
#include "urc/urcitf.h"
SPICEdev *DEVices[] = {
/* URC must appear before the resistor, capacitor, and diode */
&URCinfo,
&ASRCinfo,
&BJTinfo,
&B1info,
&B2info,
&BSIM3info,
&B4info,
&BSIM3V2info,
&BSIM3V1info,
&CAPinfo,
&CCCSinfo,
&CCVSinfo,
&CSWinfo,
&DIOinfo,
&INDinfo,
&MUTinfo,
&ISRCinfo,
&JFETinfo,
&JFET2info,
&LTRAinfo,
&MESinfo,
&MOS1info,
&MOS2info,
&MOS3info,
&MOS6info,
&RESinfo,
&SWinfo,
&TRAinfo,
&VCCSinfo,
&VCVSinfo,
&VSRCinfo,
};
/* my internal global constant for number of device types */
int DEVmaxnum = sizeof(DEVices)/sizeof(SPICEdev *);
int
num_devices(void)
{
return sizeof(DEVices)/sizeof(SPICEdev *);
}
IFdevice **
devices_ptr(void)
{
return (IFdevice **) DEVices;
}

10
src/spicelib/devices/dev.h

@ -0,0 +1,10 @@
#ifndef _DEV_H
#define _DEV_H
#include <ifsim.h>
int num_devices(void);
IFdevice **devices_ptr(void);
#endif
Loading…
Cancel
Save