mirror of
https://github.com/RTimothyEdwards/magic.git
synced 2026-08-22 06:07:34 +02:00
Claude Fable 5 implemented capacitance checking at shape corners,
after much discussion about the implementation. Since it is not exactly clear what the field lines do at corners, the implementation depends largely on an unknown and presumably global constant multiplier; this has provisionally been set to 1 but needs to be determined empirically with a field equation solver. At least one rational approximation suggests a value of pi/2 instead of 1. The corner capacitance can be considered a refinement of existing parasitic capacitance extraction, and since it takes a non-trivial additional amount of computation, it is left as an option to "extract" that can be turned on when a more accurate result is preferred at the expense of a longer extraction time.
This commit is contained in:
+28
-9
@@ -1039,15 +1039,16 @@ cmdExpandFunc(
|
||||
#define DOADJUST 0
|
||||
#define DOALL 1
|
||||
#define DOCAPACITANCE 2
|
||||
#define DOCOUPLING 3
|
||||
#define DOEXTRESIST 4
|
||||
#define DOLENGTH 5
|
||||
#define DOLOCAL 6
|
||||
#define DORESISTANCE 7
|
||||
#define DOLABELCHECK 8
|
||||
#define DOALIASES 9
|
||||
#define DOUNIQUE 10
|
||||
#define DOEXTRESIST2 11
|
||||
#define DOCORNERS 3
|
||||
#define DOCOUPLING 4
|
||||
#define DOEXTRESIST 5
|
||||
#define DOLENGTH 6
|
||||
#define DOLOCAL 7
|
||||
#define DORESISTANCE 8
|
||||
#define DOLABELCHECK 9
|
||||
#define DOALIASES 10
|
||||
#define DOUNIQUE 11
|
||||
#define DOEXTRESIST2 12
|
||||
|
||||
#define LENCLEAR 0
|
||||
#define LENDRIVER 1
|
||||
@@ -1089,6 +1090,8 @@ CmdExtract(
|
||||
"adjust compensate R and C hierarchically",
|
||||
"all all options",
|
||||
"capacitance extract substrate capacitance",
|
||||
"corners [value] extract corner fringe capacitance,\n"
|
||||
" optionally setting the model scale factor",
|
||||
"coupling extract coupling capacitance",
|
||||
"extresist extract resistance",
|
||||
"length compute driver-receiver pathlengths",
|
||||
@@ -1397,6 +1400,8 @@ CmdExtract(
|
||||
TxPrintf("The following are the extractor option settings:\n");
|
||||
TxPrintf("%s adjust\n", OPTSET(EXT_DOADJUST));
|
||||
TxPrintf("%s capacitance\n", OPTSET(EXT_DOCAPACITANCE));
|
||||
TxPrintf("%s corners (scale factor %g)\n", OPTSET(EXT_DOCORNERS),
|
||||
ExtCornerFactor);
|
||||
TxPrintf("%s coupling\n", OPTSET(EXT_DOCOUPLING));
|
||||
TxPrintf("%s length\n", OPTSET(EXT_DOLENGTH));
|
||||
TxPrintf("%s lumped R\n", OPTSET(EXT_DORESISTANCE));
|
||||
@@ -1429,6 +1434,20 @@ CmdExtract(
|
||||
case DOADJUST: option = EXT_DOADJUST; break;
|
||||
case DOALL: option = EXT_DOALL; break;
|
||||
case DOCAPACITANCE: option = EXT_DOCAPACITANCE; break;
|
||||
case DOCORNERS:
|
||||
if (argc == 4)
|
||||
{
|
||||
double kval;
|
||||
if (sscanf(argv[3], "%lf", &kval) == 1)
|
||||
ExtCornerFactor = kval;
|
||||
else
|
||||
{
|
||||
TxError("Usage: extract do corners [value]\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
option = EXT_DOCORNERS;
|
||||
break;
|
||||
case DOCOUPLING: option = EXT_DOCOUPLING; break;
|
||||
case DOLENGTH: option = EXT_DOLENGTH; break;
|
||||
case DORESISTANCE: option = EXT_DORESISTANCE; break;
|
||||
|
||||
Reference in New Issue
Block a user