From 3d49ca63c9c949a8197cec316a94ce322e408da3 Mon Sep 17 00:00:00 2001 From: Stefan Frederik Date: Fri, 4 Nov 2022 13:35:06 +0100 Subject: [PATCH] avoid tcleval() of strings returned by translate2(), show currents of resistors and diodes when annotating. --- src/token.c | 21 +++++++++----- xschem_library/devices/diode.sym | 4 ++- xschem_library/devices/res.sym | 6 ++-- xschem_library/devices/zener.sym | 4 ++- xschem_library/examples/mos_power_ampli.sch | 32 ++++----------------- xschem_library/examples/poweramp_lcc.sch | 4 --- 6 files changed, 30 insertions(+), 41 deletions(-) diff --git a/src/token.c b/src/token.c index 599ec27d..076c72fd 100644 --- a/src/token.c +++ b/src/token.c @@ -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; } diff --git a/xschem_library/devices/diode.sym b/xschem_library/devices/diode.sym index 787d7c7b..1c81b483 100644 --- a/xschem_library/devices/diode.sym +++ b/xschem_library/devices/diode.sym @@ -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} diff --git a/xschem_library/devices/res.sym b/xschem_library/devices/res.sym index 108b78f4..b5512909 100644 --- a/xschem_library/devices/res.sym +++ b/xschem_library/devices/res.sym @@ -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} diff --git a/xschem_library/devices/zener.sym b/xschem_library/devices/zener.sym index 5668ed6b..a6ed4e60 100644 --- a/xschem_library/devices/zener.sym +++ b/xschem_library/devices/zener.sym @@ -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} diff --git a/xschem_library/examples/mos_power_ampli.sch b/xschem_library/examples/mos_power_ampli.sch index 12590f3d..bc113808 100644 --- a/xschem_library/examples/mos_power_ampli.sch +++ b/xschem_library/examples/mos_power_ampli.sch @@ -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 diff --git a/xschem_library/examples/poweramp_lcc.sch b/xschem_library/examples/poweramp_lcc.sch index 7c0a97e2..008ce5c6 100644 --- a/xschem_library/examples/poweramp_lcc.sch +++ b/xschem_library/examples/poweramp_lcc.sch @@ -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