📄 cfunc.mod
字号:
/* $Id: cfunc.mod,v 1.4 2005/08/23 08:21:01 pnenzi Exp $ *//*.......1.........2.........3.........4.........5.........6.........7.........8================================================================================FILE d_jkff/cfunc.modCopyright 1991Georgia Tech Research Corporation, Atlanta, Ga. 30332All Rights ReservedPROJECT A-8503-405 AUTHORS 21 Jun 1991 Jeffrey P. MurrayMODIFICATIONS 12 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray 29 Jan 1992 Jeffrey P. Murray SUMMARY This file contains the functional description of the d_jkff code model.INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE===============================================================================*//*=== INCLUDE FILES ====================*/ /*=== CONSTANTS ========================*//*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ /*==============================================================================FUNCTION cm_toggle_bit()AUTHORS 27 Sept 1991 Jeffrey P. MurrayMODIFICATIONS NONESUMMARY Alters the state of a passed digital variable to its complement. Thus, a ONE changes to a ZERO. A ZERO changes to a ONE, and an UNKNOWN remains unchanged.INTERFACES FILE ROUTINE CALLED N/A N/ARETURNED VALUE No returned value. Passed pointer to variable is used to redefine the variable value. GLOBAL VARIABLES NONENON-STANDARD FEATURES NONE ===============================================================================*//*=== CM_TOGGLE_BIT ROUTINE ===*/static void cm_toggle_bit(Digital_State_t *bit) { /* Toggle bit from ONE to ZERO or vice versa, unless the bit value is UNKNOWN. In the latter case, return without changing the bit value. */ if ( UNKNOWN != *bit ) { if ( ONE == *bit ) { *bit = ZERO; } else { *bit = ONE; } }} /*==============================================================================FUNCTION cm_eval_jk_resultAUTHORS 30 Sept 1991 Jeffrey P. MurrayMODIFICATIONS NONESUMMARY Evaluates the J and K input states, plus the last state of the flip flop, and returns the expected output value.INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); RETURNED VALUE A Digital_State_t. GLOBAL VARIABLES NONENON-STANDARD FEATURES NONE==============================================================================*//*=== CM_EVAL_JK_RESULT ROUTINE ===*/static Digital_State_t cm_eval_jk_result(Digital_State_t j_input, Digital_State_t k_input, Digital_State_t old_output){ Digital_State_t output; /* returned output value */ switch (j_input) { case ZERO: switch (k_input) { case ZERO: output = old_output; break; case ONE: output = ZERO; break; case UNKNOWN: output = UNKNOWN; break; } break; case ONE: switch (k_input) { case ZERO: output = ONE; break; case ONE: output = old_output; cm_toggle_bit(&output); break; case UNKNOWN: output = UNKNOWN; break; } break; case UNKNOWN: output = UNKNOWN; break; } return output;}/*==============================================================================FUNCTION cm_d_jkff()AUTHORS 21 Jun 1991 Jeffrey P. MurrayMODIFICATIONS 12 Aug 1991 Jeffrey P. Murray 30 Sep 1991 Jeffrey P. Murray 29 Jan 1992 Jeffrey P. MurraySUMMARY This function implements the d_jkff code model.INTERFACES FILE ROUTINE CALLED CMutil.c void cm_toggle_bit(); CMevt.c void *cm_event_alloc() void *cm_event_get_ptr()RETURNED VALUE Returns inputs and outputs via ARGS structure.GLOBAL VARIABLES NONENON-STANDARD FEATURES NONE==============================================================================*/ /*=== CM_D_JKFF ROUTINE ===*//************************************************* The following is the model for the ** digital jk-type flip flop for the ** ATESSE Version 2.0 system. ** ** Created 6/21/91 J.P.Murray *************************************************/void cm_d_jkff(ARGS) { /*int i;*/ /* generic loop counter index */ Digital_State_t *clk, /* current clk value */ *clk_old, /* previous clk value */ *set, /* current set value for dff */ *set_old, /* previous set value for dff */ *reset, /* current reset value for dff */ *reset_old, /* previous reset value for dff */ *out, /* current output for dff */ *out_old, /* previous output for dff */ j_input, /* current j input value */ k_input, /* current k input value */ temp; /* temp storage for state values */ /*** Setup required state variables ***/ if(INIT) { /* initial pass */ /* allocate storage */ clk = clk_old = (Digital_State_t *) cm_event_alloc(0,sizeof(Digital_State_t)); set = set_old = (Digital_State_t *) cm_event_alloc(1,sizeof(Digital_State_t)); reset = reset_old = (Digital_State_t *) cm_event_alloc(2,sizeof(Digital_State_t)); out = out_old = (Digital_State_t *) cm_event_alloc(3,sizeof(Digital_State_t)); /* declare load values */ LOAD(j) = PARAM(jk_load); LOAD(k) = PARAM(jk_load); LOAD(clk) = PARAM(clk_load); if ( !PORT_NULL(set) ) { LOAD(set) = PARAM(set_load); } if ( !PORT_NULL(reset) ) { LOAD(reset) = PARAM(reset_load); } /* retrieve storage for the outputs */ clk = clk_old = (Digital_State_t *) cm_event_get_ptr(0,0); set = set_old = (Digital_State_t *) cm_event_get_ptr(1,0); reset = reset_old = (Digital_State_t *) cm_event_get_ptr(2,0); out = out_old = (Digital_State_t *) cm_event_get_ptr(3,0); } else { /* Retrieve previous values */ /* retrieve storage for the outputs */ clk = (Digital_State_t *) cm_event_get_ptr(0,0); clk_old = (Digital_State_t *) cm_event_get_ptr(0,1); set = (Digital_State_t *) cm_event_get_ptr(1,0); set_old = (Digital_State_t *) cm_event_get_ptr(1,1); reset = (Digital_State_t *) cm_event_get_ptr(2,0); reset_old = (Digital_State_t *) cm_event_get_ptr(2,1); out = (Digital_State_t *) cm_event_get_ptr(3,0); out_old = (Digital_State_t *) cm_event_get_ptr(3,1); } /******** load current input values if set or reset are not connected, set to zero... ********/ *clk = INPUT_STATE(clk); if ( PORT_NULL(set) ) { *set = *set_old = ZERO; } else { *set = INPUT_STATE(set); } if ( PORT_NULL(reset) ) { *reset = *reset_old = ZERO; } else { *reset = INPUT_STATE(reset); } /******* Determine analysis type and output appropriate values *******/ if (0.0 == TIME) { /****** DC analysis...output w/o delays ******/ temp = PARAM(ic); /** Modify output if set or reset lines are active **/ if ( (*set==ONE) && (*reset==ZERO) ) temp = ONE; if ( (*set==ZERO) && (*reset==ONE) ) temp = ZERO; if ( (*set==ONE) && (*reset==ONE) ) temp = UNKNOWN; *out = *out_old = temp; if ( !PORT_NULL(out) ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -