mirror of
https://github.com/RTimothyEdwards/magic.git
synced 2026-08-29 17:39:28 +02:00
preproc.py script from another project. Had to further develop it to get around the amazingly complicated preprocessor usage in the scmos subdirectory. Needed to add handling of parameterized definitions; could not figure out how to align the syntax used in scmos/extract_template with any consistent syntax. Gave up and rewrote some of the contents of extract_template to avoid the more ambiguous usage. All of this is to support a completely deprecated scmos.tech. However, it does avoid both the M4 and cpp preprocessors altogether. Also did auto-detection of python3 in the configure script for use of the preproc.py preprocessor, and applied the same preprocessor to the macro definitions.
96 lines
2.6 KiB
Plaintext
96 lines
2.6 KiB
Plaintext
/* local definitions */
|
|
#define allContM1 ndc/m1,pdc/m1,nwc/m1,pwc/m1
|
|
#define PNplusWOC ndiff,pdiff,nnd/a,ppd/a
|
|
|
|
#define CAPP allPoly
|
|
#define SSEPP ~(allPoly)/act
|
|
#define SSEP1 ~(allMetal1)/m1
|
|
#define SSEP2 ~(allMetal2)/m2
|
|
#define SSEP3 ~(allMetal3)/m3
|
|
|
|
|
|
/* Make sure local cap defs don't appear before regardless of what cpp does*/
|
|
#if defined(M1ContactsAct) \
|
|
|| defined (M1Contacts) \
|
|
|| defined (PNplusCap) \
|
|
|| defined (PolyCap) \
|
|
|| defined (M1Cap) \
|
|
|| defined (M2Cap) \
|
|
|| defined (M3Cap) \
|
|
|| defined (M1CapNoDiff) \
|
|
|| defined (NdRes) \
|
|
|| defined (PdRes) \
|
|
|| defined (M1Res) \
|
|
|| defined (PolyRes) \
|
|
|| defined (M2Res) \
|
|
|| defined (M3Res)
|
|
THERE_IS_AN_ERROR_SOME_LOCAL_CAPACITANCE_DEFINITIONS_HAVE_ALREADY_BEEN_DEFINED
|
|
#endif
|
|
|
|
/* Local capacitance definitions */
|
|
#define M1ContactsAct ndc,pdc,nwc,pwc,nbdc,capc,ec,clc,emc,pbc
|
|
#define M1Contacts M1ContactsAct,pc,via
|
|
#define PNplusCap (ndiff,pdiff,em,col,ppd,nnd,M1ContactsAct)/a
|
|
#define PolyCap (poly,pc)/a
|
|
#define M1Cap (m1,M1Contacts)/m1
|
|
#define M2Cap (m2,m2c,m3c,pad)/m2
|
|
#define M3Cap (m3,m3c,pad)/m3
|
|
#define M1CapNoDiff (m1,pc,via)/m1
|
|
#define NDRes (ndiff,nsd,ndc/act,nsc/act)
|
|
#define PDRes (pdiff,psd,pdc/act,psc/act)
|
|
#define PolyRes (poly,pc/act,pfet,nfet)
|
|
#define M1Res (metal1,m2c/metal1)
|
|
#define M2Res (metal2,via/m2,pad)
|
|
#define M3Res (metal3,pad/m3,via2/m3)
|
|
|
|
|
|
/* Use macros for planeorder and sideoverlap for backwards compatibility */
|
|
#if defined(V5)
|
|
|
|
#define planeOrder(name,idx) planeorder name idx
|
|
#define noplaneOrdering noplaneordering
|
|
#define sideOverlap(l1,sep,l2,cap,shield) \
|
|
sideoverlap l1 sep l2 cap shield
|
|
#define Comma ,
|
|
|
|
#else /* V5 */
|
|
|
|
#define planeOrder(name,idx)
|
|
#define noplaneOrdering
|
|
#define sideOverlap(l1,sep,l2,cap,shield) \
|
|
sideoverlap l1 sep l2 cap
|
|
|
|
#endif /* V5 */
|
|
|
|
|
|
#define extForSpice
|
|
|
|
/*
|
|
If you are using irsim-9.3 or older then you need to re-include
|
|
all the files without defining extForSpice so that the junction
|
|
capacitances will be extracted from magic instead of being calculated
|
|
from irsim-9.4 based on the values in the prm file and the s/d attributes
|
|
produced from magic-6.5
|
|
*/
|
|
|
|
#if defined(STANDARD) /* include ORBIT 2um, AMI 1.6um, HP1.2, and HP1.0/0.8 */
|
|
#include "scmosExt100.tech.in"
|
|
#include "scmosExt080.tech.in"
|
|
#include "scmosExt060_orb.tech.in"
|
|
#include "scmosExt34.tech.in"
|
|
#include "scmosExt26b.tech.in"
|
|
#endif /* STANDARD */
|
|
|
|
#if defined(TIGHTMETAL)
|
|
#include "scmosExt34.tech.in"
|
|
#include "scmosExt26b.tech.in"
|
|
#include "scmosExt14b-tm.tech.in"
|
|
#endif
|
|
|
|
#if defined(SUBMICRON)
|
|
#include "scmosExt26b-sub.tech.in"
|
|
#include "scmosExt14b-sub.tech.in"
|
|
#endif
|
|
|
|
#include "scmosExtDiag.tech.in"
|