65 struct SigSpecIterator;
66 struct SigSpecConstIterator;
73 typedef std::pair<SigSpec, SigSpec>
SigSig;
81 for (
int i = 0; a[i] || b[i]; i++)
202 const char *p =
c_str();
203 for (; i != 0; i--, p++)
208 std::string
substr(
size_t pos = 0,
size_t len = std::string::npos)
const {
209 if (len == std::string::npos || len >= strlen(
c_str() + pos))
210 return std::string(
c_str() + pos);
212 return std::string(
c_str() + pos, len);
220 return c_str()[0] == 0;
233 return (a ==
nullptr || b ==
nullptr) ? (a < b) : (a->name < b->name);
240 template<
typename T,
typename... Args>
241 bool in(T first, Args... rest) {
242 return in(first) ||
in(rest...);
246 bool in(
const char *rhs) {
return *
this == rhs; }
247 bool in(
const std::string &rhs) {
return *
this == rhs; }
248 bool in(
const std::set<IdString> &rhs) {
return rhs.count(*
this) != 0; }
252 if (str.size() > 0 && str[0] !=
'\\' && str[0] !=
'$')
258 if (str.size() > 1 && str[0] ==
'\\' && str[1] !=
'$')
259 return str.substr(1);
273 return a->name < b->name;
279 return strcmp(a->name.c_str(), b->name.c_str()) < 0;
339 typename std::map<RTLIL::IdString, T>::iterator
it;
347 if (list_p->empty()) {
348 this->list_p =
nullptr;
349 this->refcount_p =
nullptr;
351 it = list_p->begin();
388 return it != other.
it;
415 operator std::set<T>()
const {
418 result.insert(it.second);
422 operator std::vector<T>()
const {
423 std::vector<T> result;
424 result.reserve(
list_p->size());
426 result.push_back(it.second);
430 std::set<T>
to_set()
const {
return *
this; }
438 std::vector<RTLIL::State>
bits;
441 Const(std::string str);
442 Const(
int val,
int width = 32);
452 int as_int(
bool is_signed =
false)
const;
480 template<
typename T1,
typename T2>
void select(T1 *
module, T2 *member) {
507 std::map<RTLIL::IdString, RTLIL::Module*>
modules_;
535 std::string
scratchpad_get_string(std::string varname, std::string default_value = std::string())
const;
559 template<
typename T1,
typename T2>
void select(T1 *
module, T2 *member) {
562 sel.
select(module, member);
571 #define RTLIL_ATTRIBUTE_MEMBERS \
572 std::map<RTLIL::IdString, RTLIL::Const> attributes; \
573 void set_bool_attribute(RTLIL::IdString id) { \
574 attributes[id] = RTLIL::Const(1); \
576 bool get_bool_attribute(RTLIL::IdString id) const { \
577 if (attributes.count(id) == 0) \
579 return attributes.at(id).as_bool(); \
595 std::map<RTLIL::IdString, RTLIL::Wire*>
wires_;
596 std::map<RTLIL::IdString, RTLIL::Cell*>
cells_;
601 std::map<RTLIL::IdString, RTLIL::Memory*>
memories;
609 virtual void check();
615 const std::vector<RTLIL::SigSig> &
connections()
const;
633 template<
typename T>
bool selected(T *member)
const {
644 void remove(
const std::set<RTLIL::Wire*> &
wires);
744 bool arst_value =
false,
bool clk_polarity =
true,
bool arst_polarity =
true);
864 const std::map<RTLIL::IdString, RTLIL::SigSpec> &
connections()
const;
873 void fixup_parameters(
bool set_a_signed =
false,
bool set_b_signed =
false);
886 std::vector<RTLIL::State>
data;
925 if (
wire !=
nullptr && other.
wire !=
nullptr)
974 return bits_.empty();
985 SigSpec(std::initializer_list<RTLIL::SigSpec> parts);
992 SigSpec(
const std::string &str);
993 SigSpec(
int val,
int width = 32);
1003 hash_ = other.hash_;
1004 chunks_ = std::move(other.chunks_);
1005 bits_ = std::move(other.bits_);
1010 hash_ = other.hash_;
1011 chunks_ = std::move(other.chunks_);
1012 bits_ = std::move(other.bits_);
1036 void replace(
const std::map<RTLIL::SigBit, RTLIL::SigBit> &rules);
1045 void remove(
const std::set<RTLIL::SigBit> &pattern);
1046 void remove(
const std::set<RTLIL::SigBit> &pattern,
RTLIL::SigSpec *other)
const;
1049 void remove(
int offset,
int length = 1);
1059 void extend(
int width,
bool is_signed =
false);
1060 void extend_u0(
int width,
bool is_signed =
false);
1077 int as_int(
bool is_signed =
false)
const;
1083 bool match(std::string pattern)
const;
1094 operator std::vector<RTLIL::SigChunk>()
const {
return chunks(); }
1095 operator std::vector<RTLIL::SigBit>()
const {
return bits(); }
1100 inline void check()
const { }
1109 return (*sig_p)[index];
1165 template<
typename T>
1168 for (
auto &it : cells_)
1169 it.second->rewrite_sigspecs(functor);
1170 for (
auto &it : processes)
1171 it.second->rewrite_sigspecs(functor);
1172 for (
auto &it : connections_) {
1178 template<
typename T>
1180 for (
auto &it : connections_)
1184 template<
typename T>
1186 for (
auto &it : compare)
1188 for (
auto &it : actions) {
1192 for (
auto it : switches)
1193 it->rewrite_sigspecs(functor);
1196 template<
typename T>
1200 for (
auto it : cases)
1201 it->rewrite_sigspecs(functor);
1204 template<
typename T>
1208 for (
auto &it : actions) {
1214 template<
typename T>
1217 root_case.rewrite_sigspecs(functor);
1218 for (
auto it : syncs)
1219 it->rewrite_sigspecs(functor);
bool selected_module(RTLIL::IdString mod_name) const
void fixup_parameters(bool set_a_signed=false, bool set_b_signed=false)
const char * c_str() const
void rewrite_sigspecs(T functor)
bool selected(T1 *module) const
RTLIL::Const const_logic_or(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
bool is_fully_def() const
std::map< RTLIL::IdString, T > * list_p
void cloneInto(RTLIL::Module *new_mod) const
RTLIL::SigBit Aoi4Gate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c, RTLIL::SigBit sig_d)
bool operator!=(const RTLIL::ObjIterator< T > &other) const
RTLIL::Cell * addReduceXor(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::SigBit Oai4Gate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c, RTLIL::SigBit sig_d)
RTLIL::SigSpec Gt(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
bool is_fully_undef() const
RTLIL::SigSpec Lt(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
RTLIL::Wire * wire(RTLIL::IdString id)
RTLIL::Cell * addXorGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_y)
void unsetPort(RTLIL::IdString portname)
RTLIL::Cell * addSlice(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_y, RTLIL::Const offset)
void scratchpad_set_int(std::string varname, int value)
RTLIL::Cell * addDiv(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::Const const_xor(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
bool selected_whole_module(RTLIL::IdString mod_name) const
std::vector< RTLIL::Selection > selection_stack
bool operator!=(const RTLIL::SigSpec &other) const
RTLIL::Const const_pow(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
ObjIterator(decltype(list_p) list_p, int *refcount_p)
RTLIL::SigSpec Shr(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
RTLIL::Cell * addNandGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_y)
void new_connections(const std::vector< RTLIL::SigSig > &new_conn)
bool selected_module(RTLIL::IdString mod_name) const
RTLIL::Cell * addCell(RTLIL::IdString name, RTLIL::IdString type)
void add(RTLIL::Module *module)
bool selected_member(RTLIL::IdString mod_name, RTLIL::IdString memb_name) const
std::set< RTLIL::Monitor * > monitors
std::set< RTLIL::IdString > selected_modules
static bool parse_sel(RTLIL::SigSpec &sig, RTLIL::Design *design, RTLIL::Module *module, std::string str)
RTLIL::SigSpec Ne(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
RTLIL::Const const_ne(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::SigSpec Shl(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
RTLIL::SigBit XorGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b)
void setParam(RTLIL::IdString paramname, RTLIL::Const value)
RTLIL::SigBit AndGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b)
RTLIL::Cell * addDffGate(RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity=true)
RTLIL::Const const_eq(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
const std::vector< RTLIL::SigSig > & connections() const
#define YOSYS_NAMESPACE_END
std::map< RTLIL::IdString, std::set< RTLIL::IdString > > selected_members
RTLIL::Cell * addNot(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::SigSpec Sshl(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
RTLIL::Const as_const() const
bool operator!=(IdString rhs) const
RTLIL::SigSpec Mul(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
std::map< RTLIL::IdString, RTLIL::Wire * > wires_
void rewrite_sigspecs(T functor)
static std::string unescape_id(std::string str)
ObjIterator & operator=(const RTLIL::ObjIterator< T > &other)
std::set< RTLIL::SigBit > to_sigbit_set() const
void scratchpad_unset(std::string varname)
RTLIL::Cell * addOai4Gate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c, RTLIL::SigBit sig_d, RTLIL::SigBit sig_y)
RTLIL::SigChunk extract(int offset, int length) const
RTLIL_ATTRIBUTE_MEMBERS std::vector< RTLIL::CaseRule * > cases
RTLIL::Cell * addAoi3Gate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c, RTLIL::SigBit sig_y)
RTLIL::Cell * addSshr(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::SigBit & operator[](int index)
RTLIL::Cell * addNorGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_y)
static std::string idx(std::string str)
bool operator!=(const RTLIL::SigSpecConstIterator &other) const
std::map< RTLIL::IdString, T >::iterator it
RTLIL::Cell * addDlatchGate(RTLIL::IdString name, RTLIL::SigSpec sig_en, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool en_polarity=true)
void setPort(RTLIL::IdString portname, RTLIL::SigSpec signal)
RTLIL::SigSpec ReduceXor(RTLIL::IdString name, RTLIL::SigSpec sig_a, bool is_signed=false)
RTLIL::SigSpec Mux(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s)
RTLIL::Const const_sub(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::Const const_logic_not(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::SyncRule * clone() const
RTLIL::SigBit NorGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b)
RTLIL::SigSpec Sub(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
RTLIL::ObjRange< RTLIL::Wire * > wires()
std::map< RTLIL::IdString, RTLIL::Memory * > memories
RTLIL::Cell * addEq(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::Cell * addLut(RTLIL::IdString name, RTLIL::SigSpec sig_i, RTLIL::SigSpec sig_o, RTLIL::Const lut)
RTLIL::SigSpec Pmux(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s)
bool operator()(T *a, T *b) const
void unsetParam(RTLIL::IdString paramname)
std::vector< RTLIL::SigBit > bits_
void operator=(const char *rhs)
void swap_names(RTLIL::Wire *w1, RTLIL::Wire *w2)
std::set< RTLIL::IdString > avail_parameters
RTLIL::SigSpec Xnor(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
const RTLIL::SigSpec * sig_p
std::string scratchpad_get_string(std::string varname, std::string default_value=std::string()) const
std::map< RTLIL::IdString, RTLIL::Const > parameters
RTLIL::SigSpec Add(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
void extend_u0(int width, bool is_signed=false)
bool operator!=(const char *rhs) const
RTLIL::Cell * addAdd(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
#define RTLIL_ATTRIBUTE_MEMBERS
RTLIL::Const const_or(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
bool operator==(const RTLIL::SigSpecIterator &other) const
bool in(T first, Args...rest)
void select(T1 *module, T2 *member)
bool operator<(const RTLIL::SigSpec &other) const
std::vector< RTLIL::SigSpec > compare
std::vector< RTLIL::Module * > selected_whole_modules_warn() const
RTLIL::SigSpec Neg(RTLIL::IdString name, RTLIL::SigSpec sig_a, bool is_signed=false)
bool selected_member(RTLIL::IdString mod_name, RTLIL::IdString memb_name) const
RTLIL::Cell * addNex(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::SigSpec ReduceXnor(RTLIL::IdString name, RTLIL::SigSpec sig_a, bool is_signed=false)
RTLIL::SigBit OrGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b)
RTLIL::Cell * addReduceOr(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::Const const_ge(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
virtual RTLIL::IdString derive(RTLIL::Design *design, std::map< RTLIL::IdString, RTLIL::Const > parameters)
RTLIL::SigSpec Ge(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
ObjRange(decltype(list_p) list_p, int *refcount_p)
bool has_processes_warn() const
RTLIL::Const const_and(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
std::vector< RTLIL::SigSig > connections_
void rewrite_sigspecs(T functor)
RTLIL::SigSpec Or(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
RTLIL::Cell * addNotGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_y)
void inline_unpack() const
bool operator<(const RTLIL::SigChunk &other) const
RTLIL::Const const_mul(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
int scratchpad_get_int(std::string varname, int default_value=0) const
virtual void notify_module_add(RTLIL::Module *)
static std::string escape_id(std::string str)
Selection(bool full=true)
RTLIL::Cell * addLogicAnd(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::Cell * addNeg(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::Cell * addAnd(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::Cell * addShr(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
bool match(std::string pattern) const
RTLIL_ATTRIBUTE_MEMBERS Module()
RTLIL::SigSpec Eq(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
RTLIL::Const const_reduce_and(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::Cell * addXnor(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::Cell * addMod(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::SigSpec Div(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
IdString(const IdString &str)
ObjIterator(const RTLIL::ObjIterator< T > &other)
RTLIL::Cell * addDlatch(RTLIL::IdString name, RTLIL::SigSpec sig_en, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool en_polarity=true)
RTLIL::Cell * addReduceAnd(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::Cell * addDff(RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity=true)
virtual void notify_blackout(RTLIL::Module *)
void connect(const RTLIL::SigSig &conn)
std::set< T > to_set() const
void append_bit(const RTLIL::SigBit &bit)
void add(RTLIL::Wire *wire)
RTLIL::Cell * addAndGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_y)
std::vector< RTLIL::IdString > ports
RTLIL::Cell * addOrGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_y)
bool operator!=(const RTLIL::SigChunk &other) const
bool full_selection() const
bool operator<(const RTLIL::SigBit &other) const
RTLIL::Const const_reduce_xor(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
SigBit(const RTLIL::SigChunk &chunk, int index)
bool selected(T *member) const
std::map< RTLIL::IdString, RTLIL::Selection > selection_vars
bool operator()(const char *a, const char *b) const
RTLIL::Const const_sshl(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
std::vector< RTLIL::SigChunk > chunks_
std::string as_string() const
RTLIL::Const const_reduce_xnor(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
static std::vector< int > global_free_idx_list_
void select(T1 *module, T2 *member)
Const(const std::vector< RTLIL::State > &bits)
SigBit(RTLIL::Wire *wire, int offset)
RTLIL_ATTRIBUTE_MEMBERS bool hasPort(RTLIL::IdString portname) const
const RTLIL::SigSpec & getPort(RTLIL::IdString portname) const
RTLIL::Cell * addShl(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::Cell * addLogicNot(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::ObjIterator< T > end()
RTLIL::Const const_xnor(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
std::vector< RTLIL::Wire * > selected_wires() const
RTLIL::SigSpecIterator begin()
RTLIL::Cell * addLt(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::SigBit NandGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b)
RTLIL::Cell * addAssert(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_en)
virtual void notify_connect(RTLIL::Module *, const RTLIL::SigSig &)
RTLIL::SigSpec Xor(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
std::string decode_string() const
void operator=(const std::string &rhs)
RTLIL::SigSpecConstIterator begin() const
#define log_assert(_assert_expr_)
bool operator==(const RTLIL::SigBit &other) const
RTLIL::Const const_shr(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::Const const_mod(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
bool is_fully_const() const
bool selected(T1 *module, T2 *member) const
RTLIL::Const const_shl(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::Wire * addWire(RTLIL::IdString name, int width=1)
RTLIL::Cell * addShift(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
const RTLIL::SigBit & operator[](int index) const
SigSpec(RTLIL::SigSpec &&other)
RTLIL::SigChunk as_chunk() const
static int get_reference(int idx)
bool selected_whole_module(RTLIL::IdString mod_name) const
RTLIL::Cell * addEqx(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
void operator=(RTLIL::Wire &other)=delete
RTLIL::SigSpec Pos(RTLIL::IdString name, RTLIL::SigSpec sig_a, bool is_signed=false)
std::vector< RTLIL::Cell * > selected_cells() const
const RTLIL::SigSpec & operator=(const RTLIL::SigSpec &other)
RTLIL::Cell * addConcat(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y)
RTLIL::Cell * addMul(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::Cell * addDlatchsr(RTLIL::IdString name, RTLIL::SigSpec sig_en, RTLIL::SigSpec sig_set, RTLIL::SigSpec sig_clr, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool en_polarity=true, bool set_polarity=true, bool clr_polarity=true)
RTLIL::Const const_le(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
const RTLIL::SigBit & operator*() const
static std::vector< char * > global_id_storage_
RTLIL::Cell * addGe(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
bool scratchpad_get_bool(std::string varname, bool default_value=false) const
bool operator<(const RTLIL::Const &other) const
RTLIL::SigBit MuxGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_s)
RTLIL::Cell * addAdff(RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_arst, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, RTLIL::Const arst_value, bool clk_polarity=true, bool arst_polarity=true)
RTLIL::Process * clone() const
RTLIL::Cell * addSub(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::SigSpec LogicAnd(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
RTLIL::Const const_eqx(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
void remove2(const RTLIL::SigSpec &pattern, RTLIL::SigSpec *other)
void rewrite_sigspecs(T functor)
RTLIL::SigBit to_single_sigbit() const
bool operator!=(const RTLIL::SigSpecIterator &other) const
void rewrite_sigspecs(T functor)
static std::map< char *, int, char_ptr_cmp > global_id_index_
const RTLIL::SigSpec & operator=(RTLIL::SigSpec &&other)
const std::vector< RTLIL::SigBit > & bits() const
bool operator==(const RTLIL::SigChunk &other) const
RTLIL::Const const_sshr(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::SigBit NotGate(RTLIL::IdString name, RTLIL::SigBit sig_a)
std::vector< RTLIL::SigSig > actions
static const char * id2cstr(const RTLIL::IdString &str)
RTLIL::CaseRule * clone() const
RTLIL::Const const_shiftx(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
bool operator!=(const RTLIL::SigBit &other) const
int as_int(bool is_signed=false) const
RTLIL::Cell * addSr(RTLIL::IdString name, RTLIL::SigSpec sig_set, RTLIL::SigSpec sig_clr, RTLIL::SigSpec sig_q, bool set_polarity=true, bool clr_polarity=true)
IdString(const char *str)
void operator=(const IdString &rhs)
std::vector< RTLIL::Module * > selected_whole_modules() const
RTLIL::Module * addModule(RTLIL::IdString name)
RTLIL::Module * module(RTLIL::IdString name)
std::map< RTLIL::IdString, RTLIL::Process * > processes
RTLIL::SigBit XnorGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b)
RTLIL::Cell * addDffsr(RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_set, RTLIL::SigSpec sig_clr, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity=true, bool set_polarity=true, bool clr_polarity=true)
std::string substr(size_t pos=0, size_t len=std::string::npos) const
bool has(RTLIL::IdString id) const
RTLIL::ObjRange< RTLIL::Cell * > cells()
RTLIL::Cell * addXor(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
virtual size_t count_id(RTLIL::IdString id)
RTLIL::ObjRange< RTLIL::Module * > modules()
bool operator()(const T *a, const T *b) const
bool has_memories() const
std::map< RTLIL::IdString, RTLIL::Module * > modules_
IdString(const std::string &str)
void replace(const RTLIL::SigSpec &pattern, const RTLIL::SigSpec &with)
bool operator==(const std::string &rhs) const
RTLIL::SigSpec LogicNot(RTLIL::IdString name, RTLIL::SigSpec sig_a, bool is_signed=false)
RTLIL::Const const_logic_and(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::Cell * cell(RTLIL::IdString id)
RTLIL::SigSpec Shift(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
std::map< RTLIL::IdString, RTLIL::Cell * > cells_
RTLIL::Const const_reduce_or(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
#define YOSYS_NAMESPACE_BEGIN
char operator[](size_t i) const
std::map< RTLIL::IdString, T > * list_p
int as_int(bool is_signed=false) const
RTLIL::SigSpec Sshr(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
RTLIL::Const const_nex(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
static int get_reference(const char *p)
RTLIL::Const const_div(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::SigSpec Pow(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool a_signed=false, bool b_signed=false)
RTLIL::Cell * addLogicOr(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::Const const_lt(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::IdString uniquify(RTLIL::IdString name)
RTLIL::Cell * addDffsrGate(RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_set, RTLIL::SigSpec sig_clr, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity=true, bool set_polarity=true, bool clr_polarity=true)
RTLIL::SigSpec ReduceOr(RTLIL::IdString name, RTLIL::SigSpec sig_a, bool is_signed=false)
RTLIL::Cell * addGt(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::SigBit Aoi3Gate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c)
RTLIL::Cell * addMux(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s, RTLIL::SigSpec sig_y)
std::vector< RTLIL::SyncRule * > syncs
RTLIL::Cell * addAoi4Gate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c, RTLIL::SigBit sig_d, RTLIL::SigBit sig_y)
RTLIL::SwitchRule * clone() const
RTLIL::Cell * addShiftx(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
const RTLIL::Const & getParam(RTLIL::IdString paramname) const
RTLIL::SigBit Oai3Gate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c)
RTLIL::Cell * addMuxGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_s, RTLIL::SigBit sig_y)
void operator=(RTLIL::Cell &other)=delete
RTLIL::SigSpec extract(const RTLIL::SigSpec &pattern, const RTLIL::SigSpec *other=NULL) const
RTLIL::SigSpec ReduceBool(RTLIL::IdString name, RTLIL::SigSpec sig_a, bool is_signed=false)
RTLIL::SigSpec And(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
RTLIL::ObjIterator< T > begin()
RTLIL::SigSpec repeat(int num) const
RTLIL::Cell * addPmux(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s, RTLIL::SigSpec sig_y)
void scratchpad_set_bool(std::string varname, bool value)
std::vector< RTLIL::State > bits
RTLIL::Cell * addReduceBool(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_y, bool is_signed=false)
std::string as_string() const
RTLIL::Cell * addReduceXnor(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_y, bool is_signed=false)
void append(const RTLIL::SigSpec &signal)
RTLIL::Const const_neg(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
std::vector< RTLIL::Module * > selected_modules() const
bool operator==(const RTLIL::Const &other) const
RTLIL::Cell * addNe(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::Cell * addSshl(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
bool hasParam(RTLIL::IdString paramname) const
RTLIL::Const const_add(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::Cell * addOr(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
static bool parse_rhs(const RTLIL::SigSpec &lhs, RTLIL::SigSpec &sig, RTLIL::Module *module, std::string str)
SigBit(const RTLIL::SigChunk &chunk)
void extend(int width, bool is_signed=false)
void optimize(RTLIL::Design *design)
bool operator!=(const std::string &rhs) const
std::map< RTLIL::IdString, RTLIL::SigSpec > connections_
RTLIL::Cell * addDlatchsrGate(RTLIL::IdString name, RTLIL::SigSpec sig_en, RTLIL::SigSpec sig_set, RTLIL::SigSpec sig_clr, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool en_polarity=true, bool set_polarity=true, bool clr_polarity=true)
bool operator==(IdString rhs) const
static struct RTLIL::IdString::destruct_guard_t destruct_guard
bool has_memories_warn() const
RTLIL::SigSpec Le(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
bool operator!=(const RTLIL::Const &other) const
bool operator()(T *a, T *b) const
std::string selected_active_module
virtual void notify_connect(RTLIL::Module *, const std::vector< RTLIL::SigSig > &)
std::vector< RTLIL::SigSig > actions
RTLIL::SigSpec Shiftx(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
std::set< RTLIL::Monitor * > monitors
RTLIL::Cell * addXnorGate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_y)
std::string id(RTLIL::IdString internal_id, bool may_rename=true)
virtual void notify_module_del(RTLIL::Module *)
RTLIL::Const const_reduce_bool(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::Cell * addPos(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::SigSpec Bu0(RTLIL::IdString name, RTLIL::SigSpec sig_a, bool is_signed=false)
RTLIL::Cell * addLe(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed=false)
RTLIL::SigSpec Mod(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
RTLIL::Cell * addDffe(RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_en, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity=true, bool en_polarity=true)
bool operator==(const RTLIL::SigSpecIterator &other) const
RTLIL::Wire * as_wire() const
std::map< RTLIL::SigBit, RTLIL::SigBit > to_sigbit_map(const RTLIL::SigSpec &other) const
std::vector< RTLIL::SwitchRule * > switches
std::vector< T > to_vector() const
bool in(const std::string &rhs)
std::pair< SigSpec, SigSpec > SigSig
const std::map< RTLIL::IdString, RTLIL::SigSpec > & connections() const
bool operator()(RTLIL::IdString a, RTLIL::IdString b) const
RTLIL::Cell * addDffeGate(RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_en, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity=true, bool en_polarity=true)
RTLIL::SigSpec Not(RTLIL::IdString name, RTLIL::SigSpec sig_a, bool is_signed=false)
SigBit(RTLIL::Wire *wire)
RTLIL::Const const_pos(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::Const const_gt(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::SigBit & operator*() const
bool has_marked_bits() const
std::vector< RTLIL::State > data
const char * log_id(RTLIL::IdString str)
RTLIL::Const const_shift(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::SigSpecIterator end()
static bool parse(RTLIL::SigSpec &sig, RTLIL::Module *module, std::string str)
std::map< std::string, std::string > scratchpad
std::vector< RTLIL::SigBit > to_sigbit_vector() const
bool operator==(const RTLIL::SigSpec &other) const
void rewrite_sigspecs(T functor)
RTLIL::Const const_not(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
RTLIL::Cell * addPow(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool a_signed=false, bool b_signed=false)
void rename(RTLIL::Wire *wire, RTLIL::IdString new_name)
virtual void notify_connect(RTLIL::Cell *, const RTLIL::IdString &, const RTLIL::SigSpec &, RTLIL::SigSpec &)
bool operator==(const char *rhs) const
RTLIL::SigSpecConstIterator end() const
RTLIL::SigSpec ReduceAnd(RTLIL::IdString name, RTLIL::SigSpec sig_a, bool is_signed=false)
bool has_keep_attr() const
bool has_processes() const
const std::vector< RTLIL::SigChunk > & chunks() const
static std::vector< int > global_refcount_storage_
RTLIL::SigSpec Eqx(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
void scratchpad_set_string(std::string varname, std::string value)
RTLIL_ATTRIBUTE_MEMBERS RTLIL::CaseRule root_case
static void put_reference(int idx)
RTLIL::Cell * addAdffGate(RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_arst, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool arst_value=false, bool clk_polarity=true, bool arst_polarity=true)
RTLIL::SigSpec LogicOr(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)
bool in(const std::set< IdString > &rhs)
RTLIL::Cell * addOai3Gate(RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c, RTLIL::SigBit sig_y)
bool operator<(IdString rhs) const
virtual RTLIL::Module * clone() const
RTLIL::SigSpec Nex(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed=false)