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

📄 micro_dynamic_target.c

📁 Xilinx Jtag Configuration source code, Support *.xsvf file
💻 C
📖 第 1 页 / 共 5 页
字号:
/****************************************************************************** file:         micro.c* abstract:     This file contains the function, xsvfExecute(),*               call for interpreting the XSVF commands.* Usage:        Call xsvfExecute() to process XSVF data.*               The XSVF data is retrieved by readByte() in ports.c*               Remove the main function if you already have one.* Options:      XSVF_SUPPORT_COMPRESSION*                   This define supports the XC9500/XL compression scheme.*                   This define adds support for XSDRINC and XSETSDRMASKS.*               XSVF_SUPPORT_ERRORCODES*                   This define causes the xsvfExecute function to return*                   an error code for specific errors.  See error codes below.*                   If this is not defined, the return value defaults to the*                   legacy values for backward compatibility:*                   1 = success;  0 = failure.* Debugging:    DEBUG_MODE (Legacy name)*               Define DEBUG_MODE to compile with debugging features.*               Both micro.c and ports.c must be compiled with the DEBUG_MODE*               defined to enable the standalone main implementation in*               micro.c that reads XSVF from a file.* History:      v2.00   - Original XSVF implementation.*               v4.04   - Added delay at end of XSIR for XC18v00 support.*                         Added new commands for CoolRunner support:*                         XSTATE, XENDIR, XENDDR*               v4.05   - Cleanup micro.c but leave ports.c intact.*               v4.05.01- Added support for defining dynamic device targets.*               v4.06   - Fix xsvfGotoTapState for retry transition.*               v4.07   - Update example waitTime implementations for*                         compatibility with Virtex-II.*               v4.10   - Add new XSIR2 command that supports a 2-byte*                         IR-length parameter for IR shifts > 255 bits.*               v4.11   - No change.  Update version to match SVF2XSVF xlator.*               v4.14   - Added XCOMMENT.*               v5.00   - Improve XSTATE support.*                         Added XWAIT.*               v5.01   - make sure that TCK is low during RUNTEST wait for*                         XC18V00/XCF00 support.  Only change is in PORTS.C*                         waitTime() function for implementations that do NOT*                         pulse TCK during the waitTime.*               v5.01.03 - Fix trailer shift sequence in xsvfShift.*****************************************************************************//*============================================================================* #pragmas============================================================================*/#ifdef  _MSC_VER    #pragma warning( disable : 4100 )#endif  /* _MSC_VER *//*============================================================================* #include files============================================================================*/#ifdef  DEBUG_MODE    #include <stdio.h>    #include <stdlib.h>    #include <string.h>    #include <time.h>#endif  /* DEBUG_MODE */#include "micro.h"#include "lenval.h"#include "ports.h"/*============================================================================* XSVF #define============================================================================*/#define XSVF_VERSION    "5.01.03"/****************************************************************************** Define:       XSVF_SUPPORT_COMPRESSION* Description:  Define this to support the XC9500/XL XSVF data compression*               scheme.*               Code size can be reduced by NOT supporting this feature.*               However, you must use the -nc (no compress) option when*               translating SVF to XSVF using the SVF2XSVF translator.*               Corresponding, uncompressed XSVF may be larger.*****************************************************************************/#ifndef XSVF_SUPPORT_COMPRESSION    #define XSVF_SUPPORT_COMPRESSION    1#endif/****************************************************************************** Define:       XSVF_SUPPORT_ERRORCODES* Description:  Define this to support the new XSVF error codes.*               (The original XSVF player just returned 1 for success and*               0 for an unspecified failure.)*****************************************************************************/#ifndef XSVF_SUPPORT_ERRORCODES    #define XSVF_SUPPORT_ERRORCODES     1#endif#ifdef  XSVF_SUPPORT_ERRORCODES    #define XSVF_ERRORCODE(errorCode)   errorCode#else   /* Use legacy error code */    #define XSVF_ERRORCODE(errorCode)   ((errorCode==XSVF_ERROR_NONE)?1:0)#endif  /* XSVF_SUPPORT_ERRORCODES *//****************************************************************************** Define:       XSVF_MAIN* Description:  Define this to compile with a main function for standalone*               debugging.*****************************************************************************/#ifndef XSVF_MAIN    #ifdef DEBUG_MODE        #define XSVF_MAIN   1    #endif  /* DEBUG_MODE */#endif  /* XSVF_MAIN *//*============================================================================* DEBUG_MODE #define============================================================================*/#ifdef  DEBUG_MODE    #define XSVFDBG_PRINTF(iDebugLevel,pzFormat) \                { if ( xsvf_iDebugLevel >= iDebugLevel ) \                    printf( pzFormat ); }    #define XSVFDBG_PRINTF1(iDebugLevel,pzFormat,arg1) \                { if ( xsvf_iDebugLevel >= iDebugLevel ) \                    printf( pzFormat, arg1 ); }    #define XSVFDBG_PRINTF2(iDebugLevel,pzFormat,arg1,arg2) \                { if ( xsvf_iDebugLevel >= iDebugLevel ) \                    printf( pzFormat, arg1, arg2 ); }    #define XSVFDBG_PRINTF3(iDebugLevel,pzFormat,arg1,arg2,arg3) \                { if ( xsvf_iDebugLevel >= iDebugLevel ) \                    printf( pzFormat, arg1, arg2, arg3 ); }    #define XSVFDBG_PRINTLENVAL(iDebugLevel,plenVal) \                { if ( xsvf_iDebugLevel >= iDebugLevel ) \                    xsvfPrintLenVal(plenVal); }#else   /* !DEBUG_MODE */    #define XSVFDBG_PRINTF(iDebugLevel,pzFormat)    #define XSVFDBG_PRINTF1(iDebugLevel,pzFormat,arg1)    #define XSVFDBG_PRINTF2(iDebugLevel,pzFormat,arg1,arg2)    #define XSVFDBG_PRINTF3(iDebugLevel,pzFormat,arg1,arg2,arg3)    #define XSVFDBG_PRINTLENVAL(iDebugLevel,plenVal)#endif  /* DEBUG_MODE *//*============================================================================* XSVF Type Declarations============================================================================*//****************************************************************************** Struct:       SXsvfInfo* Description:  This structure contains all of the data used during the*               execution of the XSVF.  Some data is persistent, predefined*               information (e.g. lRunTestTime).  The bulk of this struct's*               size is due to the lenVal structs (defined in lenval.h)*               which contain buffers for the active shift data.  The MAX_LEN*               #define in lenval.h defines the size of these buffers.*               These buffers must be large enough to store the longest*               shift data in your XSVF file.  For example:*                   MAX_LEN >= ( longest_shift_data_in_bits / 8 )*               Because the lenVal struct dominates the space usage of this*               struct, the rough size of this struct is:*                   sizeof( SXsvfInfo ) ~= MAX_LEN * 7 (number of lenVals)*               xsvfInitialize() contains initialization code for the data*               in this struct.*               xsvfCleanup() contains cleanup code for the data in this*               struct.*****************************************************************************/typedef struct tagSXsvfInfo{    /* XSVF status information */    unsigned char   ucComplete;         /* 0 = running; 1 = complete */    unsigned char   ucCommand;          /* Current XSVF command byte */    long            lCommandCount;      /* Number of commands processed */    int             iErrorCode;         /* An error code. 0 = no error. */    /* TAP state/sequencing information */    unsigned char   ucTapState;         /* Current TAP state */    unsigned char   ucEndIR;            /* ENDIR TAP state (See SVF) */    unsigned char   ucEndDR;            /* ENDDR TAP state (See SVF) */    /* RUNTEST information */    unsigned char   ucMaxRepeat;        /* Max repeat loops (for xc9500/xl) */    long            lRunTestTime;       /* Pre-specified RUNTEST time (usec) */    /* Shift Data Info and Buffers */    long            lShiftLengthBits;   /* Len. current shift data in bits */    short           sShiftLengthBytes;  /* Len. current shift data in bytes */    lenVal          lvTdi;              /* Current TDI shift data */    lenVal          lvTdoExpected;      /* Expected TDO shift data */    lenVal          lvTdoCaptured;      /* Captured TDO shift data */    lenVal          lvTdoMask;          /* TDO mask: 0=dontcare; 1=compare */#ifdef  XSVF_SUPPORT_COMPRESSION    /* XSDRINC Data Buffers */    lenVal          lvAddressMask;      /* Address mask for XSDRINC */    lenVal          lvDataMask;         /* Data mask for XSDRINC */    lenVal          lvNextData;         /* Next data for XSDRINC */#endif  /* XSVF_SUPPORT_COMPRESSION */    int             iHir;               /* # IR header bits */    int             iTir;               /* # IR trailer bits */    int             iHdr;               /* # DR header bits */    int             iTdr;               /* # DR trailer bits */    int             iHdrFpga;           /* # DR header bits for FPGA */} SXsvfInfo;/* Declare pointer to functions that perform XSVF commands */typedef int (*TXsvfDoCmdFuncPtr)( SXsvfInfo* );/*============================================================================* XSVF Command Bytes============================================================================*//* encodings of xsvf instructions */#define XCOMPLETE        0#define XTDOMASK         1#define XSIR             2#define XSDR             3#define XRUNTEST         4/* Reserved              5 *//* Reserved              6 */#define XREPEAT          7#define XSDRSIZE         8#define XSDRTDO          9#define XSETSDRMASKS     10#define XSDRINC          11#define XSDRB            12#define XSDRC            13#define XSDRE            14#define XSDRTDOB         15#define XSDRTDOC         16#define XSDRTDOE         17#define XSTATE           18         /* 4.00 */#define XENDIR           19         /* 4.04 */#define XENDDR           20         /* 4.04 */#define XSIR2            21         /* 4.10 */#define XCOMMENT         22         /* 4.14 */#define XWAIT            23         /* 5.00 *//* Insert new commands here *//* and add corresponding xsvfDoCmd function to xsvf_pfDoCmd below. */#define XLASTCMD         24         /* Last command marker *//*============================================================================* XSVF Command Parameter Values============================================================================*/#define XSTATE_RESET     0          /* 4.00 parameter for XSTATE */#define XSTATE_RUNTEST   1          /* 4.00 parameter for XSTATE */#define XENDXR_RUNTEST   0          /* 4.04 parameter for XENDIR/DR */#define XENDXR_PAUSE     1          /* 4.04 parameter for XENDIR/DR *//* TAP states */#define XTAPSTATE_RESET     0x00#define XTAPSTATE_RUNTEST   0x01    /* a.k.a. IDLE */#define XTAPSTATE_SELECTDR  0x02#define XTAPSTATE_CAPTUREDR 0x03#define XTAPSTATE_SHIFTDR   0x04#define XTAPSTATE_EXIT1DR   0x05#define XTAPSTATE_PAUSEDR   0x06#define XTAPSTATE_EXIT2DR   0x07#define XTAPSTATE_UPDATEDR  0x08#define XTAPSTATE_IRSTATES  0x09    /* All IR states begin here */#define XTAPSTATE_SELECTIR  0x09#define XTAPSTATE_CAPTUREIR 0x0A#define XTAPSTATE_SHIFTIR   0x0B#define XTAPSTATE_EXIT1IR   0x0C#define XTAPSTATE_PAUSEIR   0x0D#define XTAPSTATE_EXIT2IR   0x0E#define XTAPSTATE_UPDATEIR  0x0F/*============================================================================* XSVF Function Prototypes============================================================================*/int xsvfDoIllegalCmd( SXsvfInfo* pXsvfInfo );   /* Illegal command function */int xsvfDoXCOMPLETE( SXsvfInfo* pXsvfInfo );int xsvfDoXTDOMASK( SXsvfInfo* pXsvfInfo );int xsvfDoXSIR( SXsvfInfo* pXsvfInfo );int xsvfDoXSIR2( SXsvfInfo* pXsvfInfo );int xsvfDoXSDR( SXsvfInfo* pXsvfInfo );int xsvfDoXRUNTEST( SXsvfInfo* pXsvfInfo );int xsvfDoXREPEAT( SXsvfInfo* pXsvfInfo );int xsvfDoXSDRSIZE( SXsvfInfo* pXsvfInfo );int xsvfDoXSDRTDO( SXsvfInfo* pXsvfInfo );int xsvfDoXSETSDRMASKS( SXsvfInfo* pXsvfInfo );int xsvfDoXSDRINC( SXsvfInfo* pXsvfInfo );int xsvfDoXSDRBCE( SXsvfInfo* pXsvfInfo );int xsvfDoXSDRTDOBCE( SXsvfInfo* pXsvfInfo );int xsvfDoXSTATE( SXsvfInfo* pXsvfInfo );int xsvfDoXENDXR( SXsvfInfo* pXsvfInfo );int xsvfDoXCOMMENT( SXsvfInfo* pXsvfInfo );int xsvfDoXWAIT( SXsvfInfo* pXsvfInfo );/* Insert new command functions here *//*============================================================================* XSVF Global Variables============================================================================*//* Array of XSVF command functions.  Must follow command byte value order! *//* If your compiler cannot take this form, then convert to a switch statement*/TXsvfDoCmdFuncPtr   xsvf_pfDoCmd[]  ={    xsvfDoXCOMPLETE,        /*  0 */    xsvfDoXTDOMASK,         /*  1 */    xsvfDoXSIR,             /*  2 */    xsvfDoXSDR,             /*  3 */    xsvfDoXRUNTEST,         /*  4 */    xsvfDoIllegalCmd,       /*  5 */    xsvfDoIllegalCmd,       /*  6 */    xsvfDoXREPEAT,          /*  7 */    xsvfDoXSDRSIZE,         /*  8 */    xsvfDoXSDRTDO,          /*  9 */#ifdef  XSVF_SUPPORT_COMPRESSION    xsvfDoXSETSDRMASKS,     /* 10 */    xsvfDoXSDRINC,          /* 11 */#else    xsvfDoIllegalCmd,       /* 10 */    xsvfDoIllegalCmd,       /* 11 */#endif  /* XSVF_SUPPORT_COMPRESSION */    xsvfDoXSDRBCE,          /* 12 */    xsvfDoXSDRBCE,          /* 13 */    xsvfDoXSDRBCE,          /* 14 */    xsvfDoXSDRTDOBCE,       /* 15 */    xsvfDoXSDRTDOBCE,       /* 16 */

⌨️ 快捷键说明

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