mirror of
https://github.com/StefanSchippers/xschem.git
synced 2026-08-22 06:07:29 +02:00
resolved_net(): resolve nets passed to symbols via attributes, avoid using dtoa_eng() in returned spice voltages, use dtoa(), since it may be used further in tcl expressions.
This commit is contained in:
+1
-1
@@ -310,7 +310,7 @@ void backannotate_at_cursor_b_pos(xRect *r, Graph_ctx *gr)
|
|||||||
raw->annot_sweep_idx = sweep_idx;
|
raw->annot_sweep_idx = sweep_idx;
|
||||||
for(i = 0; i < raw->nvars; ++i) {
|
for(i = 0; i < raw->nvars; ++i) {
|
||||||
char s[100];
|
char s[100];
|
||||||
raw->cursor_b_val[i] = interpolate_yval(i, p, cursor2, sweep_idx, (p < ofs_end));
|
raw->cursor_b_val[i] = interpolate_yval(i, p, cursor2, sweep_idx, (p < ofs_end));
|
||||||
my_snprintf(s, S(s), "%.5g", raw->cursor_b_val[i]);
|
my_snprintf(s, S(s), "%.5g", raw->cursor_b_val[i]);
|
||||||
/* tclvareval("array set ngspice::ngspice_data [list {", raw->names[i], "} ", s, "]", NULL); */
|
/* tclvareval("array set ngspice::ngspice_data [list {", raw->names[i], "} ", s, "]", NULL); */
|
||||||
Tcl_SetVar2(interp, "ngspice::ngspice_data", raw->names[i], s, TCL_GLOBAL_ONLY);
|
Tcl_SetVar2(interp, "ngspice::ngspice_data", raw->names[i], s, TCL_GLOBAL_ONLY);
|
||||||
|
|||||||
+17
-13
@@ -2069,18 +2069,14 @@ char *resolved_net(const char *net)
|
|||||||
my_strdup(_ALLOC_ID_, &rnet, net);
|
my_strdup(_ALLOC_ID_, &rnet, net);
|
||||||
return rnet;
|
return rnet;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(net) {
|
if(net) {
|
||||||
char *n_s1, *n_s2;
|
char *n_s1, *n_s2;
|
||||||
int k, mult;
|
int k, mult, skip = 0;
|
||||||
char *exp_net = NULL;
|
char *exp_net = NULL;
|
||||||
char *resolved_net;
|
char *resolved_net = NULL;
|
||||||
int level = xctx->currsch;
|
int level = xctx->currsch;
|
||||||
int start_level;
|
int start_level;
|
||||||
char *path = xctx->sch_path[level] + 1;
|
char *path = xctx->sch_path[level] + 1, *path2 = NULL, *path2_ptr = NULL;
|
||||||
char *path2 = NULL;
|
|
||||||
char *path2_ptr;
|
|
||||||
int skip = 0;
|
|
||||||
|
|
||||||
start_level = sch_waves_loaded();
|
start_level = sch_waves_loaded();
|
||||||
if(start_level == -1) start_level = 0;
|
if(start_level == -1) start_level = 0;
|
||||||
@@ -2099,12 +2095,21 @@ char *resolved_net(const char *net)
|
|||||||
char *net_name = my_strtok_r(n_s1, ",", "", 0, &n_s2);
|
char *net_name = my_strtok_r(n_s1, ",", "", 0, &n_s2);
|
||||||
level = xctx->currsch;
|
level = xctx->currsch;
|
||||||
n_s1 = NULL;
|
n_s1 = NULL;
|
||||||
resolved_net = net_name;
|
my_strdup2(_ALLOC_ID_, &resolved_net, net_name);
|
||||||
dbg(1, "resolved_net(): resolved_net=%s\n", resolved_net);
|
dbg(1, "resolved_net(): resolved_net=%s\n", resolved_net);
|
||||||
while(level > start_level) {
|
if(xctx->currsch > 0) { /* check if net passed by attribute instead of by port */
|
||||||
|
const char *ptr = get_tok_value(xctx->hier_attr[xctx->currsch - 1].prop_ptr, resolved_net, 0);
|
||||||
|
if(ptr && ptr[0]) {
|
||||||
|
my_strdup2(_ALLOC_ID_, &resolved_net, ptr);
|
||||||
|
level--;
|
||||||
|
dbg(1, "lcc[%d].prop_ptr=%s\n", xctx->currsch - 1, xctx->hier_attr[xctx->currsch - 1].prop_ptr);
|
||||||
|
dbg(1, "resolved_net(): resolved_net=%s\n", resolved_net);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while(level > start_level) { /* get net from parent nets attached to port if resolved_net is a port */
|
||||||
entry = str_hash_lookup(&xctx->portmap[level], resolved_net, NULL, XLOOKUP);
|
entry = str_hash_lookup(&xctx->portmap[level], resolved_net, NULL, XLOOKUP);
|
||||||
if(entry) {
|
if(entry) {
|
||||||
resolved_net = entry->value;
|
my_strdup2(_ALLOC_ID_, &resolved_net, entry->value);
|
||||||
dbg(1, "resolved_net(): while loop: resolved_net=%s\n", resolved_net);
|
dbg(1, "resolved_net(): while loop: resolved_net=%s\n", resolved_net);
|
||||||
}
|
}
|
||||||
else break;
|
else break;
|
||||||
@@ -2122,12 +2127,11 @@ char *resolved_net(const char *net)
|
|||||||
}
|
}
|
||||||
path2_ptr++;
|
path2_ptr++;
|
||||||
}
|
}
|
||||||
dbg(1, "path2=%s\n", path2);
|
dbg(1, "path2=%s level=%d start_level=%d\n", path2, level, start_level);
|
||||||
dbg(1, "level=%d start_level=%d\n", level, start_level);
|
|
||||||
|
|
||||||
my_mstrcat(_ALLOC_ID_, &rnet, path2, resolved_net, NULL);
|
my_mstrcat(_ALLOC_ID_, &rnet, path2, resolved_net, NULL);
|
||||||
if(k < mult - 1) my_strcat(_ALLOC_ID_, &rnet, ",");
|
if(k < mult - 1) my_strcat(_ALLOC_ID_, &rnet, ",");
|
||||||
}
|
}
|
||||||
|
if(resolved_net) my_free(_ALLOC_ID_, &resolved_net);
|
||||||
my_free(_ALLOC_ID_, &path2);
|
my_free(_ALLOC_ID_, &path2);
|
||||||
my_free(_ALLOC_ID_, &exp_net);
|
my_free(_ALLOC_ID_, &exp_net);
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-8
@@ -3537,8 +3537,8 @@ static char *get_pin_attr(const char *token, int inst)
|
|||||||
my_strdup2(_ALLOC_ID_, &net, net_name(inst, n, &multip, 0, 0));
|
my_strdup2(_ALLOC_ID_, &net, net_name(inst, n, &multip, 0, 0));
|
||||||
if(multip == 1 && net && net[0]) {
|
if(multip == 1 && net && net[0]) {
|
||||||
char *rn;
|
char *rn;
|
||||||
dbg(1, "translate() @spice_get_voltage: inst=%d\n", inst);
|
dbg(1, "get_pin_attr() spice_get_voltage: inst=%d\n", inst);
|
||||||
dbg(1, " net=%s\n", net);
|
dbg(1, " net=%s\n", net);
|
||||||
rn = resolved_net(net);
|
rn = resolved_net(net);
|
||||||
if(rn) {
|
if(rn) {
|
||||||
my_strdup2(_ALLOC_ID_, &fqnet, rn);
|
my_strdup2(_ALLOC_ID_, &fqnet, rn);
|
||||||
@@ -3553,7 +3553,7 @@ static char *get_pin_attr(const char *token, int inst)
|
|||||||
else if(idx < 0) {
|
else if(idx < 0) {
|
||||||
valstr = "UNDEF";
|
valstr = "UNDEF";
|
||||||
} else {
|
} else {
|
||||||
valstr = dtoa_eng(val);
|
valstr = dtoa(val);
|
||||||
}
|
}
|
||||||
my_strdup2(_ALLOC_ID_, &pin_attr_value, valstr);
|
my_strdup2(_ALLOC_ID_, &pin_attr_value, valstr);
|
||||||
dbg(1, "inst %d, net=%s, fqnet=%s idx=%d valstr=%s\n", inst, net, fqnet, idx, valstr);
|
dbg(1, "inst %d, net=%s, fqnet=%s idx=%d valstr=%s\n", inst, net, fqnet, idx, valstr);
|
||||||
@@ -3610,6 +3610,7 @@ static char *get_pin_attr(const char *token, int inst)
|
|||||||
}
|
}
|
||||||
my_free(_ALLOC_ID_, &pin_attr);
|
my_free(_ALLOC_ID_, &pin_attr);
|
||||||
my_free(_ALLOC_ID_, &pin_num_or_name);
|
my_free(_ALLOC_ID_, &pin_num_or_name);
|
||||||
|
dbg(1, "get_pin_attr(): returning value=%s\n", value);
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3842,7 +3843,7 @@ const char *translate(int inst, const char* s)
|
|||||||
xctx->tok_size = 5;
|
xctx->tok_size = 5;
|
||||||
len = 5;
|
len = 5;
|
||||||
} else {
|
} else {
|
||||||
valstr = dtoa_eng(val);
|
valstr = dtoa(val);
|
||||||
len = xctx->tok_size;
|
len = xctx->tok_size;
|
||||||
}
|
}
|
||||||
if(len) {
|
if(len) {
|
||||||
@@ -3916,7 +3917,7 @@ const char *translate(int inst, const char* s)
|
|||||||
xctx->tok_size = 5;
|
xctx->tok_size = 5;
|
||||||
len = 5;
|
len = 5;
|
||||||
} else {
|
} else {
|
||||||
valstr = dtoa_eng(val);
|
valstr = dtoa(val);
|
||||||
len = xctx->tok_size;
|
len = xctx->tok_size;
|
||||||
}
|
}
|
||||||
if(len) {
|
if(len) {
|
||||||
@@ -3986,7 +3987,7 @@ const char *translate(int inst, const char* s)
|
|||||||
xctx->tok_size = 5;
|
xctx->tok_size = 5;
|
||||||
len = 5;
|
len = 5;
|
||||||
} else {
|
} else {
|
||||||
valstr = dtoa_eng(val);
|
valstr = dtoa(val);
|
||||||
len = xctx->tok_size;
|
len = xctx->tok_size;
|
||||||
}
|
}
|
||||||
if(len) {
|
if(len) {
|
||||||
@@ -4051,7 +4052,7 @@ const char *translate(int inst, const char* s)
|
|||||||
double val1 = gnd1 ? 0.0 : xctx->raw->cursor_b_val[idx1];
|
double val1 = gnd1 ? 0.0 : xctx->raw->cursor_b_val[idx1];
|
||||||
double val2 = gnd2 ? 0.0 : xctx->raw->cursor_b_val[idx2];
|
double val2 = gnd2 ? 0.0 : xctx->raw->cursor_b_val[idx2];
|
||||||
val = val1 - val2;
|
val = val1 - val2;
|
||||||
valstr = dtoa_eng(val);
|
valstr = dtoa(val);
|
||||||
len = xctx->tok_size;
|
len = xctx->tok_size;
|
||||||
}
|
}
|
||||||
if(len) {
|
if(len) {
|
||||||
@@ -4119,7 +4120,7 @@ const char *translate(int inst, const char* s)
|
|||||||
xctx->tok_size = 0;
|
xctx->tok_size = 0;
|
||||||
len = 0;
|
len = 0;
|
||||||
} else {
|
} else {
|
||||||
valstr = dtoa_eng(val);
|
valstr = dtoa(val);
|
||||||
len = xctx->tok_size;
|
len = xctx->tok_size;
|
||||||
}
|
}
|
||||||
if(len) {
|
if(len) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
v {xschem version=3.4.4 file_version=1.2
|
v {xschem version=3.4.5 file_version=1.2
|
||||||
*
|
*
|
||||||
* This file is part of XSCHEM,
|
* This file is part of XSCHEM,
|
||||||
* a schematic capture and Spice/Vhdl/Verilog netlisting tool for circuit
|
* a schematic capture and Spice/Vhdl/Verilog netlisting tool for circuit
|
||||||
@@ -34,3 +34,4 @@ B 5 9.375 -10.625 10.625 -9.375 {name=tap dir=inout}
|
|||||||
B 5 -0.625 -0.625 0.625 0.625 {name=bus dir=inout}
|
B 5 -0.625 -0.625 0.625 0.625 {name=bus dir=inout}
|
||||||
T {@lab} 12.5 -12.5 3 0 0.27 0.27 {}
|
T {@lab} 12.5 -12.5 3 0 0.27 0.27 {}
|
||||||
T {@#0:net_name} 31.25 -12.5 3 0 0.15 0.15 {layer=15 hide=instance}
|
T {@#0:net_name} 31.25 -12.5 3 0 0.15 0.15 {layer=15 hide=instance}
|
||||||
|
T {@#0:spice_get_voltage} 41.25 -12.5 3 0 0.15 0.15 {layer=15 hide=instance}
|
||||||
|
|||||||
Reference in New Issue
Block a user