Merge branch 'master' into netgen-1.5
This commit is contained in:
commit
9251ce2a48
|
|
@ -7343,8 +7343,6 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
|
||||||
/* so apply only to black-box (CELL_PLACEHOLDER) entries. */
|
/* so apply only to black-box (CELL_PLACEHOLDER) entries. */
|
||||||
/* (Semi-hack: Allow "!" global flag) */
|
/* (Semi-hack: Allow "!" global flag) */
|
||||||
|
|
||||||
if (((tc1->flags & CELL_PLACEHOLDER) && (tc2->flags & CELL_PLACEHOLDER)) ||
|
|
||||||
(NodeClasses == NULL)) {
|
|
||||||
ob1 = tc1->cell;
|
ob1 = tc1->cell;
|
||||||
bangptr1 = strrchr(ob1->name, '!');
|
bangptr1 = strrchr(ob1->name, '!');
|
||||||
if (bangptr1 && (*(bangptr1 + 1) == '\0'))
|
if (bangptr1 && (*(bangptr1 + 1) == '\0'))
|
||||||
|
|
@ -7367,11 +7365,22 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
|
||||||
name1 = ob1->name;
|
name1 = ob1->name;
|
||||||
name2 = ob2->name;
|
name2 = ob2->name;
|
||||||
|
|
||||||
/* Recognize proxy pins as matching */
|
/* Recognize proxy pins as matching unconnected pins */
|
||||||
if (!strncmp(name1, "proxy", 5)) name1 +=5;
|
if (!strncmp(name1, "proxy", 5) && (ob2->node == -1)) name1 +=5;
|
||||||
if (!strncmp(name2, "proxy", 5)) name2 +=5;
|
if (!strncmp(name2, "proxy", 5) && (ob1->node == -1)) name2 +=5;
|
||||||
|
|
||||||
if ((*matchfunc)(name1, name2)) {
|
if ((*matchfunc)(name1, name2)) {
|
||||||
|
|
||||||
|
/* If both sides have unconnected nodes, then pins with */
|
||||||
|
/* matching names are an automatic match. Otherwise, if */
|
||||||
|
/* matching black-box entries, then pins are always */
|
||||||
|
/* matched by name. */
|
||||||
|
|
||||||
|
if (((ob1->node == -1) && (ob2->node == -1)) ||
|
||||||
|
(((tc1->flags & CELL_PLACEHOLDER) &&
|
||||||
|
(tc2->flags & CELL_PLACEHOLDER)) ||
|
||||||
|
(NodeClasses == NULL))) {
|
||||||
|
|
||||||
ob2->model.port = i; /* save order */
|
ob2->model.port = i; /* save order */
|
||||||
*(cover + i) = (char)1;
|
*(cover + i) = (char)1;
|
||||||
|
|
||||||
|
|
@ -7398,13 +7407,15 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
|
||||||
Tcl_NewStringObj(ob2->name, -1));
|
Tcl_NewStringObj(ob2->name, -1));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (bangptr2) *bangptr2 = '!';
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (bangptr2) *bangptr2 = '!';
|
if (bangptr2) *bangptr2 = '!';
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ob1 = ob1->next;
|
ob1 = ob1->next;
|
||||||
}
|
|
||||||
if (bangptr1) *bangptr1 = '!';
|
if (bangptr1) *bangptr1 = '!';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -7456,6 +7467,12 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
|
||||||
if ((obt == NULL) && (notempty == 1)) {
|
if ((obt == NULL) && (notempty == 1)) {
|
||||||
ob2->node = -2; // Will run this through cleanuppins
|
ob2->node = -2; // Will run this through cleanuppins
|
||||||
needclean2 = 1;
|
needclean2 = 1;
|
||||||
|
|
||||||
|
/* On the top level, missing pins are an error, even if */
|
||||||
|
/* they appear to match unconnected pins on the other side. */
|
||||||
|
if (CompareQueue == NULL)
|
||||||
|
result = 0;
|
||||||
|
|
||||||
#ifdef TCL_NETGEN
|
#ifdef TCL_NETGEN
|
||||||
if (dolist) {
|
if (dolist) {
|
||||||
Tcl_ListObjAppendElement(netgeninterp, plist1,
|
Tcl_ListObjAppendElement(netgeninterp, plist1,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue