/* * yosys -- Yosys Open SYnthesis Suite * * Copyright (C) 2022 Miodrag Milanovic * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef FSTDATA_H #define FSTDATA_H #include "kernel/yosys.h" #include "libs/fst/fstapi.h" YOSYS_NAMESPACE_BEGIN typedef std::function CallbackFunction; struct fst_end_of_data_exception { }; struct FstVar { fstHandle id; std::string name; bool is_alias; bool is_reg; std::string scope; int width; }; class FstData { public: FstData(std::string filename); ~FstData(); uint64_t getStartTime(); uint64_t getEndTime(); std::vector& getVars() { return vars; }; void reconstruct_callback_attimes(uint64_t pnt_time, fstHandle pnt_facidx, const unsigned char *pnt_value, uint32_t plen); void reconstructAllAtTimes(std::vector &signal, uint64_t start_time, uint64_t end_time, CallbackFunction cb); std::string valueOf(fstHandle signal); fstHandle getHandle(std::string name); dict getMemoryHandles(std::string name); double getTimescale() { return timescale; } const char *getTimescaleString() { return timescale_str.c_str(); } private: void extractVarNames(); struct fstReaderContext *ctx; std::vector vars; std::map handle_to_var; std::map name_to_handle; std::map> memory_to_handle; std::map last_data; uint64_t last_time; std::map past_data; uint64_t past_time; double timescale; std::string timescale_str; uint64_t start_time; uint64_t end_time; CallbackFunction callback; std::vector clk_signals; bool all_samples; std::string tmp_file; }; YOSYS_NAMESPACE_END #endif