Merge pull request #3219 from YosysHQ/micko/quick_vcd
[yosys.git] / kernel / fstdata.h
index c9a933836b1ce4d7f38ee0f0033c1ae27a9f164d..4a355fd775ac2b33444e0a8b8a25808b8051cdc3 100644 (file)
 
 YOSYS_NAMESPACE_BEGIN
 
+typedef std::function<void(uint64_t)> CallbackFunction;
+struct fst_end_of_data_exception { };
+
 struct FstVar
 {
-    fstHandle id;
-    std::string name;
-    bool is_alias;
-    std::string scope;
-    int width;
+       fstHandle id;
+       std::string name;
+       bool is_alias;
+       std::string scope;
+       int width;
 };
 
 class FstData
 {
-  public:
-    FstData(std::string filename);
-    ~FstData();
-
-    uint64_t getStartTime();
-    uint64_t getEndTime();
-
-    std::vector<FstVar>& getVars() { return vars; };
+       public:
+       FstData(std::string filename);
+       ~FstData();
 
-    void reconstruct_callback(uint64_t pnt_time, fstHandle pnt_facidx, const unsigned char *pnt_value, uint32_t plen);
-    void reconstruct(std::vector<fstHandle> &signal);
-    void reconstuctAll();
+       uint64_t getStartTime();
+       uint64_t getEndTime();
 
-    void reconstruct_callback_attimes(uint64_t pnt_time, fstHandle pnt_facidx, const unsigned char *pnt_value, uint32_t plen);
-    void reconstructAtTimes(std::vector<fstHandle> &signal,std::vector<uint64_t> time);
-       void reconstructAllAtTimes(std::vector<uint64_t> time);
+       std::vector<FstVar>& getVars() { return vars; };
 
-    std::string valueAt(fstHandle signal, uint64_t time);
-    std::vector<uint64_t> edges(fstHandle signal, bool positive, bool negative);
-    void recalc_time_offsets(fstHandle signal, std::vector<uint64_t> time);
+       void reconstruct_callback_attimes(uint64_t pnt_time, fstHandle pnt_facidx, const unsigned char *pnt_value, uint32_t plen);
+       void reconstructAllAtTimes(std::vector<fstHandle> &signal, uint64_t start_time, uint64_t end_time, CallbackFunction cb);
 
+       std::string valueOf(fstHandle signal);
        fstHandle getHandle(std::string name);
-  private:
-    void extractVarNames();
+       double getTimescale() { return timescale; }
+       const char *getTimescaleString() { return timescale_str.c_str(); }
+private:
+       void extractVarNames();
 
-    struct fstReaderContext *ctx;
-    std::vector<std::string> scopes;
-    std::vector<FstVar> vars;
-    std::map<fstHandle, FstVar> handle_to_var;
+       struct fstReaderContext *ctx;
+       std::vector<std::string> scopes;
+       std::vector<FstVar> vars;
+       std::map<fstHandle, FstVar> handle_to_var;
        std::map<std::string, fstHandle> name_to_handle;
-    std::map<fstHandle, std::vector<std::pair<uint64_t, std::string>>> handle_to_data;
-    std::map<fstHandle, std::map<uint64_t, size_t>> time_to_index;
-    std::map<fstHandle, std::map<size_t, uint64_t>> index_to_time;
-    std::vector<uint64_t> sample_times;
-    size_t sample_times_ndx;
-    std::map<fstHandle, std::string> current;
+       std::map<fstHandle, std::string> last_data;
+       uint64_t last_time;
+       std::map<fstHandle, std::string> past_data;
+       uint64_t past_time;
+       double timescale;
+       std::string timescale_str;
+       uint64_t start_time;
+       uint64_t end_time;
+       CallbackFunction callback;
+       std::vector<fstHandle> clk_signals;
+       bool all_samples;
+       std::string tmp_file;
 };
 
 YOSYS_NAMESPACE_END