4 #include "siddefs-fp.h"
21 unsigned int Vddt_Vw_2;
24 const unsigned short* vcr_Vg;
25 const unsigned short* vcr_n_Ids_term;
29 Integrator(
const unsigned short* vcr_Vg,
const unsigned short* vcr_n_Ids_term,
30 const int* opamp_rev,
const int Vddt,
const int n_snake) :
37 vcr_n_Ids_term(vcr_n_Ids_term),
38 opamp_rev(opamp_rev) {}
40 void setVw(
const int Vw);
42 int solve(
const int vi);
47 #if RESID_INLINING || defined(INTEGRATOR_CPP)
53 int Integrator::solve(
const int vi) {
55 const int Vgst = Vddt - x;
56 const int Vgdt = Vddt - vi;
57 const unsigned int Vgst_2 = Vgst*Vgst;
58 const unsigned int Vgdt_2 = Vgdt*Vgdt;
61 const int n_I_snake = n_snake*((Vgst_2 >> 15) - (Vgdt_2 >> 15));
65 const int Vg = (int)vcr_Vg[(Vddt_Vw_2 >> 16) + (Vgdt_2 >> 17)];
68 const int Vgs = Vg > x ? Vg - x : 0;
69 const int Vgd = Vg > vi ? Vg - vi : 0;
72 const int n_I_vcr = (int)(vcr_n_Ids_term[Vgs & 0xffff] - vcr_n_Ids_term[Vgd & 0xffff]) << 15;
75 vc += n_I_snake + n_I_vcr;
78 x = opamp_rev[((vc >> 15) + (1 << 15)) & 0xffff];
81 return x - (vc >> 14);