23#ifndef INTEGRATOR6581_H
24#define INTEGRATOR6581_H
26#include "FilterModelConfig6581.h"
40#include "siddefs-fp.h"
170 unsigned int nVddt_Vw_2;
180 const unsigned short nVddt;
181 const unsigned short nVt;
182 const unsigned short nVmin;
183 const unsigned short nSnake;
196 nVddt(fmc->getNormalizedValue(fmc->getVddt())),
197 nVt(fmc->getNormalizedValue(fmc->getVth())),
198 nVmin(fmc->getNVmin()),
199 nSnake(fmc->getNormalizedCurrentFactor(WL_snake)),
202 void setVw(
unsigned short Vw) { nVddt_Vw_2 = ((nVddt - Vw) * (nVddt - Vw)) >> 1; }
204 int solve(
int vi)
const;
209#if RESID_INLINING || defined(INTEGRATOR_CPP)
215int Integrator6581::solve(
int vi)
const
225 const unsigned int Vgst = nVddt - vx;
226 const unsigned int Vgdt = nVddt - vi;
228 const unsigned int Vgst_2 = Vgst * Vgst;
229 const unsigned int Vgdt_2 = Vgdt * Vgdt;
232 const int n_I_snake = nSnake * (
static_cast<int>(Vgst_2 - Vgdt_2) >> 15);
236 const int nVg =
static_cast<int>(fmc->getVcr_nVg((nVddt_Vw_2 + (Vgdt_2 >> 1)) >> 16));
238 const double nVp =
static_cast<double>(nVg - nVt) / n;
239 const int kVgt =
static_cast<int>(nVp + 0.5) - nVmin;
241 const int kVgt = (nVg - nVt) - nVmin;
245 const int kVgt_Vs = (vx < kVgt) ? kVgt - vx : 0;
246 assert(kVgt_Vs < (1 << 16));
247 const int kVgt_Vd = (vi < kVgt) ? kVgt - vi : 0;
248 assert(kVgt_Vd < (1 << 16));
251 const unsigned int If =
static_cast<unsigned int>(fmc->getVcr_n_Ids_term(kVgt_Vs)) << 15;
252 const unsigned int Ir =
static_cast<unsigned int>(fmc->getVcr_n_Ids_term(kVgt_Vd)) << 15;
254 const double iVcr =
static_cast<double>(If - Ir);
255 const int n_I_vcr =
static_cast<int>(iVcr * n);
257 const int n_I_vcr = If - Ir;
262 const double gamma = 1.0;
263 const double phi = 0.8;
264 const double Vp = nVp / fmc->getN16();
265 n = 1. + (gamma / (2. * sqrt(Vp + phi + 4. * fmc->getUt())));
266 assert((n > 1.2) && (n < 1.8));
270 vc += n_I_snake + n_I_vcr;
273 const int tmp = (vc >> 15) + (1 << 15);
274 assert(tmp < (1 << 16));
275 vx = fmc->getOpampRev(tmp);
278 return vx - (vc >> 14);
Definition: FilterModelConfig6581.h:43
Definition: Integrator6581.h:168