#ifndef SVF_JTAG_HPP #define SVF_JTAG_HPP #include #include #include using namespace std; class SVF_jtag { public: SVF_jtag(FtdiJtag *jtag); ~SVF_jtag(); void parse(string filename); void setVerbose(bool verbose) {_verbose = verbose;} private: typedef struct { uint32_t len; string tdo; string tdi; string mask; string smask; } svf_XYR; void split_str(string const &str, vector &vparse); void clear_XYR(svf_XYR &t); void parse_XYR(vector const &vstr/*, svf_stat &svfs*/, svf_XYR &t); void parse_runtest(vector const &vstr); void handle_instruction(vector const &vstr); map fsm_state = { {"RESET", 0}, {"IDLE", 1}, {"DRSELECT", 2}, {"DRCAPTURE", 3}, {"DRSHIFT", 4}, {"DREXIT1", 5}, {"DRPAUSE", 6}, {"DREXIT2", 7}, {"DRUPDATE", 8}, {"IRSELECT", 9}, {"IRCAPTURE", 10}, {"IRSHIFT", 11}, {"IREXIT1", 12}, {"IRPAUSE", 13}, {"IREXIT2", 14}, {"IRUPDATE", 15} }; FtdiJtag *_jtag; bool _verbose; uint32_t _freq_hz; int _enddr; int _endir; int _run_state; int _end_state; svf_XYR hdr; svf_XYR hir; svf_XYR sdr; svf_XYR sir; svf_XYR tdr; svf_XYR tir; }; #endif