[experimental] added configurable sweep parameter for x-axis
This commit is contained in:
parent
e0cad38f17
commit
ab1fdce64e
37
src/draw.c
37
src/draw.c
|
|
@ -1283,7 +1283,8 @@ void arc_bbox(double x, double y, double r, double a, double b,
|
|||
|
||||
/* Convex Nonconvex Complex */
|
||||
#define Polygontype Nonconvex
|
||||
/* 20180914 added fill param */
|
||||
/* Unused 'what' parameter used in spice data draw_graph()
|
||||
* to avoid unnecessary clipping (what = 0) */
|
||||
void drawpolygon(int c, int what, double *x, double *y, int points, int poly_fill, int dash)
|
||||
{
|
||||
double x1,y1,x2,y2;
|
||||
|
|
@ -1303,10 +1304,16 @@ void drawpolygon(int c, int what, double *x, double *y, int points, int poly_fil
|
|||
if( !xctx->only_probes && (x2-x1)<3.0 && (y2-y1)<3.0) return;
|
||||
|
||||
p = my_malloc(38, sizeof(XPoint) * points);
|
||||
for(i=0;i<points; i++) {
|
||||
clip_xy_to_short(X_TO_SCREEN(x[i]), Y_TO_SCREEN(y[i]), &sx, &sy);
|
||||
p[i].x = sx;
|
||||
p[i].y = sy;
|
||||
if(what) {
|
||||
for(i=0;i<points; i++) {
|
||||
clip_xy_to_short(X_TO_SCREEN(x[i]), Y_TO_SCREEN(y[i]), &sx, &sy);
|
||||
p[i].x = sx;
|
||||
p[i].y = sy;
|
||||
}
|
||||
} else {
|
||||
/* preserve cache locality working on contiguous data */
|
||||
for(i=0;i<points; i++) p[i].x = X_TO_SCREEN(x[i]);
|
||||
for(i=0;i<points; i++) p[i].y = Y_TO_SCREEN(y[i]);
|
||||
}
|
||||
if(dash) {
|
||||
char dash_arr[2];
|
||||
|
|
@ -1651,6 +1658,7 @@ void draw_graph(int c, int i)
|
|||
char *node = NULL, *color = NULL;
|
||||
double txtsizelab, txtsizey, txtsizex, tmp;
|
||||
struct int_hashentry *entry;
|
||||
int sweep_idx = 0;
|
||||
|
||||
/* container ( ebnedding rectangle) coordinates */
|
||||
rx1 = xctx->rect[c][i].x1;
|
||||
|
|
@ -1671,7 +1679,8 @@ void draw_graph(int c, int i)
|
|||
x1 = rx1 + marginx;
|
||||
x2 = rx2 - marginx/1.3;
|
||||
y1 = ry1 + marginy;
|
||||
y2 = ry2 - marginy;
|
||||
tmp = marginy < 28 ? 28 : marginy;
|
||||
y2 = ry2 - tmp; /* some more space to accomodate x-axis label */
|
||||
w = (x2 - x1);
|
||||
h = (y2 - y1);
|
||||
|
||||
|
|
@ -1688,6 +1697,11 @@ void draw_graph(int c, int i)
|
|||
if(val[0]) wx2 = atof(val);
|
||||
val = get_tok_value(xctx->rect[c][i].prop_ptr,"y2",0);
|
||||
if(val[0]) wy2 = atof(val);
|
||||
val = get_tok_value(xctx->rect[c][i].prop_ptr,"sweep",0);
|
||||
if(val[0]) {
|
||||
entry = int_hash_lookup(xctx->raw_table, val, 0, XLOOKUP);
|
||||
if(entry && entry->value) sweep_idx = entry->value;
|
||||
}
|
||||
|
||||
/* cache coefficients for faster graph coord transformations */
|
||||
cx = (x2 - x1) / (wx2 - wx1);
|
||||
|
|
@ -1749,13 +1763,16 @@ void draw_graph(int c, int i)
|
|||
my_strdup2(1390, &color, get_tok_value(xctx->rect[c][i].prop_ptr,"color",0));
|
||||
nptr = node;
|
||||
cptr = color;
|
||||
/* draw sweep variable on x-axis */
|
||||
draw_string(3, NOW, xctx->names[sweep_idx], 2, 1, 0, 0, rx1+2, ry2-1, txtsizelab, txtsizelab);
|
||||
/* process each node given in "node" attribute, get also associated color if any*/
|
||||
while( (ntok = my_strtok_r(nptr, " ", &saven)) ) {
|
||||
ctok = my_strtok_r(cptr, " ", &savec);
|
||||
nptr = cptr = NULL;
|
||||
dbg(1, "ntok=%s ctok=%s\n", ntok, ctok? ctok: "NULL");
|
||||
if(ctok && ctok[0]) wave_color = atoi(ctok);
|
||||
draw_string(wave_color, NOW, ntok, 0, 0, 0, 0, rx1 + rw/6 * wcnt, ry1, txtsizelab, txtsizex);
|
||||
/* draw node labels in graph */
|
||||
draw_string(wave_color, NOW, ntok, 0, 0, 0, 0, rx1 + rw/6 * wcnt, ry1, txtsizelab, txtsizelab);
|
||||
/* clipping everything outside graph area */
|
||||
bbox(START, 0.0, 0.0, 0.0, 0.0);
|
||||
bbox(ADD,x1, y1, x2, y2);
|
||||
|
|
@ -1773,11 +1790,11 @@ void draw_graph(int c, int i)
|
|||
double end = (wx1 <= wx2) ? wx2 : wx1;
|
||||
|
||||
/* skip if nothing in viewport */
|
||||
if(xctx->values[0][xctx->npoints -1] > start) {
|
||||
if(xctx->values[sweep_idx][xctx->npoints -1] > start) {
|
||||
/* Process "npoints" simulation items
|
||||
* p loop split repeated 2 timed (for xx and yy points) to preserve cache locality */
|
||||
for(p = 0 ; p < xctx->npoints; p++) {
|
||||
xx = xctx->values[0][p];
|
||||
xx = xctx->values[sweep_idx][p];
|
||||
if(xx > end) {
|
||||
break;
|
||||
}
|
||||
|
|
@ -1798,7 +1815,7 @@ void draw_graph(int c, int i)
|
|||
poly_npoints++;
|
||||
}
|
||||
/* plot data */
|
||||
drawpolygon(wave_color, NOW, xarr, yarr, poly_npoints, 0, 0);
|
||||
drawpolygon(wave_color, 0, xarr, yarr, poly_npoints, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,24 @@ L 4 410 -150 570 -150 {}
|
|||
L 4 570 -170 570 -150 {}
|
||||
L 4 570 -170 690 -170 {}
|
||||
L 7 1090 -260 2520 -260 {}
|
||||
B 2 260 -1080 720 -900 {flags=1
|
||||
y1 = 0
|
||||
y2 = 1
|
||||
divy = 5
|
||||
x1=1e-7
|
||||
x2=5e-7
|
||||
divx=8
|
||||
node="v(cal) v(saout)"
|
||||
color="4 5"}
|
||||
B 2 260 -1270 720 -1090 {flags=1
|
||||
y1 = 0.64
|
||||
y2 = 0.66
|
||||
divy = 5
|
||||
x1=1e-7
|
||||
x2=5e-7
|
||||
divx=8
|
||||
node="v(minus) v(plus)"
|
||||
color="4 5"}
|
||||
T {CAL} 140 -180 0 1 0.4 0.4 {}
|
||||
T {EN} 140 -130 0 1 0.4 0.4 {}
|
||||
T {CALIBRATION
|
||||
|
|
@ -32,8 +50,10 @@ Output on SAOUT
|
|||
Gaussian Threshold variation (via delvto parameter) is added to all MOS transistors.} 1110 -240 0 0 0.6 0.6 {}
|
||||
T {.param ABSVAR=0.05
|
||||
delvto='agauss(0,ABSVAR,3)'} 1390 -120 0 0 0.6 0.6 {layer=8}
|
||||
T {Select one or more graphs (and no other objects)
|
||||
and use arrow keys to zoom / pan waveforms} 300 -1310 0 0 0.3 0.3 {}
|
||||
N 120 -470 120 -450 {lab=TEMPERAT}
|
||||
N 160 -1180 190 -1180 {lab=VSS}
|
||||
N 160 -1180 190 -1180 {lab=#net1}
|
||||
N 160 -1150 160 -1130 {lab=VSS}
|
||||
N 160 -1230 160 -1210 {lab=VSSI}
|
||||
N 1120 -1100 1150 -1100 {lab=VSS}
|
||||
|
|
@ -149,28 +169,28 @@ N 2180 -810 2210 -810 {lab=VCC}
|
|||
N 2150 -880 2180 -880 {lab=VCC}
|
||||
N 2180 -880 2180 -840 {lab=VCC}
|
||||
N 2180 -780 2180 -710 {lab=SAOUT}
|
||||
N 590 -770 620 -770 {lab=VCC}
|
||||
N 420 -830 420 -800 {lab=SP}
|
||||
N 520 -830 620 -830 {lab=SP}
|
||||
N 620 -830 620 -800 {lab=SP}
|
||||
N 420 -830 520 -830 {lab=SP}
|
||||
N 420 -770 450 -770 {lab=VCC}
|
||||
N 390 -640 420 -640 {lab=VSS}
|
||||
N 620 -640 650 -640 {lab=VSS}
|
||||
N 460 -640 580 -640 {lab=GP}
|
||||
N 460 -670 460 -640 {lab=GP}
|
||||
N 420 -670 460 -670 {lab=GP}
|
||||
N 420 -740 420 -670 {lab=GP}
|
||||
N 620 -740 620 -670 {lab=OUTDIFF}
|
||||
N 620 -610 620 -590 {lab=VSSI}
|
||||
N 420 -590 620 -590 {lab=VSSI}
|
||||
N 420 -610 420 -590 {lab=VSSI}
|
||||
N 490 -550 520 -550 {lab=VSSI}
|
||||
N 520 -590 520 -550 {lab=VSSI}
|
||||
N 530 -900 560 -900 {lab=VCC}
|
||||
N 530 -870 530 -830 {lab=SP}
|
||||
N 530 -950 530 -930 {lab=VCC}
|
||||
N 620 -700 680 -700 {lab=OUTDIFF}
|
||||
N 590 -680 620 -680 {lab=VCC}
|
||||
N 420 -740 420 -710 {lab=SP}
|
||||
N 520 -740 620 -740 {lab=SP}
|
||||
N 620 -740 620 -710 {lab=SP}
|
||||
N 420 -740 520 -740 {lab=SP}
|
||||
N 420 -680 450 -680 {lab=VCC}
|
||||
N 390 -550 420 -550 {lab=VSS}
|
||||
N 620 -550 650 -550 {lab=VSS}
|
||||
N 460 -550 580 -550 {lab=GP}
|
||||
N 460 -580 460 -550 {lab=GP}
|
||||
N 420 -580 460 -580 {lab=GP}
|
||||
N 420 -650 420 -580 {lab=GP}
|
||||
N 620 -650 620 -580 {lab=OUTDIFF}
|
||||
N 620 -520 620 -500 {lab=VSSI}
|
||||
N 420 -500 620 -500 {lab=VSSI}
|
||||
N 420 -520 420 -500 {lab=VSSI}
|
||||
N 490 -460 520 -460 {lab=VSSI}
|
||||
N 520 -500 520 -460 {lab=VSSI}
|
||||
N 530 -810 560 -810 {lab=VCC}
|
||||
N 530 -780 530 -740 {lab=SP}
|
||||
N 530 -860 530 -840 {lab=VCC}
|
||||
N 620 -610 680 -610 {lab=OUTDIFF}
|
||||
C {title.sym} 160 -30 0 0 {name=l1 author="Stefan Schippers"}
|
||||
C {ipin.sym} 110 -850 0 0 { name=p92 lab=CAL }
|
||||
C {ipin.sym} 110 -910 0 0 { name=p93 lab=PLUS }
|
||||
|
|
@ -324,28 +344,32 @@ C {pmos4-v.sym} 2160 -810 0 0 {name=M6 verilog_gate=pmos del=50,50,50 model=pmos
|
|||
C {lab_pin.sym} 2210 -810 0 1 {name=p18 lab=VCC}
|
||||
C {lab_pin.sym} 2150 -880 0 0 {name=p19 lab=VCC}
|
||||
C {lab_pin.sym} 2140 -810 0 0 {name=l2 lab=EN}
|
||||
C {pmos4-v.sym} 640 -770 0 1 {name=M18 verilog_gate=pmos del=50,50,50 model=pmos w=4u l=0.4u extra="delvto='agauss(0,ABSVAR,3)'"}
|
||||
C {lab_pin.sym} 590 -770 0 0 {name=p20 lab=VCC}
|
||||
C {pmos4-v.sym} 400 -770 0 0 {name=M25 verilog_gate=pmos del=50,50,50 model=pmos w=4u l=0.4u extra="delvto='agauss(0,ABSVAR,3)'"}
|
||||
C {lab_pin.sym} 450 -770 0 1 {name=p21 lab=VCC}
|
||||
C {lab_pin.sym} 390 -640 0 0 {name=p22 lab=VSS}
|
||||
C {lab_pin.sym} 650 -640 0 1 {name=p23 lab=VSS}
|
||||
C {lab_pin.sym} 490 -550 0 0 {name=p24 lab=VSSI}
|
||||
C {pmos4-v.sym} 510 -900 0 0 {name=M28 verilog_gate=pmos del=50,50,50 model=pmos w=2u l=0.5u extra="delvto='agauss(0,ABSVAR,3)'"}
|
||||
C {lab_pin.sym} 560 -900 0 1 {name=p25 lab=VCC}
|
||||
C {lab_pin.sym} 530 -950 0 0 {name=p26 lab=VCC}
|
||||
C {lab_pin.sym} 490 -900 0 0 {name=l7 lab=GP}
|
||||
C {lab_pin.sym} 460 -670 0 1 {name=l9 lab=GP}
|
||||
C {lab_pin.sym} 380 -770 0 0 {name=l10 lab=MINUS}
|
||||
C {lab_pin.sym} 660 -770 0 1 {name=l11 lab=PLUS}
|
||||
C {lab_pin.sym} 680 -700 0 1 {name=l12 lab=OUTDIFF}
|
||||
C {nmos4-v.sym} 600 -640 0 0 {name=M26 verilog_gate=nmos del=50,50,50 model=nmos w=1u l=0.5u extra="delvto='agauss(0,ABSVAR,3)'"}
|
||||
C {nmos4-v.sym} 440 -640 0 1 {name=M1 verilog_gate=nmos del=50,50,50 model=nmos w=1u l=0.5u extra="delvto='agauss(0,ABSVAR,3)'"}
|
||||
C {parax_cap.sym} 500 -630 0 0 {name=c2 value=4f}
|
||||
C {lab_pin.sym} 530 -850 0 0 {name=l13 lab=SP}
|
||||
C {pmos4-v.sym} 640 -680 0 1 {name=M18 verilog_gate=pmos del=50,50,50 model=pmos w=4u l=0.4u extra="delvto='agauss(0,ABSVAR,3)'"}
|
||||
C {lab_pin.sym} 590 -680 0 0 {name=p20 lab=VCC}
|
||||
C {pmos4-v.sym} 400 -680 0 0 {name=M25 verilog_gate=pmos del=50,50,50 model=pmos w=4u l=0.4u extra="delvto='agauss(0,ABSVAR,3)'"}
|
||||
C {lab_pin.sym} 450 -680 0 1 {name=p21 lab=VCC}
|
||||
C {lab_pin.sym} 390 -550 0 0 {name=p22 lab=VSS}
|
||||
C {lab_pin.sym} 650 -550 0 1 {name=p23 lab=VSS}
|
||||
C {lab_pin.sym} 490 -460 0 0 {name=p24 lab=VSSI}
|
||||
C {pmos4-v.sym} 510 -810 0 0 {name=M28 verilog_gate=pmos del=50,50,50 model=pmos w=2u l=0.5u extra="delvto='agauss(0,ABSVAR,3)'"}
|
||||
C {lab_pin.sym} 560 -810 0 1 {name=p25 lab=VCC}
|
||||
C {lab_pin.sym} 530 -860 0 0 {name=p26 lab=VCC}
|
||||
C {lab_pin.sym} 490 -810 0 0 {name=l7 lab=GP}
|
||||
C {lab_pin.sym} 460 -580 0 1 {name=l9 lab=GP}
|
||||
C {lab_pin.sym} 380 -680 0 0 {name=l10 lab=MINUS}
|
||||
C {lab_pin.sym} 660 -680 0 1 {name=l11 lab=PLUS}
|
||||
C {lab_pin.sym} 680 -610 0 1 {name=l12 lab=OUTDIFF}
|
||||
C {nmos4-v.sym} 600 -550 0 0 {name=M26 verilog_gate=nmos del=50,50,50 model=nmos w=1u l=0.5u extra="delvto='agauss(0,ABSVAR,3)'"}
|
||||
C {nmos4-v.sym} 440 -550 0 1 {name=M1 verilog_gate=nmos del=50,50,50 model=nmos w=1u l=0.5u extra="delvto='agauss(0,ABSVAR,3)'"}
|
||||
C {parax_cap.sym} 500 -540 0 0 {name=c2 value=4f}
|
||||
C {lab_pin.sym} 530 -760 0 0 {name=l13 lab=SP}
|
||||
C {launcher.sym} 930 -260 0 0 {name=h2
|
||||
descr="Simulate"
|
||||
tclcommand="xschem netlist; xschem simulate"}
|
||||
C {parax_cap.sym} 980 -1090 0 0 {name=c4 value=5f}
|
||||
C {parax_cap.sym} 1470 -1090 0 0 {name=c6 value=5f}
|
||||
C {parax_cap.sym} 1960 -1090 0 0 {name=c7 value=5f}
|
||||
C {launcher.sym} 325 -1355 0 0 {name=h1
|
||||
descr="Select arrow and
|
||||
Ctrl-Right-Click to load waveforms"
|
||||
tclcommand="xschem raw_read $netlist_dir/[file rootname [xschem get current_name]].raw"}
|
||||
|
|
|
|||
Loading…
Reference in New Issue