Corrected errors preventing extresist from working properly with

hierarchical cells (namely a scaling issue with .sim file units).
More can be done to make the extresist command more user friendly,
but at least port connections as drivers appears to work.
This commit is contained in:
Tim Edwards 2019-10-14 17:17:08 -04:00
parent 58c4c8a32e
commit 57a5ff6094
5 changed files with 18 additions and 11 deletions

View File

@ -15,7 +15,7 @@ ResMakeRes.o: ResMakeRes.c ../utils/magic.h ../utils/geometry.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \ ../database/database.h ../utils/malloc.h ../textio/textio.h \
../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \ ../extract/extract.h ../extract/extractInt.h ../extract/extDebugInt.h \
../windows/windows.h ../dbwind/dbwind.h ../utils/tech.h \ ../windows/windows.h ../dbwind/dbwind.h ../utils/tech.h \
../textio/txcommands.h ../resis/resis.h ../textio/txcommands.h ../resis/resis.h ../cif/CIFint.h
ResSimple.o: ResSimple.c ../utils/magic.h ../utils/geometry.h \ ResSimple.o: ResSimple.c ../utils/magic.h ../utils/geometry.h \
../utils/geofast.h ../tiles/tile.h ../utils/hash.h ../utils/heap.h \ ../utils/geofast.h ../tiles/tile.h ../utils/hash.h ../utils/heap.h \
../database/database.h ../utils/malloc.h ../textio/textio.h \ ../database/database.h ../utils/malloc.h ../textio/textio.h \

View File

@ -450,8 +450,8 @@ DBTreeCopyConnectDCS(scx, mask, xMask, connect, area, destUse)
for (tran = TT_TECHDEPBASE; tran < TT_MAXTYPES; tran++) for (tran = TT_TECHDEPBASE; tran < TT_MAXTYPES; tran++)
{ {
devptr = ExtCurStyle->exts_device[tran]; devptr = ExtCurStyle->exts_device[tran];
tran_name = devptr->exts_deviceName; if ((devptr != NULL) && ((tran_name = devptr->exts_deviceName) != NULL)
if ((tran_name != NULL) && (strcmp(tran_name, "None"))) && (strcmp(tran_name, "None")))
{ {
TTMaskSetMask(&DiffTypeBitMask, TTMaskSetMask(&DiffTypeBitMask,
&(devptr->exts_deviceSDTypes[0])); &(devptr->exts_deviceSDTypes[0]));

View File

@ -72,8 +72,8 @@ ResInitializeConn()
for (tran = TT_TECHDEPBASE; tran < TT_MAXTYPES; tran++) for (tran = TT_TECHDEPBASE; tran < TT_MAXTYPES; tran++)
{ {
devptr = ExtCurStyle->exts_device[tran]; devptr = ExtCurStyle->exts_device[tran];
tran_name = devptr->exts_deviceName; if ((devptr != NULL) && ((tran_name = devptr->exts_deviceName) != NULL)
if ((tran_name != NULL) && (strcmp(tran_name, "None"))) && (strcmp(tran_name, "None")))
{ {
for (diff = TT_TECHDEPBASE; diff < TT_MAXTYPES; diff++) for (diff = TT_TECHDEPBASE; diff < TT_MAXTYPES; diff++)
{ {

View File

@ -24,6 +24,7 @@ static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/
#include "utils/tech.h" #include "utils/tech.h"
#include "textio/txcommands.h" #include "textio/txcommands.h"
#include "resis/resis.h" #include "resis/resis.h"
#include "cif/CIFint.h"
/* Forward declarations */ /* Forward declarations */
bool ResCalcNearTransistor(); bool ResCalcNearTransistor();
@ -783,13 +784,14 @@ ResDoContacts(contact, nodes, resList)
resNode *resptr; resNode *resptr;
cElement *ccell; cElement *ccell;
int tilenum, squaresx, squaresy, viawidth; int tilenum, squaresx, squaresy, viawidth;
int minside, spacing, border; int minside, spacing, border, cscale;
float squaresf; float squaresf;
resResistor *resistor; resResistor *resistor;
resElement *element; resElement *element;
static int too_small = 1; static int too_small = 1;
minside = CIFGetContactSize(contact->cp_type, &viawidth, &spacing, &border); minside = CIFGetContactSize(contact->cp_type, &viawidth, &spacing, &border);
cscale = CIFCurStyle->cs_scaleFactor;
if ((ExtCurStyle->exts_viaResist[contact->cp_type] == 0) || (viawidth == 0)) if ((ExtCurStyle->exts_viaResist[contact->cp_type] == 0) || (viawidth == 0))
{ {
@ -818,7 +820,8 @@ ResDoContacts(contact, nodes, resList)
} }
else else
{ {
if ((contact->cp_width < minside) || (contact->cp_height < minside)) if (((contact->cp_width * cscale) < minside) ||
((contact->cp_height * cscale) < minside))
{ {
if (too_small) if (too_small)
{ {
@ -832,13 +835,13 @@ ResDoContacts(contact, nodes, resList)
else else
{ {
viawidth += spacing; viawidth += spacing;
squaresf = (float)(contact->cp_width - minside) / (float)viawidth; squaresf = (float)((contact->cp_width * cscale) - minside) / (float)viawidth;
squaresf *= ExtCurStyle->exts_unitsPerLambda; squaresf *= ExtCurStyle->exts_unitsPerLambda;
squaresf /= (float)viawidth; squaresf /= (float)viawidth;
squaresx = (int)squaresf; squaresx = (int)squaresf;
squaresx++; squaresx++;
squaresf = (float)(contact->cp_height - minside) / (float)viawidth; squaresf = (float)((contact->cp_height * cscale) - minside) / (float)viawidth;
squaresf *= ExtCurStyle->exts_unitsPerLambda; squaresf *= ExtCurStyle->exts_unitsPerLambda;
squaresf /= (float)viawidth; squaresf /= (float)viawidth;
squaresy = (int)squaresf; squaresy = (int)squaresf;

View File

@ -146,8 +146,12 @@ ResReadSim(simfile,fetproc,capproc,resproc,attrproc,mergeproc)
case '|': case '|':
if (strcmp(line[NODEUNITS],"units:") == 0) if (strcmp(line[NODEUNITS],"units:") == 0)
{ {
lambda = (float)atof(line[NODELAMBDA]); lambda = (float)atof(line[NODELAMBDA]);
if (lambda == 0.0) lambda = 1.0; if (lambda == 0.0) lambda = 1.0;
/* NOTE: units is derived from EFScale */
/* which needs a factor of 100 conversion */
/* to database units. */
lambda *= 100.0;
} }
result=0; result=0;
break; break;