Merge branch 'master' into netgen-1.5
This commit is contained in:
commit
210dfb25c3
|
|
@ -301,20 +301,20 @@ int GetNextLineNoNewline(char *delimiter)
|
||||||
|
|
||||||
if (linesize == 0) {
|
if (linesize == 0) {
|
||||||
/* Allocate memory for line */
|
/* Allocate memory for line */
|
||||||
linesize = 500;
|
linesize = 2000;
|
||||||
line = (char *)MALLOC(linesize);
|
line = (char *)MALLOC(linesize + 1);
|
||||||
linetok = (char *)MALLOC(linesize);
|
linetok = (char *)MALLOC(linesize + 1);
|
||||||
}
|
}
|
||||||
fgets(line, linesize, infile);
|
fgets(line, linesize, infile);
|
||||||
while (strlen(line) == linesize - 1) {
|
while (strlen(line) == linesize - 1) {
|
||||||
newbuf = (char *)MALLOC(linesize + 500);
|
newbuf = (char *)MALLOC(linesize + 501);
|
||||||
strcpy(newbuf, line);
|
strcpy(newbuf, line);
|
||||||
FREE(line);
|
FREE(line);
|
||||||
line = newbuf;
|
line = newbuf;
|
||||||
fgets(line + linesize - 1, 501, infile);
|
fgets(line + linesize - 1, 501, infile);
|
||||||
linesize += 500;
|
linesize += 500;
|
||||||
FREE(linetok);
|
FREE(linetok);
|
||||||
linetok = (char *)MALLOC(linesize);
|
linetok = (char *)MALLOC(linesize + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check for substitutions (verilog only). Make sure linetok is */
|
/* Check for substitutions (verilog only). Make sure linetok is */
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,31 @@ struct bus *NewBus()
|
||||||
return (wb);
|
return (wb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// Find a character c in a string, assuming that string may contain
|
||||||
|
// verilog names, where anything, including char c, may appear in the
|
||||||
|
// string if it is a backslash-escaped name. Only the position of
|
||||||
|
// character c outside of a verilog name is reported.
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
char *strvchr(char *string, char c)
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
|
||||||
|
for (s = string; *s != '\0'; s++) {
|
||||||
|
if (*s == '\\') {
|
||||||
|
while (*s != '\0' && *s != ' ') s++;
|
||||||
|
if (*s == '\0') {
|
||||||
|
Fprintf(stderr, "Error: Verilog backslash-escaped name"
|
||||||
|
" does not end with a space.\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (*s == c) return s;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// Get bus indexes from the notation name[a:b]. If there is only "name"
|
// Get bus indexes from the notation name[a:b]. If there is only "name"
|
||||||
// then look up the name in the bus hash list and return the index bounds.
|
// then look up the name in the bus hash list and return the index bounds.
|
||||||
|
|
@ -302,8 +327,8 @@ int GetBus(char *astr, struct bus *wb)
|
||||||
astr++;
|
astr++;
|
||||||
wb->end = 0;
|
wb->end = 0;
|
||||||
while((*astr != '\0') && (*astr != '}')) {
|
while((*astr != '\0') && (*astr != '}')) {
|
||||||
sigend = strchr(astr, ',');
|
sigend = strvchr(astr, ',');
|
||||||
if (sigend == NULL) sigend = strchr(astr, '}');
|
if (sigend == NULL) sigend = strvchr(astr, '}');
|
||||||
if (sigend == NULL) {
|
if (sigend == NULL) {
|
||||||
Printf("Badly formed wire bundle \"%s\"\n", astr - 1);
|
Printf("Badly formed wire bundle \"%s\"\n", astr - 1);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -332,15 +357,15 @@ int GetBus(char *astr, struct bus *wb)
|
||||||
while (*aastr != ' ' && *aastr != '\\' && *aastr != '\0') aastr++;
|
while (*aastr != ' ' && *aastr != '\\' && *aastr != '\0') aastr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
brackstart = strchr(aastr, '[');
|
brackstart = strvchr(aastr, '[');
|
||||||
if (brackstart != NULL) {
|
if (brackstart != NULL) {
|
||||||
brackend = strchr(aastr, ']');
|
brackend = strvchr(aastr, ']');
|
||||||
if (brackend == NULL) {
|
if (brackend == NULL) {
|
||||||
Printf("Badly formed array notation \"%s\"\n", astr);
|
Printf("Badly formed array notation \"%s\"\n", astr);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
*brackend = '\0';
|
*brackend = '\0';
|
||||||
colonptr = strchr(aastr, ':');
|
colonptr = strvchr(aastr, ':');
|
||||||
if (colonptr) *colonptr = '\0';
|
if (colonptr) *colonptr = '\0';
|
||||||
result = sscanf(brackstart + 1, "%d", &start);
|
result = sscanf(brackstart + 1, "%d", &start);
|
||||||
if (colonptr) *colonptr = ':';
|
if (colonptr) *colonptr = ':';
|
||||||
|
|
@ -1184,7 +1209,7 @@ skip_endmodule:
|
||||||
else { /* "assign" */
|
else { /* "assign" */
|
||||||
SkipTokComments(VLOG_PIN_CHECK_DELIMITERS);
|
SkipTokComments(VLOG_PIN_CHECK_DELIMITERS);
|
||||||
if (GetBus(nexttok, &wb) == 0) {
|
if (GetBus(nexttok, &wb) == 0) {
|
||||||
char *aptr = strchr(nexttok, '[');
|
char *aptr = strvchr(nexttok, '[');
|
||||||
if (aptr != NULL) {
|
if (aptr != NULL) {
|
||||||
*aptr = '\0';
|
*aptr = '\0';
|
||||||
/* Find object of first net in bus */
|
/* Find object of first net in bus */
|
||||||
|
|
@ -1238,7 +1263,7 @@ skip_endmodule:
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (GetBus(nexttok, &wb2) == 0) {
|
if (GetBus(nexttok, &wb2) == 0) {
|
||||||
char *aptr = strchr(nexttok, '[');
|
char *aptr = strvchr(nexttok, '[');
|
||||||
j = wb2.start;
|
j = wb2.start;
|
||||||
if (aptr != NULL) {
|
if (aptr != NULL) {
|
||||||
*aptr = '\0';
|
*aptr = '\0';
|
||||||
|
|
@ -1699,7 +1724,7 @@ nextinst:
|
||||||
|
|
||||||
for (bobj = CurrentCell->cell; bobj; bobj = bobj->next) {
|
for (bobj = CurrentCell->cell; bobj; bobj = bobj->next) {
|
||||||
if (bobj->type == PORT) {
|
if (bobj->type == PORT) {
|
||||||
if ((bptr = strchr(bobj->name, '[')) != NULL) {
|
if ((bptr = strvchr(bobj->name, '[')) != NULL) {
|
||||||
*bptr = '\0';
|
*bptr = '\0';
|
||||||
if (!strcmp(bobj->name, scan->net)) {
|
if (!strcmp(bobj->name, scan->net)) {
|
||||||
*bptr = '[';
|
*bptr = '[';
|
||||||
|
|
@ -1711,7 +1736,7 @@ nextinst:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (bobj->type == NODE) {
|
else if (bobj->type == NODE) {
|
||||||
if ((bptr = strchr(bobj->name, '[')) != NULL) {
|
if ((bptr = strvchr(bobj->name, '[')) != NULL) {
|
||||||
*bptr = '\0';
|
*bptr = '\0';
|
||||||
if (!strcmp(bobj->name, scan->net)) {
|
if (!strcmp(bobj->name, scan->net)) {
|
||||||
if (sscanf(bptr + 1, "%d", &testidx) == 1) {
|
if (sscanf(bptr + 1, "%d", &testidx) == 1) {
|
||||||
|
|
@ -1772,8 +1797,8 @@ nextinst:
|
||||||
if (*netname == '{') {
|
if (*netname == '{') {
|
||||||
is_bundle = 1;
|
is_bundle = 1;
|
||||||
netname++;
|
netname++;
|
||||||
cptr = strchr(netname, ',');
|
cptr = strvchr(netname, ',');
|
||||||
if (cptr == NULL) cptr = strchr(netname, '}');
|
if (cptr == NULL) cptr = strvchr(netname, '}');
|
||||||
if (cptr == NULL) cptr = netname + strlen(netname) - 1;
|
if (cptr == NULL) cptr = netname + strlen(netname) - 1;
|
||||||
cchar = *cptr;
|
cchar = *cptr;
|
||||||
*cptr = '\0';
|
*cptr = '\0';
|
||||||
|
|
@ -1782,7 +1807,7 @@ nextinst:
|
||||||
// Remove indexed part of scan->net
|
// Remove indexed part of scan->net
|
||||||
if (GetBus(netname, &wbb) == 0) {
|
if (GetBus(netname, &wbb) == 0) {
|
||||||
i = wbb.start;
|
i = wbb.start;
|
||||||
if ((bptr = strchr(netname, '[')) != NULL)
|
if ((bptr = strvchr(netname, '[')) != NULL)
|
||||||
*bptr = '\0';
|
*bptr = '\0';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -1825,15 +1850,15 @@ nextinst:
|
||||||
|
|
||||||
netname = cptr + 1;
|
netname = cptr + 1;
|
||||||
if (cptr) *cptr = cchar; /* Restore previous bundle delimiter */
|
if (cptr) *cptr = cchar; /* Restore previous bundle delimiter */
|
||||||
cptr = strchr(netname, ',');
|
cptr = strvchr(netname, ',');
|
||||||
if (cptr == NULL) cptr = strchr(netname, '}');
|
if (cptr == NULL) cptr = strvchr(netname, '}');
|
||||||
if (cptr == NULL) cptr = netname + strlen(netname) - 1;
|
if (cptr == NULL) cptr = netname + strlen(netname) - 1;
|
||||||
cchar = *cptr;
|
cchar = *cptr;
|
||||||
*cptr = '\0';
|
*cptr = '\0';
|
||||||
|
|
||||||
if (GetBus(netname, &wbb) == 0) {
|
if (GetBus(netname, &wbb) == 0) {
|
||||||
i = wbb.start;
|
i = wbb.start;
|
||||||
if ((bptr = strchr(netname, '[')) != NULL)
|
if ((bptr = strvchr(netname, '[')) != NULL)
|
||||||
*bptr = '\0';
|
*bptr = '\0';
|
||||||
}
|
}
|
||||||
else i = -1;
|
else i = -1;
|
||||||
|
|
@ -1901,7 +1926,7 @@ nextinst:
|
||||||
char *bptr2;
|
char *bptr2;
|
||||||
char *scanroot;
|
char *scanroot;
|
||||||
scanroot = strsave(scan->net);
|
scanroot = strsave(scan->net);
|
||||||
brackptr = strchr(scanroot, '[');
|
brackptr = strvchr(scanroot, '[');
|
||||||
if (brackptr) *brackptr = '\0';
|
if (brackptr) *brackptr = '\0';
|
||||||
|
|
||||||
if (arraystart == -1) {
|
if (arraystart == -1) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue