static void create_ff(RTLIL::Module *module, LibertyAst *node)
{
- RTLIL::SigSpec iq_sig(module->new_wire(1, RTLIL::escape_id(node->args.at(0))));
- RTLIL::SigSpec iqn_sig(module->new_wire(1, RTLIL::escape_id(node->args.at(1))));
+ RTLIL::SigSpec iq_sig(module->addWire(RTLIL::escape_id(node->args.at(0))));
+ RTLIL::SigSpec iqn_sig(module->addWire(RTLIL::escape_id(node->args.at(1))));
RTLIL::SigSpec clk_sig, data_sig, clear_sig, preset_sig;
bool clk_polarity = true, clear_polarity = true, preset_polarity = true;
static void create_latch(RTLIL::Module *module, LibertyAst *node)
{
- RTLIL::SigSpec iq_sig(module->new_wire(1, RTLIL::escape_id(node->args.at(0))));
- RTLIL::SigSpec iqn_sig(module->new_wire(1, RTLIL::escape_id(node->args.at(1))));
+ RTLIL::SigSpec iq_sig(module->addWire(RTLIL::escape_id(node->args.at(0))));
+ RTLIL::SigSpec iqn_sig(module->addWire(RTLIL::escape_id(node->args.at(1))));
RTLIL::SigSpec enable_sig, data_sig, clear_sig, preset_sig;
bool enable_polarity = true, clear_polarity = true, preset_polarity = true;
}
}
if (!flag_lib || dir->value != "internal")
- module->new_wire(1, RTLIL::escape_id(node->args.at(0)));
+ module->addWire(RTLIL::escape_id(node->args.at(0)));
}
for (auto node : cell->children)
return new_mod;
}
-RTLIL::Wire *RTLIL::Module::new_wire(int width, RTLIL::IdString name)
-{
- RTLIL::Wire *wire = new RTLIL::Wire;
- wire->width = width;
- wire->name = name;
- add(wire);
- return wire;
-}
-
void RTLIL::Module::add(RTLIL::Wire *wire)
{
assert(!wire->name.empty());
return cell; \
} \
RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig_a, bool is_signed) { \
- RTLIL::SigSpec sig_y = new_wire(_y_size, NEW_ID); \
+ RTLIL::SigSpec sig_y = addWire(NEW_ID, _y_size); \
add ## _func(name, sig_a, sig_y, is_signed); \
return sig_y; \
}
return cell; \
} \
RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed) { \
- RTLIL::SigSpec sig_y = new_wire(_y_size, NEW_ID); \
+ RTLIL::SigSpec sig_y = addWire(NEW_ID, _y_size); \
add ## _func(name, sig_a, sig_b, sig_y, is_signed); \
return sig_y; \
}
return cell; \
} \
RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s) { \
- RTLIL::SigSpec sig_y = new_wire(sig_a.width, NEW_ID); \
+ RTLIL::SigSpec sig_y = addWire(NEW_ID, sig_a.width); \
add ## _func(name, sig_a, sig_b, sig_s, sig_y); \
return sig_y; \
}
return cell; \
} \
RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig1) { \
- RTLIL::SigSpec sig2 = new_wire(1, NEW_ID); \
+ RTLIL::SigSpec sig2 = addWire(NEW_ID); \
add ## _func(name, sig1, sig2); \
return sig2; \
}
return cell; \
} \
RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig1, RTLIL::SigSpec sig2) { \
- RTLIL::SigSpec sig3 = new_wire(1, NEW_ID); \
+ RTLIL::SigSpec sig3 = addWire(NEW_ID); \
add ## _func(name, sig1, sig2, sig3); \
return sig3; \
}
return cell; \
} \
RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig1, RTLIL::SigSpec sig2, RTLIL::SigSpec sig3) { \
- RTLIL::SigSpec sig4 = new_wire(1, NEW_ID); \
+ RTLIL::SigSpec sig4 = addWire(NEW_ID); \
add ## _func(name, sig1, sig2, sig3, sig4); \
return sig4; \
}
RTLIL::new_id(__FILE__, __LINE__, __FUNCTION__)
#define NEW_WIRE(_mod, _width) \
- (_mod)->new_wire(_width, NEW_ID)
+ (_mod)->addWire(NEW_ID, _width)
template <typename T> struct sort_by_name {
bool operator()(T *a, T *b) const {
virtual size_t count_id(RTLIL::IdString id);
virtual void check();
virtual void optimize();
- RTLIL::Wire *new_wire(int width, RTLIL::IdString name);
- void add(RTLIL::Wire *wire);
- void add(RTLIL::Cell *cell);
- void remove(RTLIL::Cell *cell);
void fixup_ports();
template<typename T> void rewrite_sigspecs(T functor);
void cloneInto(RTLIL::Module *new_mod) const;
virtual RTLIL::Module *clone() const;
+ void add(RTLIL::Wire *wire);
+ void add(RTLIL::Cell *cell);
+ void remove(RTLIL::Cell *cell);
+
RTLIL::Wire *addWire(RTLIL::IdString name, int width = 1);
RTLIL::Cell *addCell(RTLIL::IdString name, RTLIL::IdString type);
{
CellTypes ct(design);
- RTLIL::Wire *dummy_wire = module->new_wire(sig.width, NEW_ID);
+ RTLIL::Wire *dummy_wire = module->addWire(NEW_ID, sig.width);
for (auto &it : module->cells)
for (auto &port : it.second->connections)
sig.optimize();
for (auto &c : sig.chunks)
if (c.wire != NULL && delete_wires_p->count(c.wire->name)) {
- c.wire = module->new_wire(c.width, NEW_ID);
+ c.wire = module->addWire(NEW_ID, c.width);
c.offset = 0;
}
}
cell->parameters["\\A_WIDTH"] = sig_a.width;
cell->parameters["\\Y_WIDTH"] = sig.width;
cell->connections["\\A"] = sig_a;
- cell->connections["\\Y"] = module->new_wire(sig.width, NEW_ID);
+ cell->connections["\\Y"] = module->addWire(NEW_ID, sig.width);
new_sig = cell->connections["\\Y"];
module->add(cell);
}
cell->parameters["\\B_WIDTH"] = sig2.width;
cell->connections["\\A"] = new_sig;
cell->connections["\\B"] = sig2;
- cell->connections["\\Y"] = module->new_wire(new_sig.width + sig2.width, NEW_ID);
+ cell->connections["\\Y"] = module->addWire(NEW_ID, new_sig.width + sig2.width);
new_sig = cell->connections["\\Y"];
module->add(cell);
}
if (0) {
found_overlapping_bits_i_j:
log(" Creating collosion-detect logic for port %d.\n", j);
- RTLIL::SigSpec is_same_addr = module->new_wire(1, NEW_ID);
+ RTLIL::SigSpec is_same_addr = module->addWire(NEW_ID);
module->addEq(NEW_ID, addr, wr_ports[j]->connections.at("\\ADDR"), is_same_addr);
merged_en = mask_en_grouped(is_same_addr, merged_en, sigmap(wr_ports[j]->connections.at("\\EN")));
}
std::map<std::pair<RTLIL::SigBit, RTLIL::SigBit>, int> groups_en;
RTLIL::SigSpec grouped_last_en, grouped_this_en, en;
- RTLIL::Wire *grouped_en = module->new_wire(0, NEW_ID);
+ RTLIL::Wire *grouped_en = module->addWire(NEW_ID, 0);
for (int j = 0; j < int(this_en.size()); j++) {
std::pair<RTLIL::SigBit, RTLIL::SigBit> key(last_en[j], this_en[j]);
log(" Connect slave%s: %s\n", grp[i].inverted ? " using inverter" : "", log_signal(grp[i].bit));
RTLIL::Cell *drv = drivers.at(grp[i].bit).first;
- RTLIL::Wire *dummy_wire = module->new_wire(1, NEW_ID);
+ RTLIL::Wire *dummy_wire = module->addWire(NEW_ID);
for (auto &port : drv->connections)
if (ct.cell_output(drv->type, port.first))
sigmap(port.second).replace(grp[i].bit, dummy_wire, &port.second);
{
if (inv_sig.width == 0)
{
- inv_sig = module->new_wire(1, NEW_ID);
+ inv_sig = module->addWire(NEW_ID);
RTLIL::Cell *inv_cell = new RTLIL::Cell;
inv_cell->name = NEW_ID;
if (flag_ignore_gold_x)
{
- RTLIL::SigSpec gold_x = miter_module->new_wire(w2_gold->width, NEW_ID);
+ RTLIL::SigSpec gold_x = miter_module->addWire(NEW_ID, w2_gold->width);
for (int i = 0; i < w2_gold->width; i++) {
RTLIL::Cell *eqx_cell = new RTLIL::Cell;
eqx_cell->name = NEW_ID;
miter_module->add(eqx_cell);
}
- RTLIL::SigSpec gold_masked = miter_module->new_wire(w2_gold->width, NEW_ID);
- RTLIL::SigSpec gate_masked = miter_module->new_wire(w2_gate->width, NEW_ID);
+ RTLIL::SigSpec gold_masked = miter_module->addWire(NEW_ID, w2_gold->width);
+ RTLIL::SigSpec gate_masked = miter_module->addWire(NEW_ID, w2_gate->width);
RTLIL::Cell *or_gold_cell = new RTLIL::Cell;
or_gold_cell->name = NEW_ID;
eq_cell->parameters["\\B_SIGNED"] = 0;
eq_cell->connections["\\A"] = gold_masked;
eq_cell->connections["\\B"] = gate_masked;
- eq_cell->connections["\\Y"] = miter_module->new_wire(1, NEW_ID);
+ eq_cell->connections["\\Y"] = miter_module->addWire(NEW_ID);
this_condition = eq_cell->connections["\\Y"];
miter_module->add(eq_cell);
}
eq_cell->parameters["\\B_SIGNED"] = 0;
eq_cell->connections["\\A"] = w2_gold;
eq_cell->connections["\\B"] = w2_gate;
- eq_cell->connections["\\Y"] = miter_module->new_wire(1, NEW_ID);
+ eq_cell->connections["\\Y"] = miter_module->addWire(NEW_ID);
this_condition = eq_cell->connections["\\Y"];
miter_module->add(eq_cell);
}
reduce_cell->parameters["\\Y_WIDTH"] = 1;
reduce_cell->parameters["\\A_SIGNED"] = 0;
reduce_cell->connections["\\A"] = all_conditions;
- reduce_cell->connections["\\Y"] = miter_module->new_wire(1, NEW_ID);
+ reduce_cell->connections["\\Y"] = miter_module->addWire(NEW_ID);
all_conditions = reduce_cell->connections["\\Y"];
miter_module->add(reduce_cell);
}
int a_width = std::max(a1.width, a2.width);
int y_width = std::max(y1.width, y2.width);
- if (a1.width != a_width) a1 = module->addPos(NEW_ID, a1, module->new_wire(a_width, NEW_ID), a_signed)->connections.at("\\Y");
- if (a2.width != a_width) a2 = module->addPos(NEW_ID, a2, module->new_wire(a_width, NEW_ID), a_signed)->connections.at("\\Y");
+ if (a1.width != a_width) a1 = module->addPos(NEW_ID, a1, module->addWire(NEW_ID, a_width), a_signed)->connections.at("\\Y");
+ if (a2.width != a_width) a2 = module->addPos(NEW_ID, a2, module->addWire(NEW_ID, a_width), a_signed)->connections.at("\\Y");
RTLIL::SigSpec a = module->Mux(NEW_ID, a2, a1, act);
- RTLIL::Wire *y = module->new_wire(y_width, NEW_ID);
+ RTLIL::Wire *y = module->addWire(NEW_ID, y_width);
RTLIL::Cell *supercell = new RTLIL::Cell;
supercell->name = NEW_ID;
{
a_width = std::max(y_width, a_width);
- if (a1.width < y1.width) a1 = module->addPos(NEW_ID, a1, module->new_wire(y1.width, NEW_ID), true)->connections.at("\\Y");
- if (a2.width < y2.width) a2 = module->addPos(NEW_ID, a2, module->new_wire(y2.width, NEW_ID), true)->connections.at("\\Y");
+ if (a1.width < y1.width) a1 = module->addPos(NEW_ID, a1, module->addWire(NEW_ID, y1.width), true)->connections.at("\\Y");
+ if (a2.width < y2.width) a2 = module->addPos(NEW_ID, a2, module->addWire(NEW_ID, y2.width), true)->connections.at("\\Y");
- if (a1.width != a_width) a1 = module->addPos(NEW_ID, a1, module->new_wire(a_width, NEW_ID), false)->connections.at("\\Y");
- if (a2.width != a_width) a2 = module->addPos(NEW_ID, a2, module->new_wire(a_width, NEW_ID), false)->connections.at("\\Y");
+ if (a1.width != a_width) a1 = module->addPos(NEW_ID, a1, module->addWire(NEW_ID, a_width), false)->connections.at("\\Y");
+ if (a2.width != a_width) a2 = module->addPos(NEW_ID, a2, module->addWire(NEW_ID, a_width), false)->connections.at("\\Y");
}
else
{
- if (a1.width != a_width) a1 = module->addPos(NEW_ID, a1, module->new_wire(a_width, NEW_ID), a_signed)->connections.at("\\Y");
- if (a2.width != a_width) a2 = module->addPos(NEW_ID, a2, module->new_wire(a_width, NEW_ID), a_signed)->connections.at("\\Y");
+ if (a1.width != a_width) a1 = module->addPos(NEW_ID, a1, module->addWire(NEW_ID, a_width), a_signed)->connections.at("\\Y");
+ if (a2.width != a_width) a2 = module->addPos(NEW_ID, a2, module->addWire(NEW_ID, a_width), a_signed)->connections.at("\\Y");
}
- if (b1.width != b_width) b1 = module->addPos(NEW_ID, b1, module->new_wire(b_width, NEW_ID), b_signed)->connections.at("\\Y");
- if (b2.width != b_width) b2 = module->addPos(NEW_ID, b2, module->new_wire(b_width, NEW_ID), b_signed)->connections.at("\\Y");
+ if (b1.width != b_width) b1 = module->addPos(NEW_ID, b1, module->addWire(NEW_ID, b_width), b_signed)->connections.at("\\Y");
+ if (b2.width != b_width) b2 = module->addPos(NEW_ID, b2, module->addWire(NEW_ID, b_width), b_signed)->connections.at("\\Y");
RTLIL::SigSpec a = module->Mux(NEW_ID, a2, a1, act);
RTLIL::SigSpec b = module->Mux(NEW_ID, b2, b1, act);
- RTLIL::Wire *y = module->new_wire(y_width, NEW_ID);
+ RTLIL::Wire *y = module->addWire(NEW_ID, y_width);
RTLIL::Cell *supercell = module->addCell(NEW_ID, c1->type);
supercell->parameters["\\A_SIGNED"] = a_signed;
RTLIL::SigSpec make_cell_activation_logic(const std::set<std::pair<RTLIL::SigSpec, RTLIL::Const>> &activation_patterns)
{
- RTLIL::Wire *all_cases_wire = module->new_wire(0, NEW_ID);
+ RTLIL::Wire *all_cases_wire = module->addWire(NEW_ID, 0);
for (auto &p : activation_patterns) {
all_cases_wire->width++;
module->addEq(NEW_ID, p.first, p.second, RTLIL::SigSpec(all_cases_wire, 1, all_cases_wire->width - 1));
if (cell->type == "$xnor")
{
- RTLIL::SigSpec sig_t = module->new_wire(width, NEW_ID);
+ RTLIL::SigSpec sig_t = module->addWire(NEW_ID, width);
sig_t.expand();
for (int i = 0; i < width; i++) {
while (sig_a.width > 1)
{
- RTLIL::SigSpec sig_t = module->new_wire(sig_a.width / 2, NEW_ID);
+ RTLIL::SigSpec sig_t = module->addWire(NEW_ID, sig_a.width / 2);
sig_t.expand();
for (int i = 0; i < sig_a.width; i += 2)
}
if (cell->type == "$reduce_xnor") {
- RTLIL::SigSpec sig_t = module->new_wire(1, NEW_ID);
+ RTLIL::SigSpec sig_t = module->addWire(NEW_ID);
RTLIL::Cell *gate = new RTLIL::Cell;
gate->name = NEW_ID;
gate->type = "$_INV_";
while (sig.width > 1)
{
- RTLIL::SigSpec sig_t = module->new_wire(sig.width / 2, NEW_ID);
+ RTLIL::SigSpec sig_t = module->addWire(NEW_ID, sig.width / 2);
sig_t.expand();
for (int i = 0; i < sig.width; i += 2)