Modified the behavior of the parallel combination of devices with

"similar no connect" pins so that it is not done on top-level
netlists.  This is mainly to deal with the problem where connections
that would normally be pins (but may have, for example, been
connected to a voltage source in a schematic that was deleted because
it was not a netlistable device) are treated as no-connects.
The parallel combination of devices with similar no-connects can then
differ between netlists that differ in describing transistors as
fingered vs. individual devices.  This is an obscure case, but the
output of netgen then becomes not only wrong but difficult to
understand what happened, so it is better to avoid.
This commit is contained in:
Tim Edwards 2021-05-13 15:50:12 -04:00
parent 92e8fed8be
commit 362fb7120b
1 changed files with 10 additions and 1 deletions

View File

@ -3166,7 +3166,16 @@ int CombineParallel(char *model, int file)
nodecount = (int *)CALLOC((tp->nodename_cache_maxnodenum + 1), sizeof(int));
if (GlobalParallelOpen) {
/* Do not combine open connections on top level cells. The situation */
/* where it is meant to optimize run time, namely large digital */
/* standard cell layouts, will generally have ports and not be run on */
/* the top level cell, while a small analog circuit might. A */
/* combination of running on the top level and a difference between */
/* individual devices in one netlist vs. fingered devices in the */
/* can cause parallelizing devices with similar "no-connect" pins to */
/* produce incorrect results. */
if (GlobalParallelOpen && !(tp->flags & CELL_TOP)) {
for (ob = tp->cell; ob; ob = ob->next) {
if (ob->node >= 0)
if (ob->type != NODE)