diff --git a/src/hilight.c b/src/hilight.c index fd2488fa..7f6833e1 100644 --- a/src/hilight.c +++ b/src/hilight.c @@ -884,6 +884,15 @@ int get_logic_value(int inst, int n) my_free(1221, &netname); return val; } +void print_stack(int *stack, int sp) +{ + int i; + fprintf(errfp, "stack: "); + for(i = 0; i < sp; i++) { + fprintf(errfp, "%d ", stack[i]); + } + fprintf(errfp, "\n"); +} int eval_logic_expr(int inst, int output) { @@ -903,7 +912,12 @@ int eval_logic_expr(int inst, int output) ptr2 = saveptr; while( (arg = my_strtok_r(ptr2, " ", &ptr1)) ) { ptr2 = NULL; - if(arg[0] == '~') { + if(arg[0] == 'd') { /* duplicate top element*/ + if(sp > 0 && sp < STACKMAX) { + stack[sp] = stack[sp - 1]; + sp++; + } + } else if(arg[0] == '~') { if(sp > 0) { sp--; if(stack[sp] != 2) stack[sp] = !stack[sp]; @@ -953,7 +967,9 @@ int eval_logic_expr(int inst, int output) sp--; } } else if(isdigit(arg[0])) { - if(sp < STACKMAX) stack[sp++] = get_logic_value(inst, atoi(arg)); + if(sp < STACKMAX) { + stack[sp++] = get_logic_value(inst, atoi(arg)); + } else dbg(0, "eval_logic_expr(): stack overflow!\n"); } } diff --git a/src/make_sym.awk b/src/make_sym.awk index bd0e596b..c23a4731 100755 --- a/src/make_sym.awk +++ b/src/make_sym.awk @@ -150,6 +150,7 @@ function rest_of_props() sub(/sig_type[ \t]*=[ \t]*[^ \t]+[ \t]?/, "") sub(/lab[ \t]*=[ \t]*[^ \t]+[ \t]?/, "") sub(/value[ \t]*=[ \t]*[^ \t]+[ \t]?/, "") + sub(/name[ \t]*=[ \t]*[^ \t]+[ \t]?/, "") sub(/^[ \t]*$/, "") return $0 } diff --git a/xschem_library/examples/mos_power_ampli.sym b/xschem_library/examples/mos_power_ampli.sym index 6291b67f..3191e71c 100644 --- a/xschem_library/examples/mos_power_ampli.sym +++ b/xschem_library/examples/mos_power_ampli.sym @@ -1,40 +1,32 @@ -v {xschem version=2.9.9 file_version=1.2 } +v {xschem version=2.9.9 file_version=1.2} G {} K {type=subcircuit format="@name @pinlist @symname" template="name=x1" net_name=true } -V {} -S {} -E {} + +T {@symname} -85.5 -6 0 0 0.3 0.3 {} +T {@name} 135 -62 0 0 0.2 0.2 {} L 4 -130 -50 130 -50 {} L 4 -130 50 130 50 {} L 4 -130 -50 -130 50 {} L 4 130 -50 130 50 {} +B 5 -152.5 -42.5 -147.5 -37.5 {name=MINUS dir=in } L 4 -150 -40 -130 -40 {} -L 4 -150 -20 -130 -20 {} -L 4 -150 0 -130 0 {} -L 4 130 -40 150 -40 {} -L 4 -150 20 -130 20 {} -L 4 -150 40 -130 40 {} -B 5 -152.5 -42.5 -147.5 -37.5 {name=MINUS dir=in name=p1 } -B 5 -152.5 -22.5 -147.5 -17.5 {name=PLUS dir=in name=p0 } -B 5 -152.5 -2.5 -147.5 2.5 {name=VSS dir=in name=p4 } -B 5 147.5 -42.5 152.5 -37.5 {name=OUT dir=out name=p5 } -B 5 -152.5 17.5 -147.5 22.5 {name=VPP dir=in name=p2 } -B 5 -152.5 37.5 -147.5 42.5 {name=VNN dir=in name=p3 } -T {@symname} -85.5 -6 0 0 0.3 0.3 {} -T {@name} 73.75 -63.25 0 0 0.2 0.2 {} T {MINUS} -125 -44 0 0 0.2 0.2 {} +B 5 -152.5 -22.5 -147.5 -17.5 {name=PLUS dir=in } +L 4 -150 -20 -130 -20 {} T {PLUS} -125 -24 0 0 0.2 0.2 {} +B 5 -152.5 -2.5 -147.5 2.5 {name=VSS dir=in } +L 4 -150 0 -130 0 {} T {VSS} -125 -4 0 0 0.2 0.2 {} +B 5 147.5 -42.5 152.5 -37.5 {name=OUT dir=out } +L 4 130 -40 150 -40 {} T {OUT} 125 -44 0 1 0.2 0.2 {} +B 5 -152.5 17.5 -147.5 22.5 {name=VPP dir=in } +L 4 -150 20 -130 20 {} T {VPP} -125 16 0 0 0.2 0.2 {} +B 5 -152.5 37.5 -147.5 42.5 {name=VNN dir=in } +L 4 -150 40 -130 40 {} T {VNN} -125 36 0 0 0.2 0.2 {} -T {@#MINUS:net_name} -132.5 -52.5 0 1 0.15 0.15 {layer=15} -T {@#PLUS:net_name} -132.5 -32.5 0 1 0.15 0.15 {layer=15} -T {@#VSS:net_name} -132.5 -12.5 0 1 0.15 0.15 {layer=15} -T {@#VPP:net_name} -132.5 7.5 0 1 0.15 0.15 {layer=15} -T {@#VNN:net_name} -132.5 27.5 0 1 0.15 0.15 {layer=15} -T {@#OUT:net_name} 132.5 -52.5 0 0 0.15 0.15 {layer=15}