/* * yosys -- Yosys Open SYnthesis Suite * * Copyright (C) 2012 Clifford Wolf * * 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 REGISTER_H #define REGISTER_H #include "kernel/rtlil.h" #include #include #include #include #ifdef YOSYS_ENABLE_TCL #include extern Tcl_Interp *yosys_get_tcl_interp(); #endif // from kernel/version_*.o (cc source generated from Makefile) extern const char *yosys_version_str; // implemented in driver.cc extern RTLIL::Design *yosys_get_design(); extern std::string proc_self_dirname(); extern std::string proc_share_dirname(); const char *create_prompt(RTLIL::Design *design, int recursion_counter); // from passes/cmds/design.cc extern std::map saved_designs; extern std::vector pushed_designs; struct Pass { std::string pass_name, short_help; Pass(std::string name, std::string short_help = "** document me **"); virtual void run_register(); virtual ~Pass(); virtual void help(); virtual void execute(std::vector args, RTLIL::Design *design) = 0; void cmd_log_args(const std::vector &args); void cmd_error(const std::vector &args, size_t argidx, std::string msg); void extra_args(std::vector args, size_t argidx, RTLIL::Design *design, bool select = true); static void call(RTLIL::Design *design, std::string command); static void call(RTLIL::Design *design, std::vector args); static void call_newsel(RTLIL::Design *design, std::string command); static void call_newsel(RTLIL::Design *design, std::vector args); static void init_register(); static void done_register(); }; struct Frontend : Pass { std::string frontend_name; Frontend(std::string name, std::string short_help = "** document me **"); virtual void run_register(); virtual ~Frontend(); virtual void execute(std::vector args, RTLIL::Design *design); virtual void execute(FILE *&f, std::string filename, std::vector args, RTLIL::Design *design) = 0; static std::vector next_args; void extra_args(FILE *&f, std::string &filename, std::vector args, size_t argidx); static void frontend_call(RTLIL::Design *design, FILE *f, std::string filename, std::string command); static void frontend_call(RTLIL::Design *design, FILE *f, std::string filename, std::vector args); }; struct Backend : Pass { std::string backend_name; Backend(std::string name, std::string short_help = "** document me **"); virtual void run_register(); virtual ~Backend(); virtual void execute(std::vector args, RTLIL::Design *design); virtual void execute(FILE *&f, std::string filename, std::vector args, RTLIL::Design *design) = 0; void extra_args(FILE *&f, std::string &filename, std::vector args, size_t argidx); static void backend_call(RTLIL::Design *design, FILE *f, std::string filename, std::string command); static void backend_call(RTLIL::Design *design, FILE *f, std::string filename, std::vector args); }; // implemented in passes/cmds/select.cc extern void handle_extra_select_args(Pass *pass, std::vector args, size_t argidx, size_t args_size, RTLIL::Design *design); namespace REGISTER_INTERN { extern int raw_register_count; extern bool raw_register_done; extern Pass *raw_register_array[]; extern std::map pass_register; extern std::map frontend_register; extern std::map backend_register; } #endif