avoid tcleval() of strings returned by translate2(), show currents of resistors and diodes when annotating.

This commit is contained in:
Stefan Frederik 2022-11-04 13:35:06 +01:00
parent b98d836be3
commit 3d49ca63c9
6 changed files with 30 additions and 41 deletions

View File

@ -75,8 +75,10 @@ const char *tcl_hook2(char **res)
unescaped_res = str_replace(*res, "\\}", "}");
tclvareval("tclpropeval2 {", unescaped_res, "}" , NULL);
my_strdup2(1286, &result, tclresult());
/* dbg(0, "tcl_hook2: return: %s\n", result);*/
return result;
} else {
/* dbg(0, "tcl_hook2: return: %s\n", *res); */
return *res;
}
}
@ -3151,7 +3153,7 @@ const char *translate(int inst, const char* s)
if(n == 1) {
strtolower(dev);
len = strlen(path) + strlen(xctx->inst[inst].instname) +
strlen(dev) + 11; /* some extra chars for i(..) wrapper */
strlen(dev) + 21; /* some extra chars for i(..) wrapper */
dbg(1, "dev=%s\n", dev);
fqdev = my_malloc(1599, len);
if(!sim_is_xyce) {
@ -3162,7 +3164,9 @@ const char *translate(int inst, const char* s)
dbg(1, "prefix=%c, path=%s\n", prefix, path);
vsource = (prefix == 'v') || (prefix == 'e');
if(vsource) my_snprintf(fqdev, len, "i(%c.%s%s.%s)", prefix, path, xctx->inst[inst].instname, dev);
else my_snprintf(fqdev, len, "i(@%c.%s%s.%s)", prefix, path, xctx->inst[inst].instname, dev);
else if(prefix == 'd')
my_snprintf(fqdev, len, "i(@%c.%s%s.%s[id])", prefix, path, xctx->inst[inst].instname, dev);
else my_snprintf(fqdev, len, "i(@%c.%s%s.%s[i])", prefix, path, xctx->inst[inst].instname, dev);
} else {
my_snprintf(fqdev, len, "i(%s%s.%s)", path, xctx->inst[inst].instname, dev);
}
@ -3278,7 +3282,7 @@ const char *translate(int inst, const char* s)
}
my_strdup2(1550, &dev, xctx->inst[inst].instname);
strtolower(dev);
len = strlen(path) + strlen(dev) + 11; /* some extra chars for i(..) wrapper */
len = strlen(path) + strlen(dev) + 21; /* some extra chars for i(..) wrapper */
dbg(1, "dev=%s\n", dev);
fqdev = my_malloc(1556, len);
if(!sim_is_xyce) {
@ -3286,10 +3290,12 @@ const char *translate(int inst, const char* s)
int vsource = (prefix == 'v') || (prefix == 'e');
if(path[0]) {
if(vsource) my_snprintf(fqdev, len, "i(%c.%s%s)", prefix, path, dev);
else my_snprintf(fqdev, len, "i(@%c.%s%s)", prefix, path, dev);
else if(prefix=='d') my_snprintf(fqdev, len, "i(@%c.%s%s[id])", prefix, path, dev);
else my_snprintf(fqdev, len, "i(@%c.%s%s[i])", prefix, path, dev);
} else {
if(vsource) my_snprintf(fqdev, len, "i(%s)", dev);
else my_snprintf(fqdev, len, "i(@%s)", dev);
else if(prefix == 'd') my_snprintf(fqdev, len, "i(@%s[id])", dev);
else my_snprintf(fqdev, len, "i(@%s[i])", dev);
}
} else {
my_snprintf(fqdev, len, "i(%s%s)", path, dev);
@ -3436,7 +3442,7 @@ const char *translate2(Lcc *lcc, int level, char* s)
size = CADCHUNKALLOC;
my_realloc(1528, &result, size);
result[0] = '\0';
dbg(1, "translate2(): s=%s\n", s);
dbg(1, "translate2(): s=%s, level=%d\n", s, level);
while (1) {
c = *s++;
if (c == '\\') {
@ -3544,6 +3550,7 @@ const char *translate2(Lcc *lcc, int level, char* s)
my_free(1532, &token);
my_free(1533, &value);
dbg(1, "translate2(): result=%s\n", result);
return tcl_hook2(&result);
/* return tcl_hook2(&result); */
return result;
}

View File

@ -1,4 +1,5 @@
v {xschem version=3.0.0 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {type=diode
format="@name @pinlist @model area=@area"
@ -27,3 +28,4 @@ T {@name} 15 -18.75 0 0 0.2 0.2 {}
T {@model} 15 -6.25 0 0 0.2 0.2 {}
T {@#0:net_name} 10 -28.75 0 0 0.15 0.15 {layer=15}
T {@#1:net_name} 10 20 0 0 0.15 0.15 {layer=15}
T {@spice_get_current} -12.5 -2.5 0 1 0.2 0.2 {layer=15}

View File

@ -1,4 +1,5 @@
v {xschem version=3.0.0 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {type=resistor
@ -41,9 +42,10 @@ L 4 5 -25 5 -20 {}
B 5 -2.5 -32.5 2.5 -27.5 {name=P dir=inout propag=1 pinnumber=1 goto=1}
B 5 -2.5 27.5 2.5 32.5 {name=M dir=inout propag=0 pinnumber=2 goto=0}
T {@name} -15 -13.75 0 1 0.2 0.2 {}
T {@value} 15 -6.25 0 0 0.2 0.2 {}
T {@value} 15 -3.75 0 0 0.2 0.2 {}
T {@#0:pinnumber} -10 -26.25 0 1 0.2 0.2 {layer=13}
T {@#1:pinnumber} -10 16.25 0 1 0.2 0.2 {layer=13}
T {@#0:net_name} 10 -28.75 0 0 0.15 0.15 {layer=15}
T {@#1:net_name} 10 20 0 0 0.15 0.15 {layer=15}
T {m=@m} -15 1.25 0 1 0.2 0.2 {}
T {@spice_get_current} 12.5 -16.25 0 0 0.2 0.2 {layer=15}

View File

@ -1,4 +1,5 @@
v {xschem version=2.9.8 file_version=1.2}
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {type=diode
format="@spiceprefix@name @pinlist @model"
@ -28,3 +29,4 @@ T {@name} 15 -18.75 0 0 0.2 0.2 {}
T {@#0:net_name} 10 -28.75 0 0 0.15 0.15 {layer=15}
T {@#1:net_name} 10 20 0 0 0.15 0.15 {layer=15}
T {@model} 15 6.25 0 0 0.2 0.2 {}
T {@spice_get_current} -22.5 -2.5 0 1 0.2 0.2 {layer=15}

View File

@ -178,7 +178,7 @@ C {nmos3.sym} 1090 -850 0 0 {name=xm1 model=irf540 m=1
program=evince
url="https://www.vishay.com/docs/91021/irf540.pdf" net_name=true}
C {res.sym} 960 -820 0 1 {name=R0 m=1 value=190 net_name=true}
C {lab_wire.sym} 920 -530 0 0 {name=l8 lab=GB}
C {lab_wire.sym} 880 -530 0 0 {name=l8 lab=GB}
C {res.sym} 340 -1140 0 1 {name=R2 m=1 value=50 net_name=true}
C {res.sym} 180 -1140 0 1 {name=R3 m=1 value=50 net_name=true}
C {lab_pin.sym} 340 -1170 0 0 {name=p10 lab=VPP}
@ -265,7 +265,7 @@ C {lab_pin.sym} 340 -550 0 1 {name=p13 lab=E9}
C {lab_pin.sym} 560 -530 0 0 {name=p19 lab=C8}
C {lab_pin.sym} 560 -650 0 1 {name=p20 lab=E8}
C {lab_pin.sym} 840 -940 0 0 {name=p21 lab=E11}
C {lab_pin.sym} 260 -250 0 1 {name=p22 lab=E3}
C {lab_pin.sym} 260 -260 0 1 {name=p22 lab=E3}
C {lab_pin.sym} 260 -350 0 0 {name=p26 lab=C3}
C {lab_pin.sym} 50 -300 0 0 {name=p30 lab=B3}
C {lab_pin.sym} 520 -580 0 0 {name=p33 lab=VSS}
@ -328,14 +328,6 @@ C {ngspice_get_expr.sym} 860 -1010 0 0 {name=r17
node="[format %.4g [expr ([ngspice::get_voltage e4] - [ngspice::get_voltage e11]) * [ngspice::get_current \{q4[ic]\}]]] W"
descr = power
}
C {ngspice_get_expr.sym} 380 -1120 0 0 {name=r20
node="[ngspice::get_current \{r2[i]\}]"
descr = current
}
C {ngspice_get_expr.sym} 860 -1130 0 0 {name=r21
node="[ngspice::get_current \{r9[i]\}]"
descr = current
}
C {ngspice_get_expr.sym} 800 -1060 0 1 {name=r23
node="[ngspice::get_current \{q4[ib]\}]"
descr = Ib
@ -356,11 +348,11 @@ C {ngspice_get_expr.sym} 1000 -800 0 0 {name=r28
node="[to_eng [ngspice::get_current \{r0[i]\}]]"
descr = current
}
C {ngspice_get_expr.sym} 280 -290 2 1 {name=r29
C {ngspice_get_expr.sym} 300 -290 2 1 {name=r29
node="[format %.4g [expr ([ngspice::get_voltage c3] - [ngspice::get_voltage e3]) * [ngspice::get_current \{q3[ic]\}]]] W"
descr = power
}
C {ngspice_get_expr.sym} 240 -280 2 0 {name=r30
C {ngspice_get_expr.sym} 300 -260 2 1 {name=r30
node="[format %.4g [expr [ngspice::get_voltage b3] - [ngspice::get_voltage e3]]]"
descr = vbe
}
@ -368,7 +360,7 @@ C {ngspice_get_expr.sym} 340 -470 0 0 {name=r31
node="[format %.4g [expr ([ngspice::get_voltage e9] - [ngspice::get_voltage c3]) * [ngspice::get_current \{r5[i]\}]]] W"
descr = power
}
C {ngspice_get_expr.sym} 570 -850 0 0 {name=r32
C {ngspice_get_expr.sym} 570 -910 0 0 {name=r32
node="[format %.4g [expr ([ngspice::get_voltage e6] - [ngspice::get_voltage c6]) * [ngspice::get_current \{q6[ic]\}]]] W"
descr = power
}
@ -388,15 +380,7 @@ C {ngspice_get_expr.sym} 330 -850 0 1 {name=r36
node="[format %.4g [expr [ngspice::get_current \{q2[ic]\}] / [ngspice::get_current \{q2[ib]\}] ] ]"
descr = beta
}
C {ngspice_get_expr.sym} 890 -1230 0 1 {name=r39
node="[ngspice::get_current \{d0[id]\}]"
descr = current
}
C {ngspice_get_expr.sym} 1210 -1240 0 1 {name=r40
node="[ngspice::get_current \{d1[id]\}]"
descr = current
}
C {ngspice_get_expr.sym} 160 -320 0 0 {name=r42
C {ngspice_get_expr.sym} 160 -350 0 0 {name=r42
node="[format %.4g [expr ([ngspice::get_node v(vpp)] - [ngspice::get_voltage b3]) * [ngspice::get_current \{r1[i]\}]]] W"
descr = power
}
@ -405,10 +389,6 @@ node="[format %.4g [expr \{([ngspice::get_node v(vpp)] - [ngspice::get_voltage o
descr = power
}
C {lab_wire.sym} 910 -690 0 1 {name=l40 lab=OUTI}
C {ngspice_get_expr.sym} 1000 -480 0 0 {name=r44
node="[ngspice::get_current \{r7[i]\}]"
descr = current
}
C {ngspice_get_expr.sym} 1130 -510 2 1 {name=r46
node="[format %.4g [expr \{([ngspice::get_voltage outi] - [ngspice::get_node v(vnn)]) * [ngspice::get_current vd]\}]] W"
descr = power

View File

@ -269,10 +269,6 @@ tclcommand="
C {capa.sym} 2080 -1370 0 0 {name=C2 m=1 value="100u"}
C {ngspice_get_expr.sym} 95 1005 0 0 {name=r18
node="[ngspice::get_current \{r2[i]\}]"
descr = current
}
C {ngspice_get_expr.sym} 55 -545 0 1 {name=r1
node="[ngspice::get_current \{r19[i]\}]"
descr = current
}
C {ngspice_get_expr.sym} 2150 -10 2 0 {name=r29