Merge branch 'master' into netgen-1.5

This commit is contained in:
Tim Edwards 2022-01-01 03:00:43 -05:00
commit afe0e9f758
4 changed files with 39 additions and 43 deletions

View File

@ -1 +1 @@
1.5.216 1.5.217

View File

@ -372,22 +372,16 @@ int flattenInstancesOf(char *name, int fnum, char *instance)
/* update node numbers in child to unique numbers */ /* update node numbers in child to unique numbers */
oldmax = 0; oldmax = 0;
for (tmp = ChildStart; tmp != NULL; tmp = tmp->next) for (tmp = ChildStart; tmp != NULL; tmp = tmp->next) {
if (tmp->node > oldmax) oldmax = tmp->node; if (tmp->node > oldmax) oldmax = tmp->node;
if (nextnode <= oldmax) nextnode = oldmax + 1; if (tmp->node > 0) tmp->node += (nextnode - 1);
}
for (tmp = ChildStart; tmp != NULL; tmp = tmp->next) nextnode += oldmax;
if (tmp->node <= oldmax && tmp->node > 0) {
if (Debug) Printf("Update node %d --> %d\n", tmp->node, nextnode);
UpdateNodeNumbers(ChildStart, tmp->node, nextnode);
nextnode++;
}
/* copy nodenumbers of ports from parent */ /* copy nodenumbers of ports from parent */
ob2 = ParentParams; ob2 = ParentParams;
for (tmp = ChildStart; tmp != NULL; tmp = tmp->next) { for (tmp = ChildStart; tmp && IsPort(tmp); tmp = tmp->next) {
if (IsPort(tmp)) { if (tmp->node > 0) {
if (tmp->node > 0) {
if (ob2->node == -1) { if (ob2->node == -1) {
// Before commiting to attaching to a unconnected node, see // Before commiting to attaching to a unconnected node, see
@ -413,17 +407,16 @@ int flattenInstancesOf(char *name, int fnum, char *instance)
Printf("Update node %d --> %d\n", tmp->node, ob2->node); Printf("Update node %d --> %d\n", tmp->node, ob2->node);
} }
UpdateNodeNumbers(ChildStart, tmp->node, ob2->node); UpdateNodeNumbers(ChildStart, tmp->node, ob2->node);
} }
/* in pathological cases, the lengths of the port lists may /* in pathological cases, the lengths of the port lists may
* change. This is an error, but that is no reason to allow * change. This is an error, but that is no reason to allow
* the code to core dump. We avoid this by placing a * the code to core dump. We avoid this by placing a
* superfluous check on ob2->type * superfluous check on ob2->type
*/ */
if (ob2 != NULL) ob2 = ob2->next; if (ob2 != NULL) ob2 = ob2->next;
if (ob2 == NULL) break; if (ob2 == NULL) break;
}
} }
/* Using name == NULL to indicate that a .ext file is being */ /* Using name == NULL to indicate that a .ext file is being */
@ -1607,15 +1600,15 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
} }
if (match) { if (match) {
if (ecomp->cell1 && (ecomp->num1 > 0)) { if (ecomp->cell1 && (ecomp->num1 > 0)) {
Fprintf(stdout, "Flattening instances of %s in cell %s" Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
" makes a better match\n", ecomp->cell1->name, " makes a better match\n", ecomp->cell1->name,
name1); name1, file1);
flattenInstancesOf(name1, file1, ecomp->cell1->name); flattenInstancesOf(name1, file1, ecomp->cell1->name);
} }
if (ecomp->cell2 && (ecomp->num2 > 0)) { if (ecomp->cell2 && (ecomp->num2 > 0)) {
Fprintf(stdout, "Flattening instances of %s in cell %s" Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
" makes a better match\n", ecomp->cell2->name, " makes a better match\n", ecomp->cell2->name,
name2); name2, file2);
flattenInstancesOf(name2, file2, ecomp->cell2->name); flattenInstancesOf(name2, file2, ecomp->cell2->name);
} }
modified++; modified++;
@ -1696,9 +1689,9 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
} }
if (match) { if (match) {
if (ecomp->cell2) { if (ecomp->cell2) {
Fprintf(stdout, "Flattening instances of %s in cell %s" Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
" makes a better match\n", ecomp->cell2->name, " makes a better match\n", ecomp->cell2->name,
name2); name2, file2);
flattenInstancesOf(name2, file2, ecomp->cell2->name); flattenInstancesOf(name2, file2, ecomp->cell2->name);
} }
modified++; modified++;
@ -1754,9 +1747,9 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
} }
if (match) { if (match) {
if (ecomp->cell1) { if (ecomp->cell1) {
Fprintf(stdout, "Flattening instances of %s in cell %s" Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
" makes a better match\n", ecomp->cell1->name, " makes a better match\n", ecomp->cell1->name,
name1); name1, file1);
flattenInstancesOf(name1, file1, ecomp->cell1->name); flattenInstancesOf(name1, file1, ecomp->cell1->name);
} }
modified++; modified++;
@ -1837,9 +1830,9 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
} }
if (found) { if (found) {
Fprintf(stdout, "Removing zero-valued device " Fprintf(stdout, "Removing zero-valued device "
"%s from cell %s makes a better match\n", "%s from cell %s (%d) makes a better "
tsub1->name, "match\n",
tc1->name); tsub1->name, tc1->name, tc1->file);
/* A current source is an open, while a */ /* A current source is an open, while a */
/* resistor or voltage source is a short. */ /* resistor or voltage source is a short. */
@ -1948,9 +1941,9 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
} }
if (found) { if (found) {
Fprintf(stdout, "Removing zero-valued device " Fprintf(stdout, "Removing zero-valued device "
"%s from cell %s makes a better match\n", "%s from cell %s (%d) makes a better "
tsub2->name, "match\n",
tc2->name); tsub2->name, tc2->name, tc2->file);
/* merge node of endpoints */ /* merge node of endpoints */
if (ecomp->cell2->class != CLASS_ISOURCE) { if (ecomp->cell2->class != CLASS_ISOURCE) {
@ -2041,8 +2034,8 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
if (dstr) *dstr = '['; if (dstr) *dstr = '[';
if ((ncomp == ecomp0X) && (ecomp0X->num2 <= ecompX0->num1)) { if ((ncomp == ecomp0X) && (ecomp0X->num2 <= ecompX0->num1)) {
Fprintf(stdout, "Flattening instances of %s in cell %s" Fprintf(stdout, "Flattening instances of %s in cell %s"
" makes a better match\n", ecompX0->cell1->name, "(%d) makes a better match\n",
name1); ecompX0->cell1->name, name1, file1);
flattenInstancesOf(name1, file1, ecompX0->cell1->name); flattenInstancesOf(name1, file1, ecompX0->cell1->name);
ecompX0->num1 = 0; ecompX0->num1 = 0;
ecomp0X->num1 += ecompX0->num1; ecomp0X->num1 += ecompX0->num1;
@ -2067,8 +2060,8 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
if (dstr) *dstr = '['; if (dstr) *dstr = '[';
if ((ncomp == ecompX0) && (ecompX0->num1 <= ecomp0X->num2)) { if ((ncomp == ecompX0) && (ecompX0->num1 <= ecomp0X->num2)) {
Fprintf(stdout, "Flattening instances of %s in cell %s" Fprintf(stdout, "Flattening instances of %s in cell %s"
" makes a better match\n", ecomp0X->cell2->name, " (%d) makes a better match\n",
name2); ecomp0X->cell2->name, name2, file2);
flattenInstancesOf(name2, file2, ecomp0X->cell2->name); flattenInstancesOf(name2, file2, ecomp0X->cell2->name);
ecomp0X->num2 = 0; ecomp0X->num2 = 0;
ecompX0->num2 += ecomp0X->num2; ecompX0->num2 += ecomp0X->num2;

View File

@ -3441,7 +3441,8 @@ int CombineParallel(char *model, int file)
} }
HashKill(&devdict); HashKill(&devdict);
if (dcnt > 0) { if (dcnt > 0) {
Fprintf(stdout, "Class %s(%d): Merged %d parallel devices.\n", model, file, dcnt); Fprintf(stdout, "Class %s (%d): Merged %d parallel devices.\n",
model, file, dcnt);
} }
FREE(nodecount); FREE(nodecount);
return dcnt; return dcnt;
@ -3739,7 +3740,8 @@ int CombineSeries(char *model, int file)
} }
FREE(instlist); FREE(instlist);
if (scnt > 0) { if (scnt > 0) {
Fprintf(stdout, "Class %s(%d): Merged %d series devices.\n", model, file, scnt); Fprintf(stdout, "Class %s (%d): Merged %d series devices.\n",
model, file, scnt);
} }
return scnt; return scnt;
} }

View File

@ -810,7 +810,8 @@ void DescribeInstance(char *name, int file)
disconnectednodes++; disconnectednodes++;
/* Don't report on ports marked "port_match_error", which is just confusing. */ /* Don't report on ports marked "port_match_error", which is just confusing. */
if (strcmp(ob->name, "port_match_error")) { if (strcmp(ob->name, "port_match_error")) {
Fprintf(stderr, "Cell %s(%d) disconnected node: %s\n", tp->name, tp->file, ob->name); Fprintf(stderr, "Cell %s (%d) disconnected node: %s\n",
tp->name, tp->file, ob->name);
} }
} }
} }