diff --git a/VERSION b/VERSION index e838e26..d293bd7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.5.224 +1.5.226 diff --git a/base/flatten.c b/base/flatten.c index 7e5d7bb..262570f 100644 --- a/base/flatten.c +++ b/base/flatten.c @@ -1709,13 +1709,21 @@ PrematchLists(char *name1, int file1, char *name2, int file2) } } if (match) { - if (ecomp->cell2) { - Fprintf(stdout, "Flattening instances of %s in cell %s (%d)" + + /* Don't flatten if cell1 is a black box, because it */ + /* can't also be flattened. */ + + if ((ecomp->num1 == 0) || (ecomp->cell1->class != + CLASS_MODULE)) { + + if (ecomp->cell2) { + Fprintf(stdout, "Flattening instances of %s in cell %s (%d)" " makes a better match\n", ecomp->cell2->name, name2, file2); - flattenInstancesOf(name2, file2, ecomp->cell2->name); + flattenInstancesOf(name2, file2, ecomp->cell2->name); + } + modified++; } - modified++; } /* Reset or apply the count adjustments */ @@ -1739,7 +1747,7 @@ PrematchLists(char *name1, int file1, char *name2, int file2) } /* Case 3: Cell1 class is a subcircuit, and flattening */ - /* it (without regard to cell1) improves the matching. */ + /* it (without regard to cell2) improves the matching. */ else if ((ecomp->num1 != ecomp->num2) && (ecomp->cell1 != NULL) && (ecomp->num1 != 0) && (ecomp->cell1->class == CLASS_SUBCKT)) { @@ -1767,13 +1775,21 @@ PrematchLists(char *name1, int file1, char *name2, int file2) } } if (match) { - if (ecomp->cell1) { - Fprintf(stdout, "Flattening instances of %s in cell %s (%d)" + + /* Don't flatten if cell2 is a black box, because it */ + /* can't also be flattened. */ + + if ((ecomp->num2 == 0) || (ecomp->cell2->class != + CLASS_MODULE)) { + + if (ecomp->cell1) { + Fprintf(stdout, "Flattening instances of %s in cell %s (%d)" " makes a better match\n", ecomp->cell1->name, name1, file1); - flattenInstancesOf(name1, file1, ecomp->cell1->name); + flattenInstancesOf(name1, file1, ecomp->cell1->name); + } + modified++; } - modified++; } /* Reset or apply the count adjustments */ diff --git a/base/netcmp.c b/base/netcmp.c index bcdde93..b3fb4a0 100644 --- a/base/netcmp.c +++ b/base/netcmp.c @@ -875,7 +875,11 @@ struct FormattedList *FormatBadNodeFragment(struct Node *N) for (n = pins[i]->subelement->element->nodelist; n != NULL; n = n->next){ if (n->pin_magic == pins[i]->subelement->pin_magic) { if ((permute == 0) && (ob->instance.name != NULL)) { - pinname = ob->name + strlen(ob->instance.name) + 1; + /* Handle "port_match_error" */ + if ((ob->name[0] == 'p') && !strcmp(ob->name, "port_match_error")) + pinname = ob->name; + else + pinname = ob->name + strlen(ob->instance.name) + 1; } else if (ob->instance.name != NULL) { char *pinsave = pinname; diff --git a/base/verilog.c b/base/verilog.c index 82dcb08..1d933bb 100644 --- a/base/verilog.c +++ b/base/verilog.c @@ -2232,6 +2232,7 @@ nextinst: Node(scan->net); join(scan->net, nobj->name); scan->flags |= PORT_FOUND; + obptr = nobj; /* Now any previous instance of the same cell must */ /* insert the same additional pin as a no-connect. */