Added RTLIL::Module::wire(id) and cell(id) lookup functions
authorClifford Wolf <clifford@clifford.at>
Sun, 27 Jul 2014 09:03:56 +0000 (11:03 +0200)
committerClifford Wolf <clifford@clifford.at>
Sun, 27 Jul 2014 09:18:31 +0000 (11:18 +0200)
kernel/rtlil.cc
kernel/rtlil.h

index 5709875ec723ab63c7b5a4d7e6ea71ca9c3b1df9..db85f9e3d9269999f6474289ca52291245d569e6 100644 (file)
@@ -274,6 +274,16 @@ bool RTLIL::Design::selected_member(RTLIL::IdString mod_name, RTLIL::IdString me
        return selection_stack.back().selected_member(mod_name, memb_name);
 }
 
+bool RTLIL::Design::selected_module(RTLIL::Module *mod) const
+{
+       return selected_module(mod->name);
+}
+
+bool RTLIL::Design::selected_whole_module(RTLIL::Module *mod) const
+{
+       return selected_whole_module(mod->name);
+}
+
 RTLIL::Module::Module()
 {
        refcount_wires_ = 0;
@@ -1502,6 +1512,7 @@ RTLIL::SigChunk::SigChunk(const RTLIL::Const &value)
 
 RTLIL::SigChunk::SigChunk(RTLIL::Wire *wire)
 {
+       log_assert(wire != nullptr);
        this->wire = wire;
        this->width = wire->width;
        this->offset = 0;
@@ -1509,6 +1520,7 @@ RTLIL::SigChunk::SigChunk(RTLIL::Wire *wire)
 
 RTLIL::SigChunk::SigChunk(RTLIL::Wire *wire, int offset, int width)
 {
+       log_assert(wire != nullptr);
        this->wire = wire;
        this->width = width;
        this->offset = offset;
index 6eb52cf2d80398821880e81071e7867a1abaf9ce..7c69ff64cfb3f5ee116685b14a594e4b2a629911 100644 (file)
@@ -358,6 +358,9 @@ struct RTLIL::Design
        bool selected_whole_module(RTLIL::IdString mod_name) const;
        bool selected_member(RTLIL::IdString mod_name, RTLIL::IdString memb_name) const;
 
+       bool selected_module(RTLIL::Module *mod) const;
+       bool selected_whole_module(RTLIL::Module *mod) const;
+
        bool full_selection() const {
                return selection_stack.back().full_selection;
        }
@@ -425,6 +428,9 @@ public:
        void cloneInto(RTLIL::Module *new_mod) const;
        virtual RTLIL::Module *clone() const;
 
+       RTLIL::Wire* wire(RTLIL::IdString id) { return wires_.count(id) ? wires_.at(id) : nullptr; }
+       RTLIL::Cell* cell(RTLIL::IdString id) { return cells_.count(id) ? cells_.at(id) : nullptr; }
+
        RTLIL::ObjRange<RTLIL::Wire*> wires() { return RTLIL::ObjRange<RTLIL::Wire*>(&wires_, &refcount_wires_); }
        RTLIL::ObjRange<RTLIL::Cell*> cells() { return RTLIL::ObjRange<RTLIL::Cell*>(&cells_, &refcount_cells_); }
 
@@ -663,8 +669,8 @@ struct RTLIL::SigBit
 
        SigBit() : wire(NULL), data(RTLIL::State::S0), offset(0) { }
        SigBit(RTLIL::State bit) : wire(NULL), data(bit), offset(0) { }
-       SigBit(RTLIL::Wire *wire) : wire(wire), data(RTLIL::State::S0), offset(0) { assert(!wire || wire->width == 1); }
-       SigBit(RTLIL::Wire *wire, int offset) : wire(wire), data(RTLIL::State::S0), offset(offset) { }
+       SigBit(RTLIL::Wire *wire) : wire(wire), data(RTLIL::State::S0), offset(0) { assert(wire && wire->width == 1); }
+       SigBit(RTLIL::Wire *wire, int offset) : wire(wire), data(RTLIL::State::S0), offset(offset) { assert(wire); }
        SigBit(const RTLIL::SigChunk &chunk) : wire(chunk.wire), data(chunk.wire ? RTLIL::State::S0 : chunk.data.bits[0]), offset(chunk.offset) { assert(chunk.width == 1); }
        SigBit(const RTLIL::SigChunk &chunk, int index) : wire(chunk.wire), data(chunk.wire ? RTLIL::State::S0 : chunk.data.bits[index]), offset(chunk.wire ? chunk.offset + index : 0) { }
        SigBit(const RTLIL::SigSpec &sig);