Compare commits

..

4 Commits

Author SHA1 Message Date
R. Timothy Edwards 9b4185fe62 Reverted a change from a long time ago regarding removal of zero
valued resistors connecting two ports.  I do not recall exactly
why I put that in but it appears to cause incorrect behavior.
2025-12-28 14:54:07 -05:00
R. Timothy Edwards ddd95c4fe6 Added a few lines to the setup file parser so that if there is a
missing brace in the file (a common error), then the fact that
there is an unevaluated command when the file has finished being
read will trigger an evaluation of the unfinished code and emit
an error.  Previously, the command and anything after the
unterminated brace would just silently get ignored, which was not
helpful for debugging setup syntax errors.
2025-12-11 12:08:31 -05:00
R. Timothy Edwards c0c9993980 Corrected a major error with the verilog parser. The verilog
parser was not assigning the correct file number for the first
input file, which resulted in the effect that if the first
file read sets definitions for the netlist, then those definitions
are wiped out on the following file read.  There has been a workaround
to read from /dev/null on the first file read so that the file number
is set on all subsequent reads.  This fix avoids the need for the
workaround.
2025-12-08 16:45:27 -05:00
R. Timothy Edwards 8a20b90074 Corrected an issue that can cause a segfault in an incorrect run
setup when a cell has no pins.  Didn't really analyze the error
condition, just caught and handled the condition to avoid the
segfault.
2025-12-08 13:09:50 -05:00
5 changed files with 40 additions and 9 deletions

View File

@ -1 +1 @@
1.5.311 1.5.314

View File

@ -2019,7 +2019,7 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
} }
} }
/* Do NOT remove shorting devices that */ /* Beware remove shorting devices that */
/* connect two ports. Otherwise the */ /* connect two ports. Otherwise the */
/* port lists get screwed up. It is */ /* port lists get screwed up. It is */
/* better in that case to force the */ /* better in that case to force the */
@ -2027,6 +2027,10 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
/* This is ignored for a top-level cell */ /* This is ignored for a top-level cell */
/* because it will just show up as a */ /* because it will just show up as a */
/* port mismatch error as it should. */ /* port mismatch error as it should. */
/* (12/12/2025---disabling this worked; */
/* may need to go back to a failing */
/* example and determine how pin */
/* matching gets scrambled.) */
if ((not_top == TRUE) && if ((not_top == TRUE) &&
(ecomp->cell1->class != CLASS_ISOURCE)) { (ecomp->cell1->class != CLASS_ISOURCE)) {
@ -2039,7 +2043,13 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
else if (ob2->node == node2) else if (ob2->node == node2)
found2 = TRUE; found2 = TRUE;
if (found1 && found2) { if (found1 && found2) {
found = FALSE; Fprintf(stdout, "Warning: "
"zero-valued device connects "
"port %s to another port; pin "
"matching may be affected.\n",
ob2->name);
// found = FALSE;
found = TRUE;
break; break;
} }
} }

View File

@ -7544,6 +7544,11 @@ struct nlist *addproxies(struct hashlist *p, void *clientdata)
} }
else { else {
lob = ob; lob = ob;
if (ob == NULL) {
Fprintf(stdout, "Error: Premature end of pin list on "
"instance %s.\n", firstpin->instance.name);
break;
}
ob->type = i++; ob->type = i++;
ob = ob->next; ob = ob->next;
} }

View File

@ -76,7 +76,8 @@ struct hashdict verilogparams;
// Global storage for verilog definitions // Global storage for verilog definitions
struct hashdict verilogdefs; struct hashdict verilogdefs;
// Record file pointer that is associated with the hash tables // Record file pointer that is associated with the hash tables
int hashfile = -1; int hashfilep = -1; /* for parameters */
int hashfiled = -1; /* for definitions */
// Global storage for wire buses // Global storage for wire buses
struct hashdict buses; struct hashdict buses;
@ -2999,18 +3000,25 @@ char *ReadVerilogTop(char *fname, int *fnum, int blackbox)
hashfunc = hashcase; hashfunc = hashcase;
} }
if ((hashfile != -1) && (hashfile != *fnum)) { if ((hashfilep != -1) && (hashfilep != *fnum)) {
/* Started a new file, so remove all the parameters and definitions */ /* Started a new file, so remove all the parameters */
RecurseHashTable(&verilogparams, freeprop); RecurseHashTable(&verilogparams, freeprop);
HashKill(&verilogparams); HashKill(&verilogparams);
hashfilep = -1;
}
if ((hashfiled != -1) && (hashfiled != *fnum)) {
/* Started a new file, so remove all the definitions */
RecurseHashTable(&verilogdefs, freeprop); RecurseHashTable(&verilogdefs, freeprop);
HashKill(&verilogdefs); HashKill(&verilogdefs);
hashfile = -1; hashfiled = -1;
} }
if (hashfile == -1) { if (hashfilep == -1) {
InitializeHashTable(&verilogparams, OBJHASHSIZE); InitializeHashTable(&verilogparams, OBJHASHSIZE);
hashfilep = filenum;
}
if (hashfiled == -1) {
InitializeHashTable(&verilogdefs, OBJHASHSIZE); InitializeHashTable(&verilogdefs, OBJHASHSIZE);
hashfile = *fnum; hashfiled = filenum;
} }
definitions = &verilogdefs; definitions = &verilogdefs;

View File

@ -516,6 +516,14 @@ proc netgen::lvs { name1 name2 {setupfile setup.tcl} {logfile comp.out} args} {
} }
} }
close $fsetup close $fsetup
if {$command != {}} {
# Incomplete command. Evaluate it to get a meaningful error message
if {[catch {uplevel 1 [list namespace eval netgen $command]} msg]} {
set msg [string trimright $msg "\n"]
puts stderr "Error $setupfile:$sline (ignoring), $msg"
incr perrors
}
}
} else { } else {
puts stdout "Error: Cannot read the setup file $setupfile" puts stdout "Error: Cannot read the setup file $setupfile"
} }