if (le->v == Bn->v)
lb->vconst = 1;
- if (pb->v > Bp->v)
- c->status = SCF_EDA_Status_OFF;
- else
+ if (pb->v > Bp->v) {
+ if (!c->lock)
+ c->status = SCF_EDA_Status_OFF;
+ } else
c->status = SCF_EDA_Status_ON;
} else if (le->v < SCF_EDA_V_MIN) {
if (lb->v == Bp->v)
le->vconst = 1;
- if (pe->v < Bn->v)
- c->status = SCF_EDA_Status_OFF;
- else
+ if (pe->v < Bn->v) {
+ if (!c->lock)
+ c->status = SCF_EDA_Status_OFF;
+ } else
c->status = SCF_EDA_Status_ON;
} else if (lb->v >= le->v + SCF_EDA_V_NPN_OFF) {
pb->v = lb->v;
pe->v = le->v;
- if (pb->v > Bp->v)
- c->status = SCF_EDA_Status_OFF;
- else
+ if (pb->v > Bp->v) {
+ if (!c->lock)
+ c->status = SCF_EDA_Status_OFF;
+ } else
c->status = SCF_EDA_Status_ON;
} else {
pb->v = lb->v;
pe->v = le->v;
- c->status = SCF_EDA_Status_OFF;
+ if (!c->lock)
+ c->status = SCF_EDA_Status_OFF;
}
scf_loge("\033[34mc%ld, status: %d, pb->v: %lg, pe->v: %lg, diff: %lg, off: %lg\033[0m\n",
for (i = 0; i < f->n_components; i++) {
c = f->components[i];
c->vflag = 0;
+ c->lock = 0;
for (j = 0; j < c->n_pins; j++) {
p = c->pins[j];
if (pb->v > Bp->v) {
pb->v = Bp->v;
- c->status = SCF_EDA_Status_OFF;
+ if (!c->lock)
+ c->status = SCF_EDA_Status_OFF;
} else
c->status = SCF_EDA_Status_ON;
goto _changed;
if (pe->v < Bn->v) {
pe->v = Bn->v;
- c->status = SCF_EDA_Status_OFF;
+ if (!c->lock)
+ c->status = SCF_EDA_Status_OFF;
} else
c->status = SCF_EDA_Status_ON;
goto _changed;
} else if (pb->v - pe->v < Voff) {
if (c->status != SCF_EDA_Status_OFF) {
- c->status = SCF_EDA_Status_OFF;
+ if (!c->lock)
+ c->status = SCF_EDA_Status_OFF;
goto _changed;
}
} else if (SCF_EDA_Status_ON != c->status) {
if (SCF_EDA_NPN == c2->type && SCF_EDA_NPN_B == p2->id) {
c2->status = SCF_EDA_Status_ON;
+ c2->lock = 1;
scf_loge("\033[35mc%ld, status: %d\033[0m\n", c2->id, c2->status);
}