⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfunc.mod

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 MOD
📖 第 1 页 / 共 2 页
字号:
                    if ( ONE == *enable ) {                        /* active level...save & output current data value */                        temp = *data;                        if (*out_old != temp) {  /* enable will change output */                            *out = temp;                            if ( !PORT_NULL(out) ) {                                OUTPUT_STATE(out) = temp;                                OUTPUT_DELAY(out) = PARAM(set_delay);                            }                            cm_toggle_bit(&temp);                            if ( !PORT_NULL(Nout) ) {                                OUTPUT_STATE(Nout) = temp;                                OUTPUT_DELAY(Nout) = PARAM(set_delay);                            }                        }                        else {                            *out = *out_old;     /* output same as before */                            if ( !PORT_NULL(out) ) {                                OUTPUT_CHANGED(out) = FALSE;                            }                            if ( !PORT_NULL(Nout) ) {                                OUTPUT_CHANGED(Nout) = FALSE;                            }                        }                    }                    else {                        /* output remains at current value */                        *out = *out_old;                        if ( !PORT_NULL(out) ) {                            OUTPUT_CHANGED(out) = FALSE;                        }                        if ( !PORT_NULL(Nout) ) {                            OUTPUT_CHANGED(Nout) = FALSE;                        }                    }                }                else {                    if (*out_old != ZERO) {  /* set will change output */                        /* output returns to reset condition */                        *out = ZERO;                        if ( !PORT_NULL(out) ) {                            OUTPUT_STATE(out) = ZERO;                            OUTPUT_DELAY(out) = PARAM(set_delay);                        }                        if ( !PORT_NULL(Nout) ) {                            OUTPUT_STATE(Nout) = ONE;                            OUTPUT_DELAY(Nout) = PARAM(set_delay);                        }                    }                    else {                        *out = *out_old;     /* output already reset */                        if ( !PORT_NULL(out) ) {                            OUTPUT_CHANGED(out) = FALSE;                        }                        if ( !PORT_NULL(Nout) ) {                            OUTPUT_CHANGED(Nout) = FALSE;                        }                    }                }                break;            }        }        else {            /**** Test reset value for change ****/            if ( *reset != *reset_old ) { /* either reset or reset release */                switch ( *reset ) {                    case ONE:                    if ( ONE != *set) {                        if (*out_old != ZERO) {  /* reset will change output */                            /* output goes to ZERO */                            *out = ZERO;                            if ( !PORT_NULL(out) ) {                                OUTPUT_STATE(out) = ZERO;                                OUTPUT_DELAY(out) = PARAM(reset_delay);                            }                            if ( !PORT_NULL(Nout) ) {                                OUTPUT_STATE(Nout) = ONE;                                OUTPUT_DELAY(Nout) = PARAM(reset_delay);                            }                        }                        else {                            *out = *out_old;     /* output already reset */                            if ( !PORT_NULL(out) ) {                                OUTPUT_CHANGED(out) = FALSE;                            }                            if ( !PORT_NULL(Nout) ) {                                OUTPUT_CHANGED(Nout) = FALSE;                            }                        }                    }                    else {                        if (*out_old != UNKNOWN) {  /* reset will change output */                            /* output goes to UNKNOWN */                            *out = UNKNOWN;                            if ( !PORT_NULL(out) ) {                                OUTPUT_STATE(out) = UNKNOWN;                                OUTPUT_DELAY(out) = PARAM(reset_delay);                            }                            if ( !PORT_NULL(Nout) ) {                                OUTPUT_STATE(Nout) = UNKNOWN;                                OUTPUT_DELAY(Nout) = PARAM(reset_delay);                            }                        }                        else {                            *out = *out_old;     /* output already unknown */                            if ( !PORT_NULL(out) ) {                                OUTPUT_CHANGED(out) = FALSE;                            }                            if ( !PORT_NULL(Nout) ) {                                OUTPUT_CHANGED(Nout) = FALSE;                            }                        }                    }                    break;                                          case ZERO:                case UNKNOWN:                    if ( ONE != *set) {                        if ( ONE == *enable ) {                            /* active level...save & output current data value */                            temp = *data;                                if (*out_old != temp) {  /* enable will change output */                                *out = temp;                                if ( !PORT_NULL(out) ) {                                    OUTPUT_STATE(out) = temp;                                    OUTPUT_DELAY(out) = PARAM(reset_delay);                                }                                cm_toggle_bit(&temp);                                if ( !PORT_NULL(Nout) ) {                                    OUTPUT_STATE(Nout) = temp;                                    OUTPUT_DELAY(Nout) = PARAM(reset_delay);                                }                            }                            else {                                *out = *out_old;     /* output same as before */                                if ( !PORT_NULL(out) ) {                                    OUTPUT_CHANGED(out) = FALSE;                                }                                if ( !PORT_NULL(Nout) ) {                                    OUTPUT_CHANGED(Nout) = FALSE;                                }                            }                        }                        else {                            /* output remains at current value */                            *out = *out_old;                            if ( !PORT_NULL(out) ) {                                OUTPUT_CHANGED(out) = FALSE;                            }                            if ( !PORT_NULL(Nout) ) {                                OUTPUT_CHANGED(Nout) = FALSE;                            }                        }                    }                    else {                        if (*out_old != ONE) {  /* reset will change output */                            /* output returns to set condition */                            *out = ONE;                            if ( !PORT_NULL(out) ) {                                OUTPUT_STATE(out) = ONE;                                OUTPUT_DELAY(out) = PARAM(reset_delay);                            }                            if ( !PORT_NULL(Nout) ) {                                OUTPUT_STATE(Nout) = ZERO;                                OUTPUT_DELAY(Nout) = PARAM(reset_delay);                            }                        }                        else {                            *out = *out_old;     /* output already reset */                            if ( !PORT_NULL(out) ) {                                OUTPUT_CHANGED(out) = FALSE;                            }                            if ( !PORT_NULL(Nout) ) {                                OUTPUT_CHANGED(Nout) = FALSE;                            }                        }                    }                    break;                }            }            else {                                                                            /**** Test for enable change... ****/                if ( (*enable != *enable_old) && (*reset != ONE) &&                     (*set != ONE) ) { /* enable or enable release */                    switch ( *enable ) {                              case ONE:                        /* active edge...save & output current data value */                        temp = *data;                        if (*out_old != temp) {  /* enable will change output */                            *out = temp;                            if ( !PORT_NULL(out) ) {                                OUTPUT_STATE(out) = temp;                                OUTPUT_DELAY(out) = PARAM(enable_delay);                            }                            cm_toggle_bit(&temp);                            if ( !PORT_NULL(Nout) ) {                                OUTPUT_STATE(Nout) = temp;                                OUTPUT_DELAY(Nout) = PARAM(enable_delay);                            }                        }                        else {                            *out = *out_old;     /* output same as before */                            if ( !PORT_NULL(out) ) {                                OUTPUT_CHANGED(out) = FALSE;                            }                            if ( !PORT_NULL(Nout) ) {                                OUTPUT_CHANGED(Nout) = FALSE;                            }                        }                        break;                    case ZERO:                    case UNKNOWN:                        /* inactive edge...return previous values */                        *out = *out_old;                        if ( !PORT_NULL(out) ) {                            OUTPUT_CHANGED(out) = FALSE;                        }                        if ( !PORT_NULL(Nout) ) {                            OUTPUT_CHANGED(Nout) = FALSE;                        }                        break;                    }                }                else {   /* test data value for change... */                    if ( (*data != *data_old) && (*reset != ONE) &&                         (*set != ONE) ) {                         /* data value has changed...                            test enable, and if active, update                            the output...else return w/o change. */                        switch ( *enable ) {                                  case ONE:                            /* active level...save & output current data value */                            temp = *data;                                if (*out_old != temp) {  /* enable will change output */                                *out = temp;                                if ( !PORT_NULL(out) ) {                                    OUTPUT_STATE(out) = temp;                                    OUTPUT_DELAY(out) = PARAM(data_delay);                                }                                if ( !PORT_NULL(Nout) ) {                                    cm_toggle_bit(&temp);                                    OUTPUT_STATE(Nout) = temp;                                    OUTPUT_DELAY(Nout) = PARAM(data_delay);                                }                            }                            else {                                *out = *out_old;     /* output same as before */                                if ( !PORT_NULL(out) ) {                                    OUTPUT_CHANGED(out) = FALSE;                                }                                if ( !PORT_NULL(Nout) ) {                                    OUTPUT_CHANGED(Nout) = FALSE;                                }                            }                            break;                            case ZERO:                        case UNKNOWN:                            /* inactive level...return previous values */                            *out = *out_old;                            if ( !PORT_NULL(out) ) {                                OUTPUT_CHANGED(out) = FALSE;                            }                            if ( !PORT_NULL(Nout) ) {                                OUTPUT_CHANGED(Nout) = FALSE;                            }                            break;                        }                    }                    else { /* nothing has changed!!! This shouldn't happen! */                        *out = *out_old;                        if ( !PORT_NULL(out) ) {                            OUTPUT_CHANGED(out) = FALSE;                        }                        if ( !PORT_NULL(Nout) ) {                            OUTPUT_CHANGED(Nout) = FALSE;                        }                    }                }            }        }        /***** Add additional rise or fall delays, if appropriate *****/        if ( *out != *out_old ) { /*** output value is changing ***/            switch ( *out ) {                                                             /** fall to zero value **/            case 0:                     if ( !PORT_NULL(out) ) {                        OUTPUT_DELAY(out) += PARAM(fall_delay);                    }                    if ( !PORT_NULL(Nout) ) {                        OUTPUT_DELAY(Nout) += PARAM(rise_delay);                    }                    break;                /** rise to one value **/            case 1:                     if ( !PORT_NULL(out) ) {                        OUTPUT_DELAY(out) += PARAM(rise_delay);                    }                    if ( !PORT_NULL(Nout) ) {                        OUTPUT_DELAY(Nout) += PARAM(fall_delay);                    }                    break;                                                /** unknown output **/            default:                    /* based on old value, add rise or fall delay */                    if (0 == *out_old) {  /* add rising delay */                        if ( !PORT_NULL(out) ) {                            OUTPUT_DELAY(out) += PARAM(rise_delay);                        }                        if ( !PORT_NULL(Nout) ) {                            OUTPUT_DELAY(Nout) += PARAM(fall_delay);                        }                    }                    else {                /* add falling delay */                        if ( !PORT_NULL(out) ) {                            OUTPUT_DELAY(out) += PARAM(fall_delay);                        }                        if ( !PORT_NULL(Nout) ) {                            OUTPUT_DELAY(Nout) += PARAM(rise_delay);                        }                    }                       break;            }        }    }                  /*** output strength values ***/    if ( !PORT_NULL(out) ) {        OUTPUT_STRENGTH(out) = STRONG;    }    if ( !PORT_NULL(Nout) ) {        OUTPUT_STRENGTH(Nout) = STRONG;    }}       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -