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

📄 cfunc.mod

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 MOD
📖 第 1 页 / 共 2 页
字号:
            OUTPUT_STATE(out) = temp;        }        cm_toggle_bit(&temp);        if ( !PORT_NULL(Nout) ) {            OUTPUT_STATE(Nout) = temp;        }    }    else {      /****** Transient Analysis ******/        /***** Find input that has changed... *****/        /**** Test set value for change ****/        if ( *set != *set_old ) { /* either set or set release */            switch ( *set ) {            case ONE:                if ( ONE != *reset) {                    if (*out_old != ONE) {  /* set will change output */                        /* output goes to ONE */                        *out = ONE;                        if ( !PORT_NULL(out) ) {                            OUTPUT_STATE(out) = ONE;                            OUTPUT_DELAY(out) = PARAM(set_delay);                        }                        if ( !PORT_NULL(Nout) ) {                            OUTPUT_STATE(Nout) = ZERO;                            OUTPUT_DELAY(Nout) = PARAM(set_delay);                        }                    }                    else {                        *out = *out_old;     /* output already set */                        if ( !PORT_NULL(out) ) {                            OUTPUT_CHANGED(out) = FALSE;                        }                        if ( !PORT_NULL(Nout) ) {                            OUTPUT_CHANGED(Nout) = FALSE;                        }                    }                }                else {                    if (*out_old != UNKNOWN) {  /* set will change output */                        /* output goes to UNKNOWN */                        *out = UNKNOWN;                        if ( !PORT_NULL(out) ) {                            OUTPUT_STATE(out) = UNKNOWN;                            OUTPUT_DELAY(out) = PARAM(set_delay);                        }                        if ( !PORT_NULL(Nout) ) {                            OUTPUT_STATE(Nout) = UNKNOWN;                            OUTPUT_DELAY(Nout) = PARAM(set_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:                if ( ONE != *reset) {                    /* 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;            case UNKNOWN:                if ( ONE == *reset ) {                    /* output goes to ZERO */                    *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 unknown */                    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:                    if ( ONE != *set) {                        /* 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;                    case UNKNOWN:                    if ( ONE == *set ) {                        /* output goes to ONE */                        *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 unknown */                        if ( !PORT_NULL(out) ) {                            OUTPUT_CHANGED(out) = FALSE;                        }                        if ( !PORT_NULL(Nout) ) {                            OUTPUT_CHANGED(Nout) = FALSE;                        }                    }                    break;                }            }            else {                /**** Test clk value for change ****/                if ( (*clk != *clk_old) && (*reset != ONE) &&                     (*set != ONE) ) { /* clock or clock release */                    switch ( *clk ) {                              case ONE:                        /* active edge...calculate new data output  */                        j_input = INPUT_STATE(j);                        k_input = INPUT_STATE(k);                        temp = cm_eval_jk_result(j_input,k_input,*out_old);                                                 if (*out_old != temp) {  /* clk will change output */                            *out = temp;                               if ( !PORT_NULL(out) ) {                                OUTPUT_STATE(out) = temp;                                OUTPUT_DELAY(out) = PARAM(clk_delay);                            }                            cm_toggle_bit(&temp);                                   if ( !PORT_NULL(Nout) ) {                                OUTPUT_STATE(Nout) = temp;                                OUTPUT_DELAY(Nout) = PARAM(clk_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 {   /* data value must have changed...                            return previous output value.    */                    *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 + -