diff options
author | Clifford Wolf <clifford@clifford.at> | 2013-06-18 17:11:13 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2013-06-18 17:11:13 +0200 |
commit | 6971c4db62fce93953edf5dd4fb511e9ccebdecc (patch) | |
tree | 0a8da3a733de6e290f60231f836e5eada5f40d34 /kernel/rtlil.h | |
parent | 5cf04f33fa081ead8f0b8799eb324a3c5d4acac1 (diff) | |
download | yosys-6971c4db62fce93953edf5dd4fb511e9ccebdecc.tar.gz yosys-6971c4db62fce93953edf5dd4fb511e9ccebdecc.tar.bz2 yosys-6971c4db62fce93953edf5dd4fb511e9ccebdecc.zip |
Added RTLIL::Module::fixup_ports() API and RTLIL::*::rewrite_sigspecs() API
Diffstat (limited to 'kernel/rtlil.h')
-rw-r--r-- | kernel/rtlil.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/kernel/rtlil.h b/kernel/rtlil.h index b15082889..695139244 100644 --- a/kernel/rtlil.h +++ b/kernel/rtlil.h @@ -237,6 +237,18 @@ struct RTLIL::Module { virtual void optimize(); void add(RTLIL::Wire *wire); void add(RTLIL::Cell *cell); + void fixup_ports(); + + template<typename T> void rewrite_sigspecs(T functor) { + for (auto &it : cells) + it.second->rewrite_sigspecs(functor); + for (auto &it : processes) + it.second->rewrite_sigspecs(functor); + for (auto &it : connections) { + functor(it.first); + functor(it.second); + } + } }; struct RTLIL::Wire { @@ -261,6 +273,11 @@ struct RTLIL::Cell { std::map<RTLIL::IdString, RTLIL::Const> attributes; std::map<RTLIL::IdString, RTLIL::Const> parameters; void optimize(); + + template<typename T> void rewrite_sigspecs(T functor) { + for (auto &it : connections) + functor(it.second); + } }; struct RTLIL::SigChunk { @@ -328,6 +345,17 @@ struct RTLIL::CaseRule { std::vector<RTLIL::SwitchRule*> switches; ~CaseRule(); void optimize(); + + template<typename T> void rewrite_sigspecs(T functor) { + for (auto &it : compare) + functor(it); + for (auto &it : actions) { + functor(it.first); + functor(it.second); + } + for (auto it : switches) + it->rewrite_sigspecs(functor); + } }; struct RTLIL::SwitchRule { @@ -336,6 +364,12 @@ struct RTLIL::SwitchRule { std::vector<RTLIL::CaseRule*> cases; ~SwitchRule(); void optimize(); + + template<typename T> void rewrite_sigspecs(T functor) { + functor(signal); + for (auto it : cases) + it->rewrite_sigspecs(functor); + } }; struct RTLIL::SyncRule { @@ -343,6 +377,14 @@ struct RTLIL::SyncRule { RTLIL::SigSpec signal; std::vector<RTLIL::SigSig> actions; void optimize(); + + template<typename T> void rewrite_sigspecs(T functor) { + functor(signal); + for (auto &it : actions) { + functor(it.first); + functor(it.second); + } + } }; struct RTLIL::Process { @@ -352,6 +394,12 @@ struct RTLIL::Process { std::vector<RTLIL::SyncRule*> syncs; ~Process(); void optimize(); + + template<typename T> void rewrite_sigspecs(T functor) { + root_case.rewrite_sigspecs(functor); + for (auto it : syncs) + it->rewrite_sigspecs(functor); + } }; #endif |