From 656b5dbabeac2768db108856cf54012615fbba0b Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Thu, 28 Sep 2023 12:38:08 -0400 Subject: [PATCH] Corrected an error in the calculation of the number of contact cuts per contact area during parasitic resistance extraction. Previously, the result was divided by the via pitch twice, resulting in most contact areas being reported as a single cut. --- VERSION | 2 +- resis/ResMakeRes.c | 6 ++---- resis/ResSimple.c | 10 ++++------ 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/VERSION b/VERSION index 3c546cf2..9841aedc 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.434 +8.3.435 diff --git a/resis/ResMakeRes.c b/resis/ResMakeRes.c index c5076207..16add5d4 100644 --- a/resis/ResMakeRes.c +++ b/resis/ResMakeRes.c @@ -831,14 +831,12 @@ ResDoContacts(contact, nodes, resList) else { viawidth += spacing; - squaresf = (float)((contact->cp_width * cscale) - minside) / (float)viawidth; - squaresf *= ExtCurStyle->exts_unitsPerLambda; + squaresf = (float)((contact->cp_width * cscale) - minside); squaresf /= (float)viawidth; squaresx = (int)squaresf; squaresx++; - squaresf = (float)((contact->cp_height * cscale) - minside) / (float)viawidth; - squaresf *= ExtCurStyle->exts_unitsPerLambda; + squaresf = (float)((contact->cp_height * cscale) - minside); squaresf /= (float)viawidth; squaresy = (int)squaresf; squaresy++; diff --git a/resis/ResSimple.c b/resis/ResSimple.c index 3639682e..c225ad10 100644 --- a/resis/ResSimple.c +++ b/resis/ResSimple.c @@ -880,7 +880,7 @@ ResDoSimplify(tolerance, rctol, goodies) /* we're calculating lumped values so that the capacitance */ /* values get calculated correctly. */ - (void) ResDistributeCapacitance(ResNodeList,goodies->rg_nodecap); + (void) ResDistributeCapacitance(ResNodeList, goodies->rg_nodecap); if (((tolerance > bigres) || ((ResOptionsFlags & ResOpt_Simplify) == 0)) && ((ResOptionsFlags & ResOpt_DoLumpFile) == 0)) @@ -895,9 +895,9 @@ ResDoSimplify(tolerance, rctol, goodies) oldres->rr_status &= ~RES_HEAP; if (oldres->rr_status & RES_TDI_IGNORE) { - ResDeleteResPointer(oldres->rr_node[0], oldres); - ResDeleteResPointer(oldres->rr_node[1], oldres); - ResEliminateResistor(oldres, &ResResList); + ResDeleteResPointer(oldres->rr_node[0], oldres); + ResDeleteResPointer(oldres->rr_node[1], oldres); + ResEliminateResistor(oldres, &ResResList); } } @@ -940,7 +940,6 @@ ResDoSimplify(tolerance, rctol, goodies) goodies->rg_Tdi != -1) return 0; - /* Simplify network; resistors are still in milliohms, so use * millitolerance. */ @@ -963,7 +962,6 @@ ResDoSimplify(tolerance, rctol, goodies) } if (ResOriginNode != NULL) { - /* if Tdi is enabled, prune all branches whose end nodes */ /* have time constants less than the tolerance. */