running average ravg() wave processing operator

This commit is contained in:
Stefan Frederik 2022-02-16 20:24:22 +01:00
parent 841974d579
commit 798ecd74f3
10 changed files with 253 additions and 156 deletions

View File

@ -321,6 +321,16 @@ char *dtoa(double i)
return s;
}
char *dtoa_prec(double i)
{
static char s[50];
int n;
n = my_snprintf(s, S(s), "%.10e", i);
if(xctx) xctx->tok_size = n;
return s;
}
size_t my_mstrcat(int id, char **str, const char *add, ...)
{
va_list args;

View File

@ -508,6 +508,39 @@ int get_raw_index(const char *node)
return -1;
}
/* what:
* 0: clear data
* 1: store value
* 2: retrieve value
*/
static double ravg_store(int what , int i, int p, int last, double integ)
{
static int imax = 0;
static double **arr = NULL;
int j;
if(what == 0 && imax) {
for(j = 0; j < imax; j++) {
my_free(1512, &arr[j]);
}
my_free(1513, &arr);
imax = 0;
} else if(what == 1) {
if(i >= imax) {
int new_size = i + 4;
my_realloc(1514, &arr, sizeof(double *) * new_size);
for(j = imax; j < new_size; j++) {
arr[j] = my_calloc(1515, last + 1, sizeof(double));
}
imax = new_size;
}
arr[i][p] = integ;
} else if(what == 2) {
return arr[i][p];
}
return 0.0;
}
#define STACKMAX 200
#define PLUS -2
#define MINUS -3
@ -528,14 +561,15 @@ int get_raw_index(const char *node)
#define DERIV -36
#define EXCH -37
#define DUP -38
#define RAVG -39 /* running average */
#define NUMBER -60
typedef struct {
int i;
double d;
double prev;
double prevy;
double prevx;
double prev;
int prevp;
} Stack1;
int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr)
@ -576,6 +610,7 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr)
else if(!strcmp(n, "log10()")) stack1[stackptr1++].i = LOG10;
else if(!strcmp(n, "integ()")) stack1[stackptr1++].i = INTEG;
else if(!strcmp(n, "avg()")) stack1[stackptr1++].i = AVG;
else if(!strcmp(n, "ravg()")) stack1[stackptr1++].i = RAVG;
else if(!strcmp(n, "deriv()")) stack1[stackptr1++].i = DERIV;
else if(!strcmp(n, "exch()")) stack1[stackptr1++].i = EXCH;
else if(!strcmp(n, "dup()")) stack1[stackptr1++].i = DUP;
@ -596,6 +631,7 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr)
dbg(1, " plot_raw_custom_data(): stack1= %d\n", stack1[stackptr1 - 1].i);
} /* while(n = my_strtok_r(...) */
my_free(575, &ntok_copy);
ravg_store(0, 0, 0, 0, 0.0); /* clear data */
for(p = first ; p <= last; p++) {
stackptr2 = 0;
for(i = 0; i < stackptr1; i++) { /* number */
@ -621,13 +657,32 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr)
stackptr2--;
break;
case DIVIS:
if(p == first) stack1[i].prev = 0;
if(stack2[stackptr2 - 1]) {
stack2[stackptr2 - 2] = stack2[stackptr2 - 2] / stack2[stackptr2 - 1];
} else {
stack2[stackptr2 - 2] = stack1[i].prev;
stack2[stackptr2 - 2] = y[p - 1];
}
stack1[i].prev = stack2[stackptr2 - 2];
stackptr2--;
break;
case RAVG:
if( p == first ) {
integ = 0;
stack1[i].prevy = stack2[stackptr2 - 2];
stack1[i].prev = 0;
stack1[i].prevp = first;
} else {
integ = stack1[i].prev + (x[p] - x[p - 1]) * (stack1[i].prevy + stack2[stackptr2 - 2]) * 0.5;
stack1[i].prevy = stack2[stackptr2 - 2];
stack1[i].prev = integ;
}
ravg_store(1, i, p, last, integ);
while(stack1[i].prevp <= last && x[p] - x[stack1[i].prevp] > stack2[stackptr2 - 1]) {
dbg(1, "%g --> %g\n", x[stack1[i].prevp], x[p]);
stack1[i].prevp++;
}
stack2[stackptr2 - 2] = (integ - ravg_store(2, i, stack1[i].prevp, 0, 0)) / stack2[stackptr2 - 1];
dbg(1, "integ=%g ravg_store=%g\n", integ, ravg_store(2, i, stack1[i].prevp, 0, 0));
stackptr2--;
break;
case POW:
@ -648,19 +703,18 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr)
case AVG:
if( p == first ) {
avg = stack2[stackptr2 - 1];
stack1[i].prev = stack2[stackptr2 - 1];
stack1[i].prevy = stack2[stackptr2 - 1];
stack1[i].prevx = x[p];
stack1[i].prev = stack2[stackptr2 - 1];
} else {
if((x[p] != stack1[i].prevx)) {
avg = stack1[i].prev * (x[p - 1] - stack1[i].prevx) +
if((x[p] != x[first])) {
avg = stack1[i].prev * (x[p - 1] - x[first]) +
(x[p] - x[p - 1]) * (stack1[i].prevy + stack2[stackptr2 - 1]) * 0.5;
avg /= (x[p] - stack1[i].prevx);
avg /= (x[p] - x[first]);
} else {
avg = stack1[i].prev;
}
stack1[i].prev = avg;
stack1[i].prevy = stack2[stackptr2 - 1];
stack1[i].prev = avg;
}
stack2[stackptr2 - 1] = avg;
break;
@ -671,25 +725,25 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr)
case INTEG:
if( p == first ) {
integ = 0;
stack1[i].prev = 0;
stack1[i].prevy = stack2[stackptr2 - 1];
stack1[i].prev = 0;
} else {
integ = stack1[i].prev + (x[p] - x[p - 1]) * (stack1[i].prevy + stack2[stackptr2 - 1]) * 0.5;
stack1[i].prev = integ;
stack1[i].prevy = stack2[stackptr2 - 1];
stack1[i].prev = integ;
}
stack2[stackptr2 - 1] = integ;
break;
case DERIV:
if( p == first ) {
deriv = 0;
stack1[i].prev = 0;
stack1[i].prevy = stack2[stackptr2 - 1];
stack1[i].prev = 0;
} else {
if((x[p] != x[p - 1]))
deriv = (stack2[stackptr2 - 1] - stack1[i].prevy) / (x[p] - x[p - 1]);
else
deriv = stack1[i].prevy;
deriv = stack1[i].prev;
stack1[i].prevy = stack2[stackptr2 - 1] ;
stack1[i].prev = deriv;
}
@ -727,7 +781,8 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr)
} /* if(stackptr2 > 0) */
} /* for(i = 0; i < stackptr1; i++) */
y[p] = stack2[0];
}
} /* for(p = first ...) */
ravg_store(0, 0, 0, 0, 0.0); /* clear data */
return xctx->graph_nvars;
}

View File

@ -2059,7 +2059,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
if(idx >= 0) {
int np = xctx->graph_npoints[dataset];
for(p = 0; p < np; p++) {
Tcl_AppendResult(interp, dtoa(get_raw_value(dataset, idx, p)), " ", NULL);
Tcl_AppendResult(interp, dtoa_prec(get_raw_value(dataset, idx, p)), " ", NULL);
}
}
} else if(argc > 2 && !strcmp(argv[2], "datasets")) {

View File

@ -1324,6 +1324,7 @@ extern size_t my_strcat(int id, char **, const char *);
extern size_t my_mstrcat(int id, char **str, const char *append_str, ...);
extern char *itoa(int i);
extern char *dtoa(double i);
extern char *dtoa_prec(double i);
extern double my_round(double a);
extern double round_to_n_digits(double x, int n);
extern double floor_to_n_digits(double x, int n);

View File

@ -80,14 +80,14 @@ that's me...)
T {Simulation
Graphs
} 1530 -550 0 0 0.6 0.6 {layer=4}
T {Bus rippers} 570 -450 0 0 0.6 0.6 {layer=4}
T {Bus rippers} 580 -440 0 0 0.6 0.6 {layer=4}
N 820 -420 940 -420 {lab=#net1}
N 860 -460 860 -370 {lab=#net2}
N 860 -390 920 -390 {lab=#net2}
N 880 -430 910 -420 {lab=#net1}
N 370 -380 630 -380 {lab=BUS[4:0]}
N 500 -470 500 -390 {lab=BUS[1]}
N 400 -430 400 -390 {lab=BUS[2]}
N 380 -370 640 -370 {lab=BUS[4:0]}
N 510 -460 510 -380 {lab=BUS[1]}
N 410 -420 410 -380 {lab=BUS[2]}
C {poweramp.sym} 480 -650 0 0 {name=x1
tclcommand="xschem descend"}
C {tesla.sym} 160 -530 0 0 {name=x2}
@ -115,10 +115,10 @@ program=x-www-browser
}
C {rlc.sym} 160 -730 0 0 {name=x0}
C {lab_pin.sym} 630 -380 0 1 {name=l2 sig_type=std_logic lab=BUS[4:0]}
C {bus_connect.sym} 490 -380 0 0 {name=l3 lab=BUS[1]}
C {bus_connect_nolab.sym} 390 -380 0 0 {name=r1}
C {lab_pin.sym} 400 -430 3 1 {name=l4 sig_type=std_logic lab=BUS[2]}
C {lab_pin.sym} 640 -370 0 1 {name=l2 sig_type=std_logic lab=BUS[4:0]}
C {bus_connect.sym} 500 -370 0 0 {name=l3 lab=BUS[1]}
C {bus_connect_nolab.sym} 400 -370 0 0 {name=r1}
C {lab_pin.sym} 410 -420 3 1 {name=l4 sig_type=std_logic lab=BUS[2]}
C {LCC_instances.sym} 160 -410 0 0 {name=x7}
C {test_backannotated_subckt.sym} 160 -370 0 0 {name=x10}
C {plot_manipulation.sym} 160 -330 0 0 {name=x11}
@ -1465,3 +1465,4 @@ tclcommand="xschem descend"}
C {test_doublepin.sym} 160 -90 0 0 {name=x19}
C {classD_amp.sym} 480 -730 0 0 {name=x20}
C {delta_sigma.sym} 480 -570 0 0 {name=x21}
C {solar_panel.sym} 480 -530 0 0 {name=x22}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -4,16 +4,16 @@ K {}
V {}
S {}
E {}
B 2 1010 -1110 1810 -710 {flags=graph
y1=0
y2=2
B 2 1020 -850 1820 -560 {flags=graph
y1=-0.017
y2=1.3
ypos1=0
ypos2=2
divy=5
subdivy=1
unity=1
x1=1.24319e-06
x2=1.33458e-06
x1=1.23884e-06
x2=1.33992e-06
divx=5
subdivx=1
node="sig_in
@ -23,107 +23,125 @@ x1.q
x1.comp"
color="4 7 10 8 12"
dataset=0
unitx=u
unitx=n
}
P 4 5 670 -580 1650 -580 1650 -190 670 -190 670 -580 {dash=5}
P 5 5 10 -770 940 -770 940 -330 10 -330 10 -770 { dash=5}
T {Modulator} 500 -810 0 0 0.6 0.6 { layer=5}
T {Digital Decimator} 1000 -620 0 0 0.6 0.6 {layer=4}
T {D} 160 -630 0 0 1 1 { layer=5 font=Symbol}
T {S} 350 -750 0 0 1 1 { layer=5 font=Symbol}
T {D-S} 430 -805 0 0 0.6 0.6 { layer=5 font=Symbol}
N 890 -510 910 -510 {lab=Q}
N 910 -510 910 -350 {lab=Q}
N 1610 -530 1670 -530 { lab=CODE[5:0]}
N 1300 -530 1490 -530 { lab=COUNT[5:0]}
N 1150 -270 1150 -250 { lab=#net1}
N 1150 -330 1150 -310 { lab=#net2}
N 1420 -510 1490 -510 { lab=RSTI}
N 1350 -310 1390 -310 { lab=#net3}
N 1510 -370 1510 -330 { lab=RSTI}
N 1420 -370 1510 -370 { lab=RSTI}
N 1420 -510 1420 -370 { lab=RSTI}
N 610 -290 760 -290 { lab=CK}
N 610 -250 760 -250 { lab=RST}
N 640 -510 770 -510 { lab=COMP}
N 180 -350 910 -350 { lab=Q}
N 1050 -510 1140 -510 { lab=QN}
N 910 -510 970 -510 { lab=Q}
N 500 -540 520 -540 { lab=INTEG}
N 500 -540 500 -500 { lab=INTEG}
N 280 -470 290 -470 { lab=VREF}
N 180 -530 290 -530 {lab=FB}
N 430 -500 500 -500 { lab=INTEG}
N 400 -670 430 -670 { lab=INTEG}
N 430 -670 430 -500 { lab=INTEG}
N 290 -670 340 -670 { lab=FB}
N 90 -530 110 -530 { lab=SIG_IN}
N 290 -670 290 -530 { lab=FB}
N 180 -530 180 -480 { lab=FB}
N 180 -420 180 -350 { lab=Q}
N 410 -500 430 -500 { lab=INTEG}
N 170 -530 180 -530 {lab=FB}
N 1040 -370 1420 -370 { lab=RSTI}
N 1040 -400 1040 -370 { lab=RSTI}
N 1140 -490 1140 -420 { lab=#net4}
B 2 1020 -940 1820 -850 {flags=graph
y1=0
y2=1.2
ypos1=0.108246
ypos2=0.224381
subdivy=1
unity=1
x1=1.23884e-06
x2=1.33992e-06
divx=5
subdivx=1
node=ck
color=4
dataset=0
unitx=n
divy=2
digital=1}
P 4 5 700 -480 1680 -480 1680 -90 700 -90 700 -480 {dash=5}
P 5 5 40 -670 970 -670 970 -230 40 -230 40 -670 { dash=5}
T {Modulator} 530 -710 0 0 0.6 0.6 { layer=5}
T {Digital Decimator} 1030 -520 0 0 0.6 0.6 {layer=4}
T {D} 190 -530 0 0 1 1 { layer=5 font=Symbol}
T {S} 380 -650 0 0 1 1 { layer=5 font=Symbol}
T {D-S} 460 -705 0 0 0.6 0.6 { layer=5 font=Symbol}
N 920 -410 940 -410 {lab=Q}
N 940 -410 940 -250 {lab=Q}
N 1640 -430 1700 -430 { lab=CODE[5:0]}
N 1330 -430 1520 -430 { lab=COUNT[5:0]}
N 1180 -170 1180 -150 { lab=#net1}
N 1180 -230 1180 -210 { lab=#net2}
N 1450 -410 1520 -410 { lab=RSTI}
N 1380 -210 1420 -210 { lab=#net3}
N 1540 -270 1540 -230 { lab=RSTI}
N 1450 -270 1540 -270 { lab=RSTI}
N 1450 -410 1450 -270 { lab=RSTI}
N 640 -190 790 -190 { lab=CK}
N 640 -150 790 -150 { lab=RST}
N 670 -410 800 -410 { lab=COMP}
N 210 -250 940 -250 { lab=Q}
N 1080 -410 1170 -410 { lab=QN}
N 940 -410 1000 -410 { lab=Q}
N 530 -440 550 -440 { lab=INTEG}
N 530 -440 530 -400 { lab=INTEG}
N 310 -370 320 -370 { lab=VREF}
N 210 -430 320 -430 {lab=FB}
N 460 -400 530 -400 { lab=INTEG}
N 430 -570 460 -570 { lab=INTEG}
N 460 -570 460 -400 { lab=INTEG}
N 320 -570 370 -570 { lab=FB}
N 120 -430 140 -430 { lab=SIG_IN}
N 320 -570 320 -430 { lab=FB}
N 210 -430 210 -380 { lab=FB}
N 210 -320 210 -250 { lab=Q}
N 440 -400 460 -400 { lab=INTEG}
N 200 -430 210 -430 {lab=FB}
N 1070 -270 1450 -270 { lab=RSTI}
N 1070 -300 1070 -270 { lab=RSTI}
N 1170 -390 1170 -320 { lab=#net4}
C {title.sym} 160 -30 0 0 {name=l1 author="Stefan Schippers"}
C {lab_pin.sym} 770 -490 0 0 {name=p4 lab=CK}
C {lab_wire.sym} 740 -510 0 0 {name=l4 lab=COMP}
C {lab_pin.sym} 910 -430 0 1 {name=p8 lab=Q}
C {flip_flop_ngspice.sym} 830 -490 0 0 {name=x1}
C {lab_pin.sym} 770 -470 0 0 {name=p3 lab=0}
C {counter_6bit_ngspice.sym} 1220 -510 0 0 {name=x2}
C {lab_pin.sym} 1140 -530 0 0 {name=p5 lab=CK}
C {lab_pin.sym} 1040 -440 0 0 {name=p12 lab=RST}
C {flip_flop_ngspice.sym} 1550 -510 0 0 {name=x4[5:0]}
C {opin.sym} 1670 -530 0 0 {name=p20 lab=CODE[5:0]}
C {lab_wire.sym} 1320 -530 0 1 {name=l10 lab=COUNT[5:0]}
C {counter_6bit_ngspice.sym} 840 -270 0 0 {name=x4}
C {ipin.sym} 610 -290 0 0 {name=p10 lab=CK}
C {ipin.sym} 610 -250 0 0 {name=p11 lab=RST}
C {lab_pin.sym} 760 -270 0 0 {name=p14 lab=VCC}
C {lab_pin.sym} 920 -290 0 1 {name=p24 lab=C[5:0]}
C {and3_ngspice.sym} 1090 -330 0 0 {name=x5 ROUT=1000}
C {lab_pin.sym} 1050 -350 0 0 {name=p25 lab=C[5]}
C {lab_pin.sym} 1050 -330 0 0 {name=p26 lab=C[4]}
C {lab_pin.sym} 1050 -310 0 0 {name=p27 lab=C[3]}
C {lab_pin.sym} 1050 -250 0 0 {name=p28 lab=C[1]}
C {lab_pin.sym} 1050 -230 0 0 {name=p29 lab=C[0]}
C {and3_ngspice.sym} 1090 -250 0 0 {name=x6 ROUT=1000}
C {lab_pin.sym} 1050 -270 0 0 {name=p30 lab=C[2]}
C {and_ngspice.sym} 1190 -290 0 0 {name=x7 ROUT=1000}
C {or_ngspice.sym} 1290 -310 0 0 {name=x8 ROUT=1000}
C {lab_pin.sym} 1250 -330 0 0 {name=p31 lab=RST}
C {lab_pin.sym} 1510 -330 0 1 {name=p15 lab=RSTI}
C {flip_flop_ngspice.sym} 1450 -310 0 0 {name=x9}
C {lab_pin.sym} 1390 -290 0 0 {name=p32 lab=RST}
C {lab_pin.sym} 1390 -330 0 0 {name=p35 lab=VCC}
C {lab_pin.sym} 1490 -490 0 0 {name=p1 lab=RST}
C {spice_probe.sym} 810 -350 0 0 {name=p6 attrs=""}
C {spice_probe.sym} 680 -510 0 0 {name=p17 attrs=""}
C {spice_probe.sym} 1510 -370 0 0 {name=p18 attrs=""}
C {inv_ngspice.sym} 1010 -510 0 0 {name=x11 ROUT=1000}
C {lab_wire.sym} 1100 -510 0 0 {name=l2 lab=QN}
C {spice_probe.sym} 1060 -510 0 0 {name=p19 attrs=""}
C {ipin.sym} 280 -470 0 0 {name=p242 lab=VREF}
C {lab_pin.sym} 500 -520 0 0 {name=p244 lab=INTEG}
C {ipin.sym} 90 -530 0 0 {name=p260 lab=SIG_IN}
C {capa.sym} 370 -670 1 0 {name=c10 m=1 value="2e-12"}
C {res.sym} 140 -530 1 0 {name=R4
C {lab_pin.sym} 800 -390 0 0 {name=p4 lab=CK}
C {lab_wire.sym} 770 -410 0 0 {name=l4 lab=COMP}
C {lab_pin.sym} 940 -330 0 1 {name=p8 lab=Q}
C {flip_flop_ngspice.sym} 860 -390 0 0 {name=x1}
C {lab_pin.sym} 800 -370 0 0 {name=p3 lab=0}
C {counter_6bit_ngspice.sym} 1250 -410 0 0 {name=x2}
C {lab_pin.sym} 1170 -430 0 0 {name=p5 lab=CK}
C {lab_pin.sym} 1070 -340 0 0 {name=p12 lab=RST}
C {flip_flop_ngspice.sym} 1580 -410 0 0 {name=x4[5:0]}
C {opin.sym} 1700 -430 0 0 {name=p20 lab=CODE[5:0]}
C {lab_wire.sym} 1350 -430 0 1 {name=l10 lab=COUNT[5:0]}
C {counter_6bit_ngspice.sym} 870 -170 0 0 {name=x4}
C {ipin.sym} 640 -190 0 0 {name=p10 lab=CK}
C {ipin.sym} 640 -150 0 0 {name=p11 lab=RST}
C {lab_pin.sym} 790 -170 0 0 {name=p14 lab=VCC}
C {lab_pin.sym} 950 -190 0 1 {name=p24 lab=C[5:0]}
C {and3_ngspice.sym} 1120 -230 0 0 {name=x5 ROUT=1000}
C {lab_pin.sym} 1080 -250 0 0 {name=p25 lab=C[5]}
C {lab_pin.sym} 1080 -230 0 0 {name=p26 lab=C[4]}
C {lab_pin.sym} 1080 -210 0 0 {name=p27 lab=C[3]}
C {lab_pin.sym} 1080 -150 0 0 {name=p28 lab=C[1]}
C {lab_pin.sym} 1080 -130 0 0 {name=p29 lab=C[0]}
C {and3_ngspice.sym} 1120 -150 0 0 {name=x6 ROUT=1000}
C {lab_pin.sym} 1080 -170 0 0 {name=p30 lab=C[2]}
C {and_ngspice.sym} 1220 -190 0 0 {name=x7 ROUT=1000}
C {or_ngspice.sym} 1320 -210 0 0 {name=x8 ROUT=1000}
C {lab_pin.sym} 1280 -230 0 0 {name=p31 lab=RST}
C {lab_pin.sym} 1540 -230 0 1 {name=p15 lab=RSTI}
C {flip_flop_ngspice.sym} 1480 -210 0 0 {name=x9}
C {lab_pin.sym} 1420 -190 0 0 {name=p32 lab=RST}
C {lab_pin.sym} 1420 -230 0 0 {name=p35 lab=VCC}
C {lab_pin.sym} 1520 -390 0 0 {name=p1 lab=RST}
C {spice_probe.sym} 840 -250 0 0 {name=p6 attrs=""}
C {spice_probe.sym} 710 -410 0 0 {name=p17 attrs=""}
C {spice_probe.sym} 1540 -270 0 0 {name=p18 attrs=""}
C {inv_ngspice.sym} 1040 -410 0 0 {name=x11 ROUT=1000}
C {lab_wire.sym} 1130 -410 0 0 {name=l2 lab=QN}
C {spice_probe.sym} 1090 -410 0 0 {name=p19 attrs=""}
C {ipin.sym} 310 -370 0 0 {name=p242 lab=VREF}
C {lab_pin.sym} 530 -420 0 0 {name=p244 lab=INTEG}
C {ipin.sym} 120 -430 0 0 {name=p260 lab=SIG_IN}
C {capa.sym} 400 -570 1 0 {name=c10 m=1 value="1e-12"}
C {res.sym} 170 -430 1 0 {name=R4
value=60k
footprint=1206
device=resistor
m=1}
C {lab_pin.sym} 520 -480 0 0 {name=p261 lab=VREF}
C {res.sym} 180 -450 0 0 {name=R5
C {lab_pin.sym} 550 -380 0 0 {name=p261 lab=VREF}
C {res.sym} 210 -350 0 0 {name=R5
value=60k
footprint=1206
device=resistor
m=1}
C {lab_pin.sym} 290 -560 0 0 {name=p262 lab=FB}
C {spice_probe.sym} 430 -600 0 0 {name=p264 attrs=""}
C {spice_probe.sym} 190 -530 0 0 {name=p265 attrs=""}
C {opamp_65nm.sym} 350 -500 2 1 {name=x41}
C {comp_65nm.sym} 580 -510 0 0 {name=x42}
C {spice_probe.sym} 1440 -530 0 0 {name=p2 attrs=""}
C {or_ngspice.sym} 1080 -420 0 0 {name=x3 ROUT=1000}
C {lab_pin.sym} 320 -460 0 0 {name=p262 lab=FB}
C {spice_probe.sym} 460 -500 0 0 {name=p264 attrs=""}
C {spice_probe.sym} 220 -430 0 0 {name=p265 attrs=""}
C {opamp_65nm.sym} 380 -400 2 1 {name=x41}
C {comp_65nm.sym} 610 -410 0 0 {name=x42}
C {spice_probe.sym} 1470 -430 0 0 {name=p2 attrs=""}
C {or_ngspice.sym} 1110 -320 0 0 {name=x3 ROUT=1000}

View File

@ -5,15 +5,15 @@ V {}
S {}
E {}
B 2 900 -620 1700 -330 {flags=graph
y1=0.294023
y2=1.25402
y1=-0.214318
y2=1.44454
ypos1=0
ypos2=2
divy=5
subdivy=1
unity=1
x1=-8.91647e-08
x2=8.98315e-06
x1=-2.28997e-07
x2=8.84333e-06
divx=5
subdivx=1
node="sig_in
@ -31,8 +31,8 @@ ypos2=0.633885
divy=5
subdivy=1
unity=1
x1=-8.91647e-08
x2=8.98315e-06
x1=-2.28997e-07
x2=8.84333e-06
divx=5
subdivx=1
node="CODE,code[5],code[4],code[3],code[2],code[1],code[0]
@ -51,8 +51,8 @@ ypos2=2
divy=5
subdivy=1
unity=1
x1=-8.91647e-08
x2=8.98315e-06
x1=-2.28997e-07
x2=8.84333e-06
divx=5
subdivx=1
node="\\"sig_in 1.2 / 63 *\\""

View File

@ -0,0 +1,11 @@
v {xschem version=3.0.0 file_version=1.2}
K {type=subcircuit
format="@name @pinlist @symname"
template="name=x1"
}
T {@symname} -67.5 -6 0 0 0.3 0.3 {}
T {@name} 135 -22 0 0 0.2 0.2 {}
L 4 -130 -10 130 -10 {}
L 4 -130 10 130 10 {}
L 4 -130 -10 -130 10 {}
L 4 130 -10 130 10 {}