fix portmap of single-bit unnamed nets in descend_schematic() (do not add [0] to single bit #netxxx nets)

This commit is contained in:
stefan schippers 2023-06-05 13:27:19 +02:00
parent 4f387f3bbe
commit a3ac9f6d1d
3 changed files with 13 additions and 3 deletions

View File

@ -1723,7 +1723,9 @@ int descend_schematic(int instnumber)
find_nth(net_node, ",", ((inst_number - 1) * mult + k - 1) % net_mult + 1));
single_n_ptr = single_n;
if(single_n_ptr[0] == '#') {
my_mstrcat(_ALLOC_ID_, &single_n, "[", my_itoa((inst_mult - inst_number + 1) * mult - k), "]", NULL);
if(mult > 1) {
my_mstrcat(_ALLOC_ID_, &single_n, "[", my_itoa((inst_mult - inst_number + 1) * mult - k), "]", NULL);
}
single_n_ptr = single_n + 1;
}
str_hash_lookup(&xctx->portmap[xctx->currsch + 1], single_p, single_n_ptr, XINSERT);

View File

@ -1907,16 +1907,20 @@ char *resolved_net(const char *net)
}
}
dbg(1, "path=%s\n", path);
my_strdup(_ALLOC_ID_, &exp_net, expandlabel(net, &mult));
my_strdup2(_ALLOC_ID_, &exp_net, expandlabel(net, &mult));
n_s1 = exp_net;
for(k = 0; k < mult; k++) {
char *net_name = my_strtok_r(n_s1, ",", "", &n_s2);
level = xctx->currsch;
n_s1 = NULL;
resolved_net = net_name;
dbg(1, "resolved_net(): resolved_net=%s\n", resolved_net);
while(level > start_level) {
entry = str_hash_lookup(&xctx->portmap[level], resolved_net, NULL, XLOOKUP);
if(entry) resolved_net = entry->value;
if(entry) {
resolved_net = entry->value;
dbg(1, "resolved_net(): while loop: resolved_net=%s\n", resolved_net);
}
else break;
level--;
}

View File

@ -3425,6 +3425,7 @@ const char *translate(int inst, const char* s)
my_strdup2(_ALLOC_ID_, &net, net_name(inst, 0, &multip, 0, 0));
}
if(multip == 1) {
char *rn;
len = strlen(path) + strlen(net) + 1;
dbg(1, "translate() @spice_get_voltage: inst=%s\n", xctx->inst[inst].instname);
dbg(1, " net=%s\n", net);
@ -3432,7 +3433,10 @@ const char *translate(int inst, const char* s)
* fqnet = my_malloc(_ALLOC_ID_, len);
* my_snprintf(fqnet, len, "%s%s", path, net);
*/
rn = resolved_net(net);
my_strdup2(_ALLOC_ID_, &fqnet, resolved_net(net));
if(rn) my_free(_ALLOC_ID_, &rn);
strtolower(fqnet);
dbg(1, "translate() @spice_get_voltage: fqnet=%s start_level=%d\n", fqnet, start_level);
idx = get_raw_index(fqnet);