mirror of https://github.com/YosysHQ/yosys.git
Merge pull request #5862 from codexplorer-fish/cleaning-up-log-id
Cleaning up log_id()
This commit is contained in:
commit
36eceed720
|
|
@ -340,7 +340,7 @@ struct AigerWriter
|
|||
if (cell->type == ID($scopeinfo))
|
||||
continue;
|
||||
|
||||
log_error("Unsupported cell type: %s (%s)\n", log_id(cell->type), log_id(cell));
|
||||
log_error("Unsupported cell type: %s (%s)\n", cell->type.unescape(), cell);
|
||||
}
|
||||
|
||||
for (auto bit : unused_bits)
|
||||
|
|
@ -349,10 +349,10 @@ struct AigerWriter
|
|||
if (!undriven_bits.empty()) {
|
||||
undriven_bits.sort();
|
||||
for (auto bit : undriven_bits) {
|
||||
log_warning("Treating undriven bit %s.%s like $anyseq.\n", log_id(module), log_signal(bit));
|
||||
log_warning("Treating undriven bit %s.%s like $anyseq.\n", module, log_signal(bit));
|
||||
input_bits.insert(bit);
|
||||
}
|
||||
log_warning("Treating a total of %d undriven bits in %s like $anyseq.\n", GetSize(undriven_bits), log_id(module));
|
||||
log_warning("Treating a total of %d undriven bits in %s like $anyseq.\n", GetSize(undriven_bits), module);
|
||||
}
|
||||
|
||||
init_map.sort();
|
||||
|
|
@ -635,35 +635,35 @@ struct AigerWriter
|
|||
int a = aig_map.at(sig[i]);
|
||||
log_assert((a & 1) == 0);
|
||||
if (GetSize(wire) != 1)
|
||||
symbols[stringf("i%d", (a >> 1)-1)].push_back(stringf("%s[%d]", log_id(wire), i));
|
||||
symbols[stringf("i%d", (a >> 1)-1)].push_back(stringf("%s[%d]", wire, i));
|
||||
else
|
||||
symbols[stringf("i%d", (a >> 1)-1)].push_back(stringf("%s", log_id(wire)));
|
||||
symbols[stringf("i%d", (a >> 1)-1)].push_back(stringf("%s", wire));
|
||||
}
|
||||
|
||||
if (wire->port_output) {
|
||||
int o = ordered_outputs.at(SigSpec(wire, i));
|
||||
if (GetSize(wire) != 1)
|
||||
symbols[stringf("%c%d", miter_mode ? 'b' : 'o', o)].push_back(stringf("%s[%d]", log_id(wire), i));
|
||||
symbols[stringf("%c%d", miter_mode ? 'b' : 'o', o)].push_back(stringf("%s[%d]", wire, i));
|
||||
else
|
||||
symbols[stringf("%c%d", miter_mode ? 'b' : 'o', o)].push_back(stringf("%s", log_id(wire)));
|
||||
symbols[stringf("%c%d", miter_mode ? 'b' : 'o', o)].push_back(stringf("%s", wire));
|
||||
}
|
||||
|
||||
if (init_inputs.count(sig[i])) {
|
||||
int a = init_inputs.at(sig[i]);
|
||||
log_assert((a & 1) == 0);
|
||||
if (GetSize(wire) != 1)
|
||||
symbols[stringf("i%d", (a >> 1)-1)].push_back(stringf("init:%s[%d]", log_id(wire), i));
|
||||
symbols[stringf("i%d", (a >> 1)-1)].push_back(stringf("init:%s[%d]", wire, i));
|
||||
else
|
||||
symbols[stringf("i%d", (a >> 1)-1)].push_back(stringf("init:%s", log_id(wire)));
|
||||
symbols[stringf("i%d", (a >> 1)-1)].push_back(stringf("init:%s", wire));
|
||||
}
|
||||
|
||||
if (ordered_latches.count(sig[i])) {
|
||||
int l = ordered_latches.at(sig[i]);
|
||||
const char *p = (zinit_mode && (aig_latchinit.at(l) == 1)) ? "!" : "";
|
||||
if (GetSize(wire) != 1)
|
||||
symbols[stringf("l%d", l)].push_back(stringf("%s%s[%d]", p, log_id(wire), i));
|
||||
symbols[stringf("l%d", l)].push_back(stringf("%s%s[%d]", p, wire, i));
|
||||
else
|
||||
symbols[stringf("l%d", l)].push_back(stringf("%s%s", p, log_id(wire)));
|
||||
symbols[stringf("l%d", l)].push_back(stringf("%s%s", p, wire));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -705,30 +705,30 @@ struct AigerWriter
|
|||
int index = no_startoffset ? i : (wire->start_offset+i);
|
||||
|
||||
if (verbose_map)
|
||||
wire_lines[a] += stringf("wire %d %d %s\n", a, index, log_id(wire));
|
||||
wire_lines[a] += stringf("wire %d %d %s\n", a, index, wire);
|
||||
|
||||
if (wire->port_input) {
|
||||
log_assert((a & 1) == 0);
|
||||
input_lines[a] += stringf("input %d %d %s\n", (a >> 1)-1, index, log_id(wire));
|
||||
input_lines[a] += stringf("input %d %d %s\n", (a >> 1)-1, index, wire);
|
||||
}
|
||||
|
||||
if (wire->port_output) {
|
||||
int o = ordered_outputs.at(SigSpec(wire, i));
|
||||
output_lines[o] += stringf("output %d %d %s\n", o, index, log_id(wire));
|
||||
output_lines[o] += stringf("output %d %d %s\n", o, index, wire);
|
||||
}
|
||||
|
||||
if (init_inputs.count(sig[i])) {
|
||||
int a = init_inputs.at(sig[i]);
|
||||
log_assert((a & 1) == 0);
|
||||
init_lines[a] += stringf("init %d %d %s\n", (a >> 1)-1, index, log_id(wire));
|
||||
init_lines[a] += stringf("init %d %d %s\n", (a >> 1)-1, index, wire);
|
||||
}
|
||||
|
||||
if (ordered_latches.count(sig[i])) {
|
||||
int l = ordered_latches.at(sig[i]);
|
||||
if (zinit_mode && (aig_latchinit.at(l) == 1))
|
||||
latch_lines[l] += stringf("invlatch %d %d %s\n", l, index, log_id(wire));
|
||||
latch_lines[l] += stringf("invlatch %d %d %s\n", l, index, wire);
|
||||
else
|
||||
latch_lines[l] += stringf("latch %d %d %s\n", l, index, log_id(wire));
|
||||
latch_lines[l] += stringf("latch %d %d %s\n", l, index, wire);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1027,12 +1027,12 @@ struct AigerBackend : public Backend {
|
|||
log_error("Can't find top module in current design!\n");
|
||||
|
||||
if (!design->selected_whole_module(top_module))
|
||||
log_cmd_error("Can't handle partially selected module %s!\n", log_id(top_module));
|
||||
log_cmd_error("Can't handle partially selected module %s!\n", top_module);
|
||||
|
||||
if (!top_module->processes.empty())
|
||||
log_error("Found unmapped processes in module %s: unmapped processes are not supported in AIGER backend!\n", log_id(top_module));
|
||||
log_error("Found unmapped processes in module %s: unmapped processes are not supported in AIGER backend!\n", top_module);
|
||||
if (!top_module->memories.empty())
|
||||
log_error("Found unmapped memories in module %s: unmapped memories are not supported in AIGER backend!\n", log_id(top_module));
|
||||
log_error("Found unmapped memories in module %s: unmapped memories are not supported in AIGER backend!\n", top_module);
|
||||
|
||||
AigerWriter writer(top_module, no_sort, zinit_mode, imode, omode, bmode, lmode);
|
||||
writer.write_aiger(*f, ascii_mode, miter_mode, symbols_mode);
|
||||
|
|
|
|||
|
|
@ -268,7 +268,7 @@ struct XAigerWriter
|
|||
if (ys_debug(1)) {
|
||||
static pool<std::pair<IdString,TimingInfo::NameBit>> seen;
|
||||
if (seen.emplace(inst_module->name, i.first).second) log("%s.%s[%d] abc9_arrival = %d\n",
|
||||
log_id(cell->type), log_id(i.first.name), offset, d);
|
||||
cell->type.unescape(), i.first.name.unescape(), offset, d);
|
||||
}
|
||||
#endif
|
||||
arrival_times[rhs[offset]] = d;
|
||||
|
|
@ -285,7 +285,7 @@ struct XAigerWriter
|
|||
auto is_input = (port_wire && port_wire->port_input) || !cell_known || cell->input(c.first);
|
||||
auto is_output = (port_wire && port_wire->port_output) || !cell_known || cell->output(c.first);
|
||||
if (!is_input && !is_output)
|
||||
log_error("Connection '%s' on cell '%s' (type '%s') not recognised!\n", log_id(c.first), log_id(cell), log_id(cell->type));
|
||||
log_error("Connection '%s' on cell '%s' (type '%s') not recognised!\n", c.first.unescape(), cell, cell->type.unescape());
|
||||
|
||||
if (is_input)
|
||||
for (auto b : c.second) {
|
||||
|
|
@ -303,7 +303,7 @@ struct XAigerWriter
|
|||
}
|
||||
}
|
||||
|
||||
//log_warning("Unsupported cell type: %s (%s)\n", log_id(cell->type), log_id(cell));
|
||||
//log_warning("Unsupported cell type: %s (%s)\n", cell->type.unescape(), cell);
|
||||
}
|
||||
|
||||
dict<IdString, std::vector<IdString>> box_ports;
|
||||
|
|
@ -325,12 +325,12 @@ struct XAigerWriter
|
|||
if (w->get_bool_attribute(ID::abc9_carry)) {
|
||||
if (w->port_input) {
|
||||
if (carry_in != IdString())
|
||||
log_error("Module '%s' contains more than one 'abc9_carry' input port.\n", log_id(box_module));
|
||||
log_error("Module '%s' contains more than one 'abc9_carry' input port.\n", box_module);
|
||||
carry_in = port_name;
|
||||
}
|
||||
if (w->port_output) {
|
||||
if (carry_out != IdString())
|
||||
log_error("Module '%s' contains more than one 'abc9_carry' output port.\n", log_id(box_module));
|
||||
log_error("Module '%s' contains more than one 'abc9_carry' output port.\n", box_module);
|
||||
carry_out = port_name;
|
||||
}
|
||||
}
|
||||
|
|
@ -339,9 +339,9 @@ struct XAigerWriter
|
|||
}
|
||||
|
||||
if (carry_in != IdString() && carry_out == IdString())
|
||||
log_error("Module '%s' contains an 'abc9_carry' input port but no output port.\n", log_id(box_module));
|
||||
log_error("Module '%s' contains an 'abc9_carry' input port but no output port.\n", box_module);
|
||||
if (carry_in == IdString() && carry_out != IdString())
|
||||
log_error("Module '%s' contains an 'abc9_carry' output port but no input port.\n", log_id(box_module));
|
||||
log_error("Module '%s' contains an 'abc9_carry' output port but no input port.\n", box_module);
|
||||
if (carry_in != IdString()) {
|
||||
r.first->second.push_back(carry_in);
|
||||
r.first->second.push_back(carry_out);
|
||||
|
|
@ -612,7 +612,7 @@ struct XAigerWriter
|
|||
write_r_buffer(mergeability);
|
||||
|
||||
State init = init_map.at(q, State::Sx);
|
||||
log_debug("Cell '%s' (type %s) has (* init *) value '%s'.\n", log_id(cell), log_id(cell->type), log_signal(init));
|
||||
log_debug("Cell '%s' (type %s) has (* init *) value '%s'.\n", cell, cell->type.unescape(), log_signal(init));
|
||||
if (init == State::S1)
|
||||
write_s_buffer(1);
|
||||
else if (init == State::S0)
|
||||
|
|
@ -692,12 +692,12 @@ struct XAigerWriter
|
|||
if (input_bits.count(b)) {
|
||||
int a = aig_map.at(b);
|
||||
log_assert((a & 1) == 0);
|
||||
input_lines[a] += stringf("input %d %d %s\n", (a >> 1)-1, wire->start_offset+i, log_id(wire));
|
||||
input_lines[a] += stringf("input %d %d %s\n", (a >> 1)-1, wire->start_offset+i, wire);
|
||||
}
|
||||
|
||||
if (output_bits.count(b)) {
|
||||
int o = ordered_outputs.at(b);
|
||||
output_lines[o] += stringf("output %d %d %s\n", o - GetSize(co_bits), wire->start_offset+i, log_id(wire));
|
||||
output_lines[o] += stringf("output %d %d %s\n", o - GetSize(co_bits), wire->start_offset+i, wire);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -709,7 +709,7 @@ struct XAigerWriter
|
|||
|
||||
int box_count = 0;
|
||||
for (auto cell : box_list)
|
||||
f << stringf("box %d %d %s\n", box_count++, 0, log_id(cell->name));
|
||||
f << stringf("box %d %d %s\n", box_count++, 0, cell->name.unescape());
|
||||
|
||||
output_lines.sort();
|
||||
for (auto &it : output_lines)
|
||||
|
|
@ -774,12 +774,12 @@ struct XAigerBackend : public Backend {
|
|||
log_error("Can't find top module in current design!\n");
|
||||
|
||||
if (!design->selected_whole_module(top_module))
|
||||
log_cmd_error("Can't handle partially selected module %s!\n", log_id(top_module));
|
||||
log_cmd_error("Can't handle partially selected module %s!\n", top_module);
|
||||
|
||||
if (!top_module->processes.empty())
|
||||
log_error("Found unmapped processes in module %s: unmapped processes are not supported in XAIGER backend!\n", log_id(top_module));
|
||||
log_error("Found unmapped processes in module %s: unmapped processes are not supported in XAIGER backend!\n", top_module);
|
||||
if (!top_module->memories.empty())
|
||||
log_error("Found unmapped memories in module %s: unmapped memories are not supported in XAIGER backend!\n", log_id(top_module));
|
||||
log_error("Found unmapped memories in module %s: unmapped memories are not supported in XAIGER backend!\n", top_module);
|
||||
|
||||
XAigerWriter writer(top_module, dff_mode);
|
||||
writer.write_aiger(*f, ascii_mode);
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ struct Index {
|
|||
continue;
|
||||
if (!submodule || submodule->get_blackbox_attribute())
|
||||
log_error("Unsupported cell type: %s (%s in %s)\n",
|
||||
log_id(cell->type), log_id(cell), log_id(m));
|
||||
cell->type.unescape(), cell, m);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -537,7 +537,7 @@ struct Index {
|
|||
Design *design = index.design;
|
||||
auto &minfo = leaf_minfo(index);
|
||||
if (!minfo.suboffsets.count(cell))
|
||||
log_error("Reached unsupported cell %s (%s in %s)\n", log_id(cell->type), log_id(cell), log_id(cell->module));
|
||||
log_error("Reached unsupported cell %s (%s in %s)\n", cell->type.unescape(), cell, cell->module);
|
||||
Module *def = design->module(cell->type);
|
||||
log_assert(def);
|
||||
levels.push_back(Level(index.modules.at(def), cell));
|
||||
|
|
@ -636,10 +636,10 @@ struct Index {
|
|||
Wire *w = def->wire(portname);
|
||||
if (!w)
|
||||
log_error("Output port %s on instance %s of %s doesn't exist\n",
|
||||
log_id(portname), log_id(driver), log_id(def));
|
||||
portname.unescape(), driver, def);
|
||||
if (bit.offset >= w->width)
|
||||
log_error("Bit position %d of output port %s on instance %s of %s is out of range (port has width %d)\n",
|
||||
bit.offset, log_id(portname), log_id(driver), log_id(def), w->width);
|
||||
bit.offset, portname.unescape(), driver, def, w->width);
|
||||
ret = visit(cursor, SigBit(w, bit.offset));
|
||||
}
|
||||
cursor.exit(*this);
|
||||
|
|
@ -655,11 +655,11 @@ struct Index {
|
|||
IdString portname = bit.wire->name;
|
||||
if (!instance->hasPort(portname))
|
||||
log_error("Input port %s on instance %s of %s unconnected\n",
|
||||
log_id(portname), log_id(instance), log_id(instance->type));
|
||||
portname.unescape(), instance, instance->type);
|
||||
auto &port = instance->getPort(portname);
|
||||
if (bit.offset >= port.size())
|
||||
log_error("Bit %d of input port %s on instance %s of %s unconnected\n",
|
||||
bit.offset, log_id(portname), log_id(instance), log_id(instance->type));
|
||||
bit.offset, portname.unescape(), instance, instance->type.unescape());
|
||||
ret = visit(cursor, port[bit.offset]);
|
||||
}
|
||||
cursor.enter(*this, instance);
|
||||
|
|
@ -1048,7 +1048,7 @@ struct XAigerWriter : AigerWriter {
|
|||
} else if (!is_input && !inputs) {
|
||||
for (auto &bit : conn.second) {
|
||||
if (!bit.wire || (bit.wire->port_input && !bit.wire->port_output))
|
||||
log_error("Bad connection %s/%s ~ %s\n", log_id(box), log_id(conn.first), log_signal(conn.second));
|
||||
log_error("Bad connection %s/%s ~ %s\n", box, conn.first.unescape(), log_signal(conn.second));
|
||||
|
||||
|
||||
ensure_pi(bit, cursor);
|
||||
|
|
@ -1073,9 +1073,9 @@ struct XAigerWriter : AigerWriter {
|
|||
void prep_boxes(int pending_pos_num)
|
||||
{
|
||||
XAigerAnalysis analysis;
|
||||
log_debug("preforming analysis on '%s'\n", log_id(top));
|
||||
log_debug("preforming analysis on '%s'\n", top);
|
||||
analysis.analyze(top);
|
||||
log_debug("analysis on '%s' done\n", log_id(top));
|
||||
log_debug("analysis on '%s' done\n", top);
|
||||
|
||||
// boxes which have timing data, maybe a whitebox model
|
||||
std::vector<std::tuple<HierCursor, Cell *, Module *>> nonopaque_boxes;
|
||||
|
|
@ -1089,7 +1089,7 @@ struct XAigerWriter : AigerWriter {
|
|||
for (auto box : minfo.found_blackboxes) {
|
||||
log_debug(" - %s.%s (type %s): ", cursor.path(),
|
||||
RTLIL::unescape_id(box->name),
|
||||
log_id(box->type));
|
||||
box->type.unescape());
|
||||
|
||||
Module *box_module = design->module(box->type), *box_derived;
|
||||
|
||||
|
|
@ -1158,7 +1158,7 @@ struct XAigerWriter : AigerWriter {
|
|||
} else {
|
||||
// FIXME: hierarchical path
|
||||
log_warning("connection on port %s[%d] of instance %s (type %s) missing, using 1'bx\n",
|
||||
log_id(port_id), i, log_id(box), log_id(box->type));
|
||||
port_id.unescape(), i, box, box->type.unescape());
|
||||
bit = RTLIL::Sx;
|
||||
}
|
||||
|
||||
|
|
@ -1193,7 +1193,7 @@ struct XAigerWriter : AigerWriter {
|
|||
} else {
|
||||
// FIXME: hierarchical path
|
||||
log_warning("connection on port %s[%d] of instance %s (type %s) missing\n",
|
||||
log_id(port_id), i, log_id(box), log_id(box->type));
|
||||
port_id.unescape(), i, box, box->type.unescape());
|
||||
pad_pi();
|
||||
continue;
|
||||
}
|
||||
|
|
@ -1210,7 +1210,7 @@ struct XAigerWriter : AigerWriter {
|
|||
holes_wb->setPort(port_id, w);
|
||||
} else {
|
||||
log_error("Ambiguous port direction on %s/%s\n",
|
||||
log_id(box->type), log_id(port_id));
|
||||
box->type.unescape(), port_id.unescape());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1405,7 +1405,7 @@ struct Aiger2Backend : Backend {
|
|||
continue;
|
||||
if (known_ops(cell.type))
|
||||
continue;
|
||||
std::string name = log_id(cell.type);
|
||||
std::string name = cell.type.unescape();
|
||||
if (col + name.size() + 2 > 72) {
|
||||
log("\n ");
|
||||
col = 0;
|
||||
|
|
@ -1427,7 +1427,7 @@ struct Aiger2Backend : Backend {
|
|||
continue;
|
||||
if (known_ops(cell.type))
|
||||
continue;
|
||||
std::string name = log_id(cell.type);
|
||||
std::string name = cell.type.unescape();
|
||||
if (col + name.size() + 2 > 72) {
|
||||
log("\n ");
|
||||
col = 0;
|
||||
|
|
|
|||
|
|
@ -150,7 +150,7 @@ struct BlifDumper
|
|||
void dump_params(const char *command, dict<IdString, Const> ¶ms)
|
||||
{
|
||||
for (auto ¶m : params) {
|
||||
f << stringf("%s %s ", command, log_id(param.first));
|
||||
f << stringf("%s %s ", command, param.first.unescape());
|
||||
if (param.second.flags & RTLIL::CONST_FLAG_STRING) {
|
||||
std::string str = param.second.decode_string();
|
||||
f << stringf("\"");
|
||||
|
|
@ -678,9 +678,9 @@ struct BlifBackend : public Backend {
|
|||
continue;
|
||||
|
||||
if (module->processes.size() != 0)
|
||||
log_error("Found unmapped processes in module %s: unmapped processes are not supported in BLIF backend!\n", log_id(module->name));
|
||||
log_error("Found unmapped processes in module %s: unmapped processes are not supported in BLIF backend!\n", module->name.unescape());
|
||||
if (module->memories.size() != 0)
|
||||
log_error("Found unmapped memories in module %s: unmapped memories are not supported in BLIF backend!\n", log_id(module->name));
|
||||
log_error("Found unmapped memories in module %s: unmapped memories are not supported in BLIF backend!\n", module->name.unescape());
|
||||
|
||||
if (module->name == RTLIL::escape_id(top_module_name)) {
|
||||
BlifDumper::dump(*f, module, design, config);
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ struct BtorWorker
|
|||
template<typename T>
|
||||
string getinfo(T *obj, bool srcsym = false)
|
||||
{
|
||||
string infostr = log_id(obj);
|
||||
string infostr = obj->name.unescape();
|
||||
if (!srcsym && !print_internal_names && infostr[0] == '$') return "";
|
||||
if (obj->attributes.count(ID::src)) {
|
||||
string src = obj->attributes.at(ID::src).decode_string().c_str();
|
||||
|
|
@ -243,12 +243,12 @@ struct BtorWorker
|
|||
if (cell_recursion_guard.count(cell)) {
|
||||
string cell_list;
|
||||
for (auto c : cell_recursion_guard)
|
||||
cell_list += stringf("\n %s", log_id(c));
|
||||
log_error("Found topological loop while processing cell %s. Active cells:%s\n", log_id(cell), cell_list);
|
||||
cell_list += stringf("\n %s", c);
|
||||
log_error("Found topological loop while processing cell %s. Active cells:%s\n", cell, cell_list);
|
||||
}
|
||||
|
||||
cell_recursion_guard.insert(cell);
|
||||
btorf_push(log_id(cell));
|
||||
btorf_push(cell->name.unescape());
|
||||
|
||||
if (cell->type.in(ID($add), ID($sub), ID($mul), ID($and), ID($or), ID($xor), ID($xnor), ID($shl), ID($sshl), ID($shr), ID($sshr), ID($shift), ID($shiftx),
|
||||
ID($concat), ID($_AND_), ID($_NAND_), ID($_OR_), ID($_NOR_), ID($_XOR_), ID($_XNOR_)))
|
||||
|
|
@ -726,7 +726,7 @@ struct BtorWorker
|
|||
if (symbol.empty() || (!print_internal_names && symbol[0] == '$'))
|
||||
btorf("%d state %d\n", nid, sid);
|
||||
else
|
||||
btorf("%d state %d %s\n", nid, sid, log_id(symbol));
|
||||
btorf("%d state %d %s\n", nid, sid, symbol.unescape());
|
||||
|
||||
if (cell->get_bool_attribute(ID(clk2fflogic)))
|
||||
ywmap_state(cell->getPort(ID::D)); // For a clk2fflogic FF the named signal is the D input not the Q output
|
||||
|
|
@ -804,12 +804,12 @@ struct BtorWorker
|
|||
|
||||
if (asyncwr && syncwr)
|
||||
log_error("Memory %s.%s has mixed async/sync write ports.\n",
|
||||
log_id(module), log_id(mem->memid));
|
||||
module, mem->memid.unescape());
|
||||
|
||||
for (auto &port : mem->rd_ports) {
|
||||
if (port.clk_enable)
|
||||
log_error("Memory %s.%s has sync read ports. Please use memory_nordff to convert them first.\n",
|
||||
log_id(module), log_id(mem->memid));
|
||||
module, mem->memid.unescape());
|
||||
}
|
||||
|
||||
int data_sid = get_bv_sid(mem->width);
|
||||
|
|
@ -871,7 +871,7 @@ struct BtorWorker
|
|||
if (mem->memid[0] == '$')
|
||||
btorf("%d state %d\n", nid, sid);
|
||||
else
|
||||
btorf("%d state %d %s\n", nid, sid, log_id(mem->memid));
|
||||
btorf("%d state %d %s\n", nid, sid, mem->memid.unescape());
|
||||
|
||||
ywmap_state(cell);
|
||||
|
||||
|
|
@ -948,21 +948,20 @@ struct BtorWorker
|
|||
|
||||
if (cell->type.in(ID($dffe), ID($sdff), ID($sdffe), ID($sdffce)) || cell->type.str().substr(0, 6) == "$_SDFF" || (cell->type.str().substr(0, 6) == "$_DFFE" && cell->type.str().size() == 10)) {
|
||||
log_error("Unsupported cell type %s for cell %s.%s -- please run `dffunmap` before `write_btor`.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
cell->type.unescape(), module, cell);
|
||||
}
|
||||
if (cell->type.in(ID($adff), ID($adffe), ID($aldff), ID($aldffe), ID($dffsr), ID($dffsre)) || cell->type.str().substr(0, 5) == "$_DFF" || cell->type.str().substr(0, 7) == "$_ALDFF") {
|
||||
log_error("Unsupported cell type %s for cell %s.%s -- please run `async2sync; dffunmap` or `clk2fflogic` before `write_btor`.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
cell->type.unescape(), module, cell);
|
||||
}
|
||||
if (cell->type.in(ID($sr), ID($dlatch), ID($adlatch), ID($dlatchsr)) || cell->type.str().substr(0, 8) == "$_DLATCH" || cell->type.str().substr(0, 5) == "$_SR_") {
|
||||
log_error("Unsupported cell type %s for cell %s.%s -- please run `clk2fflogic` before `write_btor`.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
cell->type.unescape(), module, cell);
|
||||
}
|
||||
log_error("Unsupported cell type %s for cell %s.%s.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
|
||||
cell->type.unescape(), module, cell);
|
||||
okay:
|
||||
btorf_pop(log_id(cell));
|
||||
btorf_pop(cell->name.unescape());
|
||||
cell_recursion_guard.erase(cell);
|
||||
}
|
||||
|
||||
|
|
@ -1167,7 +1166,7 @@ struct BtorWorker
|
|||
f(f), sigmap(module), module(module), verbose(verbose), single_bad(single_bad), cover_mode(cover_mode), print_internal_names(print_internal_names), info_filename(info_filename)
|
||||
{
|
||||
if (!info_filename.empty())
|
||||
infof("name %s\n", log_id(module));
|
||||
infof("name %s\n", module);
|
||||
|
||||
if (!ywmap_filename.empty())
|
||||
ywmap_json.write_to_file(ywmap_filename);
|
||||
|
|
@ -1257,19 +1256,19 @@ struct BtorWorker
|
|||
if (!wire->port_id || !wire->port_output)
|
||||
continue;
|
||||
|
||||
btorf_push(stringf("output %s", log_id(wire)));
|
||||
btorf_push(stringf("output %s", wire));
|
||||
|
||||
int nid = get_sig_nid(wire);
|
||||
btorf("%d output %d%s\n", next_nid++, nid, getinfo(wire));
|
||||
|
||||
btorf_pop(stringf("output %s", log_id(wire)));
|
||||
btorf_pop(stringf("output %s", wire));
|
||||
}
|
||||
|
||||
for (auto cell : module->cells())
|
||||
{
|
||||
if (cell->type == ID($assume))
|
||||
{
|
||||
btorf_push(log_id(cell));
|
||||
btorf_push(cell->name.unescape());
|
||||
|
||||
int sid = get_bv_sid(1);
|
||||
int nid_a = get_sig_nid(cell->getPort(ID::A));
|
||||
|
|
@ -1284,12 +1283,12 @@ struct BtorWorker
|
|||
|
||||
if (ywmap_json.active()) ywmap_assumes.emplace_back(cell);
|
||||
|
||||
btorf_pop(log_id(cell));
|
||||
btorf_pop(cell->name.unescape());
|
||||
}
|
||||
|
||||
if (cell->type == ID($assert))
|
||||
{
|
||||
btorf_push(log_id(cell));
|
||||
btorf_push(cell->name.unescape());
|
||||
|
||||
int sid = get_bv_sid(1);
|
||||
int nid_a = get_sig_nid(cell->getPort(ID::A));
|
||||
|
|
@ -1313,12 +1312,12 @@ struct BtorWorker
|
|||
}
|
||||
}
|
||||
|
||||
btorf_pop(log_id(cell));
|
||||
btorf_pop(cell->name.unescape());
|
||||
}
|
||||
|
||||
if (cell->type == ID($cover) && cover_mode)
|
||||
{
|
||||
btorf_push(log_id(cell));
|
||||
btorf_push(cell->name.unescape());
|
||||
|
||||
int sid = get_bv_sid(1);
|
||||
int nid_a = get_sig_nid(cell->getPort(ID::A));
|
||||
|
|
@ -1334,7 +1333,7 @@ struct BtorWorker
|
|||
btorf("%d bad %d%s\n", nid, nid_en_and_a, getinfo(cell, true));
|
||||
}
|
||||
|
||||
btorf_pop(log_id(cell));
|
||||
btorf_pop(cell->name.unescape());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1343,7 +1342,7 @@ struct BtorWorker
|
|||
if (wire->port_id || wire->name[0] == '$')
|
||||
continue;
|
||||
|
||||
btorf_push(stringf("wire %s", log_id(wire)));
|
||||
btorf_push(stringf("wire %s", wire));
|
||||
|
||||
int sid = get_bv_sid(GetSize(wire));
|
||||
int nid = get_sig_nid(sigmap(wire));
|
||||
|
|
@ -1356,7 +1355,7 @@ struct BtorWorker
|
|||
if (info_clocks.count(nid))
|
||||
info_clocks[this_nid] |= info_clocks[nid];
|
||||
|
||||
btorf_pop(stringf("wire %s", log_id(wire)));
|
||||
btorf_pop(stringf("wire %s", wire));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -1370,14 +1369,14 @@ struct BtorWorker
|
|||
int nid = it.first;
|
||||
Cell *cell = it.second;
|
||||
|
||||
btorf_push(stringf("next %s", log_id(cell)));
|
||||
btorf_push(stringf("next %s", cell));
|
||||
|
||||
SigSpec sig = sigmap(cell->getPort(ID::D));
|
||||
int nid_q = get_sig_nid(sig);
|
||||
int sid = get_bv_sid(GetSize(sig));
|
||||
btorf("%d next %d %d %d%s\n", next_nid++, sid, nid, nid_q, getinfo(cell));
|
||||
|
||||
btorf_pop(stringf("next %s", log_id(cell)));
|
||||
btorf_pop(stringf("next %s", cell));
|
||||
}
|
||||
|
||||
vector<pair<int, Mem*>> mtodo;
|
||||
|
|
@ -1388,7 +1387,7 @@ struct BtorWorker
|
|||
int nid = it.first;
|
||||
Mem *mem = it.second;
|
||||
|
||||
btorf_push(stringf("next %s", log_id(mem->memid)));
|
||||
btorf_push(stringf("next %s", mem->memid.unescape()));
|
||||
|
||||
int abits = ceil_log2(mem->size);
|
||||
|
||||
|
|
@ -1436,7 +1435,7 @@ struct BtorWorker
|
|||
int nid2 = next_nid++;
|
||||
btorf("%d next %d %d %d%s\n", nid2, sid, nid, nid_head, (mem->cell ? getinfo(mem->cell) : getinfo(mem->mem)));
|
||||
|
||||
btorf_pop(stringf("next %s", log_id(mem->memid)));
|
||||
btorf_pop(stringf("next %s", mem->memid.unescape()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1630,7 +1629,7 @@ struct BtorBackend : public Backend {
|
|||
log_cmd_error("No top module found.\n");
|
||||
|
||||
*f << stringf("; BTOR description generated by %s for module %s.\n",
|
||||
yosys_maybe_version(), log_id(topmod));
|
||||
yosys_maybe_version(), topmod);
|
||||
|
||||
BtorWorker(*f, topmod, verbose, single_bad, cover_mode, print_internal_names, info_filename, ywmap_filename);
|
||||
|
||||
|
|
|
|||
|
|
@ -251,7 +251,7 @@ CxxrtlPortType cxxrtl_port_type(RTLIL::Module *module, RTLIL::IdString port)
|
|||
bool is_sync = output_wire->get_bool_attribute(ID(cxxrtl_sync));
|
||||
if (is_comb && is_sync)
|
||||
log_cmd_error("Port `%s.%s' is marked as both `cxxrtl_comb` and `cxxrtl_sync`.\n",
|
||||
log_id(module), log_signal(output_wire));
|
||||
module, log_signal(output_wire));
|
||||
else if (is_comb)
|
||||
return CxxrtlPortType::COMB;
|
||||
else if (is_sync)
|
||||
|
|
@ -851,7 +851,7 @@ struct CxxrtlWorker {
|
|||
return {};
|
||||
|
||||
if (!(module->attributes.at(ID(cxxrtl_template)).flags & RTLIL::CONST_FLAG_STRING))
|
||||
log_cmd_error("Attribute `cxxrtl_template' of module `%s' is not a string.\n", log_id(module));
|
||||
log_cmd_error("Attribute `cxxrtl_template' of module `%s' is not a string.\n", module);
|
||||
|
||||
std::vector<std::string> param_names = split_by(module->get_string_attribute(ID(cxxrtl_template)), " \t");
|
||||
for (const auto ¶m_name : param_names) {
|
||||
|
|
@ -861,7 +861,7 @@ struct CxxrtlWorker {
|
|||
if (!isupper(param_name[0]))
|
||||
log_cmd_error("Attribute `cxxrtl_template' of module `%s' includes a parameter `%s', "
|
||||
"which does not start with an uppercase letter.\n",
|
||||
log_id(module), param_name.c_str());
|
||||
module, param_name.c_str());
|
||||
}
|
||||
return param_names;
|
||||
}
|
||||
|
|
@ -907,12 +907,12 @@ struct CxxrtlWorker {
|
|||
RTLIL::IdString id_param_name = '\\' + param_name;
|
||||
if (!cell->hasParam(id_param_name))
|
||||
log_cmd_error("Cell `%s.%s' does not have a parameter `%s', which is required by the templated module `%s'.\n",
|
||||
log_id(cell->module), log_id(cell), param_name.c_str(), log_id(cell_module));
|
||||
cell->module, cell, param_name.c_str(), cell_module);
|
||||
RTLIL::Const param_value = cell->getParam(id_param_name);
|
||||
if (((param_value.flags & ~RTLIL::CONST_FLAG_SIGNED) != 0) || param_value.as_int() < 0)
|
||||
log_cmd_error("Parameter `%s' of cell `%s.%s', which is required by the templated module `%s', "
|
||||
"is not a positive integer.\n",
|
||||
param_name.c_str(), log_id(cell->module), log_id(cell), log_id(cell_module));
|
||||
param_name.c_str(), cell->module, cell, cell_module);
|
||||
params += std::to_string(cell->getParam(id_param_name).as_int());
|
||||
}
|
||||
params += ">";
|
||||
|
|
@ -2576,7 +2576,7 @@ struct CxxrtlWorker {
|
|||
}
|
||||
dec_indent();
|
||||
|
||||
log_debug("Debug information statistics for module `%s':\n", log_id(module));
|
||||
log_debug("Debug information statistics for module `%s':\n", module);
|
||||
log_debug(" Scopes: %zu", count_scopes);
|
||||
log_debug(" Public wires: %zu, of which:\n", count_public_wires);
|
||||
log_debug(" Member wires: %zu, of which:\n", count_member_wires);
|
||||
|
|
@ -2940,7 +2940,7 @@ struct CxxrtlWorker {
|
|||
RTLIL::Const edge_attr = wire->attributes[ID(cxxrtl_edge)];
|
||||
if (!(edge_attr.flags & RTLIL::CONST_FLAG_STRING) || (int)edge_attr.decode_string().size() != GetSize(wire))
|
||||
log_cmd_error("Attribute `cxxrtl_edge' of port `%s.%s' is not a string with one character per bit.\n",
|
||||
log_id(module), log_signal(wire));
|
||||
module, log_signal(wire));
|
||||
|
||||
std::string edges = wire->get_string_attribute(ID(cxxrtl_edge));
|
||||
for (int i = 0; i < GetSize(wire); i++) {
|
||||
|
|
@ -2953,7 +2953,7 @@ struct CxxrtlWorker {
|
|||
default:
|
||||
log_cmd_error("Attribute `cxxrtl_edge' of port `%s.%s' contains specifiers "
|
||||
"other than '-', 'p', 'n', or 'a'.\n",
|
||||
log_id(module), log_signal(wire));
|
||||
module, log_signal(wire));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2978,7 +2978,7 @@ struct CxxrtlWorker {
|
|||
|
||||
for (auto cell : module->cells()) {
|
||||
if (!cell->known())
|
||||
log_cmd_error("Unknown cell `%s'.\n", log_id(cell->type));
|
||||
log_cmd_error("Unknown cell `%s'.\n", cell->type.unescape());
|
||||
|
||||
if (cell->is_mem_cell())
|
||||
continue;
|
||||
|
|
@ -2987,7 +2987,7 @@ struct CxxrtlWorker {
|
|||
if (cell_module &&
|
||||
cell_module->get_blackbox_attribute() &&
|
||||
!cell_module->get_bool_attribute(ID(cxxrtl_blackbox)))
|
||||
log_cmd_error("External blackbox cell `%s' is not marked as a CXXRTL blackbox.\n", log_id(cell->type));
|
||||
log_cmd_error("External blackbox cell `%s' is not marked as a CXXRTL blackbox.\n", cell->type.unescape());
|
||||
|
||||
if (cell_module &&
|
||||
cell_module->get_bool_attribute(ID(cxxrtl_blackbox)) &&
|
||||
|
|
@ -3116,9 +3116,9 @@ struct CxxrtlWorker {
|
|||
}
|
||||
if (!feedback_wires.empty()) {
|
||||
has_feedback_arcs = true;
|
||||
log("Module `%s' contains feedback arcs through wires:\n", log_id(module));
|
||||
log("Module `%s' contains feedback arcs through wires:\n", module);
|
||||
for (auto wire : feedback_wires)
|
||||
log(" %s\n", log_id(wire));
|
||||
log(" %s\n", wire);
|
||||
}
|
||||
|
||||
// Conservatively assign wire types. Assignment of types BUFFERED and MEMBER is final, but assignment
|
||||
|
|
@ -3189,7 +3189,7 @@ struct CxxrtlWorker {
|
|||
if (wire->name.isPublic() && !inline_public) continue;
|
||||
if (flow.is_inlinable(wire, live_wires[wire])) {
|
||||
if (flow.wire_comb_defs[wire].size() > 1)
|
||||
log_cmd_error("Wire %s.%s has multiple drivers!\n", log_id(module), log_id(wire));
|
||||
log_cmd_error("Wire %s.%s has multiple drivers!\n", module, wire);
|
||||
log_assert(flow.wire_comb_defs[wire].size() == 1);
|
||||
FlowGraph::Node *node = *flow.wire_comb_defs[wire].begin();
|
||||
switch (node->type) {
|
||||
|
|
@ -3237,9 +3237,9 @@ struct CxxrtlWorker {
|
|||
buffered_comb_wires.insert(wire);
|
||||
if (!buffered_comb_wires.empty()) {
|
||||
has_buffered_comb_wires = true;
|
||||
log("Module `%s' contains buffered combinatorial wires:\n", log_id(module));
|
||||
log("Module `%s' contains buffered combinatorial wires:\n", module);
|
||||
for (auto wire : buffered_comb_wires)
|
||||
log(" %s\n", log_id(wire));
|
||||
log(" %s\n", wire);
|
||||
}
|
||||
|
||||
// Record whether eval() requires only one delta cycle in this module.
|
||||
|
|
|
|||
|
|
@ -207,9 +207,9 @@ struct EdifBackend : public Backend {
|
|||
top_module_name = module->name.str();
|
||||
|
||||
if (module->processes.size() != 0)
|
||||
log_error("Found unmapped processes in module %s: unmapped processes are not supported in EDIF backend!\n", log_id(module->name));
|
||||
log_error("Found unmapped processes in module %s: unmapped processes are not supported in EDIF backend!\n", module->name.unescape());
|
||||
if (module->memories.size() != 0)
|
||||
log_error("Found unmapped memories in module %s: unmapped memories are not supported in EDIF backend!\n", log_id(module->name));
|
||||
log_error("Found unmapped memories in module %s: unmapped memories are not supported in EDIF backend!\n", module->name.unescape());
|
||||
|
||||
for (auto cell : module->cells())
|
||||
{
|
||||
|
|
@ -317,12 +317,12 @@ struct EdifBackend : public Backend {
|
|||
for (auto &dep : it.second)
|
||||
if (module_deps.count(dep) > 0)
|
||||
goto not_ready_yet;
|
||||
// log("Next in topological sort: %s\n", log_id(it.first->name));
|
||||
// log("Next in topological sort: %s\n", it.first->name.unescape());
|
||||
sorted_modules.push_back(it.first);
|
||||
not_ready_yet:;
|
||||
}
|
||||
if (sorted_modules_idx == sorted_modules.size())
|
||||
log_error("Cyclic dependency between modules found! Cycle includes module %s.\n", log_id(module_deps.begin()->first->name));
|
||||
log_error("Cyclic dependency between modules found! Cycle includes module %s.\n", module_deps.begin()->first->name.unescape());
|
||||
while (sorted_modules_idx < sorted_modules.size())
|
||||
module_deps.erase(sorted_modules.at(sorted_modules_idx++));
|
||||
}
|
||||
|
|
@ -486,7 +486,7 @@ struct EdifBackend : public Backend {
|
|||
for (int i = 0; i < GetSize(sig); i++)
|
||||
if (sig[i].wire == NULL && sig[i] != RTLIL::State::S0 && sig[i] != RTLIL::State::S1)
|
||||
log_warning("Bit %d of cell port %s.%s.%s driven by %s will be left unconnected in EDIF output.\n",
|
||||
i, log_id(module), log_id(cell), log_id(p.first), log_signal(sig[i]));
|
||||
i, module, cell, p.first.unescape(), log_signal(sig[i]));
|
||||
else {
|
||||
int member_idx = lsbidx ? i : GetSize(sig)-i-1;
|
||||
auto m = design->module(cell->type);
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ const char *make_id(IdString id)
|
|||
if (namecache.count(id) != 0)
|
||||
return namecache.at(id).c_str();
|
||||
|
||||
string new_id = log_id(id);
|
||||
string new_id = id.unescape();
|
||||
|
||||
for (int i = 0; i < GetSize(new_id); i++)
|
||||
{
|
||||
|
|
@ -263,7 +263,7 @@ void emit_extmodule(RTLIL::Cell *cell, RTLIL::Module *mod_instance, std::ostream
|
|||
|
||||
if (wire->port_input && wire->port_output)
|
||||
{
|
||||
log_error("Module port %s.%s is inout!\n", log_id(mod_instance), log_id(wire));
|
||||
log_error("Module port %s.%s is inout!\n", mod_instance, wire);
|
||||
}
|
||||
|
||||
const std::string portDecl = stringf("%s%s %s: UInt<%d> %s\n",
|
||||
|
|
@ -559,12 +559,12 @@ struct FirrtlWorker
|
|||
if (wire->attributes.count(ID::init)) {
|
||||
log_warning("Initial value (%s) for (%s.%s) not supported\n",
|
||||
wire->attributes.at(ID::init).as_string().c_str(),
|
||||
log_id(module), log_id(wire));
|
||||
module, wire);
|
||||
}
|
||||
if (wire->port_id)
|
||||
{
|
||||
if (wire->port_input && wire->port_output)
|
||||
log_error("Module port %s.%s is inout!\n", log_id(module), log_id(wire));
|
||||
log_error("Module port %s.%s is inout!\n", module, wire);
|
||||
port_decls.push_back(stringf("%s%s %s: UInt<%d> %s\n", indent, wire->port_input ? "input" : "output",
|
||||
wireName, wire->width, wireFileinfo.c_str()));
|
||||
}
|
||||
|
|
@ -833,7 +833,7 @@ struct FirrtlWorker
|
|||
primop = "shl";
|
||||
int shiftAmount = b_sig.as_int();
|
||||
if (shiftAmount < 0) {
|
||||
log_error("Negative power exponent - %d: %s.%s\n", shiftAmount, log_id(module), log_id(cell));
|
||||
log_error("Negative power exponent - %d: %s.%s\n", shiftAmount, module, cell);
|
||||
}
|
||||
b_expr = std::to_string(shiftAmount);
|
||||
firrtl_width = a_width + shiftAmount;
|
||||
|
|
@ -844,7 +844,7 @@ struct FirrtlWorker
|
|||
firrtl_width = a_width + (1 << b_width) - 1;
|
||||
}
|
||||
} else {
|
||||
log_error("Non power 2: %s.%s\n", log_id(module), log_id(cell));
|
||||
log_error("Non power 2: %s.%s\n", module, cell);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -905,7 +905,7 @@ struct FirrtlWorker
|
|||
{
|
||||
bool clkpol = cell->parameters.at(ID::CLK_POLARITY).as_bool();
|
||||
if (clkpol == false)
|
||||
log_error("Negative edge clock on FF %s.%s.\n", log_id(module), log_id(cell));
|
||||
log_error("Negative edge clock on FF %s.%s.\n", module, cell);
|
||||
|
||||
int width = cell->parameters.at(ID::WIDTH).as_int();
|
||||
string expr = make_expr(cell->getPort(ID::D));
|
||||
|
|
@ -983,7 +983,7 @@ struct FirrtlWorker
|
|||
|
||||
if (cell->type == ID($scopeinfo))
|
||||
continue;
|
||||
log_error("Cell type not supported: %s (%s.%s)\n", log_id(cell->type), log_id(module), log_id(cell));
|
||||
log_error("Cell type not supported: %s (%s.%s)\n", cell->type.unescape(), module, cell);
|
||||
}
|
||||
|
||||
for (auto &mem : memories) {
|
||||
|
|
@ -991,10 +991,10 @@ struct FirrtlWorker
|
|||
|
||||
Const init_data = mem.get_init_data();
|
||||
if (!init_data.is_fully_undef())
|
||||
log_error("Memory with initialization data: %s.%s\n", log_id(module), log_id(mem.memid));
|
||||
log_error("Memory with initialization data: %s.%s\n", module, mem.memid.unescape());
|
||||
|
||||
if (mem.start_offset != 0)
|
||||
log_error("Memory with nonzero offset: %s.%s\n", log_id(module), log_id(mem.memid));
|
||||
log_error("Memory with nonzero offset: %s.%s\n", module, mem.memid.unescape());
|
||||
|
||||
for (int i = 0; i < GetSize(mem.rd_ports); i++)
|
||||
{
|
||||
|
|
@ -1002,7 +1002,7 @@ struct FirrtlWorker
|
|||
string port_name(stringf("%s.r%d", mem_id, i));
|
||||
|
||||
if (port.clk_enable)
|
||||
log_error("Clocked read port %d on memory %s.%s.\n", i, log_id(module), log_id(mem.memid));
|
||||
log_error("Clocked read port %d on memory %s.%s.\n", i, module, mem.memid.unescape());
|
||||
|
||||
std::ostringstream rpe;
|
||||
|
||||
|
|
@ -1023,12 +1023,12 @@ struct FirrtlWorker
|
|||
string port_name(stringf("%s.w%d", mem_id, i));
|
||||
|
||||
if (!port.clk_enable)
|
||||
log_error("Unclocked write port %d on memory %s.%s.\n", i, log_id(module), log_id(mem.memid));
|
||||
log_error("Unclocked write port %d on memory %s.%s.\n", i, module, mem.memid.unescape());
|
||||
if (!port.clk_polarity)
|
||||
log_error("Negedge write port %d on memory %s.%s.\n", i, log_id(module), log_id(mem.memid));
|
||||
log_error("Negedge write port %d on memory %s.%s.\n", i, module, mem.memid.unescape());
|
||||
for (int i = 1; i < GetSize(port.en); i++)
|
||||
if (port.en[0] != port.en[i])
|
||||
log_error("Complex write enable on port %d on memory %s.%s.\n", i, log_id(module), log_id(mem.memid));
|
||||
log_error("Complex write enable on port %d on memory %s.%s.\n", i, module, mem.memid.unescape());
|
||||
|
||||
std::ostringstream wpe;
|
||||
|
||||
|
|
|
|||
|
|
@ -133,26 +133,26 @@ struct IntersynthBackend : public Backend {
|
|||
|
||||
if (selected && !design->selected_whole_module(module->name)) {
|
||||
if (design->selected_module(module->name))
|
||||
log_cmd_error("Can't handle partially selected module %s!\n", log_id(module->name));
|
||||
log_cmd_error("Can't handle partially selected module %s!\n", module->name.unescape());
|
||||
continue;
|
||||
}
|
||||
|
||||
log("Generating netlist %s.\n", log_id(module->name));
|
||||
log("Generating netlist %s.\n", module->name.unescape());
|
||||
|
||||
if (module->memories.size() != 0 || module->processes.size() != 0)
|
||||
log_error("Can't generate a netlist for a module with unprocessed memories or processes!\n");
|
||||
|
||||
std::set<std::string> constcells_code;
|
||||
netlists_code += stringf("# Netlist of module %s\n", log_id(module->name));
|
||||
netlists_code += stringf("netlist %s\n", log_id(module->name));
|
||||
netlists_code += stringf("# Netlist of module %s\n", module->name.unescape());
|
||||
netlists_code += stringf("netlist %s\n", module->name.unescape());
|
||||
|
||||
// Module Ports: "std::set<string> celltypes_code" prevents duplicate top level ports
|
||||
for (auto wire : module->wires()) {
|
||||
if (wire->port_input || wire->port_output) {
|
||||
celltypes_code.insert(stringf("celltype !%s b%d %sPORT\n" "%s %s %d %s PORT\n",
|
||||
log_id(wire->name), wire->width, wire->port_input ? "*" : "",
|
||||
wire->port_input ? "input" : "output", log_id(wire->name), wire->width, log_id(wire->name)));
|
||||
netlists_code += stringf("node %s %s PORT %s\n", log_id(wire->name), log_id(wire->name),
|
||||
wire->name.unescape(), wire->width, wire->port_input ? "*" : "",
|
||||
wire->port_input ? "input" : "output", wire->name.unescape(), wire->width, wire->name.unescape()));
|
||||
netlists_code += stringf("node %s %s PORT %s\n", wire->name.unescape(), wire->name.unescape(),
|
||||
netname(conntypes_code, celltypes_code, constcells_code, sigmap(wire)).c_str());
|
||||
}
|
||||
}
|
||||
|
|
@ -163,26 +163,26 @@ struct IntersynthBackend : public Backend {
|
|||
std::string celltype_code, node_code;
|
||||
|
||||
if (!ct.cell_known(cell->type))
|
||||
log_error("Found unknown cell type %s in module!\n", log_id(cell->type));
|
||||
log_error("Found unknown cell type %s in module!\n", cell->type.unescape());
|
||||
|
||||
celltype_code = stringf("celltype %s", log_id(cell->type));
|
||||
node_code = stringf("node %s %s", log_id(cell->name), log_id(cell->type));
|
||||
celltype_code = stringf("celltype %s", cell->type.unescape());
|
||||
node_code = stringf("node %s %s", cell->name.unescape(), cell->type.unescape());
|
||||
for (auto &port : cell->connections()) {
|
||||
RTLIL::SigSpec sig = sigmap(port.second);
|
||||
if (sig.size() != 0) {
|
||||
conntypes_code.insert(stringf("conntype b%d %d 2 %d\n", sig.size(), sig.size(), sig.size()));
|
||||
celltype_code += stringf(" b%d %s%s", sig.size(), ct.cell_output(cell->type, port.first) ? "*" : "", log_id(port.first));
|
||||
node_code += stringf(" %s %s", log_id(port.first), netname(conntypes_code, celltypes_code, constcells_code, sig));
|
||||
celltype_code += stringf(" b%d %s%s", sig.size(), ct.cell_output(cell->type, port.first) ? "*" : "", port.first.unescape());
|
||||
node_code += stringf(" %s %s", port.first.unescape(), netname(conntypes_code, celltypes_code, constcells_code, sig));
|
||||
}
|
||||
}
|
||||
for (auto ¶m : cell->parameters) {
|
||||
celltype_code += stringf(" cfg:%d %s", int(param.second.size()), log_id(param.first));
|
||||
celltype_code += stringf(" cfg:%d %s", int(param.second.size()), param.first.unescape());
|
||||
if (param.second.size() != 32) {
|
||||
node_code += stringf(" %s '", log_id(param.first));
|
||||
node_code += stringf(" %s '", param.first.unescape());
|
||||
for (int i = param.second.size()-1; i >= 0; i--)
|
||||
node_code += param.second[i] == State::S1 ? "1" : "0";
|
||||
} else
|
||||
node_code += stringf(" %s 0x%x", log_id(param.first), param.second.as_int());
|
||||
node_code += stringf(" %s 0x%x", param.first.unescape(), param.second.as_int());
|
||||
}
|
||||
|
||||
celltypes_code.insert(celltype_code + "\n");
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@ struct JsonWriter
|
|||
sigidcounter = 2;
|
||||
|
||||
if (module->has_processes()) {
|
||||
log_error("Module %s contains processes, which are not supported by JSON backend (run `proc` first).\n", log_id(module));
|
||||
log_error("Module %s contains processes, which are not supported by JSON backend (run `proc` first).\n", module);
|
||||
}
|
||||
|
||||
f << stringf(" %s: {\n", get_name(module->name));
|
||||
|
|
@ -316,13 +316,13 @@ struct JsonWriter
|
|||
f << stringf(" /* %3d */ [ ", node_idx);
|
||||
if (node.portbit >= 0)
|
||||
f << stringf("\"%sport\", \"%s\", %d", node.inverter ? "n" : "",
|
||||
log_id(node.portname), node.portbit);
|
||||
node.portname.unescape(), node.portbit);
|
||||
else if (node.left_parent < 0 && node.right_parent < 0)
|
||||
f << stringf("\"%s\"", node.inverter ? "true" : "false");
|
||||
else
|
||||
f << stringf("\"%s\", %d, %d", node.inverter ? "nand" : "and", node.left_parent, node.right_parent);
|
||||
for (auto &op : node.outports)
|
||||
f << stringf(", \"%s\", %d", log_id(op.first), op.second);
|
||||
f << stringf(", \"%s\", %d", op.first.unescape(), op.second);
|
||||
f << stringf(" ]");
|
||||
node_idx++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ struct HierDirtyFlags
|
|||
for (Cell *cell : module->cells()) {
|
||||
Module *mod = module->design->module(cell->type);
|
||||
if (mod) children[cell->name] = new HierDirtyFlags(mod, cell->name, this,
|
||||
prefix + cid(cell->name) + ".", log_prefix + "." + prefix + log_id(cell->name));
|
||||
prefix + cid(cell->name) + ".", log_prefix + "." + prefix + cell->name.unescape());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -354,23 +354,23 @@ struct SimplecWorker
|
|||
struct_declarations.push_back(" // Input Ports");
|
||||
for (Wire *w : mod->wires())
|
||||
if (w->port_input)
|
||||
struct_declarations.push_back(stringf(" %s %s; // %s", sigtype(w->width), cid(w->name), log_id(w)));
|
||||
struct_declarations.push_back(stringf(" %s %s; // %s", sigtype(w->width), cid(w->name), w));
|
||||
|
||||
struct_declarations.push_back("");
|
||||
struct_declarations.push_back(" // Output Ports");
|
||||
for (Wire *w : mod->wires())
|
||||
if (!w->port_input && w->port_output)
|
||||
struct_declarations.push_back(stringf(" %s %s; // %s", sigtype(w->width), cid(w->name), log_id(w)));
|
||||
struct_declarations.push_back(stringf(" %s %s; // %s", sigtype(w->width), cid(w->name), w));
|
||||
|
||||
struct_declarations.push_back("");
|
||||
struct_declarations.push_back(" // Internal Wires");
|
||||
for (Wire *w : mod->wires())
|
||||
if (!w->port_input && !w->port_output)
|
||||
struct_declarations.push_back(stringf(" %s %s; // %s", sigtype(w->width), cid(w->name), log_id(w)));
|
||||
struct_declarations.push_back(stringf(" %s %s; // %s", sigtype(w->width), cid(w->name), w));
|
||||
|
||||
for (Cell *c : mod->cells())
|
||||
if (design->module(c->type))
|
||||
struct_declarations.push_back(stringf(" struct %s_state_t %s; // %s", cid(c->type), cid(c->name), log_id(c)));
|
||||
struct_declarations.push_back(stringf(" struct %s_state_t %s; // %s", cid(c->type), cid(c->name), c));
|
||||
|
||||
struct_declarations.push_back(stringf("};"));
|
||||
struct_declarations.push_back("#endif");
|
||||
|
|
@ -391,7 +391,7 @@ struct SimplecWorker
|
|||
|
||||
log_assert(y.wire);
|
||||
funct_declarations.push_back(util_set_bit(work->prefix + cid(y.wire->name), y.wire->width, y.offset, expr) +
|
||||
stringf(" // %s (%s)", log_id(cell), log_id(cell->type)));
|
||||
stringf(" // %s (%s)", cell, cell->type.unescape()));
|
||||
|
||||
work->set_dirty(y);
|
||||
return;
|
||||
|
|
@ -418,7 +418,7 @@ struct SimplecWorker
|
|||
|
||||
log_assert(y.wire);
|
||||
funct_declarations.push_back(util_set_bit(work->prefix + cid(y.wire->name), y.wire->width, y.offset, expr) +
|
||||
stringf(" // %s (%s)", log_id(cell), log_id(cell->type)));
|
||||
stringf(" // %s (%s)", cell, cell->type.unescape()));
|
||||
|
||||
work->set_dirty(y);
|
||||
return;
|
||||
|
|
@ -441,7 +441,7 @@ struct SimplecWorker
|
|||
|
||||
log_assert(y.wire);
|
||||
funct_declarations.push_back(util_set_bit(work->prefix + cid(y.wire->name), y.wire->width, y.offset, expr) +
|
||||
stringf(" // %s (%s)", log_id(cell), log_id(cell->type)));
|
||||
stringf(" // %s (%s)", cell, cell->type.unescape()));
|
||||
|
||||
work->set_dirty(y);
|
||||
return;
|
||||
|
|
@ -466,7 +466,7 @@ struct SimplecWorker
|
|||
|
||||
log_assert(y.wire);
|
||||
funct_declarations.push_back(util_set_bit(work->prefix + cid(y.wire->name), y.wire->width, y.offset, expr) +
|
||||
stringf(" // %s (%s)", log_id(cell), log_id(cell->type)));
|
||||
stringf(" // %s (%s)", cell, cell->type.unescape()));
|
||||
|
||||
work->set_dirty(y);
|
||||
return;
|
||||
|
|
@ -490,13 +490,13 @@ struct SimplecWorker
|
|||
|
||||
log_assert(y.wire);
|
||||
funct_declarations.push_back(util_set_bit(work->prefix + cid(y.wire->name), y.wire->width, y.offset, expr) +
|
||||
stringf(" // %s (%s)", log_id(cell), log_id(cell->type)));
|
||||
stringf(" // %s (%s)", cell, cell->type.unescape()));
|
||||
|
||||
work->set_dirty(y);
|
||||
return;
|
||||
}
|
||||
|
||||
log_error("No C model for %s available at the moment (FIXME).\n", log_id(cell->type));
|
||||
log_error("No C model for %s available at the moment (FIXME).\n", cell->type.unescape());
|
||||
}
|
||||
|
||||
void eval_dirty(HierDirtyFlags *work)
|
||||
|
|
@ -517,7 +517,7 @@ struct SimplecWorker
|
|||
if (chunk.wire == nullptr)
|
||||
continue;
|
||||
if (verbose)
|
||||
log(" Propagating %s.%s[%d:%d].\n", work->log_prefix, log_id(chunk.wire), chunk.offset+chunk.width-1, chunk.offset);
|
||||
log(" Propagating %s.%s[%d:%d].\n", work->log_prefix, chunk.wire, chunk.offset+chunk.width-1, chunk.offset);
|
||||
funct_declarations.push_back(stringf(" // Updated signal in %s: %s", work->log_prefix, log_signal(chunk)));
|
||||
}
|
||||
|
||||
|
|
@ -539,8 +539,8 @@ struct SimplecWorker
|
|||
work->parent->set_dirty(parent_bit);
|
||||
|
||||
if (verbose)
|
||||
log(" Propagating %s.%s[%d] -> %s.%s[%d].\n", work->log_prefix, log_id(bit.wire), bit.offset,
|
||||
work->parent->log_prefix.c_str(), log_id(parent_bit.wire), parent_bit.offset);
|
||||
log(" Propagating %s.%s[%d] -> %s.%s[%d].\n", work->log_prefix, bit.wire, bit.offset,
|
||||
work->parent->log_prefix.c_str(), parent_bit.wire, parent_bit.offset);
|
||||
}
|
||||
|
||||
for (auto &port : bit2cell[work->module][bit])
|
||||
|
|
@ -556,12 +556,12 @@ struct SimplecWorker
|
|||
child->set_dirty(child_bit);
|
||||
|
||||
if (verbose)
|
||||
log(" Propagating %s.%s[%d] -> %s.%s.%s[%d].\n", work->log_prefix, log_id(bit.wire), bit.offset,
|
||||
work->log_prefix.c_str(), log_id(std::get<0>(port)), log_id(child_bit.wire), child_bit.offset);
|
||||
log(" Propagating %s.%s[%d] -> %s.%s.%s[%d].\n", work->log_prefix, bit.wire, bit.offset,
|
||||
work->log_prefix.c_str(), std::get<0>(port), child_bit.wire, child_bit.offset);
|
||||
} else {
|
||||
if (verbose)
|
||||
log(" Marking cell %s.%s (via %s.%s[%d]).\n", work->log_prefix, log_id(std::get<0>(port)),
|
||||
work->log_prefix.c_str(), log_id(bit.wire), bit.offset);
|
||||
log(" Marking cell %s.%s (via %s.%s[%d]).\n", work->log_prefix, std::get<0>(port),
|
||||
work->log_prefix.c_str(), bit.wire, bit.offset);
|
||||
work->set_dirty(std::get<0>(port));
|
||||
}
|
||||
}
|
||||
|
|
@ -576,10 +576,10 @@ struct SimplecWorker
|
|||
if (cell == nullptr || topoidx.at(cell) < topoidx.at(c))
|
||||
cell = c;
|
||||
|
||||
string hiername = work->log_prefix + "." + log_id(cell);
|
||||
string hiername = work->log_prefix + "." + cell->name.unescape();
|
||||
|
||||
if (verbose)
|
||||
log(" Evaluating %s (%s, best of %d).\n", hiername, log_id(cell->type), GetSize(work->dirty_cells));
|
||||
log(" Evaluating %s (%s, best of %d).\n", hiername, cell->type.unescape(), GetSize(work->dirty_cells));
|
||||
|
||||
if (activated_cells.count(hiername))
|
||||
reactivated_cells.insert(hiername);
|
||||
|
|
@ -618,8 +618,8 @@ struct SimplecWorker
|
|||
|
||||
if (verbose)
|
||||
log(" Propagating alias %s.%s[%d] -> %s.%s[%d].\n",
|
||||
work->log_prefix.c_str(), log_id(canonical_bit.wire), canonical_bit.offset,
|
||||
work->log_prefix.c_str(), log_id(bit.wire), bit.offset);
|
||||
work->log_prefix.c_str(), canonical_bit.wire, canonical_bit.offset,
|
||||
work->log_prefix.c_str(), bit.wire, bit.offset);
|
||||
}
|
||||
|
||||
work->sticky_dirty_bits.clear();
|
||||
|
|
@ -716,7 +716,7 @@ struct SimplecWorker
|
|||
{
|
||||
create_module_struct(mod);
|
||||
|
||||
HierDirtyFlags work(mod, IdString(), nullptr, "state->", log_id(mod->name));
|
||||
HierDirtyFlags work(mod, IdString(), nullptr, "state->", mod->name.unescape());
|
||||
|
||||
make_init_func(&work);
|
||||
make_eval_func(&work);
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ struct Smt2Worker
|
|||
const char *get_id(IdString n)
|
||||
{
|
||||
if (ids.count(n) == 0) {
|
||||
std::string str = log_id(n);
|
||||
std::string str = n.unescape();
|
||||
for (int i = 0; i < GetSize(str); i++) {
|
||||
if (str[i] == '\\')
|
||||
str[i] = '/';
|
||||
|
|
@ -207,7 +207,7 @@ struct Smt2Worker
|
|||
}
|
||||
else if (is_output || !is_input)
|
||||
log_error("Unsupported or unknown directionality on port %s of cell %s.%s (%s).\n",
|
||||
log_id(conn.first), log_id(module), log_id(cell), log_id(cell->type));
|
||||
conn.first.unescape(), module, cell, cell->type.unescape());
|
||||
|
||||
if (cell->type.in(ID($dff), ID($_DFF_P_), ID($_DFF_N_)) && conn.first.in(ID::CLK, ID::C))
|
||||
{
|
||||
|
|
@ -448,7 +448,7 @@ struct Smt2Worker
|
|||
}
|
||||
|
||||
if (verbose)
|
||||
log("%*s-> import cell: %s\n", 2+2*GetSize(recursive_cells), "", log_id(cell));
|
||||
log("%*s-> import cell: %s\n", 2+2*GetSize(recursive_cells), "", cell);
|
||||
|
||||
decls.push_back(stringf("(define-fun |%s#%d| ((state |%s_s|)) Bool %s) ; %s\n",
|
||||
get_id(module), idcounter, get_id(module), processed_expr.c_str(), log_signal(bit)));
|
||||
|
|
@ -498,7 +498,7 @@ struct Smt2Worker
|
|||
processed_expr = stringf("((_ extract %d 0) %s)", GetSize(sig_y)-1, processed_expr);
|
||||
|
||||
if (verbose)
|
||||
log("%*s-> import cell: %s\n", 2+2*GetSize(recursive_cells), "", log_id(cell));
|
||||
log("%*s-> import cell: %s\n", 2+2*GetSize(recursive_cells), "", cell);
|
||||
|
||||
if (type == 'b') {
|
||||
decls.push_back(stringf("(define-fun |%s#%d| ((state |%s_s|)) Bool %s) ; %s\n",
|
||||
|
|
@ -529,7 +529,7 @@ struct Smt2Worker
|
|||
processed_expr += ch;
|
||||
|
||||
if (verbose)
|
||||
log("%*s-> import cell: %s\n", 2+2*GetSize(recursive_cells), "", log_id(cell));
|
||||
log("%*s-> import cell: %s\n", 2+2*GetSize(recursive_cells), "", cell);
|
||||
|
||||
decls.push_back(stringf("(define-fun |%s#%d| ((state |%s_s|)) Bool %s) ; %s\n",
|
||||
get_id(module), idcounter, get_id(module), processed_expr.c_str(), log_signal(sig_y)));
|
||||
|
|
@ -541,7 +541,7 @@ struct Smt2Worker
|
|||
{
|
||||
if (verbose)
|
||||
log("%*s=> export_cell %s (%s) [%s]\n", 2+2*GetSize(recursive_cells), "",
|
||||
log_id(cell), log_id(cell->type), exported_cells.count(cell) ? "old" : "new");
|
||||
cell, cell->type.unescape(), exported_cells.count(cell) ? "old" : "new");
|
||||
|
||||
if (recursive_cells.count(cell))
|
||||
log_error("Found logic loop in module %s! See cell %s.\n", get_id(module), get_id(cell));
|
||||
|
|
@ -750,7 +750,7 @@ struct Smt2Worker
|
|||
get_bv(sig_b.extract(i*width, width)).c_str(), processed_expr.c_str());
|
||||
|
||||
if (verbose)
|
||||
log("%*s-> import cell: %s\n", 2+2*GetSize(recursive_cells), "", log_id(cell));
|
||||
log("%*s-> import cell: %s\n", 2+2*GetSize(recursive_cells), "", cell);
|
||||
|
||||
RTLIL::SigSpec sig = sigmap(cell->getPort(ID::Y));
|
||||
decls.push_back(stringf("(define-fun |%s#%d| ((state |%s_s|)) (_ BitVec %d) %s) ; %s\n",
|
||||
|
|
@ -786,9 +786,9 @@ struct Smt2Worker
|
|||
has_async_wr = true;
|
||||
}
|
||||
if (has_async_wr && has_sync_wr)
|
||||
log_error("Memory %s.%s has mixed clocked/nonclocked write ports. This is not supported by \"write_smt2\".\n", log_id(cell), log_id(module));
|
||||
log_error("Memory %s.%s has mixed clocked/nonclocked write ports. This is not supported by \"write_smt2\".\n", cell, module);
|
||||
|
||||
decls.push_back(stringf("; yosys-smt2-memory %s %d %d %d %d %s\n", get_id(mem->memid), abits, mem->width, GetSize(mem->rd_ports), GetSize(mem->wr_ports), has_async_wr ? "async" : "sync"));
|
||||
decls.push_back(stringf("; yosys-smt2-memory %s %d %d %d %d %s\n", mem->memid.unescape(), abits, mem->width, GetSize(mem->rd_ports), GetSize(mem->wr_ports), has_async_wr ? "async" : "sync"));
|
||||
decls.push_back(witness_memory(get_id(mem->memid), cell, mem));
|
||||
|
||||
string memstate;
|
||||
|
|
@ -813,7 +813,7 @@ struct Smt2Worker
|
|||
|
||||
if (port.clk_enable)
|
||||
log_error("Read port %d (%s) of memory %s.%s is clocked. This is not supported by \"write_smt2\"! "
|
||||
"Call \"memory\" with -nordff to avoid this error.\n", i, log_signal(port.data), log_id(mem->memid), log_id(module));
|
||||
"Call \"memory\" with -nordff to avoid this error.\n", i, log_signal(port.data), mem->memid.unescape(), module);
|
||||
|
||||
decls.push_back(stringf("(define-fun |%s_m:R%dA %s| ((state |%s_s|)) (_ BitVec %d) %s) ; %s\n",
|
||||
get_id(module), i, get_id(mem->memid), get_id(module), abits, addr.c_str(), log_signal(addr_sig)));
|
||||
|
|
@ -857,7 +857,7 @@ struct Smt2Worker
|
|||
|
||||
if (port.clk_enable)
|
||||
log_error("Read port %d (%s) of memory %s.%s is clocked. This is not supported by \"write_smt2\"! "
|
||||
"Call \"memory\" with -nordff to avoid this error.\n", i, log_signal(port.data), log_id(mem->memid), log_id(module));
|
||||
"Call \"memory\" with -nordff to avoid this error.\n", i, log_signal(port.data), mem->memid.unescape(), module);
|
||||
|
||||
decls.push_back(stringf("(define-fun |%s_m:R%dA %s| ((state |%s_s|)) (_ BitVec %d) %s) ; %s\n",
|
||||
get_id(module), i, get_id(mem->memid), get_id(module), abits, addr.c_str(), log_signal(addr_sig)));
|
||||
|
|
@ -928,30 +928,30 @@ struct Smt2Worker
|
|||
|
||||
if (cell->type.in(ID($dffe), ID($sdff), ID($sdffe), ID($sdffce)) || cell->type.str().substr(0, 6) == "$_SDFF" || (cell->type.str().substr(0, 6) == "$_DFFE" && cell->type.str().size() == 10)) {
|
||||
log_error("Unsupported cell type %s for cell %s.%s -- please run `dffunmap` before `write_smt2`.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
cell->type.unescape(), module, cell);
|
||||
}
|
||||
if (cell->type.in(ID($adff), ID($adffe), ID($aldff), ID($aldffe), ID($dffsr), ID($dffsre)) || cell->type.str().substr(0, 5) == "$_DFF" || cell->type.str().substr(0, 7) == "$_ALDFF") {
|
||||
log_error("Unsupported cell type %s for cell %s.%s -- please run `async2sync; dffunmap` or `clk2fflogic` before `write_smt2`.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
cell->type.unescape(), module, cell);
|
||||
}
|
||||
if (cell->type.in(ID($sr), ID($dlatch), ID($adlatch), ID($dlatchsr)) || cell->type.str().substr(0, 8) == "$_DLATCH" || cell->type.str().substr(0, 5) == "$_SR_") {
|
||||
log_error("Unsupported cell type %s for cell %s.%s -- please run `clk2fflogic` before `write_smt2`.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
cell->type, module, cell);
|
||||
}
|
||||
log_error("Unsupported cell type %s for cell %s.%s.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
cell->type, module, cell);
|
||||
}
|
||||
|
||||
void verify_smtlib2_module()
|
||||
{
|
||||
if (!module->get_blackbox_attribute())
|
||||
log_error("Module %s with smtlib2_module attribute must also have blackbox attribute.\n", log_id(module));
|
||||
log_error("Module %s with smtlib2_module attribute must also have blackbox attribute.\n", module);
|
||||
if (module->cells().size() > 0)
|
||||
log_error("Module %s with smtlib2_module attribute must not have any cells inside it.\n", log_id(module));
|
||||
log_error("Module %s with smtlib2_module attribute must not have any cells inside it.\n", module);
|
||||
for (auto wire : module->wires())
|
||||
if (!wire->port_id)
|
||||
log_error("Wire %s.%s must be input or output since module has smtlib2_module attribute.\n", log_id(module),
|
||||
log_id(wire));
|
||||
log_error("Wire %s.%s must be input or output since module has smtlib2_module attribute.\n", module,
|
||||
wire);
|
||||
}
|
||||
|
||||
void run()
|
||||
|
|
@ -991,8 +991,8 @@ struct Smt2Worker
|
|||
}
|
||||
bool is_smtlib2_comb_expr = wire->has_attribute(ID::smtlib2_comb_expr);
|
||||
if (is_smtlib2_comb_expr && !is_smtlib2_module)
|
||||
log_error("smtlib2_comb_expr is only valid in a module with the smtlib2_module attribute: wire %s.%s", log_id(module),
|
||||
log_id(wire));
|
||||
log_error("smtlib2_comb_expr is only valid in a module with the smtlib2_module attribute: wire %s.%s", module,
|
||||
wire);
|
||||
if (wire->port_id || is_register || contains_clock || wire->get_bool_attribute(ID::keep) || (wiresmode && wire->name.isPublic())) {
|
||||
RTLIL::SigSpec sig = sigmap(wire);
|
||||
std::vector<std::string> comments;
|
||||
|
|
@ -1023,10 +1023,10 @@ struct Smt2Worker
|
|||
smtlib2_comb_expr =
|
||||
"(let (\n" + smtlib2_inputs + ")\n" + wire->get_string_attribute(ID::smtlib2_comb_expr) + "\n)";
|
||||
if (wire->port_input || !wire->port_output)
|
||||
log_error("smtlib2_comb_expr is only valid on output: wire %s.%s", log_id(module), log_id(wire));
|
||||
log_error("smtlib2_comb_expr is only valid on output: wire %s.%s", module, wire);
|
||||
if (!bvmode && GetSize(sig) > 1)
|
||||
log_error("smtlib2_comb_expr is unsupported on multi-bit wires when -nobv is specified: wire %s.%s",
|
||||
log_id(module), log_id(wire));
|
||||
module, wire);
|
||||
|
||||
comments.push_back(witness_signal("blackbox", wire->width, 0, get_id(wire), -1, wire));
|
||||
}
|
||||
|
|
@ -1075,7 +1075,7 @@ struct Smt2Worker
|
|||
if (wire->attributes.count(ID::init)) {
|
||||
if (is_smtlib2_module)
|
||||
log_error("init attribute not allowed on wires in module with smtlib2_module attribute: wire %s.%s",
|
||||
log_id(module), log_id(wire));
|
||||
module, wire);
|
||||
|
||||
RTLIL::SigSpec sig = sigmap(wire);
|
||||
Const val = wire->attributes.at(ID::init);
|
||||
|
|
@ -1381,7 +1381,7 @@ struct Smt2Worker
|
|||
}
|
||||
}
|
||||
|
||||
if (verbose) log("=> finalizing SMT2 representation of %s.\n", log_id(module));
|
||||
if (verbose) log("=> finalizing SMT2 representation of %s.\n", module);
|
||||
|
||||
for (auto c : hiercells) {
|
||||
assert_list.push_back(stringf("(|%s_a| (|%s_h %s| state))", get_id(c->type), get_id(module), get_id(c->name)));
|
||||
|
|
@ -1867,12 +1867,12 @@ struct Smt2Backend : public Backend {
|
|||
for (auto &dep : it.second)
|
||||
if (module_deps.count(dep) > 0)
|
||||
goto not_ready_yet;
|
||||
// log("Next in topological sort: %s\n", log_id(it.first->name));
|
||||
// log("Next in topological sort: %s\n", it.first->name.unescape());
|
||||
sorted_modules.push_back(it.first);
|
||||
not_ready_yet:;
|
||||
}
|
||||
if (sorted_modules_idx == sorted_modules.size())
|
||||
log_error("Cyclic dependency between modules found! Cycle includes module %s.\n", log_id(module_deps.begin()->first->name));
|
||||
log_error("Cyclic dependency between modules found! Cycle includes module %s.\n", module_deps.begin()->first->name.unescape());
|
||||
while (sorted_modules_idx < sorted_modules.size())
|
||||
module_deps.erase(sorted_modules.at(sorted_modules_idx++));
|
||||
}
|
||||
|
|
@ -1902,7 +1902,7 @@ struct Smt2Backend : public Backend {
|
|||
if (module->has_processes_warn())
|
||||
continue;
|
||||
|
||||
log("Creating SMT-LIBv2 representation of module %s.\n", log_id(module));
|
||||
log("Creating SMT-LIBv2 representation of module %s.\n", module);
|
||||
|
||||
Smt2Worker worker(module, bvmode, memmode, wiresmode, verbose, statebv, statedt, forallmode, mod_stbv_width, mod_clk_cache);
|
||||
worker.run();
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ struct SmvWorker
|
|||
partial_assignment_wires.insert(wire);
|
||||
|
||||
if (wire->port_input)
|
||||
inputvars.push_back(stringf("%s : unsigned word[%d]; -- %s", cid(wire->name), wire->width, log_id(wire)));
|
||||
inputvars.push_back(stringf("%s : unsigned word[%d]; -- %s", cid(wire->name), wire->width, wire));
|
||||
|
||||
if (wire->attributes.count(ID::init))
|
||||
assignments.push_back(stringf("init(%s) := %s;", lvalue(wire), rvalue(wire->attributes.at(ID::init))));
|
||||
|
|
@ -579,18 +579,18 @@ struct SmvWorker
|
|||
if (cell->type[0] == '$') {
|
||||
if (cell->type.in(ID($dffe), ID($sdff), ID($sdffe), ID($sdffce)) || cell->type.str().substr(0, 6) == "$_SDFF" || (cell->type.str().substr(0, 6) == "$_DFFE" && cell->type.str().size() == 10)) {
|
||||
log_error("Unsupported cell type %s for cell %s.%s -- please run `dffunmap` before `write_smv`.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
cell->type.unescape(), module, cell);
|
||||
}
|
||||
if (cell->type.in(ID($adff), ID($adffe), ID($aldff), ID($aldffe), ID($dffsr), ID($dffsre)) || cell->type.str().substr(0, 5) == "$_DFF" || cell->type.str().substr(0, 7) == "$_ALDFF") {
|
||||
log_error("Unsupported cell type %s for cell %s.%s -- please run `async2sync; dffunmap` or `clk2fflogic` before `write_smv`.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
cell->type.unescape(), module, cell);
|
||||
}
|
||||
if (cell->type.in(ID($sr), ID($dlatch), ID($adlatch), ID($dlatchsr)) || cell->type.str().substr(0, 8) == "$_DLATCH" || cell->type.str().substr(0, 5) == "$_SR_") {
|
||||
log_error("Unsupported cell type %s for cell %s.%s -- please run `clk2fflogic` before `write_smv`.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
cell->type.unescape(), module, cell);
|
||||
}
|
||||
log_error("Unsupported cell type %s for cell %s.%s.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
cell->type.unescape(), module, cell);
|
||||
}
|
||||
|
||||
// f << stringf(" %s : %s;\n", cid(cell->name), cid(cell->type));
|
||||
|
|
@ -799,7 +799,7 @@ struct SmvBackend : public Backend {
|
|||
|
||||
*f << stringf("-- SMV description generated by %s\n", yosys_maybe_version());
|
||||
|
||||
log("Creating SMV representation of module %s.\n", log_id(module));
|
||||
log("Creating SMV representation of module %s.\n", module);
|
||||
SmvWorker worker(module, verbose, *f);
|
||||
worker.run();
|
||||
|
||||
|
|
@ -819,7 +819,7 @@ struct SmvBackend : public Backend {
|
|||
*f << stringf("-- SMV description generated by %s\n", yosys_maybe_version());
|
||||
|
||||
for (auto module : modules) {
|
||||
log("Creating SMV representation of module %s.\n", log_id(module));
|
||||
log("Creating SMV representation of module %s.\n", module);
|
||||
SmvWorker worker(module, verbose, *f);
|
||||
worker.run();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ static void print_spice_module(std::ostream &f, RTLIL::Module *module, RTLIL::De
|
|||
if (design->module(cell->type) == nullptr)
|
||||
{
|
||||
log_warning("no (blackbox) module for cell type `%s' (%s.%s) found! Guessing order of ports.\n",
|
||||
log_id(cell->type), log_id(module), log_id(cell));
|
||||
cell->type.unescape(), module, cell);
|
||||
for (auto &conn : cell->connections()) {
|
||||
RTLIL::SigSpec sig = sigmap(conn.second);
|
||||
port_sigs.push_back(sig);
|
||||
|
|
@ -224,9 +224,9 @@ struct SpiceBackend : public Backend {
|
|||
continue;
|
||||
|
||||
if (module->processes.size() != 0)
|
||||
log_error("Found unmapped processes in module %s: unmapped processes are not supported in SPICE backend!\n", log_id(module));
|
||||
log_error("Found unmapped processes in module %s: unmapped processes are not supported in SPICE backend!\n", module);
|
||||
if (module->memories.size() != 0)
|
||||
log_error("Found unmapped memories in module %s: unmapped memories are not supported in SPICE backend!\n", log_id(module));
|
||||
log_error("Found unmapped memories in module %s: unmapped memories are not supported in SPICE backend!\n", module);
|
||||
|
||||
if (module->name == RTLIL::escape_id(top_module_name)) {
|
||||
top_module = module;
|
||||
|
|
|
|||
|
|
@ -77,8 +77,8 @@ struct TableBackend : public Backend {
|
|||
if (wire->port_id == 0)
|
||||
continue;
|
||||
|
||||
*f << log_id(module) << "\t";
|
||||
*f << log_id(wire) << "\t";
|
||||
*f << module->name.unescape() << "\t";
|
||||
*f << wire->name.unescape() << "\t";
|
||||
*f << "-" << "\t";
|
||||
*f << "-" << "\t";
|
||||
|
||||
|
|
@ -97,10 +97,10 @@ struct TableBackend : public Backend {
|
|||
for (auto cell : module->cells())
|
||||
for (auto conn : cell->connections())
|
||||
{
|
||||
*f << log_id(module) << "\t";
|
||||
*f << log_id(cell) << "\t";
|
||||
*f << log_id(cell->type) << "\t";
|
||||
*f << log_id(conn.first) << "\t";
|
||||
*f << module->name.unescape() << "\t";
|
||||
*f << cell->name.unescape() << "\t";
|
||||
*f << cell->type.unescape() << "\t";
|
||||
*f << conn.first.unescape() << "\t";
|
||||
|
||||
if (cell->input(conn.first) && cell->output(conn.first))
|
||||
*f << "inout" << "\t";
|
||||
|
|
|
|||
|
|
@ -2388,7 +2388,7 @@ void dump_module(std::ostream &f, std::string indent, RTLIL::Module *module)
|
|||
log_warning("Module %s contains RTLIL processes with sync rules. Such RTLIL "
|
||||
"processes can't always be mapped directly to Verilog always blocks. "
|
||||
"unintended changes in simulation behavior are possible! Use \"proc\" "
|
||||
"to convert processes to logic networks and registers.\n", log_id(module));
|
||||
"to convert processes to logic networks and registers.\n", module);
|
||||
|
||||
f << stringf("\n");
|
||||
for (auto it = module->processes.begin(); it != module->processes.end(); ++it)
|
||||
|
|
@ -2714,7 +2714,7 @@ struct VerilogBackend : public Backend {
|
|||
continue;
|
||||
if (selected && !design->selected_whole_module(module->name)) {
|
||||
if (design->selected_module(module->name))
|
||||
log_cmd_error("Can't handle partially selected module %s!\n", log_id(module->name));
|
||||
log_cmd_error("Can't handle partially selected module %s!\n", module->name.unescape());
|
||||
continue;
|
||||
}
|
||||
log("Dumping module `%s'.\n", module->name);
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ struct MyPass : public Pass {
|
|||
|
||||
log("Modules in current design:\n");
|
||||
for (auto mod : design->modules())
|
||||
log(" %s (%d wires, %d cells)\n", log_id(mod),
|
||||
log(" %s (%d wires, %d cells)\n", mod,
|
||||
GetSize(mod->wires()), GetSize(mod->cells()));
|
||||
}
|
||||
} MyPass;
|
||||
|
|
@ -28,7 +28,7 @@ struct Test1Pass : public Pass {
|
|||
log_error("A module with the name absval already exists!\n");
|
||||
|
||||
RTLIL::Module *module = design->addModule("\\absval");
|
||||
log("Name of this module: %s\n", log_id(module));
|
||||
log("Name of this module: %s\n", module);
|
||||
|
||||
RTLIL::Wire *a = module->addWire("\\a", 4);
|
||||
a->port_input = true;
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ struct ScopeinfoExamplePass : public Pass {
|
|||
|
||||
if (do_wires) {
|
||||
for (auto module : design->selected_modules()) {
|
||||
log("Source hierarchy for all selected wires within %s:\n", log_id(module));
|
||||
log("Source hierarchy for all selected wires within %s:\n", module);
|
||||
ModuleHdlnameIndex index(module);
|
||||
|
||||
index.index_scopeinfo_cells();
|
||||
|
|
@ -73,11 +73,11 @@ struct ScopeinfoExamplePass : public Pass {
|
|||
auto wire_scope = index.containing_scope(wire);
|
||||
|
||||
if (!wire_scope.first.valid()) {
|
||||
log_warning("Couldn't find containing scope for %s in index\n", log_id(wire));
|
||||
log_warning("Couldn't find containing scope for %s in index\n", wire);
|
||||
continue;
|
||||
}
|
||||
|
||||
log("%s %s\n", wire_scope.first.path_str(), log_id(wire_scope.second));
|
||||
log("%s %s\n", wire_scope.first.path_str(), wire_scope.second.unescape());
|
||||
for (auto src : index.sources(wire))
|
||||
log(" - %s\n", src);
|
||||
}
|
||||
|
|
@ -127,9 +127,9 @@ struct ScopeinfoExamplePass : public Pass {
|
|||
continue;
|
||||
|
||||
log("common_ancestor(%s %s%s%s, %s %s%s%s) = %s %s\n",
|
||||
log_id(module), scope_i.first.path_str().c_str(), scope_i.first.is_root() ? "" : " ", log_id(scope_i.second),
|
||||
log_id(module), scope_j.first.path_str().c_str(), scope_j.first.is_root() ? "" : " ", log_id(scope_j.second),
|
||||
log_id(module), common.path_str().c_str()
|
||||
module, scope_i.first.path_str().c_str(), scope_i.first.is_root() ? "" : " ", scope_i.second.unescape(),
|
||||
module, scope_j.first.path_str().c_str(), scope_j.first.is_root() ? "" : " ", scope_j.second.unescape(),
|
||||
module, common.path_str().c_str()
|
||||
);
|
||||
|
||||
if (++limit == 10)
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ AigerReader::AigerReader(RTLIL::Design *design, std::istream &f, RTLIL::IdString
|
|||
module = new RTLIL::Module;
|
||||
module->name = module_name;
|
||||
if (design->module(module->name))
|
||||
log_error("Duplicate definition of module %s!\n", log_id(module->name));
|
||||
log_error("Duplicate definition of module %s!\n", module->name.unescape());
|
||||
}
|
||||
|
||||
void AigerReader::parse_aiger()
|
||||
|
|
@ -821,7 +821,7 @@ void AigerReader::post_process()
|
|||
RTLIL::Wire* wire = inputs[variable];
|
||||
log_assert(wire);
|
||||
log_assert(wire->port_input);
|
||||
log_debug("Renaming input %s", log_id(wire));
|
||||
log_debug("Renaming input %s", wire);
|
||||
|
||||
RTLIL::Wire *existing = nullptr;
|
||||
if (index == 0) {
|
||||
|
|
@ -835,7 +835,7 @@ void AigerReader::post_process()
|
|||
wire->port_input = false;
|
||||
module->connect(wire, existing);
|
||||
}
|
||||
log_debug(" -> %s\n", log_id(escaped_s));
|
||||
log_debug(" -> %s\n", escaped_s.unescape());
|
||||
}
|
||||
else {
|
||||
RTLIL::IdString indexed_name = stringf("%s[%d]", escaped_s, index);
|
||||
|
|
@ -846,7 +846,7 @@ void AigerReader::post_process()
|
|||
module->connect(wire, existing);
|
||||
wire->port_input = false;
|
||||
}
|
||||
log_debug(" -> %s\n", log_id(indexed_name));
|
||||
log_debug(" -> %s\n", indexed_name.unescape());
|
||||
}
|
||||
|
||||
if (wideports && !existing) {
|
||||
|
|
@ -866,7 +866,7 @@ void AigerReader::post_process()
|
|||
RTLIL::Wire* wire = outputs[variable + co_count];
|
||||
log_assert(wire);
|
||||
log_assert(wire->port_output);
|
||||
log_debug("Renaming output %s", log_id(wire));
|
||||
log_debug("Renaming output %s", wire);
|
||||
|
||||
RTLIL::Wire *existing;
|
||||
if (index == 0) {
|
||||
|
|
@ -882,7 +882,7 @@ void AigerReader::post_process()
|
|||
module->connect(wire, existing);
|
||||
wire = existing;
|
||||
}
|
||||
log_debug(" -> %s\n", log_id(escaped_s));
|
||||
log_debug(" -> %s\n", escaped_s.unescape());
|
||||
}
|
||||
else {
|
||||
RTLIL::IdString indexed_name = stringf("%s[%d]", escaped_s, index);
|
||||
|
|
@ -894,7 +894,7 @@ void AigerReader::post_process()
|
|||
existing->port_output = true;
|
||||
module->connect(wire, existing);
|
||||
}
|
||||
log_debug(" -> %s\n", log_id(indexed_name));
|
||||
log_debug(" -> %s\n", indexed_name.unescape());
|
||||
}
|
||||
|
||||
if (wideports && !existing) {
|
||||
|
|
@ -912,7 +912,7 @@ void AigerReader::post_process()
|
|||
else if (type == "box") {
|
||||
RTLIL::Cell* cell = module->cell(stringf("$box%d", variable));
|
||||
if (!cell)
|
||||
log_debug("Box %d (%s) no longer exists.\n", variable, log_id(escaped_s));
|
||||
log_debug("Box %d (%s) no longer exists.\n", variable, escaped_s.unescape());
|
||||
else
|
||||
module->rename(cell, escaped_s);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ struct Xaiger2Frontend : public Frontend {
|
|||
|
||||
Module *module = design->module(module_name);
|
||||
if (!module)
|
||||
log_error("Module '%s' not found\n", log_id(module_name));
|
||||
log_error("Module '%s' not found\n", module_name.unescape());
|
||||
|
||||
std::ifstream map_file;
|
||||
map_file.open(map_filename);
|
||||
|
|
@ -158,7 +158,7 @@ struct Xaiger2Frontend : public Frontend {
|
|||
}
|
||||
|
||||
if (!def)
|
||||
log_error("Bad map file: no module found for box type '%s'\n", log_id(box->type));
|
||||
log_error("Bad map file: no module found for box type '%s'\n", box->type.unescape());
|
||||
|
||||
if (box_seq >= (int) boxes.size()) {
|
||||
boxes.resize(box_seq + 1);
|
||||
|
|
@ -276,9 +276,9 @@ struct Xaiger2Frontend : public Frontend {
|
|||
uint32_t nins = read_be32(*f);
|
||||
for (uint32_t j = 0; j < nins; j++)
|
||||
cell.ins.push_back(read_idstring(*f));
|
||||
log_debug("M: Cell %s (out %s, ins", log_id(cell.type), log_id(cell.out));
|
||||
log_debug("M: Cell %s (out %s, ins", cell.type.unescape(), cell.out.unescape());
|
||||
for (auto in : cell.ins)
|
||||
log_debug(" %s", log_id(in));
|
||||
log_debug(" %s", in.unescape());
|
||||
log_debug(")\n");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1544,7 +1544,7 @@ void AST::explode_interface_port(AstNode *module_ast, RTLIL::Module * intfmodule
|
|||
for (auto w : intfmodule->wires()){
|
||||
auto loc = module_ast->location;
|
||||
auto wire = std::make_unique<AstNode>(loc, AST_WIRE, std::make_unique<AstNode>(loc, AST_RANGE, AstNode::mkconst_int(loc, w->width -1, true), AstNode::mkconst_int(loc, 0, true)));
|
||||
std::string origname = log_id(w->name);
|
||||
std::string origname = w->name.unescape();
|
||||
std::string newname = intfname + "." + origname;
|
||||
wire->str = newname;
|
||||
if (modport != NULL) {
|
||||
|
|
@ -1584,7 +1584,7 @@ bool AstModule::reprocess_if_necessary(RTLIL::Design *design)
|
|||
continue;
|
||||
if (design->module(modname) || design->module("$abstract" + modname)) {
|
||||
log("Reprocessing module %s because instantiated module %s has become available.\n",
|
||||
log_id(name), log_id(modname));
|
||||
name.unescape(), RTLIL::unescape_id(modname));
|
||||
loadconfig();
|
||||
process_and_replace_module(design, this, ast.get(), NULL);
|
||||
return true;
|
||||
|
|
@ -1606,7 +1606,7 @@ void AstModule::expand_interfaces(RTLIL::Design *design, const dict<RTLIL::IdStr
|
|||
RTLIL::Module *intfmodule = intf.second;
|
||||
for (auto w : intfmodule->wires()){
|
||||
auto wire = std::make_unique<AstNode>(loc, AST_WIRE, std::make_unique<AstNode>(loc, AST_RANGE, AstNode::mkconst_int(loc, w->width -1, true), AstNode::mkconst_int(loc, 0, true)));
|
||||
std::string newname = log_id(w->name);
|
||||
std::string newname = w->name.unescape();
|
||||
newname = intfname + "." + newname;
|
||||
wire->str = newname;
|
||||
new_ast->children.push_back(std::move(wire));
|
||||
|
|
@ -1679,7 +1679,7 @@ RTLIL::IdString AstModule::derive(RTLIL::Design *design, const dict<RTLIL::IdStr
|
|||
|
||||
bool has_interfaces = false;
|
||||
for(auto &intf : interfaces) {
|
||||
interf_info += log_id(intf.second->name);
|
||||
interf_info += intf.second->name.unescape();
|
||||
has_interfaces = true;
|
||||
}
|
||||
|
||||
|
|
@ -1735,7 +1735,7 @@ RTLIL::IdString AstModule::derive(RTLIL::Design *design, const dict<RTLIL::IdStr
|
|||
new_subcell->set_bool_attribute(ID::is_interface);
|
||||
}
|
||||
else {
|
||||
log_error("No port with matching name found (%s) in %s. Stopping\n", log_id(intf.first), modname);
|
||||
log_error("No port with matching name found (%s) in %s. Stopping\n", intf.first, modname);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2197,10 +2197,10 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
|||
const auto* value = child->children[0].get();
|
||||
if (value->type == AST_REALVALUE)
|
||||
log_file_warning(*location.begin.filename, location.begin.line, "Replacing floating point parameter %s.%s = %f with string.\n",
|
||||
log_id(cell), log_id(paraname), value->realvalue);
|
||||
cell, paraname.unescape(), value->realvalue);
|
||||
else if (value->type != AST_CONSTANT)
|
||||
input_error("Parameter %s.%s with non-constant value!\n",
|
||||
log_id(cell), log_id(paraname));
|
||||
cell, paraname.unescape());
|
||||
cell->parameters[paraname] = value->asParaConst();
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1492,7 +1492,7 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin
|
|||
const RTLIL::Wire *ref = module->wire(port_name);
|
||||
if (ref == nullptr)
|
||||
input_error("Cell instance refers to port %s which does not exist in module %s!.\n",
|
||||
log_id(port_name), log_id(module->name));
|
||||
port_name.unescape(), module->name.unescape());
|
||||
|
||||
// select the argument, if present
|
||||
log_assert(child->children.size() <= 1);
|
||||
|
|
@ -3250,7 +3250,7 @@ skip_dynamic_range_lvalue_expansion:;
|
|||
if (stage > 1 && type == AST_IDENTIFIER && id2ast != nullptr && id2ast->type == AST_MEMORY && !in_lvalue &&
|
||||
children.size() == 1 && children[0]->type == AST_RANGE && children[0]->children.size() == 1) {
|
||||
if (integer < (unsigned)id2ast->unpacked_dimensions)
|
||||
input_error("Insufficient number of array indices for %s.\n", log_id(str));
|
||||
input_error("Insufficient number of array indices for %s.\n", RTLIL::unescape_id(str));
|
||||
newNode = std::make_unique<AstNode>(location, AST_MEMRD, children[0]->children[0]->clone());
|
||||
newNode->str = str;
|
||||
newNode->id2ast = id2ast;
|
||||
|
|
@ -3523,7 +3523,7 @@ skip_dynamic_range_lvalue_expansion:;
|
|||
(children[0]->children.size() == 1 || children[0]->children.size() == 2) && children[0]->children[0]->type == AST_RANGE)
|
||||
{
|
||||
if (children[0]->integer < (unsigned)children[0]->id2ast->unpacked_dimensions)
|
||||
input_error("Insufficient number of array indices for %s.\n", log_id(str));
|
||||
input_error("Insufficient number of array indices for %s.\n", RTLIL::unescape_id(str));
|
||||
|
||||
std::stringstream sstr;
|
||||
sstr << "$memwr$" << children[0]->str << "$" << RTLIL::encode_filename(*location.begin.filename) << ":" << location.begin.line << "$" << (autoidx++);
|
||||
|
|
@ -5273,7 +5273,7 @@ void AstNode::mem2reg_as_needed_pass1(dict<AstNode*, pool<std::string>> &mem2reg
|
|||
AstNode *mem = id2ast;
|
||||
|
||||
if (integer < (unsigned)mem->unpacked_dimensions)
|
||||
input_error("Insufficient number of array indices for %s.\n", log_id(str));
|
||||
input_error("Insufficient number of array indices for %s.\n", RTLIL::unescape_id(str));
|
||||
|
||||
// flag if used after blocking assignment (in same proc)
|
||||
if ((proc_flags[mem] & AstNode::MEM2REG_FL_EQ1) && !(mem2reg_candidates[mem] & AstNode::MEM2REG_FL_EQ2)) {
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ void parse_blif(RTLIL::Design *design, std::istream &f, IdString dff_name, bool
|
|||
obj_attributes = &module->attributes;
|
||||
obj_parameters = nullptr;
|
||||
if (design->module(module->name))
|
||||
log_error("Duplicate definition of module %s in line %d!\n", log_id(module->name), line_count);
|
||||
log_error("Duplicate definition of module %s in line %d!\n", module->name.unescape(), line_count);
|
||||
design->add(module);
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -295,7 +295,7 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
module->name = RTLIL::escape_id(modname.c_str());
|
||||
|
||||
if (design->module(module->name))
|
||||
log_error("Re-definition of module %s.\n", log_id(module->name));
|
||||
log_error("Re-definition of module %s.\n", module->name.unescape());
|
||||
|
||||
design->add(module);
|
||||
|
||||
|
|
@ -320,22 +320,22 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
JsonNode *port_node = ports_node->data_dict.at(ports_node->data_dict_keys[port_id-1]);
|
||||
|
||||
if (port_node->type != 'D')
|
||||
log_error("JSON port node '%s' is not a dictionary.\n", log_id(port_name));
|
||||
log_error("JSON port node '%s' is not a dictionary.\n", port_name.unescape());
|
||||
|
||||
if (port_node->data_dict.count("direction") == 0)
|
||||
log_error("JSON port node '%s' has no direction attribute.\n", log_id(port_name));
|
||||
log_error("JSON port node '%s' has no direction attribute.\n", port_name.unescape());
|
||||
|
||||
if (port_node->data_dict.count("bits") == 0)
|
||||
log_error("JSON port node '%s' has no bits attribute.\n", log_id(port_name));
|
||||
log_error("JSON port node '%s' has no bits attribute.\n", port_name.unescape());
|
||||
|
||||
JsonNode *port_direction_node = port_node->data_dict.at("direction");
|
||||
JsonNode *port_bits_node = port_node->data_dict.at("bits");
|
||||
|
||||
if (port_direction_node->type != 'S')
|
||||
log_error("JSON port node '%s' has non-string direction attribute.\n", log_id(port_name));
|
||||
log_error("JSON port node '%s' has non-string direction attribute.\n", port_name.unescape());
|
||||
|
||||
if (port_bits_node->type != 'A')
|
||||
log_error("JSON port node '%s' has non-array bits attribute.\n", log_id(port_name));
|
||||
log_error("JSON port node '%s' has non-array bits attribute.\n", port_name.unescape());
|
||||
|
||||
Wire *port_wire = module->wire(port_name);
|
||||
|
||||
|
|
@ -370,7 +370,7 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
port_wire->port_input = true;
|
||||
port_wire->port_output = true;
|
||||
} else
|
||||
log_error("JSON port node '%s' has invalid '%s' direction attribute.\n", log_id(port_name), port_direction_node->data_string);
|
||||
log_error("JSON port node '%s' has invalid '%s' direction attribute.\n", port_name.unescape(), port_direction_node->data_string);
|
||||
|
||||
port_wire->port_id = port_id;
|
||||
|
||||
|
|
@ -390,7 +390,7 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
module->connect(sigbit, State::Sz);
|
||||
else
|
||||
log_error("JSON port node '%s' has invalid '%s' bit string value on bit %d.\n",
|
||||
log_id(port_name), bitval_node->data_string.c_str(), i);
|
||||
port_name.unescape(), bitval_node->data_string.c_str(), i);
|
||||
} else
|
||||
if (bitval_node->type == 'N') {
|
||||
int bitidx = bitval_node->data_number;
|
||||
|
|
@ -405,7 +405,7 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
signal_bits[bitidx] = sigbit;
|
||||
}
|
||||
} else
|
||||
log_error("JSON port node '%s' has invalid bit value on bit %d.\n", log_id(port_name), i);
|
||||
log_error("JSON port node '%s' has invalid bit value on bit %d.\n", port_name.unescape(), i);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -425,15 +425,15 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
JsonNode *net_node = net.second;
|
||||
|
||||
if (net_node->type != 'D')
|
||||
log_error("JSON netname node '%s' is not a dictionary.\n", log_id(net_name));
|
||||
log_error("JSON netname node '%s' is not a dictionary.\n", net_name.unescape());
|
||||
|
||||
if (net_node->data_dict.count("bits") == 0)
|
||||
log_error("JSON netname node '%s' has no bits attribute.\n", log_id(net_name));
|
||||
log_error("JSON netname node '%s' has no bits attribute.\n", net_name.unescape());
|
||||
|
||||
JsonNode *bits_node = net_node->data_dict.at("bits");
|
||||
|
||||
if (bits_node->type != 'A')
|
||||
log_error("JSON netname node '%s' has non-array bits attribute.\n", log_id(net_name));
|
||||
log_error("JSON netname node '%s' has non-array bits attribute.\n", net_name.unescape());
|
||||
|
||||
Wire *wire = module->wire(net_name);
|
||||
|
||||
|
|
@ -468,7 +468,7 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
module->connect(sigbit, State::Sz);
|
||||
else
|
||||
log_error("JSON netname node '%s' has invalid '%s' bit string value on bit %d.\n",
|
||||
log_id(net_name), bitval_node->data_string.c_str(), i);
|
||||
net_name.unescape(), bitval_node->data_string.c_str(), i);
|
||||
} else
|
||||
if (bitval_node->type == 'N') {
|
||||
int bitidx = bitval_node->data_number;
|
||||
|
|
@ -479,7 +479,7 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
signal_bits[bitidx] = sigbit;
|
||||
}
|
||||
} else
|
||||
log_error("JSON netname node '%s' has invalid bit value on bit %d.\n", log_id(net_name), i);
|
||||
log_error("JSON netname node '%s' has invalid bit value on bit %d.\n", net_name.unescape(), i);
|
||||
}
|
||||
|
||||
if (net_node->data_dict.count("attributes"))
|
||||
|
|
@ -500,27 +500,27 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
JsonNode *cell_node = cell_node_it.second;
|
||||
|
||||
if (cell_node->type != 'D')
|
||||
log_error("JSON cells node '%s' is not a dictionary.\n", log_id(cell_name));
|
||||
log_error("JSON cells node '%s' is not a dictionary.\n", cell_name.unescape());
|
||||
|
||||
if (cell_node->data_dict.count("type") == 0)
|
||||
log_error("JSON cells node '%s' has no type attribute.\n", log_id(cell_name));
|
||||
log_error("JSON cells node '%s' has no type attribute.\n", cell_name.unescape());
|
||||
|
||||
JsonNode *type_node = cell_node->data_dict.at("type");
|
||||
|
||||
if (type_node->type != 'S')
|
||||
log_error("JSON cells node '%s' has a non-string type.\n", log_id(cell_name));
|
||||
log_error("JSON cells node '%s' has a non-string type.\n", cell_name.unescape());
|
||||
|
||||
IdString cell_type = RTLIL::escape_id(type_node->data_string.c_str());
|
||||
|
||||
Cell *cell = module->addCell(cell_name, cell_type);
|
||||
|
||||
if (cell_node->data_dict.count("connections") == 0)
|
||||
log_error("JSON cells node '%s' has no connections attribute.\n", log_id(cell_name));
|
||||
log_error("JSON cells node '%s' has no connections attribute.\n", cell_name.unescape());
|
||||
|
||||
JsonNode *connections_node = cell_node->data_dict.at("connections");
|
||||
|
||||
if (connections_node->type != 'D')
|
||||
log_error("JSON cells node '%s' has non-dictionary connections attribute.\n", log_id(cell_name));
|
||||
log_error("JSON cells node '%s' has non-dictionary connections attribute.\n", cell_name.unescape());
|
||||
|
||||
for (auto &conn_it : connections_node->data_dict)
|
||||
{
|
||||
|
|
@ -528,7 +528,7 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
JsonNode *conn_node = conn_it.second;
|
||||
|
||||
if (conn_node->type != 'A')
|
||||
log_error("JSON cells node '%s' connection '%s' is not an array.\n", log_id(cell_name), log_id(conn_name));
|
||||
log_error("JSON cells node '%s' connection '%s' is not an array.\n", cell_name.unescape(), conn_name.unescape());
|
||||
|
||||
SigSpec sig;
|
||||
|
||||
|
|
@ -547,7 +547,7 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
sig.append(State::Sz);
|
||||
else
|
||||
log_error("JSON cells node '%s' connection '%s' has invalid '%s' bit string value on bit %d.\n",
|
||||
log_id(cell_name), log_id(conn_name), bitval_node->data_string.c_str(), i);
|
||||
cell_name.unescape(), conn_name.unescape(), bitval_node->data_string.c_str(), i);
|
||||
} else
|
||||
if (bitval_node->type == 'N') {
|
||||
int bitidx = bitval_node->data_number;
|
||||
|
|
@ -556,7 +556,7 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
sig.append(signal_bits.at(bitidx));
|
||||
} else
|
||||
log_error("JSON cells node '%s' connection '%s' has invalid bit value on bit %d.\n",
|
||||
log_id(cell_name), log_id(conn_name), i);
|
||||
cell_name.unescape(), conn_name.unescape(), i);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -587,20 +587,20 @@ void json_import(Design *design, string &modname, JsonNode *node)
|
|||
mem->name = memory_name;
|
||||
|
||||
if (memory_node->type != 'D')
|
||||
log_error("JSON memory node '%s' is not a dictionary.\n", log_id(memory_name));
|
||||
log_error("JSON memory node '%s' is not a dictionary.\n", memory_name.unescape());
|
||||
|
||||
if (memory_node->data_dict.count("width") == 0)
|
||||
log_error("JSON memory node '%s' has no width attribute.\n", log_id(memory_name));
|
||||
log_error("JSON memory node '%s' has no width attribute.\n", memory_name.unescape());
|
||||
JsonNode *width_node = memory_node->data_dict.at("width");
|
||||
if (width_node->type != 'N')
|
||||
log_error("JSON memory node '%s' has a non-number width.\n", log_id(memory_name));
|
||||
log_error("JSON memory node '%s' has a non-number width.\n", memory_name.unescape());
|
||||
mem->width = width_node->data_number;
|
||||
|
||||
if (memory_node->data_dict.count("size") == 0)
|
||||
log_error("JSON memory node '%s' has no size attribute.\n", log_id(memory_name));
|
||||
log_error("JSON memory node '%s' has no size attribute.\n", memory_name.unescape());
|
||||
JsonNode *size_node = memory_node->data_dict.at("size");
|
||||
if (size_node->type != 'N')
|
||||
log_error("JSON memory node '%s' has a non-number size.\n", log_id(memory_name));
|
||||
log_error("JSON memory node '%s' has a non-number size.\n", memory_name.unescape());
|
||||
mem->size = size_node->data_number;
|
||||
|
||||
mem->start_offset = 0;
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ struct RpcModule : RTLIL::Module {
|
|||
for (auto module : derived_design->modules_) {
|
||||
std::string mangled_name = name_mangling[module.first.str()];
|
||||
|
||||
log("Importing `%s' as `%s'.\n", log_id(module.first), log_id(mangled_name));
|
||||
log("Importing `%s' as `%s'.\n", module.first.unescape(), mangled_name);
|
||||
|
||||
module.second->name = mangled_name;
|
||||
module.second->design = design;
|
||||
|
|
|
|||
|
|
@ -332,7 +332,7 @@ struct RTLILFrontendWorker {
|
|||
error("No wires found for legalization");
|
||||
int hash = hash_ops<RTLIL::IdString>::hash(id).yield();
|
||||
RTLIL::Wire *wire = current_module->wire_at(abs(hash % wires_size));
|
||||
log("Legalizing wire `%s' to `%s'.\n", log_id(id), log_id(wire->name));
|
||||
log("Legalizing wire `%s' to `%s'.\n", id.unescape(), wire->name.unescape());
|
||||
return wire;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1392,13 +1392,13 @@ void VerificImporter::merge_past_ffs_clock(pool<RTLIL::Cell*> &candidates, SigBi
|
|||
RTLIL::Cell *new_ff = module->addDff(NEW_ID, clock, sig_d, sig_q, clock_pol);
|
||||
|
||||
if (verific_verbose)
|
||||
log(" merging single-bit past_ffs into new %d-bit ff %s.\n", GetSize(sig_d), log_id(new_ff));
|
||||
log(" merging single-bit past_ffs into new %d-bit ff %s.\n", GetSize(sig_d), new_ff);
|
||||
|
||||
for (int i = 0; i < GetSize(sig_d); i++)
|
||||
for (auto old_ff : dbits_db[sig_d[i]])
|
||||
{
|
||||
if (verific_verbose)
|
||||
log(" replacing old ff %s on bit %d.\n", log_id(old_ff), i);
|
||||
log(" replacing old ff %s on bit %d.\n", old_ff, i);
|
||||
|
||||
SigBit old_q = old_ff->getPort(ID::Q);
|
||||
SigBit new_q = sig_q[i];
|
||||
|
|
@ -1736,7 +1736,7 @@ void VerificImporter::import_netlist(RTLIL::Design *design, Netlist *nl, std::ma
|
|||
RTLIL::IdString wire_name = module->uniquify(mode_names || net->IsUserDeclared() ? RTLIL::escape_id(net->Name()) : new_verific_id(net));
|
||||
|
||||
if (verific_verbose)
|
||||
log(" importing net %s as %s.\n", net->Name(), log_id(wire_name));
|
||||
log(" importing net %s as %s.\n", net->Name(), wire_name.unescape());
|
||||
|
||||
RTLIL::Wire *wire = module->addWire(wire_name);
|
||||
import_attributes(wire->attributes, net, nl, 1);
|
||||
|
|
@ -1760,7 +1760,7 @@ void VerificImporter::import_netlist(RTLIL::Design *design, Netlist *nl, std::ma
|
|||
RTLIL::IdString wire_name = module->uniquify(mode_names || netbus->IsUserDeclared() ? RTLIL::escape_id(netbus->Name()) : new_verific_id(netbus));
|
||||
|
||||
if (verific_verbose)
|
||||
log(" importing netbus %s as %s.\n", netbus->Name(), log_id(wire_name));
|
||||
log(" importing netbus %s as %s.\n", netbus->Name(), wire_name.unescape());
|
||||
|
||||
RTLIL::Wire *wire = module->addWire(wire_name, netbus->Size());
|
||||
wire->start_offset = min(netbus->LeftIndex(), netbus->RightIndex());
|
||||
|
|
@ -1894,7 +1894,7 @@ void VerificImporter::import_netlist(RTLIL::Design *design, Netlist *nl, std::ma
|
|||
RTLIL::IdString inst_name = module->uniquify(mode_names || inst->IsUserDeclared() ? RTLIL::escape_id(inst->Name()) : new_verific_id(inst));
|
||||
|
||||
if (verific_verbose)
|
||||
log(" importing cell %s (%s) as %s.\n", inst->Name(), inst->View()->Owner()->Name(), log_id(inst_name));
|
||||
log(" importing cell %s (%s) as %s.\n", inst->Name(), inst->View()->Owner()->Name(), inst_name.unescape());
|
||||
|
||||
if (mode_verific)
|
||||
goto import_verific_cells;
|
||||
|
|
@ -2258,7 +2258,7 @@ void VerificImporter::import_netlist(RTLIL::Design *design, Netlist *nl, std::ma
|
|||
|
||||
for (auto &it : cell_port_conns) {
|
||||
if (verific_verbose)
|
||||
log(" .%s(%s)\n", log_id(it.first), log_signal(it.second));
|
||||
log(" .%s(%s)\n", it.first.unescape(), log_signal(it.second));
|
||||
cell->setPort(it.first, it.second);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -210,6 +210,6 @@ unsigned int CellCosts::get(RTLIL::Cell *cell)
|
|||
// TODO: $fsm
|
||||
// ignored: $pow $memrd $memwr $meminit (and v2 counterparts)
|
||||
|
||||
log_warning("Can't determine cost of %s cell (%d parameters).\n", log_id(cell->type), GetSize(cell->parameters));
|
||||
log_warning("Can't determine cost of %s cell (%d parameters).\n", cell->type.unescape(), GetSize(cell->parameters));
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -866,7 +866,7 @@ DriveSpec DriverMap::operator()(DriveSpec spec)
|
|||
|
||||
std::string log_signal(DriveChunkWire const &chunk)
|
||||
{
|
||||
const char *id = log_id(chunk.wire->name);
|
||||
std::string id = chunk.wire->name.unescape();
|
||||
if (chunk.is_whole())
|
||||
return id;
|
||||
if (chunk.width == 1)
|
||||
|
|
@ -877,8 +877,8 @@ std::string log_signal(DriveChunkWire const &chunk)
|
|||
|
||||
std::string log_signal(DriveChunkPort const &chunk)
|
||||
{
|
||||
const char *cell_id = log_id(chunk.cell->name);
|
||||
const char *port_id = log_id(chunk.port);
|
||||
std::string cell_id = chunk.cell->name.unescape();
|
||||
std::string port_id = chunk.port.unescape();
|
||||
if (chunk.is_whole())
|
||||
return stringf("%s <%s>", cell_id, port_id);
|
||||
if (chunk.width == 1)
|
||||
|
|
|
|||
|
|
@ -792,7 +792,7 @@ void FfData::flip_bits(const pool<int> &bits) {
|
|||
Wire *new_q = module->addWire(NEW_ID, width);
|
||||
|
||||
if (has_sr && cell) {
|
||||
log_warning("Flipping D/Q/init and inserting priority fixup to legalize %s.%s [%s].\n", log_id(module->name), log_id(cell->name), log_id(cell->type));
|
||||
log_warning("Flipping D/Q/init and inserting priority fixup to legalize %s.%s [%s].\n", module->name.unescape(), cell->name.unescape(), cell->type.unescape());
|
||||
}
|
||||
|
||||
if (is_fine) {
|
||||
|
|
|
|||
|
|
@ -572,7 +572,7 @@ private:
|
|||
const auto &wr = mem->wr_ports[i];
|
||||
if (wr.clk_enable)
|
||||
log_error("Write port %zd of memory %s.%s is clocked. This is not supported by the functional backend. "
|
||||
"Call async2sync or clk2fflogic to avoid this error.\n", i, log_id(mem->module), log_id(mem->memid));
|
||||
"Call async2sync or clk2fflogic to avoid this error.\n", i, mem->module, mem->memid.unescape());
|
||||
Node en = enqueue(driver_map(DriveSpec(wr.en)));
|
||||
Node addr = enqueue(driver_map(DriveSpec(wr.addr)));
|
||||
Node new_data = enqueue(driver_map(DriveSpec(wr.data)));
|
||||
|
|
@ -582,12 +582,12 @@ private:
|
|||
}
|
||||
if (mem->rd_ports.empty())
|
||||
log_error("Memory %s.%s has no read ports. This is not supported by the functional backend. "
|
||||
"Call opt_clean to remove it.", log_id(mem->module), log_id(mem->memid));
|
||||
"Call opt_clean to remove it.", mem->module, mem->memid.unescape());
|
||||
for (size_t i = 0; i < mem->rd_ports.size(); i++) {
|
||||
const auto &rd = mem->rd_ports[i];
|
||||
if (rd.clk_enable)
|
||||
log_error("Read port %zd of memory %s.%s is clocked. This is not supported by the functional backend. "
|
||||
"Call memory_nordff to avoid this error.\n", i, log_id(mem->module), log_id(mem->memid));
|
||||
"Call memory_nordff to avoid this error.\n", i, mem->module, mem->memid.unescape());
|
||||
Node addr = enqueue(driver_map(DriveSpec(rd.addr)));
|
||||
read_results.push_back(factory.memory_read(node, addr));
|
||||
}
|
||||
|
|
@ -609,7 +609,7 @@ private:
|
|||
FfData ff(&ff_initvals, cell);
|
||||
if (!ff.has_gclk)
|
||||
log_error("The design contains a %s flip-flop at %s. This is not supported by the functional backend. "
|
||||
"Call async2sync or clk2fflogic to avoid this error.\n", log_id(cell->type), log_id(cell));
|
||||
"Call async2sync or clk2fflogic to avoid this error.\n", cell->type.unescape(), cell);
|
||||
auto &state = factory.add_state(ff.name, ID($state), Sort(ff.width));
|
||||
Node q_value = factory.value(state);
|
||||
factory.suggest_name(q_value, ff.name);
|
||||
|
|
|
|||
36
kernel/io.h
36
kernel/io.h
|
|
@ -197,6 +197,28 @@ check_format(std::string_view fmt, int fmt_start, bool *has_escapes, FoundFormat
|
|||
ensure_no_format_spec(fmt, fmt_start, has_escapes);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
static auto has_name_member_imp(int)
|
||||
-> decltype(static_cast<const RTLIL::IdString>(std::declval<T>().name), std::true_type{});
|
||||
|
||||
template <class T>
|
||||
static auto has_name_member_imp(long)
|
||||
-> std::false_type;
|
||||
|
||||
template <class T>
|
||||
struct has_name_member : decltype(has_name_member_imp<T>(0)){};
|
||||
|
||||
template <class T>
|
||||
static auto ptr_has_name_member_imp(int)
|
||||
-> decltype(static_cast<const RTLIL::IdString>(std::declval<T>()->name), std::true_type{});
|
||||
|
||||
template <class T>
|
||||
static auto ptr_has_name_member_imp(long)
|
||||
-> std::false_type;
|
||||
|
||||
template <class T>
|
||||
struct ptr_has_name_member : decltype(ptr_has_name_member_imp<T>(0)){};
|
||||
|
||||
// Check that the format string `fmt.substr(fmt_start)` is valid for the given type arguments.
|
||||
// Fills `specs` with the FoundFormatSpecs found in the format string.
|
||||
// `int_args_consumed` is the number of int arguments already consumed to satisfy the
|
||||
|
|
@ -245,7 +267,9 @@ constexpr void check_format(std::string_view fmt, int fmt_start, bool *has_escap
|
|||
if constexpr (!std::is_convertible_v<Arg, const char *> &&
|
||||
!std::is_convertible_v<Arg, const std::string &> &&
|
||||
!std::is_convertible_v<Arg, const std::string_view &> &&
|
||||
!std::is_convertible_v<Arg, const RTLIL::IdString &>) {
|
||||
!std::is_convertible_v<Arg, const RTLIL::IdString &> &&
|
||||
!has_name_member<Arg>() &&
|
||||
!ptr_has_name_member<Arg>()) {
|
||||
YOSYS_ABORT("Expected type convertible to char *");
|
||||
}
|
||||
*specs = found;
|
||||
|
|
@ -343,6 +367,16 @@ inline void format_emit_one(std::string &result, std::string_view fmt, const Fou
|
|||
format_emit_idstring(result, spec, dynamic_ints, num_dynamic_ints, s);
|
||||
return;
|
||||
}
|
||||
if constexpr (has_name_member<Arg>()) {
|
||||
const std::string &s = arg.name.unescape();
|
||||
format_emit_string(result, spec, dynamic_ints, num_dynamic_ints, s);
|
||||
return;
|
||||
}
|
||||
if constexpr (ptr_has_name_member<Arg>()) {
|
||||
const std::string &s = arg->name.unescape();
|
||||
format_emit_string(result, spec, dynamic_ints, num_dynamic_ints, s);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case CONVSPEC_VOID_PTR:
|
||||
if constexpr (std::is_convertible_v<Arg, const void *>) {
|
||||
|
|
|
|||
|
|
@ -586,7 +586,7 @@ void log_flush()
|
|||
}
|
||||
|
||||
void log_dump_val_worker(RTLIL::IdString v) {
|
||||
log("%s", log_id(v));
|
||||
log("%s", v.unescape());
|
||||
}
|
||||
|
||||
void log_dump_val_worker(RTLIL::SigSpec v) {
|
||||
|
|
|
|||
|
|
@ -663,15 +663,15 @@ namespace {
|
|||
auto addr = cell->getPort(ID::ADDR);
|
||||
auto data = cell->getPort(ID::DATA);
|
||||
if (!addr.is_fully_const())
|
||||
log_error("Non-constant address %s in memory initialization %s.\n", log_signal(addr), log_id(cell));
|
||||
log_error("Non-constant address %s in memory initialization %s.\n", log_signal(addr), cell);
|
||||
if (!data.is_fully_const())
|
||||
log_error("Non-constant data %s in memory initialization %s.\n", log_signal(data), log_id(cell));
|
||||
log_error("Non-constant data %s in memory initialization %s.\n", log_signal(data), cell);
|
||||
init.addr = addr.as_const();
|
||||
init.data = data.as_const();
|
||||
if (cell->type == ID($meminit_v2)) {
|
||||
auto en = cell->getPort(ID::EN);
|
||||
if (!en.is_fully_const())
|
||||
log_error("Non-constant enable %s in memory initialization %s.\n", log_signal(en), log_id(cell));
|
||||
log_error("Non-constant enable %s in memory initialization %s.\n", log_signal(en), cell);
|
||||
init.en = en.as_const();
|
||||
} else {
|
||||
init.en = RTLIL::Const(State::S1, mem->width);
|
||||
|
|
@ -1022,7 +1022,7 @@ Cell *Mem::extract_rdff(int idx, FfInitVals *initvals) {
|
|||
|
||||
if (c)
|
||||
log("Extracted %s FF from read port %d of %s.%s: %s\n", trans_use_addr ? "addr" : "data",
|
||||
idx, log_id(module), log_id(memid), log_id(c));
|
||||
idx, module, memid.unescape(), c);
|
||||
|
||||
port.en = State::S1;
|
||||
port.clk = State::S0;
|
||||
|
|
|
|||
|
|
@ -320,8 +320,8 @@ struct ModIndex : public RTLIL::Monitor
|
|||
if (it.second.is_output)
|
||||
log(" PRIMARY OUTPUT\n");
|
||||
for (auto &port : it.second.ports)
|
||||
log(" PORT: %s.%s[%d] (%s)\n", log_id(port.cell),
|
||||
log_id(port.port), port.offset, log_id(port.cell->type));
|
||||
log(" PORT: %s.%s[%d] (%s)\n", port.cell,
|
||||
port.port.unescape(), port.offset, port.cell->type.unescape());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1226,7 +1226,7 @@ void RTLIL::Design::add(RTLIL::Module *module)
|
|||
mon->notify_module_add(module);
|
||||
|
||||
if (yosys_xtrace) {
|
||||
log("#X# New Module: %s\n", log_id(module));
|
||||
log("#X# New Module: %s\n", module);
|
||||
log_backtrace("-X- ", yosys_xtrace-1);
|
||||
}
|
||||
}
|
||||
|
|
@ -1252,7 +1252,7 @@ RTLIL::Module *RTLIL::Design::addModule(RTLIL::IdString name)
|
|||
mon->notify_module_add(module);
|
||||
|
||||
if (yosys_xtrace) {
|
||||
log("#X# New Module: %s\n", log_id(module));
|
||||
log("#X# New Module: %s\n", module);
|
||||
log_backtrace("-X- ", yosys_xtrace-1);
|
||||
}
|
||||
|
||||
|
|
@ -1330,7 +1330,7 @@ void RTLIL::Design::remove(RTLIL::Module *module)
|
|||
mon->notify_module_del(module);
|
||||
|
||||
if (yosys_xtrace) {
|
||||
log("#X# Remove Module: %s\n", log_id(module));
|
||||
log("#X# Remove Module: %s\n", module);
|
||||
log_backtrace("-X- ", yosys_xtrace-1);
|
||||
}
|
||||
|
||||
|
|
@ -1472,22 +1472,22 @@ std::vector<RTLIL::Module*> RTLIL::Design::selected_modules(RTLIL::SelectPartial
|
|||
switch (boxes)
|
||||
{
|
||||
case RTLIL::SB_UNBOXED_WARN:
|
||||
log_warning("Ignoring boxed module %s.\n", log_id(it.first));
|
||||
log_warning("Ignoring boxed module %s.\n", it.first.unescape());
|
||||
break;
|
||||
case RTLIL::SB_EXCL_BB_WARN:
|
||||
log_warning("Ignoring blackbox module %s.\n", log_id(it.first));
|
||||
log_warning("Ignoring blackbox module %s.\n", it.first.unescape());
|
||||
break;
|
||||
case RTLIL::SB_UNBOXED_ERR:
|
||||
log_error("Unsupported boxed module %s.\n", log_id(it.first));
|
||||
log_error("Unsupported boxed module %s.\n", it.first.unescape());
|
||||
break;
|
||||
case RTLIL::SB_EXCL_BB_ERR:
|
||||
log_error("Unsupported blackbox module %s.\n", log_id(it.first));
|
||||
log_error("Unsupported blackbox module %s.\n", it.first.unescape());
|
||||
break;
|
||||
case RTLIL::SB_UNBOXED_CMDERR:
|
||||
log_cmd_error("Unsupported boxed module %s.\n", log_id(it.first));
|
||||
log_cmd_error("Unsupported boxed module %s.\n", it.first.unescape());
|
||||
break;
|
||||
case RTLIL::SB_EXCL_BB_CMDERR:
|
||||
log_cmd_error("Unsupported blackbox module %s.\n", log_id(it.first));
|
||||
log_cmd_error("Unsupported blackbox module %s.\n", it.first.unescape());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -1496,13 +1496,13 @@ std::vector<RTLIL::Module*> RTLIL::Design::selected_modules(RTLIL::SelectPartial
|
|||
switch(partials)
|
||||
{
|
||||
case RTLIL::SELECT_WHOLE_WARN:
|
||||
log_warning("Ignoring partially selected module %s.\n", log_id(it.first));
|
||||
log_warning("Ignoring partially selected module %s.\n", it.first.unescape());
|
||||
break;
|
||||
case RTLIL::SELECT_WHOLE_ERR:
|
||||
log_error("Unsupported partially selected module %s.\n", log_id(it.first));
|
||||
log_error("Unsupported partially selected module %s.\n", it.first.unescape());
|
||||
break;
|
||||
case RTLIL::SELECT_WHOLE_CMDERR:
|
||||
log_cmd_error("Unsupported partially selected module %s.\n", log_id(it.first));
|
||||
log_cmd_error("Unsupported partially selected module %s.\n", it.first.unescape());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -2796,14 +2796,14 @@ bool RTLIL::Module::has_processes() const
|
|||
bool RTLIL::Module::has_memories_warn() const
|
||||
{
|
||||
if (!memories.empty())
|
||||
log_warning("Ignoring module %s because it contains memories (run 'memory' command first).\n", log_id(this));
|
||||
log_warning("Ignoring module %s because it contains memories (run 'memory' command first).\n", this);
|
||||
return !memories.empty();
|
||||
}
|
||||
|
||||
bool RTLIL::Module::has_processes_warn() const
|
||||
{
|
||||
if (!processes.empty())
|
||||
log_warning("Ignoring module %s because it contains processes (run 'proc' command first).\n", log_id(this));
|
||||
log_warning("Ignoring module %s because it contains processes (run 'proc' command first).\n", this);
|
||||
return !processes.empty();
|
||||
}
|
||||
|
||||
|
|
@ -3095,7 +3095,7 @@ void RTLIL::Module::connect(const RTLIL::SigSig &conn)
|
|||
}
|
||||
|
||||
if (yosys_xtrace) {
|
||||
log("#X# Connect (SigSig) in %s: %s = %s (%d bits)\n", log_id(this), log_signal(conn.first), log_signal(conn.second), GetSize(conn.first));
|
||||
log("#X# Connect (SigSig) in %s: %s = %s (%d bits)\n", this, log_signal(conn.first), log_signal(conn.second), GetSize(conn.first));
|
||||
log_backtrace("-X- ", yosys_xtrace-1);
|
||||
}
|
||||
|
||||
|
|
@ -3118,7 +3118,7 @@ void RTLIL::Module::new_connections(const std::vector<RTLIL::SigSig> &new_conn)
|
|||
mon->notify_connect(this, new_conn);
|
||||
|
||||
if (yosys_xtrace) {
|
||||
log("#X# New connections vector in %s:\n", log_id(this));
|
||||
log("#X# New connections vector in %s:\n", this);
|
||||
for (auto &conn: new_conn)
|
||||
log("#X# %s = %s (%d bits)\n", log_signal(conn.first), log_signal(conn.second), GetSize(conn.first));
|
||||
log_backtrace("-X- ", yosys_xtrace-1);
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ void RTLIL::Module::bufNormalize()
|
|||
// already enqueued or becomes reachable when denormalizing $buf or
|
||||
// $connect cells.
|
||||
auto enqueue_cell_port = [&](Cell *cell, IdString port) {
|
||||
xlog("processing cell port %s.%s\n", log_id(cell), log_id(port));
|
||||
xlog("processing cell port %s.%s\n", cell, port.unescape());
|
||||
|
||||
// An empty cell type means the cell got removed
|
||||
if (cell->type.empty())
|
||||
|
|
@ -270,7 +270,7 @@ void RTLIL::Module::bufNormalize()
|
|||
// normalized mode).
|
||||
while (wire_queue_pos < GetSize(wire_queue_entries)) {
|
||||
auto wire = wire_queue_entries[wire_queue_pos++];
|
||||
xlog("processing wire %s\n", log_id(wire));
|
||||
xlog("processing wire %s\n", wire);
|
||||
|
||||
if (wire->driverCell_) {
|
||||
Cell *cell = wire->driverCell_;
|
||||
|
|
@ -287,7 +287,7 @@ void RTLIL::Module::bufNormalize()
|
|||
log_assert(connect_cell->type == ID($connect));
|
||||
SigSpec const &sig_a = connect_cell->getPort(ID::A);
|
||||
SigSpec const &sig_b = connect_cell->getPort(ID::B);
|
||||
xlog("found $connect cell %s: %s <-> %s\n", log_id(connect_cell), log_signal(sig_a), log_signal(sig_b));
|
||||
xlog("found $connect cell %s: %s <-> %s\n", connect_cell, log_signal(sig_a), log_signal(sig_b));
|
||||
for (auto &side : {sig_a, sig_b})
|
||||
for (auto chunk : side.chunks())
|
||||
if (chunk.wire)
|
||||
|
|
@ -452,7 +452,7 @@ void RTLIL::Module::bufNormalize()
|
|||
}
|
||||
|
||||
if (wire->driverCell_ == nullptr) {
|
||||
xlog("wire %s drivers %s\n", log_id(wire), log_signal(wire_drivers));
|
||||
xlog("wire %s drivers %s\n", wire, log_signal(wire_drivers));
|
||||
addBuf(NEW_ID, wire_drivers, wire);
|
||||
}
|
||||
}
|
||||
|
|
@ -541,7 +541,7 @@ void RTLIL::Cell::unsetPort(RTLIL::IdString portname)
|
|||
mon->notify_connect(this, conn_it->first, conn_it->second, signal);
|
||||
|
||||
if (yosys_xtrace) {
|
||||
log("#X# Unconnect %s.%s.%s\n", log_id(this->module), log_id(this), log_id(portname));
|
||||
log("#X# Unconnect %s.%s.%s\n", this->module, this, portname.unescape());
|
||||
log_backtrace("-X- ", yosys_xtrace-1);
|
||||
}
|
||||
|
||||
|
|
@ -601,7 +601,7 @@ void RTLIL::Cell::setPort(RTLIL::IdString portname, RTLIL::SigSpec signal)
|
|||
mon->notify_connect(this, conn_it->first, conn_it->second, signal);
|
||||
|
||||
if (yosys_xtrace) {
|
||||
log("#X# Connect %s.%s.%s = %s (%d)\n", log_id(this->module), log_id(this), log_id(portname), log_signal(signal), GetSize(signal));
|
||||
log("#X# Connect %s.%s.%s = %s (%d)\n", this->module, this, portname.unescape(), log_signal(signal), GetSize(signal));
|
||||
log_backtrace("-X- ", yosys_xtrace-1);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1395,9 +1395,9 @@ void report_missing_model(bool warn_only, RTLIL::Cell* cell)
|
|||
{
|
||||
std::string s;
|
||||
if (cell->is_builtin_ff())
|
||||
s = stringf("No SAT model available for async FF cell %s (%s). Consider running `async2sync` or `clk2fflogic` first.\n", log_id(cell), log_id(cell->type));
|
||||
s = stringf("No SAT model available for async FF cell %s (%s). Consider running `async2sync` or `clk2fflogic` first.\n", cell, cell->type.unescape());
|
||||
else
|
||||
s = stringf("No SAT model available for cell %s (%s).\n", log_id(cell), log_id(cell->type));
|
||||
s = stringf("No SAT model available for cell %s (%s).\n", cell, cell->type.unescape());
|
||||
|
||||
if (warn_only) {
|
||||
log_formatted_warning_noprefix(s);
|
||||
|
|
|
|||
|
|
@ -328,7 +328,7 @@ struct ModuleItem {
|
|||
[[nodiscard]] Hasher hash_into(Hasher h) const { h.eat(ptr); return h; }
|
||||
};
|
||||
|
||||
static inline void log_dump_val_worker(typename IdTree<ModuleItem>::Cursor cursor ) { log("%p %s", cursor.target, log_id(cursor.scope_name)); }
|
||||
static inline void log_dump_val_worker(typename IdTree<ModuleItem>::Cursor cursor ) { log("%p %s", cursor.target, cursor.scope_name.unescape()); }
|
||||
|
||||
template<typename T>
|
||||
static inline void log_dump_val_worker(const typename std::unique_ptr<T> &cursor ) { log("unique %p", cursor.get()); }
|
||||
|
|
|
|||
|
|
@ -105,21 +105,21 @@ struct TimingInfo
|
|||
auto dst = cell->getPort(ID::DST);
|
||||
for (const auto &c : src.chunks())
|
||||
if (!c.wire || !c.wire->port_input)
|
||||
log_error("Module '%s' contains specify cell '%s' where SRC '%s' is not a module input.\n", log_id(module), log_id(cell), log_signal(src));
|
||||
log_error("Module '%s' contains specify cell '%s' where SRC '%s' is not a module input.\n", module, cell, log_signal(src));
|
||||
for (const auto &c : dst.chunks())
|
||||
if (!c.wire || !c.wire->port_output)
|
||||
log_error("Module '%s' contains specify cell '%s' where DST '%s' is not a module output.\n", log_id(module), log_id(cell), log_signal(dst));
|
||||
log_error("Module '%s' contains specify cell '%s' where DST '%s' is not a module output.\n", module, cell, log_signal(dst));
|
||||
int rise_max = cell->getParam(ID::T_RISE_MAX).as_int();
|
||||
int fall_max = cell->getParam(ID::T_FALL_MAX).as_int();
|
||||
int max = std::max(rise_max,fall_max);
|
||||
if (max < 0)
|
||||
log_error("Module '%s' contains specify cell '%s' with T_{RISE,FALL}_MAX < 0.\n", log_id(module), log_id(cell));
|
||||
log_error("Module '%s' contains specify cell '%s' with T_{RISE,FALL}_MAX < 0.\n", module, cell);
|
||||
if (cell->getParam(ID::FULL).as_bool()) {
|
||||
for (const auto &s : src)
|
||||
for (const auto &d : dst) {
|
||||
auto r = t.comb.insert(BitBit(s,d));
|
||||
if (!r.second)
|
||||
log_error("Module '%s' contains multiple specify cells for SRC '%s' and DST '%s'.\n", log_id(module), log_signal(s), log_signal(d));
|
||||
log_error("Module '%s' contains multiple specify cells for SRC '%s' and DST '%s'.\n", module, log_signal(s), log_signal(d));
|
||||
r.first->second = max;
|
||||
}
|
||||
}
|
||||
|
|
@ -130,7 +130,7 @@ struct TimingInfo
|
|||
const auto &d = dst[i];
|
||||
auto r = t.comb.insert(BitBit(s,d));
|
||||
if (!r.second)
|
||||
log_error("Module '%s' contains multiple specify cells for SRC '%s' and DST '%s'.\n", log_id(module), log_signal(s), log_signal(d));
|
||||
log_error("Module '%s' contains multiple specify cells for SRC '%s' and DST '%s'.\n", module, log_signal(s), log_signal(d));
|
||||
r.first->second = max;
|
||||
}
|
||||
}
|
||||
|
|
@ -139,15 +139,15 @@ struct TimingInfo
|
|||
auto src = cell->getPort(ID::SRC).as_bit();
|
||||
auto dst = cell->getPort(ID::DST);
|
||||
if (!src.wire || !src.wire->port_input)
|
||||
log_error("Module '%s' contains specify cell '%s' where SRC '%s' is not a module input.\n", log_id(module), log_id(cell), log_signal(src));
|
||||
log_error("Module '%s' contains specify cell '%s' where SRC '%s' is not a module input.\n", module, cell, log_signal(src));
|
||||
for (const auto &c : dst.chunks())
|
||||
if (!c.wire->port_output)
|
||||
log_error("Module '%s' contains specify cell '%s' where DST '%s' is not a module output.\n", log_id(module), log_id(cell), log_signal(dst));
|
||||
log_error("Module '%s' contains specify cell '%s' where DST '%s' is not a module output.\n", module, cell, log_signal(dst));
|
||||
int rise_max = cell->getParam(ID::T_RISE_MAX).as_int();
|
||||
int fall_max = cell->getParam(ID::T_FALL_MAX).as_int();
|
||||
int max = std::max(rise_max,fall_max);
|
||||
if (max < 0) {
|
||||
log_warning("Module '%s' contains specify cell '%s' with T_{RISE,FALL}_MAX < 0 which is currently unsupported. Clamping to 0.\n", log_id(module), log_id(cell));
|
||||
log_warning("Module '%s' contains specify cell '%s' with T_{RISE,FALL}_MAX < 0 which is currently unsupported. Clamping to 0.\n", module, cell);
|
||||
max = 0;
|
||||
}
|
||||
for (const auto &d : dst) {
|
||||
|
|
@ -167,12 +167,12 @@ struct TimingInfo
|
|||
auto dst = cell->getPort(ID::DST).as_bit();
|
||||
for (const auto &c : src.chunks())
|
||||
if (!c.wire || !c.wire->port_input)
|
||||
log_error("Module '%s' contains specify cell '%s' where SRC '%s' is not a module input.\n", log_id(module), log_id(cell), log_signal(src));
|
||||
log_error("Module '%s' contains specify cell '%s' where SRC '%s' is not a module input.\n", module, cell, log_signal(src));
|
||||
if (!dst.wire || !dst.wire->port_input)
|
||||
log_error("Module '%s' contains specify cell '%s' where DST '%s' is not a module input.\n", log_id(module), log_id(cell), log_signal(dst));
|
||||
log_error("Module '%s' contains specify cell '%s' where DST '%s' is not a module input.\n", module, cell, log_signal(dst));
|
||||
int max = cell->getParam(ID::T_LIMIT_MAX).as_int();
|
||||
if (max < 0) {
|
||||
log_warning("Module '%s' contains specify cell '%s' with T_LIMIT_MAX < 0 which is currently unsupported. Clamping to 0.\n", log_id(module), log_id(cell));
|
||||
log_warning("Module '%s' contains specify cell '%s' with T_LIMIT_MAX < 0 which is currently unsupported. Clamping to 0.\n", module, cell);
|
||||
max = 0;
|
||||
}
|
||||
for (const auto &s : src) {
|
||||
|
|
|
|||
|
|
@ -954,7 +954,7 @@ static char *readline_obj_generator(const char *text, int state)
|
|||
{
|
||||
for (auto mod : design->modules())
|
||||
if (RTLIL::unescape_id(mod->name).compare(0, len, text) == 0)
|
||||
obj_names.push_back(strdup(log_id(mod->name)));
|
||||
obj_names.push_back(strdup(mod->name.unescape().c_str()));
|
||||
}
|
||||
else if (design->module(design->selected_active_module) != nullptr)
|
||||
{
|
||||
|
|
@ -962,19 +962,19 @@ static char *readline_obj_generator(const char *text, int state)
|
|||
|
||||
for (auto w : module->wires())
|
||||
if (RTLIL::unescape_id(w->name).compare(0, len, text) == 0)
|
||||
obj_names.push_back(strdup(log_id(w->name)));
|
||||
obj_names.push_back(strdup(w->name.unescape().c_str()));
|
||||
|
||||
for (auto &it : module->memories)
|
||||
if (RTLIL::unescape_id(it.first).compare(0, len, text) == 0)
|
||||
obj_names.push_back(strdup(log_id(it.first)));
|
||||
obj_names.push_back(strdup(it.first.unescape().c_str()));
|
||||
|
||||
for (auto cell : module->cells())
|
||||
if (RTLIL::unescape_id(cell->name).compare(0, len, text) == 0)
|
||||
obj_names.push_back(strdup(log_id(cell->name)));
|
||||
obj_names.push_back(strdup(cell->name.unescape().c_str()));
|
||||
|
||||
for (auto &it : module->processes)
|
||||
if (RTLIL::unescape_id(it.first).compare(0, len, text) == 0)
|
||||
obj_names.push_back(strdup(log_id(it.first)));
|
||||
obj_names.push_back(strdup(it.first.unescape().c_str()));
|
||||
}
|
||||
|
||||
std::sort(obj_names.begin(), obj_names.end());
|
||||
|
|
@ -1179,7 +1179,7 @@ struct ScriptCmdPass : public Pass {
|
|||
if (!mod->selected(w))
|
||||
continue;
|
||||
if (!c.second.is_fully_const())
|
||||
log_error("RHS of selected wire %s.%s is not constant.\n", log_id(mod), log_id(w));
|
||||
log_error("RHS of selected wire %s.%s is not constant.\n", mod, w);
|
||||
auto v = c.second.as_const();
|
||||
Pass::call_on_module(design, mod, v.decode_string());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ struct Slice {
|
|||
int wire_offset(RTLIL::Wire *wire, int index) const {
|
||||
int rtl_offset = indices == RtlilSlice ? index : wire->from_hdl_index(index);
|
||||
if (rtl_offset < 0 || rtl_offset >= wire->width) {
|
||||
log_error("Slice %s is out of bounds for wire %s in module %s", to_string(), log_id(wire), log_id(wire->module));
|
||||
log_error("Slice %s is out of bounds for wire %s in module %s", to_string(), wire, wire->module);
|
||||
}
|
||||
return rtl_offset;
|
||||
}
|
||||
|
|
@ -187,7 +187,7 @@ unsigned int abstract_state(Module* mod, EnableLogic enable, const std::vector<S
|
|||
for (int i = 0; i < GetSize(ff.sig_q); i++) {
|
||||
SigBit bit = ff.sig_q[i];
|
||||
if (selected_reps.count(sigmap(bit))) {
|
||||
log_debug("Abstracting state for %s.Q[%i] in module %s due to selections:\n", log_id(ff.cell), i, log_id(mod));
|
||||
log_debug("Abstracting state for %s.Q[%i] in module %s due to selections:\n", ff.cell, i, mod);
|
||||
explain_selections(selected_reps.at(sigmap(bit)));
|
||||
offsets_to_abstract.insert(i);
|
||||
}
|
||||
|
|
@ -271,7 +271,7 @@ unsigned int abstract_value(Module* mod, EnableLogic enable, const std::vector<S
|
|||
for (int i = 0; i < conn.second.size(); i++) {
|
||||
if (selected_reps.count(sigmap(conn.second[i]))) {
|
||||
log_debug("Abstracting value for %s.%s[%i] in module %s due to selections:\n",
|
||||
log_id(cell), log_id(conn.first), i, log_id(mod));
|
||||
cell, conn.first.unescape(), i, mod);
|
||||
explain_selections(selected_reps.at(sigmap(conn.second[i])));
|
||||
offsets_to_abstract.insert(i);
|
||||
}
|
||||
|
|
@ -289,7 +289,7 @@ unsigned int abstract_value(Module* mod, EnableLogic enable, const std::vector<S
|
|||
for (auto bit : SigSpec(wire))
|
||||
if (selected_reps.count(sigmap(bit))) {
|
||||
log_debug("Abstracting value for module input port bit %s in module %s due to selections:\n",
|
||||
log_signal(bit), log_id(mod));
|
||||
log_signal(bit), mod);
|
||||
explain_selections(selected_reps.at(sigmap(bit)));
|
||||
offsets_to_abstract.insert(bit.offset);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ int autoname_worker(Module *module, const dict<Wire*, unsigned int>& wire_score)
|
|||
for (auto bit : conn.second)
|
||||
if (bit.wire != nullptr && bit.wire->name[0] != '$') {
|
||||
if (suffix.empty())
|
||||
suffix = stringf("_%s_%s", log_id(cell->type), log_id(conn.first));
|
||||
suffix = stringf("_%s_%s", cell->type.unescape(), conn.first.unescape());
|
||||
name_proposal proposed_name(
|
||||
bit.wire->name.str() + suffix,
|
||||
cell->output(conn.first) ? 0 : wire_score.at(bit.wire)
|
||||
|
|
@ -66,7 +66,7 @@ int autoname_worker(Module *module, const dict<Wire*, unsigned int>& wire_score)
|
|||
for (auto bit : conn.second)
|
||||
if (bit.wire != nullptr && bit.wire->name[0] == '$' && !bit.wire->port_id) {
|
||||
if (suffix.empty())
|
||||
suffix = stringf("_%s", log_id(conn.first));
|
||||
suffix = stringf("_%s", conn.first.unescape());
|
||||
name_proposal proposed_name(
|
||||
cell->name.str() + suffix,
|
||||
cell->output(conn.first) ? 0 : wire_score.at(bit.wire)
|
||||
|
|
@ -90,7 +90,7 @@ int autoname_worker(Module *module, const dict<Wire*, unsigned int>& wire_score)
|
|||
if (best_name < it.second)
|
||||
continue;
|
||||
IdString n = module->uniquify(IdString(it.second.name));
|
||||
log_debug("Rename cell %s in %s to %s.\n", log_id(it.first), log_id(module), log_id(n));
|
||||
log_debug("Rename cell %s in %s to %s.\n", it.first, module, n.unescape());
|
||||
module->rename(it.first, n);
|
||||
count++;
|
||||
}
|
||||
|
|
@ -99,7 +99,7 @@ int autoname_worker(Module *module, const dict<Wire*, unsigned int>& wire_score)
|
|||
if (best_name < it.second)
|
||||
continue;
|
||||
IdString n = module->uniquify(IdString(it.second.name));
|
||||
log_debug("Rename wire %s in %s to %s.\n", log_id(it.first), log_id(module), log_id(n));
|
||||
log_debug("Rename wire %s in %s to %s.\n", it.first, module, n.unescape());
|
||||
module->rename(it.first, n);
|
||||
count++;
|
||||
}
|
||||
|
|
@ -151,7 +151,7 @@ struct AutonamePass : public Pass {
|
|||
count += n;
|
||||
}
|
||||
if (count > 0)
|
||||
log("Renamed %d objects in module %s (%d iterations).\n", count, log_id(module), iter);
|
||||
log("Renamed %d objects in module %s (%d iterations).\n", count, module, iter);
|
||||
}
|
||||
}
|
||||
} AutonamePass;
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ struct BoxDerivePass : Pass {
|
|||
if (!base_name.empty()) {
|
||||
base_override = d->module(base_name);
|
||||
if (!base_override)
|
||||
log_cmd_error("Base module %s not found.\n", log_id(base_name));
|
||||
log_cmd_error("Base module %s not found.\n", base_name.unescape());
|
||||
}
|
||||
|
||||
dict<std::pair<RTLIL::IdString, dict<RTLIL::IdString, RTLIL::Const>>, Module*> done;
|
||||
|
|
@ -109,7 +109,7 @@ struct BoxDerivePass : Pass {
|
|||
IdString new_name = RTLIL::escape_id(derived->get_string_attribute(naming_attr));
|
||||
if (!new_name.isPublic())
|
||||
log_error("Derived module %s cannot be renamed to private name %s.\n",
|
||||
log_id(derived), log_id(new_name));
|
||||
derived, new_name.unescape());
|
||||
derived->attributes.erase(naming_attr);
|
||||
d->rename(derived, new_name);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ struct BugpointPass : public Pass {
|
|||
|
||||
if (index++ == seed)
|
||||
{
|
||||
log_header(design, "Trying to remove module %s.\n", log_id(module));
|
||||
log_header(design, "Trying to remove module %s.\n", module);
|
||||
removed_module = module;
|
||||
break;
|
||||
}
|
||||
|
|
@ -242,7 +242,7 @@ struct BugpointPass : public Pass {
|
|||
|
||||
if (index++ == seed)
|
||||
{
|
||||
log_header(design, "Trying to remove module port %s.\n", log_id(wire));
|
||||
log_header(design, "Trying to remove module port %s.\n", wire);
|
||||
wire->port_input = wire->port_output = false;
|
||||
mod->fixup_ports();
|
||||
return design_copy;
|
||||
|
|
@ -265,7 +265,7 @@ struct BugpointPass : public Pass {
|
|||
|
||||
if (index++ == seed)
|
||||
{
|
||||
log_header(design, "Trying to remove cell %s.%s.\n", log_id(mod), log_id(cell));
|
||||
log_header(design, "Trying to remove cell %s.%s.\n", mod, cell);
|
||||
removed_cell = cell;
|
||||
break;
|
||||
}
|
||||
|
|
@ -296,7 +296,7 @@ struct BugpointPass : public Pass {
|
|||
|
||||
if (index++ == seed)
|
||||
{
|
||||
log_header(design, "Trying to remove cell port %s.%s.%s.\n", log_id(mod), log_id(cell), log_id(it.first));
|
||||
log_header(design, "Trying to remove cell port %s.%s.%s.\n", mod, cell, it.first.unescape());
|
||||
RTLIL::SigSpec port_x(State::Sx, port.size());
|
||||
cell->unsetPort(it.first);
|
||||
cell->setPort(it.first, port_x);
|
||||
|
|
@ -305,7 +305,7 @@ struct BugpointPass : public Pass {
|
|||
|
||||
if (!stage2 && (cell->input(it.first) || cell->output(it.first)) && index++ == seed)
|
||||
{
|
||||
log_header(design, "Trying to expose cell port %s.%s.%s as module port.\n", log_id(mod), log_id(cell), log_id(it.first));
|
||||
log_header(design, "Trying to expose cell port %s.%s.%s as module port.\n", mod, cell, it.first.unescape());
|
||||
RTLIL::Wire *wire = mod->addWire(NEW_ID, port.size());
|
||||
wire->set_bool_attribute(ID($bugpoint));
|
||||
wire->port_input = cell->input(it.first);
|
||||
|
|
@ -334,7 +334,7 @@ struct BugpointPass : public Pass {
|
|||
|
||||
if (index++ == seed)
|
||||
{
|
||||
log_header(design, "Trying to remove process %s.%s.\n", log_id(mod), log_id(process.first));
|
||||
log_header(design, "Trying to remove process %s.%s.\n", mod, process.first.unescape());
|
||||
removed_process = process.second;
|
||||
break;
|
||||
}
|
||||
|
|
@ -363,7 +363,7 @@ struct BugpointPass : public Pass {
|
|||
{
|
||||
if (index++ == seed)
|
||||
{
|
||||
log_header(design, "Trying to remove assign %s %s in %s.%s.\n", log_signal(it->first), log_signal(it->second), log_id(mod), log_id(pr.first));
|
||||
log_header(design, "Trying to remove assign %s %s in %s.%s.\n", log_signal(it->first), log_signal(it->second), mod, pr.first.unescape());
|
||||
cs->actions.erase(it);
|
||||
return design_copy;
|
||||
}
|
||||
|
|
@ -389,7 +389,7 @@ struct BugpointPass : public Pass {
|
|||
{
|
||||
if (index++ == seed)
|
||||
{
|
||||
log_header(design, "Trying to remove sync %s update %s %s in %s.%s.\n", log_signal(sy->signal), log_signal(it->first), log_signal(it->second), log_id(mod), log_id(pr.first));
|
||||
log_header(design, "Trying to remove sync %s update %s %s in %s.%s.\n", log_signal(sy->signal), log_signal(it->first), log_signal(it->second), mod, pr.first.unescape());
|
||||
sy->actions.erase(it);
|
||||
return design_copy;
|
||||
}
|
||||
|
|
@ -399,7 +399,7 @@ struct BugpointPass : public Pass {
|
|||
{
|
||||
if (index++ == seed)
|
||||
{
|
||||
log_header(design, "Trying to remove sync %s memwr %s %s %s %s in %s.%s.\n", log_signal(sy->signal), log_id(it->memid), log_signal(it->address), log_signal(it->data), log_signal(it->enable), log_id(mod), log_id(pr.first));
|
||||
log_header(design, "Trying to remove sync %s memwr %s %s %s %s in %s.%s.\n", log_signal(sy->signal), it->memid.unescape(), log_signal(it->address), log_signal(it->data), log_signal(it->enable), mod, pr.first.unescape());
|
||||
sy->mem_write_actions.erase(it);
|
||||
// Remove the bit for removed action from other actions' priority masks.
|
||||
for (auto it2 = sy->mem_write_actions.begin(); it2 != sy->mem_write_actions.end(); ++it2) {
|
||||
|
|
@ -437,7 +437,7 @@ struct BugpointPass : public Pass {
|
|||
|
||||
if (index++ == seed)
|
||||
{
|
||||
log_header(design, "Trying to remove wire %s.%s.\n", log_id(mod), log_id(wire));
|
||||
log_header(design, "Trying to remove wire %s.%s.\n", mod, wire);
|
||||
removed_wire = wire;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ struct CheckPass : public Pass {
|
|||
|
||||
for (auto module : design->selected_whole_modules_warn())
|
||||
{
|
||||
log("Checking module %s...\n", log_id(module));
|
||||
log("Checking module %s...\n", module);
|
||||
|
||||
SigMap sigmap(module);
|
||||
dict<SigBit, vector<string>> wire_drivers;
|
||||
|
|
@ -133,7 +133,7 @@ struct CheckPass : public Pass {
|
|||
for (auto bit : sigmap(action.first))
|
||||
wire_drivers[bit].push_back(
|
||||
stringf("action %s <= %s (case rule) in process %s",
|
||||
log_signal(action.first), log_signal(action.second), log_id(proc_it.first)));
|
||||
log_signal(action.first), log_signal(action.second), proc_it.first.unescape()));
|
||||
|
||||
for (auto bit : sigmap(action.second))
|
||||
if (bit.wire) used_wires.insert(bit);
|
||||
|
|
@ -154,7 +154,7 @@ struct CheckPass : public Pass {
|
|||
for (auto bit : sigmap(action.first))
|
||||
wire_drivers[bit].push_back(
|
||||
stringf("action %s <= %s (sync rule) in process %s",
|
||||
log_signal(action.first), log_signal(action.second), log_id(proc_it.first)));
|
||||
log_signal(action.first), log_signal(action.second), proc_it.first.unescape()));
|
||||
for (auto bit : sigmap(action.second))
|
||||
if (bit.wire) used_wires.insert(bit);
|
||||
}
|
||||
|
|
@ -259,7 +259,7 @@ struct CheckPass : public Pass {
|
|||
{
|
||||
if (mapped && cell->type.begins_with("$") && design->module(cell->type) == nullptr) {
|
||||
if (allow_tbuf && cell->type == ID($_TBUF_)) goto cell_allowed;
|
||||
log_warning("Cell %s.%s is an unmapped internal cell of type %s.\n", log_id(module), log_id(cell), log_id(cell->type));
|
||||
log_warning("Cell %s.%s is an unmapped internal cell of type %s.\n", module, cell, cell->type.unescape());
|
||||
counter++;
|
||||
cell_allowed:;
|
||||
}
|
||||
|
|
@ -275,10 +275,10 @@ struct CheckPass : public Pass {
|
|||
if (input && bit.wire)
|
||||
used_wires.insert(bit);
|
||||
if (output && !input && bit.wire)
|
||||
wire_drivers_count[bit]++;
|
||||
wire_drivers_count[bit]++;
|
||||
if (output && (bit.wire || !input))
|
||||
wire_drivers[bit].push_back(stringf("port %s[%d] of cell %s (%s)", log_id(conn.first), i,
|
||||
log_id(cell), log_id(cell->type)));
|
||||
wire_drivers[bit].push_back(stringf("port %s[%d] of cell %s (%s)", conn.first.unescape(), i,
|
||||
cell, cell->type.unescape()));
|
||||
if (output)
|
||||
driver_cells[bit] = cell;
|
||||
}
|
||||
|
|
@ -298,7 +298,7 @@ struct CheckPass : public Pass {
|
|||
SigSpec sig = sigmap(wire);
|
||||
for (int i = 0; i < GetSize(sig); i++)
|
||||
if (sig[i].wire || !wire->port_output)
|
||||
wire_drivers[sig[i]].push_back(stringf("module input %s[%d]", log_id(wire), i));
|
||||
wire_drivers[sig[i]].push_back(stringf("module input %s[%d]", wire, i));
|
||||
}
|
||||
if (wire->port_output)
|
||||
for (auto bit : sigmap(wire))
|
||||
|
|
@ -312,7 +312,7 @@ struct CheckPass : public Pass {
|
|||
if (initval[i] == State::S0 || initval[i] == State::S1)
|
||||
init_bits.insert(sigmap(SigBit(wire, i)));
|
||||
if (noinit) {
|
||||
log_warning("Wire %s.%s has an unprocessed 'init' attribute.\n", log_id(module), log_id(wire));
|
||||
log_warning("Wire %s.%s has an unprocessed 'init' attribute.\n", module, wire);
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
|
|
@ -329,7 +329,7 @@ struct CheckPass : public Pass {
|
|||
|
||||
for (auto it : wire_drivers)
|
||||
if (wire_drivers_count[it.first] > 1) {
|
||||
string message = stringf("multiple conflicting drivers for %s.%s:\n", log_id(module), log_signal(it.first));
|
||||
string message = stringf("multiple conflicting drivers for %s.%s:\n", module, log_signal(it.first));
|
||||
for (auto str : it.second)
|
||||
message += stringf(" %s\n", str);
|
||||
log_warning("%s", message);
|
||||
|
|
@ -338,13 +338,13 @@ struct CheckPass : public Pass {
|
|||
|
||||
for (auto bit : used_wires)
|
||||
if (!wire_drivers.count(bit)) {
|
||||
log_warning("Wire %s.%s is used but has no driver.\n", log_id(module), log_signal(bit));
|
||||
log_warning("Wire %s.%s is used but has no driver.\n", module, log_signal(bit));
|
||||
counter++;
|
||||
}
|
||||
|
||||
topo.sort();
|
||||
for (auto &loop : topo.loops) {
|
||||
string message = stringf("found logic loop in module %s:\n", log_id(module));
|
||||
string message = stringf("found logic loop in module %s:\n", module);
|
||||
|
||||
// `loop` only contains wire bits, or an occasional special helper node for cells for
|
||||
// which we have done the edges fallback. The cell and its ports that led to an edge are
|
||||
|
|
@ -378,8 +378,8 @@ struct CheckPass : public Pass {
|
|||
SigBit edge_to = sigmap(cell->getPort(to_port))[to_bit];
|
||||
|
||||
if (edge_from == from && edge_to == to && nhits++ < HITS_LIMIT)
|
||||
message += stringf(" %s[%d] --> %s[%d]\n", log_id(from_port), from_bit,
|
||||
log_id(to_port), to_bit);
|
||||
message += stringf(" %s[%d] --> %s[%d]\n", from_port.unescape(), from_bit,
|
||||
to_port.unescape(), to_bit);
|
||||
if (nhits == HITS_LIMIT)
|
||||
message += " ...\n";
|
||||
}
|
||||
|
|
@ -397,7 +397,7 @@ struct CheckPass : public Pass {
|
|||
driver_src = stringf(" source: %s", src_attr);
|
||||
}
|
||||
|
||||
message += stringf(" cell %s (%s)%s\n", log_id(driver), log_id(driver->type), driver_src);
|
||||
message += stringf(" cell %s (%s)%s\n", driver, driver->type.unescape(), driver_src);
|
||||
|
||||
if (!coarsened_cells.count(driver)) {
|
||||
MatchingEdgePrinter printer(message, sigmap, prev, bit);
|
||||
|
|
@ -437,7 +437,7 @@ struct CheckPass : public Pass {
|
|||
init_sig.sort_and_unify();
|
||||
|
||||
for (auto chunk : init_sig.chunks()) {
|
||||
log_warning("Wire %s.%s has 'init' attribute and is not driven by an FF cell.\n", log_id(module), log_signal(chunk));
|
||||
log_warning("Wire %s.%s has 'init' attribute and is not driven by an FF cell.\n", module, log_signal(chunk));
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -330,7 +330,7 @@ struct ChformalPass : public Pass {
|
|||
for (auto cell : constr_cells)
|
||||
{
|
||||
if (is_triggered_check_cell(cell))
|
||||
log_error("Cannot delay edge triggered $check cell %s, run async2sync or clk2fflogic first.\n", log_id(cell));
|
||||
log_error("Cannot delay edge triggered $check cell %s, run async2sync or clk2fflogic first.\n", cell);
|
||||
|
||||
for (int i = 0; i < mode_arg; i++)
|
||||
{
|
||||
|
|
@ -411,7 +411,7 @@ struct ChformalPass : public Pass {
|
|||
continue;
|
||||
|
||||
if (is_triggered_check_cell(cell))
|
||||
log_error("Cannot lower edge triggered $check cell %s, run async2sync or clk2fflogic first.\n", log_id(cell));
|
||||
log_error("Cannot lower edge triggered $check cell %s, run async2sync or clk2fflogic first.\n", cell);
|
||||
|
||||
|
||||
Cell *plain_cell = module->addCell(NEW_ID, formal_flavor(cell));
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ struct ConnectPass : public Pass {
|
|||
RTLIL::Module *module = nullptr;
|
||||
for (auto mod : design->selected_modules()) {
|
||||
if (module != nullptr)
|
||||
log_cmd_error("Multiple modules selected: %s, %s\n", log_id(module->name), log_id(mod->name));
|
||||
log_cmd_error("Multiple modules selected: %s, %s\n", module->name.unescape(), mod->name.unescape());
|
||||
module = mod;
|
||||
}
|
||||
if (module == nullptr)
|
||||
|
|
|
|||
|
|
@ -134,8 +134,8 @@ struct ConnwrappersWorker
|
|||
}
|
||||
|
||||
if (old_sig.size())
|
||||
log("Connected extended bits of %s.%s:%s: %s -> %s\n", log_id(module->name), log_id(cell->name),
|
||||
log_id(conn.first), log_signal(old_sig), log_signal(conn.second));
|
||||
log("Connected extended bits of %s.%s:%s: %s -> %s\n", module->name.unescape(), cell->name.unescape(),
|
||||
conn.first.unescape(), log_signal(old_sig), log_signal(conn.second));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -266,7 +266,7 @@ struct DesignPass : public Pass {
|
|||
|
||||
for (auto mod : copy_src_modules)
|
||||
{
|
||||
log("Importing %s as %s.\n", log_id(mod), log_id(prefix));
|
||||
log("Importing %s as %s.\n", mod, RTLIL::unescape_id(prefix));
|
||||
|
||||
RTLIL::Module *t = mod->clone();
|
||||
t->name = prefix;
|
||||
|
|
@ -295,7 +295,7 @@ struct DesignPass : public Pass {
|
|||
{
|
||||
std::string trg_name = prefix + "." + (cell->type.c_str() + (*cell->type.c_str() == '\\'));
|
||||
|
||||
log("Importing %s as %s.\n", log_id(fmod), log_id(trg_name));
|
||||
log("Importing %s as %s.\n", fmod, RTLIL::unescape_id(trg_name));
|
||||
|
||||
if (copy_to_design->module(trg_name) != nullptr)
|
||||
copy_to_design->remove(copy_to_design->module(trg_name));
|
||||
|
|
|
|||
|
|
@ -38,9 +38,9 @@ public:
|
|||
[[noreturn]]
|
||||
void formatted_error(std::string err)
|
||||
{
|
||||
log("Module A: %s\n", log_id(mod_a->name));
|
||||
log("Module A: %s\n", mod_a->name.unescape());
|
||||
log_module(mod_a, " ");
|
||||
log("Module B: %s\n", log_id(mod_b->name));
|
||||
log("Module B: %s\n", mod_b->name.unescape());
|
||||
log_module(mod_b, " ");
|
||||
log_cmd_error("Designs are different: %s\n", err);
|
||||
}
|
||||
|
|
@ -68,20 +68,20 @@ public:
|
|||
{
|
||||
for (const auto &it : a->attributes) {
|
||||
if (b->attributes.count(it.first) == 0)
|
||||
return "missing attribute " + std::string(log_id(it.first)) + " in second design";
|
||||
return "missing attribute " + std::string(it.first.unescape()) + " in second design";
|
||||
if (it.second != b->attributes.at(it.first))
|
||||
return "attribute " + std::string(log_id(it.first)) + " mismatch: " + log_const(it.second) + " != " + log_const(b->attributes.at(it.first));
|
||||
return "attribute " + std::string(it.first.unescape()) + " mismatch: " + log_const(it.second) + " != " + log_const(b->attributes.at(it.first));
|
||||
}
|
||||
for (const auto &it : b->attributes)
|
||||
if (a->attributes.count(it.first) == 0)
|
||||
return "missing attribute " + std::string(log_id(it.first)) + " in first design";
|
||||
return "missing attribute " + std::string(it.first.unescape()) + " in first design";
|
||||
return "";
|
||||
}
|
||||
|
||||
std::string compare_wires(const RTLIL::Wire *a, const RTLIL::Wire *b)
|
||||
{
|
||||
if (a->name != b->name)
|
||||
return "name mismatch: " + std::string(log_id(a->name)) + " != " + log_id(b->name);
|
||||
return "name mismatch: " + std::string(a->name.unescape()) + " != " + b->name.unescape();
|
||||
if (a->width != b->width)
|
||||
return "width mismatch: " + std::to_string(a->width) + " != " + std::to_string(b->width);
|
||||
if (a->start_offset != b->start_offset)
|
||||
|
|
@ -105,19 +105,19 @@ public:
|
|||
{
|
||||
for (const auto &it : mod_a->wires_) {
|
||||
if (mod_b->wires_.count(it.first) == 0)
|
||||
error("Module %s missing wire %s in second design.\n", log_id(mod_a->name), log_id(it.first));
|
||||
error("Module %s missing wire %s in second design.\n", mod_a->name.unescape(), it.first.unescape());
|
||||
if (std::string mismatch = compare_wires(it.second, mod_b->wires_.at(it.first)); !mismatch.empty())
|
||||
error("Module %s wire %s %s.\n", log_id(mod_a->name), log_id(it.first), mismatch);
|
||||
error("Module %s wire %s %s.\n", mod_a->name.unescape(), it.first.unescape(), mismatch);
|
||||
}
|
||||
for (const auto &it : mod_b->wires_)
|
||||
if (mod_a->wires_.count(it.first) == 0)
|
||||
error("Module %s missing wire %s in first design.\n", log_id(mod_b->name), log_id(it.first));
|
||||
error("Module %s missing wire %s in first design.\n", mod_b->name.unescape(), it.first.unescape());
|
||||
}
|
||||
|
||||
std::string compare_memories(const RTLIL::Memory *a, const RTLIL::Memory *b)
|
||||
{
|
||||
if (a->name != b->name)
|
||||
return "name mismatch: " + std::string(log_id(a->name)) + " != " + log_id(b->name);
|
||||
return "name mismatch: " + std::string(a->name.unescape()) + " != " + b->name.unescape();
|
||||
if (a->width != b->width)
|
||||
return "width mismatch: " + std::to_string(a->width) + " != " + std::to_string(b->width);
|
||||
if (a->start_offset != b->start_offset)
|
||||
|
|
@ -132,31 +132,31 @@ public:
|
|||
std::string compare_cells(const RTLIL::Cell *a, const RTLIL::Cell *b)
|
||||
{
|
||||
if (a->name != b->name)
|
||||
return "name mismatch: " + std::string(log_id(a->name)) + " != " + log_id(b->name);
|
||||
return "name mismatch: " + std::string(a->name.unescape()) + " != " + b->name.unescape();
|
||||
if (a->type != b->type)
|
||||
return "type mismatch: " + std::string(log_id(a->type)) + " != " + log_id(b->type);
|
||||
return "type mismatch: " + std::string(a->type.unescape()) + " != " + b->type.unescape();
|
||||
if (std::string mismatch = compare_attributes(a, b); !mismatch.empty())
|
||||
return mismatch;
|
||||
|
||||
for (const auto &it : a->parameters) {
|
||||
if (b->parameters.count(it.first) == 0)
|
||||
return "parameter mismatch: missing parameter " + std::string(log_id(it.first)) + " in second design";
|
||||
return "parameter mismatch: missing parameter " + std::string(it.first.unescape()) + " in second design";
|
||||
if (it.second != b->parameters.at(it.first))
|
||||
return "parameter mismatch: " + std::string(log_id(it.first)) + " mismatch: " + log_const(it.second) + " != " + log_const(b->parameters.at(it.first));
|
||||
return "parameter mismatch: " + std::string(it.first.unescape()) + " mismatch: " + log_const(it.second) + " != " + log_const(b->parameters.at(it.first));
|
||||
}
|
||||
for (const auto &it : b->parameters)
|
||||
if (a->parameters.count(it.first) == 0)
|
||||
return "parameter mismatch: missing parameter " + std::string(log_id(it.first)) + " in first design";
|
||||
return "parameter mismatch: missing parameter " + std::string(it.first.unescape()) + " in first design";
|
||||
|
||||
for (const auto &it : a->connections()) {
|
||||
if (b->connections().count(it.first) == 0)
|
||||
return "connection mismatch: missing connection " + std::string(log_id(it.first)) + " in second design";
|
||||
return "connection mismatch: missing connection " + std::string(it.first.unescape()) + " in second design";
|
||||
if (!compare_sigspec(it.second, b->connections().at(it.first)))
|
||||
return "connection " + std::string(log_id(it.first)) + " mismatch: " + log_signal(it.second) + " != " + log_signal(b->connections().at(it.first));
|
||||
return "connection " + std::string(it.first.unescape()) + " mismatch: " + log_signal(it.second) + " != " + log_signal(b->connections().at(it.first));
|
||||
}
|
||||
for (const auto &it : b->connections())
|
||||
if (a->connections().count(it.first) == 0)
|
||||
return "connection mismatch: missing connection " + std::string(log_id(it.first)) + " in first design";
|
||||
return "connection mismatch: missing connection " + std::string(it.first.unescape()) + " in first design";
|
||||
|
||||
return "";
|
||||
}
|
||||
|
|
@ -165,26 +165,26 @@ public:
|
|||
{
|
||||
for (const auto &it : mod_a->cells_) {
|
||||
if (mod_b->cells_.count(it.first) == 0)
|
||||
error("Module %s missing cell %s in second design.\n", log_id(mod_a->name), log_id(it.first));
|
||||
error("Module %s missing cell %s in second design.\n", mod_a->name.unescape(), it.first.unescape());
|
||||
if (std::string mismatch = compare_cells(it.second, mod_b->cells_.at(it.first)); !mismatch.empty())
|
||||
error("Module %s cell %s %s.\n", log_id(mod_a->name), log_id(it.first), mismatch);
|
||||
error("Module %s cell %s %s.\n", mod_a->name.unescape(), it.first.unescape(), mismatch);
|
||||
}
|
||||
for (const auto &it : mod_b->cells_)
|
||||
if (mod_a->cells_.count(it.first) == 0)
|
||||
error("Module %s missing cell %s in first design.\n", log_id(mod_b->name), log_id(it.first));
|
||||
error("Module %s missing cell %s in first design.\n", mod_b->name.unescape(), it.first.unescape());
|
||||
}
|
||||
|
||||
void check_memories()
|
||||
{
|
||||
for (const auto &it : mod_a->memories) {
|
||||
if (mod_b->memories.count(it.first) == 0)
|
||||
error("Module %s missing memory %s in second design.\n", log_id(mod_a->name), log_id(it.first));
|
||||
error("Module %s missing memory %s in second design.\n", mod_a->name.unescape(), it.first.unescape());
|
||||
if (std::string mismatch = compare_memories(it.second, mod_b->memories.at(it.first)); !mismatch.empty())
|
||||
error("Module %s memory %s %s.\n", log_id(mod_a->name), log_id(it.first), mismatch);
|
||||
error("Module %s memory %s %s.\n", mod_a->name.unescape(), it.first.unescape(), mismatch);
|
||||
}
|
||||
for (const auto &it : mod_b->memories)
|
||||
if (mod_a->memories.count(it.first) == 0)
|
||||
error("Module %s missing memory %s in first design.\n", log_id(mod_b->name), log_id(it.first));
|
||||
error("Module %s missing memory %s in first design.\n", mod_b->name.unescape(), it.first.unescape());
|
||||
}
|
||||
|
||||
std::string compare_case_rules(const RTLIL::CaseRule *a, const RTLIL::CaseRule *b)
|
||||
|
|
@ -251,7 +251,7 @@ public:
|
|||
const auto &ma = a->mem_write_actions[i];
|
||||
const auto &mb = b->mem_write_actions[i];
|
||||
if (ma.memid != mb.memid)
|
||||
return "mem_write_actions " + std::to_string(i) + " memid mismatch: " + log_id(ma.memid) + " != " + log_id(mb.memid);
|
||||
return "mem_write_actions " + std::to_string(i) + " memid mismatch: " + ma.memid.unescape() + " != " + mb.memid.unescape();
|
||||
if (!compare_sigspec(ma.address, mb.address))
|
||||
return "mem_write_actions " + std::to_string(i) + " address mismatch: " + log_signal(ma.address) + " != " + log_signal(mb.address);
|
||||
if (!compare_sigspec(ma.data, mb.data))
|
||||
|
|
@ -268,7 +268,7 @@ public:
|
|||
|
||||
std::string compare_processes(const RTLIL::Process *a, const RTLIL::Process *b)
|
||||
{
|
||||
if (a->name != b->name) return "name mismatch: " + std::string(log_id(a->name)) + " != " + log_id(b->name);
|
||||
if (a->name != b->name) return "name mismatch: " + std::string(a->name.unescape()) + " != " + b->name.unescape();
|
||||
if (std::string mismatch = compare_attributes(a, b); !mismatch.empty())
|
||||
return mismatch;
|
||||
if (std::string mismatch = compare_case_rules(&a->root_case, &b->root_case); !mismatch.empty())
|
||||
|
|
@ -285,13 +285,13 @@ public:
|
|||
{
|
||||
for (auto &it : mod_a->processes) {
|
||||
if (mod_b->processes.count(it.first) == 0)
|
||||
error("Module %s missing process %s in second design.\n", log_id(mod_a->name), log_id(it.first));
|
||||
error("Module %s missing process %s in second design.\n", mod_a->name.unescape(), it.first.unescape());
|
||||
if (std::string mismatch = compare_processes(it.second, mod_b->processes.at(it.first)); !mismatch.empty())
|
||||
error("Module %s process %s %s.\n", log_id(mod_a->name), log_id(it.first), mismatch.c_str());
|
||||
error("Module %s process %s %s.\n", mod_a->name.unescape(), it.first.unescape(), mismatch.c_str());
|
||||
}
|
||||
for (auto &it : mod_b->processes)
|
||||
if (mod_a->processes.count(it.first) == 0)
|
||||
error("Module %s missing process %s in first design.\n", log_id(mod_b->name), log_id(it.first));
|
||||
error("Module %s missing process %s in first design.\n", mod_b->name.unescape(), it.first.unescape());
|
||||
}
|
||||
|
||||
void check_connections()
|
||||
|
|
@ -299,13 +299,13 @@ public:
|
|||
const auto &conns_a = mod_a->connections();
|
||||
const auto &conns_b = mod_b->connections();
|
||||
if (conns_a.size() != conns_b.size()) {
|
||||
error("Module %s connection count differs: %zu != %zu\n", log_id(mod_a->name), conns_a.size(), conns_b.size());
|
||||
error("Module %s connection count differs: %zu != %zu\n", mod_a->name.unescape(), conns_a.size(), conns_b.size());
|
||||
} else {
|
||||
for (size_t i = 0; i < conns_a.size(); i++) {
|
||||
if (!compare_sigspec(conns_a[i].first, conns_b[i].first))
|
||||
error("Module %s connection %zu LHS %s != %s.\n", log_id(mod_a->name), i, log_signal(conns_a[i].first), log_signal(conns_b[i].first));
|
||||
error("Module %s connection %zu LHS %s != %s.\n", mod_a->name.unescape(), i, log_signal(conns_a[i].first), log_signal(conns_b[i].first));
|
||||
if (!compare_sigspec(conns_a[i].second, conns_b[i].second))
|
||||
error("Module %s connection %zu RHS %s != %s.\n", log_id(mod_a->name), i, log_signal(conns_a[i].second), log_signal(conns_b[i].second));
|
||||
error("Module %s connection %zu RHS %s != %s.\n", mod_a->name.unescape(), i, log_signal(conns_a[i].second), log_signal(conns_b[i].second));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -313,9 +313,9 @@ public:
|
|||
void check()
|
||||
{
|
||||
if (mod_a->name != mod_b->name)
|
||||
error("Modules have different names: %s != %s\n", log_id(mod_a->name), log_id(mod_b->name));
|
||||
error("Modules have different names: %s != %s\n", mod_a->name.unescape(), mod_b->name.unescape());
|
||||
if (std::string mismatch = compare_attributes(mod_a, mod_b); !mismatch.empty())
|
||||
error("Module %s %s.\n", log_id(mod_a->name), mismatch);
|
||||
error("Module %s %s.\n", mod_a->name.unescape(), mismatch);
|
||||
check_wires();
|
||||
check_cells();
|
||||
check_memories();
|
||||
|
|
@ -349,7 +349,7 @@ struct DesignEqualPass : public Pass {
|
|||
for (auto &it : design->modules_) {
|
||||
RTLIL::Module *mod = it.second;
|
||||
if (!other->has(mod->name))
|
||||
log_error("Second design missing module %s.\n", log_id(mod->name));
|
||||
log_error("Second design missing module %s.\n", mod->name.unescape());
|
||||
|
||||
ModuleComparator cmp(mod, other->module(mod->name));
|
||||
cmp.check();
|
||||
|
|
@ -357,7 +357,7 @@ struct DesignEqualPass : public Pass {
|
|||
for (auto &it : other->modules_) {
|
||||
RTLIL::Module *mod = it.second;
|
||||
if (!design->has(mod->name))
|
||||
log_error("First design missing module %s.\n", log_id(mod->name));
|
||||
log_error("First design missing module %s.\n", mod->name.unescape());
|
||||
}
|
||||
|
||||
log("Designs are identical.\n");
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ struct DftTagWorker {
|
|||
}
|
||||
|
||||
for (auto cell : overwrite_cells) {
|
||||
log_debug("Applying $overwrite_tag %s for signal %s\n", log_id(cell->name), log_signal(cell->getPort(ID::A)));
|
||||
log_debug("Applying $overwrite_tag %s for signal %s\n", cell->name.unescape(), log_signal(cell->getPort(ID::A)));
|
||||
SigSpec orig_signal = cell->getPort(ID::A);
|
||||
SigSpec interposed_signal = divert_users(orig_signal);
|
||||
auto *set_tag_cell = module->addSetTag(NEW_ID, cell->getParam(ID::TAG).decode_string(), orig_signal, cell->getPort(ID::SET), cell->getPort(ID::CLR), interposed_signal);
|
||||
|
|
@ -470,9 +470,9 @@ struct DftTagWorker {
|
|||
if (!warned_cells.insert(cell).second)
|
||||
return;
|
||||
if (cell->type.isPublic())
|
||||
log_warning("Unhandled cell %s (%s) during tag propagation\n", log_id(cell), log_id(cell->type));
|
||||
log_warning("Unhandled cell %s (%s) during tag propagation\n", cell, cell->type.unescape());
|
||||
else
|
||||
log_debug("Unhandled cell %s (%s) during tag propagation\n", log_id(cell), log_id(cell->type));
|
||||
log_debug("Unhandled cell %s (%s) during tag propagation\n", cell, cell->type.unescape());
|
||||
}
|
||||
|
||||
void process_cell(IdString tag, Cell *cell)
|
||||
|
|
@ -691,7 +691,7 @@ struct DftTagWorker {
|
|||
// TODO handle some more variants
|
||||
if ((ff.has_clk || ff.has_gclk) && !ff.has_ce && !ff.has_aload && !ff.has_srst && !ff.has_arst && !ff.has_sr) {
|
||||
if (ff.has_clk && !tags(ff.sig_clk).empty())
|
||||
log_warning("Tags on CLK input ignored for %s (%s)\n", log_id(cell), log_id(cell->type));
|
||||
log_warning("Tags on CLK input ignored for %s (%s)\n", cell, cell->type.unescape());
|
||||
|
||||
int width = ff.width;
|
||||
|
||||
|
|
@ -709,7 +709,7 @@ struct DftTagWorker {
|
|||
emit_tag_signal(tag, sig_q, ff.sig_q);
|
||||
return;
|
||||
} else {
|
||||
log_warning("Unhandled FF-cell %s (%s), consider running clk2fflogic, async2sync and/or dffunmap\n", log_id(cell), log_id(cell->type));
|
||||
log_warning("Unhandled FF-cell %s (%s), consider running clk2fflogic, async2sync and/or dffunmap\n", cell, cell->type.unescape());
|
||||
|
||||
// For unhandled FFs, the default propagation would cause combinational loops
|
||||
emit_tag_signal(tag, ff.sig_q, Const(0, ff.width));
|
||||
|
|
@ -739,7 +739,7 @@ struct DftTagWorker {
|
|||
// which is an over-approximation (unless the cell is a module that
|
||||
// generates tags itself in which case it could be arbitrary).
|
||||
if (warned_cells.insert(cell).second)
|
||||
log_warning("Unhandled cell %s (%s) while emitting tag signals\n", log_id(cell), log_id(cell->type));
|
||||
log_warning("Unhandled cell %s (%s) while emitting tag signals\n", cell, cell->type.unescape());
|
||||
}
|
||||
|
||||
void emit_tags()
|
||||
|
|
|
|||
|
|
@ -92,12 +92,12 @@ struct EdgetypePass : public Pass {
|
|||
auto sink_bit_index = std::get<2>(sink);
|
||||
|
||||
string source_str = multibit_ports.count(std::pair<IdString, IdString>(source_cell_type, source_port_name)) ?
|
||||
stringf("%s.%s[%d]", log_id(source_cell_type), log_id(source_port_name), source_bit_index) :
|
||||
stringf("%s.%s", log_id(source_cell_type), log_id(source_port_name));
|
||||
stringf("%s.%s[%d]", source_cell_type.unescape(), source_port_name.unescape(), source_bit_index) :
|
||||
stringf("%s.%s", source_cell_type.unescape(), source_port_name.unescape());
|
||||
|
||||
string sink_str = multibit_ports.count(std::pair<IdString, IdString>(sink_cell_type, sink_port_name)) ?
|
||||
stringf("%s.%s[%d]", log_id(sink_cell_type), log_id(sink_port_name), sink_bit_index) :
|
||||
stringf("%s.%s", log_id(sink_cell_type), log_id(sink_port_name));
|
||||
stringf("%s.%s[%d]", sink_cell_type.unescape(), sink_port_name.unescape(), sink_bit_index) :
|
||||
stringf("%s.%s", sink_cell_type.unescape(), sink_port_name.unescape());
|
||||
|
||||
edge_cache.insert(source_str + " " + sink_str);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -226,13 +226,13 @@ struct ExampleDtPass : public Pass
|
|||
{
|
||||
auto ref = compute_graph[i];
|
||||
log("n%d ", i);
|
||||
log("%s", log_id(ref.function().name));
|
||||
log("%s", ref.function().name.unescape());
|
||||
for (auto const ¶m : ref.function().parameters)
|
||||
{
|
||||
if (param.second.empty())
|
||||
log("[%s]", log_id(param.first));
|
||||
log("[%s]", param.first.unescape());
|
||||
else
|
||||
log("[%s=%s]", log_id(param.first), log_const(param.second));
|
||||
log("[%s=%s]", param.first.unescape(), log_const(param.second));
|
||||
}
|
||||
log("(");
|
||||
|
||||
|
|
@ -244,13 +244,13 @@ struct ExampleDtPass : public Pass
|
|||
}
|
||||
log(")\n");
|
||||
if (ref.has_sparse_attr())
|
||||
log("// wire %s\n", log_id(ref.sparse_attr()));
|
||||
log("// wire %s\n", ref.sparse_attr().unescape());
|
||||
log("// was #%d %s\n", ref.attr(), log_signal(queue[ref.attr()]));
|
||||
}
|
||||
|
||||
for (auto const &key : compute_graph.keys())
|
||||
{
|
||||
log("return %d as %s \n", key.second, log_id(key.first));
|
||||
log("return %d as %s \n", key.second, key.first.unescape());
|
||||
}
|
||||
}
|
||||
log("Plugin test passed!\n");
|
||||
|
|
|
|||
|
|
@ -86,13 +86,13 @@ struct FutureWorker {
|
|||
log_error("Found multiple drivers for future_ff target signal %s\n", log_signal(bit));
|
||||
auto driver = *found_driver->second.begin();
|
||||
if (!driver.cell->is_builtin_ff() && driver.cell->type != ID($anyinit))
|
||||
log_error("Driver for future_ff target signal %s has non-FF cell type %s\n", log_signal(bit), log_id(driver.cell->type));
|
||||
log_error("Driver for future_ff target signal %s has non-FF cell type %s\n", log_signal(bit), driver.cell->type.unescape());
|
||||
|
||||
FfData ff(&initvals, driver.cell);
|
||||
|
||||
if (!ff.has_clk && !ff.has_gclk)
|
||||
log_error("Driver for future_ff target signal %s has cell type %s, which is not clocked\n", log_signal(bit),
|
||||
log_id(driver.cell->type));
|
||||
driver.cell->type.unescape());
|
||||
|
||||
ff.unmap_ce_srst();
|
||||
|
||||
|
|
|
|||
|
|
@ -93,9 +93,9 @@ struct CoveragePass : public Pass {
|
|||
|
||||
for (auto module : design->modules())
|
||||
{
|
||||
log_debug("Module %s:\n", log_id(module));
|
||||
log_debug("Module %s:\n", module);
|
||||
for (auto wire: module->wires()) {
|
||||
log_debug("%s\t%s\t%s\n", module->selected(wire) ? "*" : " ", wire->get_src_attribute(), log_id(wire->name));
|
||||
log_debug("%s\t%s\t%s\n", module->selected(wire) ? "*" : " ", wire->get_src_attribute(), wire->name.unescape());
|
||||
for (auto src: wire->get_strpool_attribute(ID::src)) {
|
||||
auto filename = extract_src_filename(src);
|
||||
if (filename.empty()) continue;
|
||||
|
|
@ -109,7 +109,7 @@ struct CoveragePass : public Pass {
|
|||
}
|
||||
}
|
||||
for (auto cell: module->cells()) {
|
||||
log_debug("%s\t%s\t%s\n", module->selected(cell) ? "*" : " ", cell->get_src_attribute(), log_id(cell->name));
|
||||
log_debug("%s\t%s\t%s\n", module->selected(cell) ? "*" : " ", cell->get_src_attribute(), cell->name.unescape());
|
||||
for (auto src: cell->get_strpool_attribute(ID::src)) {
|
||||
auto filename = extract_src_filename(src);
|
||||
if (filename.empty()) continue;
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ struct LtpWorker
|
|||
return;
|
||||
|
||||
if (busy.count(bit) > 0) {
|
||||
log_warning("Detected loop at %s in %s\n", log_signal(bit), log_id(module));
|
||||
log_warning("Detected loop at %s in %s\n", log_signal(bit), module);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -117,7 +117,7 @@ struct LtpWorker
|
|||
auto &bitinfo = bits.at(bit);
|
||||
if (get<2>(bitinfo)) {
|
||||
printpath(get<1>(bitinfo));
|
||||
log("%5d: %s (via %s)\n", get<0>(bitinfo), log_signal(bit), log_id(get<2>(bitinfo)));
|
||||
log("%5d: %s (via %s)\n", get<0>(bitinfo), log_signal(bit), get<2>(bitinfo));
|
||||
} else {
|
||||
log("%5d: %s\n", get<0>(bitinfo), log_signal(bit));
|
||||
}
|
||||
|
|
@ -130,13 +130,13 @@ struct LtpWorker
|
|||
runner(it.first, 0, State::Sx, nullptr);
|
||||
|
||||
log("\n");
|
||||
log("Longest topological path in %s (length=%d):\n", log_id(module), maxlvl);
|
||||
log("Longest topological path in %s (length=%d):\n", module, maxlvl);
|
||||
|
||||
if (maxlvl >= 0)
|
||||
printpath(maxbit);
|
||||
|
||||
if (bit2ff.count(maxbit))
|
||||
log("%5s: %s (via %s)\n", "ff", log_signal(get<0>(bit2ff.at(maxbit))), log_id(get<1>(bit2ff.at(maxbit))));
|
||||
log("%5s: %s (via %s)\n", "ff", log_signal(get<0>(bit2ff.at(maxbit))), get<1>(bit2ff.at(maxbit)));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ struct PortarcsPass : Pass {
|
|||
log_assert(w->port_input || w->port_output);
|
||||
if (w->port_input && w->port_output) {
|
||||
log_warning("Module '%s' with ambiguous direction on port %s ignored.\n",
|
||||
log_id(m), log_id(w));
|
||||
m, w);
|
||||
ambiguous_ports = true;
|
||||
break;
|
||||
}
|
||||
|
|
@ -128,7 +128,7 @@ struct PortarcsPass : Pass {
|
|||
if (!cell->type.in(ID($buf), ID($input_port), ID($connect), ID($tribuf))) {
|
||||
auto tdata = tinfo.find(cell->type);
|
||||
if (tdata == tinfo.end())
|
||||
log_cmd_error("Missing timing data for module '%s'.\n", log_id(cell->type));
|
||||
log_cmd_error("Missing timing data for module '%s'.\n", cell->type.unescape());
|
||||
for (auto [edge, delay] : tdata->second.comb) {
|
||||
auto from = edge.first.get_connection(cell);
|
||||
auto to = edge.second.get_connection(cell);
|
||||
|
|
@ -141,7 +141,7 @@ struct PortarcsPass : Pass {
|
|||
}
|
||||
|
||||
if (!sort.sort())
|
||||
log_error("Failed to sort instances in module %s.\n", log_id(m));
|
||||
log_error("Failed to sort instances in module %s.\n", m);
|
||||
|
||||
ordering = sort.sorted;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,9 +71,9 @@ struct PortlistPass : public Pass {
|
|||
ports.push_back(stringf("%s [%d:%d] %s", w->port_input ? w->port_output ? "inout" : "input" : "output",
|
||||
w->upto ? w->start_offset : w->start_offset + w->width - 1,
|
||||
w->upto ? w->start_offset + w->width - 1 : w->start_offset,
|
||||
log_id(w)));
|
||||
w));
|
||||
}
|
||||
log("module %s%s\n", log_id(module), m_mode ? " (" : "");
|
||||
log("module %s%s\n", module, m_mode ? " (" : "");
|
||||
for (int i = 0; i < GetSize(ports); i++)
|
||||
log("%s%s\n", ports[i], m_mode && i+1 < GetSize(ports) ? "," : "");
|
||||
if (m_mode)
|
||||
|
|
|
|||
|
|
@ -47,9 +47,9 @@ struct PrintAttrsPass : public Pass {
|
|||
|
||||
static void log_const(RTLIL::IdString s, const RTLIL::Const &x, const unsigned int indent) {
|
||||
if (x.flags & RTLIL::CONST_FLAG_STRING)
|
||||
log("%s(* %s=\"%s\" *)\n", get_indent_str(indent), log_id(s), x.decode_string());
|
||||
log("%s(* %s=\"%s\" *)\n", get_indent_str(indent), s.unescape(), x.decode_string());
|
||||
else if (x.flags == RTLIL::CONST_FLAG_NONE || x.flags == RTLIL::CONST_FLAG_SIGNED)
|
||||
log("%s(* %s=%s *)\n", get_indent_str(indent), log_id(s), x.as_string());
|
||||
log("%s(* %s=%s *)\n", get_indent_str(indent), s.unescape(), x.as_string());
|
||||
else
|
||||
log_assert(x.flags & RTLIL::CONST_FLAG_STRING || x.flags == RTLIL::CONST_FLAG_NONE); //intended to fail
|
||||
}
|
||||
|
|
@ -63,14 +63,14 @@ struct PrintAttrsPass : public Pass {
|
|||
for (auto mod : design->selected_modules())
|
||||
{
|
||||
if (design->selected_whole_module(mod)) {
|
||||
log("%s%s\n", get_indent_str(indent), log_id(mod->name));
|
||||
log("%s%s\n", get_indent_str(indent), mod->name.unescape());
|
||||
indent += 2;
|
||||
for (auto &it : mod->attributes)
|
||||
log_const(it.first, it.second, indent);
|
||||
}
|
||||
|
||||
for (auto cell : mod->selected_cells()) {
|
||||
log("%s%s\n", get_indent_str(indent), log_id(cell->name));
|
||||
log("%s%s\n", get_indent_str(indent), cell->name.unescape());
|
||||
indent += 2;
|
||||
for (auto &it : cell->attributes)
|
||||
log_const(it.first, it.second, indent);
|
||||
|
|
@ -78,7 +78,7 @@ struct PrintAttrsPass : public Pass {
|
|||
}
|
||||
|
||||
for (auto wire : mod->selected_wires()) {
|
||||
log("%s%s\n", get_indent_str(indent), log_id(wire->name));
|
||||
log("%s%s\n", get_indent_str(indent), wire->name.unescape());
|
||||
indent += 2;
|
||||
for (auto &it : wire->attributes)
|
||||
log_const(it.first, it.second, indent);
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@ static void rename_in_module(RTLIL::Module *module, std::string from_name, std::
|
|||
to_name = RTLIL::escape_id(to_name);
|
||||
|
||||
if (module->count_id(to_name))
|
||||
log_cmd_error("There is already an object `%s' in module `%s'.\n", to_name, module->name);
|
||||
log_cmd_error("There is already an object `%s' in module `%s'.\n", RTLIL::unescape_id(to_name), module->name);
|
||||
|
||||
RTLIL::Wire *wire_to_rename = module->wire(from_name);
|
||||
RTLIL::Cell *cell_to_rename = module->cell(from_name);
|
||||
|
||||
if (wire_to_rename != nullptr) {
|
||||
log("Renaming wire %s to %s in module %s.\n", log_id(wire_to_rename), log_id(to_name), log_id(module));
|
||||
log("Renaming wire %s to %s in module %s.\n", wire_to_rename, RTLIL::unescape_id(to_name), module);
|
||||
module->rename(wire_to_rename, to_name);
|
||||
if (wire_to_rename->port_id || flag_output) {
|
||||
if (flag_output)
|
||||
|
|
@ -50,12 +50,12 @@ static void rename_in_module(RTLIL::Module *module, std::string from_name, std::
|
|||
if (cell_to_rename != nullptr) {
|
||||
if (flag_output)
|
||||
log_cmd_error("Called with -output but the specified object is a cell.\n");
|
||||
log("Renaming cell %s to %s in module %s.\n", log_id(cell_to_rename), log_id(to_name), log_id(module));
|
||||
log("Renaming cell %s to %s in module %s.\n", cell_to_rename, RTLIL::unescape_id(to_name), module);
|
||||
module->rename(cell_to_rename, to_name);
|
||||
return;
|
||||
}
|
||||
|
||||
log_cmd_error("Object `%s' not found!\n", from_name);
|
||||
log_cmd_error("Object `%s' not found!\n", RTLIL::unescape_id(from_name));
|
||||
}
|
||||
|
||||
static std::string derive_name_from_src(const std::string &src, int counter)
|
||||
|
|
@ -518,7 +518,7 @@ struct RenamePass : public Pass {
|
|||
if (module == nullptr)
|
||||
log_cmd_error("No top module found!\n");
|
||||
|
||||
log("Renaming module %s to %s.\n", log_id(module), log_id(new_name));
|
||||
log("Renaming module %s to %s.\n", module, new_name.unescape());
|
||||
design->rename(module, new_name);
|
||||
}
|
||||
else
|
||||
|
|
@ -532,7 +532,7 @@ struct RenamePass : public Pass {
|
|||
for (auto module : design->selected_modules())
|
||||
{
|
||||
if (module->memories.size() != 0 || module->processes.size() != 0) {
|
||||
log_warning("Skipping module %s with unprocessed memories or processes\n", log_id(module));
|
||||
log_warning("Skipping module %s with unprocessed memories or processes\n", module);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ struct SdcObjects {
|
|||
RTLIL::Wire *wire = top->wire(port);
|
||||
if (!wire) {
|
||||
// This should not be possible. See https://github.com/YosysHQ/yosys/pull/5594#issue-3791198573
|
||||
log_error("Port %s doesn't exist", log_id(port));
|
||||
log_error("Port %s doesn't exist", port.unescape());
|
||||
}
|
||||
design_ports.push_back(std::make_pair(port.str().substr(1), wire));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1817,7 +1817,7 @@ struct LsPass : public Pass {
|
|||
log("\n%d %s:\n", int(matches.size()), "modules");
|
||||
std::sort(matches.begin(), matches.end(), RTLIL::sort_by_id_str());
|
||||
for (auto id : matches)
|
||||
log(" %s%s\n", log_id(id), design->selected_whole_module(design->module(id)) ? "" : "*");
|
||||
log(" %s%s\n", id.unescape(), design->selected_whole_module(design->module(id)) ? "" : "*");
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -246,9 +246,9 @@ struct ChparamPass : public Pass {
|
|||
if (!new_parameters.empty())
|
||||
log_cmd_error("The options -set and -list cannot be used together.\n");
|
||||
for (auto module : design->selected_modules()) {
|
||||
log("%s:\n", log_id(module));
|
||||
log("%s:\n", module);
|
||||
for (auto param : module->avail_parameters)
|
||||
log(" %s\n", log_id(param));
|
||||
log(" %s\n", param.unescape());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -645,16 +645,16 @@ struct ShowWorker
|
|||
module = mod;
|
||||
if (design->selected_whole_module(module->name)) {
|
||||
if (module->get_blackbox_attribute()) {
|
||||
// log("Skipping blackbox module %s.\n", log_id(module->name));
|
||||
//log("Skipping blackbox module %s.\n", module->name.unescape());
|
||||
continue;
|
||||
} else
|
||||
if (module->cells().size() == 0 && module->connections().empty() && module->processes.empty()) {
|
||||
log("Skipping empty module %s.\n", log_id(module->name));
|
||||
log("Skipping empty module %s.\n", module->name.unescape());
|
||||
continue;
|
||||
} else
|
||||
log("Dumping module %s to page %d.\n", log_id(module->name), ++page_counter);
|
||||
log("Dumping module %s to page %d.\n", module->name.unescape(), ++page_counter);
|
||||
} else
|
||||
log("Dumping selected parts of module %s to page %d.\n", log_id(module->name), ++page_counter);
|
||||
log("Dumping selected parts of module %s to page %d.\n", module->name.unescape(), ++page_counter);
|
||||
handle_module();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ struct SpliceWorker
|
|||
|
||||
void run()
|
||||
{
|
||||
log("Splicing signals in module %s:\n", log_id(module->name));
|
||||
log("Splicing signals in module %s:\n", module->name.unescape());
|
||||
|
||||
driven_bits.push_back(RTLIL::State::Sm);
|
||||
driven_bits.push_back(RTLIL::State::Sm);
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ struct SplitcellsWorker
|
|||
if (GetSize(slices) <= 1) return 0;
|
||||
slices.push_back(GetSize(outsig));
|
||||
|
||||
log("Splitting %s cell %s/%s into %d slices:\n", log_id(cell->type), log_id(module), log_id(cell), GetSize(slices)-1);
|
||||
log("Splitting %s cell %s/%s into %d slices:\n", cell->type.unescape(), module, cell, GetSize(slices)-1);
|
||||
for (int i = 1; i < GetSize(slices); i++)
|
||||
{
|
||||
int slice_msb = slices[i]-1;
|
||||
|
|
@ -126,7 +126,7 @@ struct SplitcellsWorker
|
|||
if (slice->hasParam(ID::WIDTH))
|
||||
slice->setParam(ID::WIDTH, GetSize(slice->getPort(ID::Y)));
|
||||
|
||||
log(" slice %d: %s => %s\n", i, log_id(slice_name), log_signal(slice->getPort(ID::Y)));
|
||||
log(" slice %d: %s => %s\n", i, slice_name, log_signal(slice->getPort(ID::Y)));
|
||||
}
|
||||
|
||||
module->remove(cell);
|
||||
|
|
@ -155,7 +155,7 @@ struct SplitcellsWorker
|
|||
if (GetSize(slices) <= 1) return 0;
|
||||
slices.push_back(GetSize(outsig));
|
||||
|
||||
log("Splitting %s cell %s/%s into %d slices:\n", log_id(cell->type), log_id(module), log_id(cell), GetSize(slices)-1);
|
||||
log("Splitting %s cell %s/%s into %d slices:\n", cell->type.unescape(), module, cell, GetSize(slices)-1);
|
||||
for (int i = 1; i < GetSize(slices); i++)
|
||||
{
|
||||
int slice_msb = slices[i]-1;
|
||||
|
|
@ -185,7 +185,7 @@ struct SplitcellsWorker
|
|||
|
||||
slice->setParam(ID::WIDTH, GetSize(slice->getPort(ID::Q)));
|
||||
|
||||
log(" slice %d: %s => %s\n", i, log_id(slice_name), log_signal(slice->getPort(ID::Q)));
|
||||
log(" slice %d: %s => %s\n", i, slice_name.unescape(), log_signal(slice->getPort(ID::Q)));
|
||||
}
|
||||
|
||||
module->remove(cell);
|
||||
|
|
@ -258,7 +258,7 @@ struct SplitcellsPass : public Pass {
|
|||
|
||||
if (count_split_pre)
|
||||
log("Split %d cells in module %s into %d cell slices.\n",
|
||||
count_split_pre, log_id(module), count_split_post);
|
||||
count_split_pre, module, count_split_post);
|
||||
}
|
||||
}
|
||||
} SplitnetsPass;
|
||||
|
|
|
|||
|
|
@ -66,12 +66,12 @@ struct StaWorker
|
|||
Module *inst_module = design->module(cell->type);
|
||||
if (!inst_module) {
|
||||
if (unrecognised_cells.insert(cell->type).second)
|
||||
log_warning("Cell type '%s' not recognised! Ignoring.\n", log_id(cell->type));
|
||||
log_warning("Cell type '%s' not recognised! Ignoring.\n", cell->type.unescape());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!inst_module->get_blackbox_attribute()) {
|
||||
log_warning("Cell type '%s' is not a black- nor white-box! Ignoring.\n", log_id(cell->type));
|
||||
log_warning("Cell type '%s' is not a black- nor white-box! Ignoring.\n", cell->type.unescape());
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -82,7 +82,7 @@ struct StaWorker
|
|||
if (!timing.count(derived_type)) {
|
||||
auto &t = timing.setup_module(inst_module);
|
||||
if (t.has_inputs && t.comb.empty() && t.arrival.empty() && t.required.empty())
|
||||
log_warning("Module '%s' has no timing arcs!\n", log_id(cell->type));
|
||||
log_warning("Module '%s' has no timing arcs!\n", cell->type.unescape());
|
||||
}
|
||||
|
||||
auto &t = timing.at(derived_type);
|
||||
|
|
@ -203,10 +203,10 @@ struct StaWorker
|
|||
return;
|
||||
}
|
||||
|
||||
log("Latest arrival time in '%s' is %d:\n", log_id(module), maxarrival);
|
||||
log("Latest arrival time in '%s' is %d:\n", module, maxarrival);
|
||||
auto it = endpoints.find(maxbit);
|
||||
if (it != endpoints.end() && it->second.sink)
|
||||
log(" %6d %s (%s.%s)\n", maxarrival, log_id(it->second.sink), log_id(it->second.sink->type), log_id(it->second.port));
|
||||
log(" %6d %s (%s.%s)\n", maxarrival, it->second.sink, it->second.sink->type.unescape(), it->second.port.unescape());
|
||||
else {
|
||||
log(" %6d (%s)\n", maxarrival, b.wire->port_output ? "<primary output>" : "<unknown>");
|
||||
if (!b.wire->port_output)
|
||||
|
|
@ -217,7 +217,7 @@ struct StaWorker
|
|||
int arrival = b.wire->get_intvec_attribute(ID::sta_arrival)[b.offset];
|
||||
if (jt->second.driver) {
|
||||
log(" %s\n", log_signal(b));
|
||||
log(" %6d %s (%s.%s->%s)\n", arrival, log_id(jt->second.driver), log_id(jt->second.driver->type), log_id(jt->second.src_port), log_id(jt->second.dst_port));
|
||||
log(" %6d %s (%s.%s->%s)\n", arrival, jt->second.driver, jt->second.driver->type.unescape(), jt->second.src_port.unescape(), jt->second.dst_port.unescape());
|
||||
}
|
||||
else if (b.wire->port_input)
|
||||
log(" %6d %s (%s)\n", arrival, log_signal(b), "<primary input>");
|
||||
|
|
@ -234,13 +234,13 @@ struct StaWorker
|
|||
continue;
|
||||
|
||||
if (!b.wire->attributes.count(ID::sta_arrival)) {
|
||||
log_warning("Endpoint %s.%s has no (* sta_arrival *) value.\n", log_id(module), log_signal(b));
|
||||
log_warning("Endpoint %s.%s has no (* sta_arrival *) value.\n", module, log_signal(b));
|
||||
continue;
|
||||
}
|
||||
|
||||
auto arrival = b.wire->get_intvec_attribute(ID::sta_arrival)[b.offset];
|
||||
if (arrival < 0) {
|
||||
log_warning("Endpoint %s.%s has no (* sta_arrival *) value.\n", log_id(module), log_signal(b));
|
||||
log_warning("Endpoint %s.%s has no (* sta_arrival *) value.\n", module, log_signal(b));
|
||||
continue;
|
||||
}
|
||||
arrival += i.second.required;
|
||||
|
|
|
|||
|
|
@ -523,7 +523,7 @@ struct statdata_t {
|
|||
print_log_line("cells", local_num_cells, local_area, num_cells, area, 0, print_area, print_hierarchical, print_global_only);
|
||||
for (auto &it : num_cells_by_type)
|
||||
if (it.second) {
|
||||
auto name = string(log_id(it.first));
|
||||
auto name = string(it.first.unescape());
|
||||
print_log_line(name, local_num_cells_by_type.count(it.first) ? local_num_cells_by_type.at(it.first) : 0,
|
||||
local_area_cells_by_type.count(it.first) ? local_area_cells_by_type.at(it.first) : 0, it.second,
|
||||
area_cells_by_type.at(it.first), 1, print_area, print_hierarchical, print_global_only);
|
||||
|
|
@ -533,7 +533,7 @@ struct statdata_t {
|
|||
print_global_only);
|
||||
for (auto &it : num_submodules_by_type)
|
||||
if (it.second)
|
||||
print_log_line(string(log_id(it.first)), it.second, 0, it.second,
|
||||
print_log_line(string(it.first.unescape()), it.second, 0, it.second,
|
||||
submodules_area_by_type.count(it.first) ? submodules_area_by_type.at(it.first) : 0, 1,
|
||||
print_area, print_hierarchical, print_global_only);
|
||||
}
|
||||
|
|
@ -607,7 +607,7 @@ struct statdata_t {
|
|||
if (it.second) {
|
||||
if (!first_line)
|
||||
log(",\n");
|
||||
log(" %s: %s", json11::Json(log_id(it.first)).dump(),
|
||||
log(" %s: %s", json11::Json(it.first.unescape()).dump(),
|
||||
json_line(local_num_cells_by_type.count(it.first) ? local_num_cells_by_type.at(it.first) : 0,
|
||||
local_area_cells_by_type.count(it.first) ? local_area_cells_by_type.at(it.first) : 0, it.second,
|
||||
area_cells_by_type.at(it.first))
|
||||
|
|
@ -621,7 +621,7 @@ struct statdata_t {
|
|||
if (it.second) {
|
||||
if (!first_line)
|
||||
log(",\n");
|
||||
log(" %s: %s", json11::Json(log_id(it.first)).dump(),
|
||||
log(" %s: %s", json11::Json(it.first.unescape()).dump(),
|
||||
json_line(0, 0, it.second,
|
||||
submodules_area_by_type.count(it.first) ? submodules_area_by_type.at(it.first) : 0)
|
||||
.c_str());
|
||||
|
|
@ -662,14 +662,14 @@ struct statdata_t {
|
|||
if (it.second) {
|
||||
if (!first_line)
|
||||
log(",\n");
|
||||
log(" %s: %u", json11::Json(log_id(it.first)).dump(), it.second);
|
||||
log(" %s: %u", json11::Json(it.first.unescape()).dump(), it.second);
|
||||
first_line = false;
|
||||
}
|
||||
for (auto &it : num_submodules_by_type)
|
||||
if (it.second) {
|
||||
if (!first_line)
|
||||
log(",\n");
|
||||
log(" %s: %u", json11::Json(log_id(it.first)).dump(), it.second);
|
||||
log(" %s: %u", json11::Json(it.first.unescape()).dump(), it.second);
|
||||
first_line = false;
|
||||
}
|
||||
log("\n");
|
||||
|
|
@ -697,14 +697,14 @@ struct statdata_t {
|
|||
if (it.second) {
|
||||
if (!first_line)
|
||||
log(",\n");
|
||||
log(" %s: %u", json11::Json(log_id(it.first)).dump(), it.second);
|
||||
log(" %s: %u", json11::Json(it.first.unescape()).dump(), it.second);
|
||||
first_line = false;
|
||||
}
|
||||
for (auto &it : num_submodules_by_type)
|
||||
if (it.second) {
|
||||
if (!first_line)
|
||||
log(",\n");
|
||||
log(" %s: %u", json11::Json(log_id(it.first)).dump(), it.second);
|
||||
log(" %s: %u", json11::Json(it.first.unescape()).dump(), it.second);
|
||||
first_line = false;
|
||||
}
|
||||
log("\n");
|
||||
|
|
@ -734,7 +734,7 @@ statdata_t hierarchy_worker(std::map<RTLIL::IdString, statdata_t> &mod_stat, RTL
|
|||
for (auto &it : mod_data.num_submodules_by_type) {
|
||||
if (mod_stat.count(it.first) > 0) {
|
||||
if (!quiet)
|
||||
mod_data.print_log_line(string(log_id(it.first)), mod_stat.at(it.first).local_num_cells,
|
||||
mod_data.print_log_line(string(it.first.unescape()), mod_stat.at(it.first).local_num_cells,
|
||||
mod_stat.at(it.first).local_area, mod_stat.at(it.first).num_cells, mod_stat.at(it.first).area,
|
||||
level, has_area, hierarchy_mode);
|
||||
hierarchy_worker(mod_stat, it.first, level + 1, quiet, has_area, hierarchy_mode) * it.second;
|
||||
|
|
@ -1009,7 +1009,7 @@ struct StatPass : public Pass {
|
|||
first_module = false;
|
||||
} else {
|
||||
log("\n");
|
||||
log("=== %s%s ===\n", log_id(mod->name), mod->is_selected_whole() ? "" : " (partially selected)");
|
||||
log("=== %s%s ===\n", mod->name.unescape(), mod->is_selected_whole() ? "" : " (partially selected)");
|
||||
log("\n");
|
||||
data.log_data(mod->name, false, has_area, hierarchy_mode);
|
||||
}
|
||||
|
|
@ -1026,7 +1026,7 @@ struct StatPass : public Pass {
|
|||
log("=== design hierarchy ===\n");
|
||||
log("\n");
|
||||
mod_stat[top_mod->name].print_log_header(has_area, hierarchy_mode, true);
|
||||
mod_stat[top_mod->name].print_log_line(log_id(top_mod->name), mod_stat[top_mod->name].local_num_cells,
|
||||
mod_stat[top_mod->name].print_log_line(top_mod->name.unescape(), mod_stat[top_mod->name].local_num_cells,
|
||||
mod_stat[top_mod->name].local_area, mod_stat[top_mod->name].num_cells,
|
||||
mod_stat[top_mod->name].area, 0, has_area, hierarchy_mode, true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ struct EstimateSta {
|
|||
|
||||
void run()
|
||||
{
|
||||
log("\nModule %s\n", log_id(m));
|
||||
log("\nModule %s\n", m);
|
||||
if (clk.has_value())
|
||||
log("Domain %s\n", log_signal(*clk));
|
||||
|
||||
|
|
@ -97,7 +97,7 @@ struct EstimateSta {
|
|||
FfData ff(nullptr, cell);
|
||||
if (!ff.has_clk) {
|
||||
log_warning("Ignoring unsupported storage element '%s' (%s)\n",
|
||||
log_id(cell), log_id(cell->type));
|
||||
cell, cell->type.unescape());
|
||||
continue;
|
||||
}
|
||||
if (ff.sig_clk != clk)
|
||||
|
|
@ -121,7 +121,7 @@ struct EstimateSta {
|
|||
aigs.emplace(fingerprint, Aig(cell));
|
||||
if (aigs.at(fingerprint).name.empty()) {
|
||||
log_error("Unsupported cell '%s' in module '%s'",
|
||||
log_id(cell->type), log_id(m));
|
||||
cell->type.unescape(), m);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -141,7 +141,7 @@ struct EstimateSta {
|
|||
for (auto &mem : Mem::get_all_memories(m)) {
|
||||
for (auto &rd : mem.rd_ports) {
|
||||
if (!rd.clk_enable) {
|
||||
log_error("Unsupported async memory port '%s'\n", log_id(rd.cell));
|
||||
log_error("Unsupported async memory port '%s'\n", rd.cell);
|
||||
continue;
|
||||
}
|
||||
if (sigmap(rd.clk) != clk)
|
||||
|
|
@ -165,7 +165,7 @@ struct EstimateSta {
|
|||
} else if (port->port_output && !port->port_input) {
|
||||
all_outputs.append(port);
|
||||
} else if (port->port_output && port->port_input) {
|
||||
log_warning("Ignoring bi-directional port %s\n", log_id(port));
|
||||
log_warning("Ignoring bi-directional port %s\n", port);
|
||||
}
|
||||
}
|
||||
add_seq(nullptr, all_inputs, all_outputs);
|
||||
|
|
@ -216,7 +216,7 @@ struct EstimateSta {
|
|||
}
|
||||
|
||||
if (!topo.sort())
|
||||
log_error("Module '%s' contains combinational loops", log_id(m));
|
||||
log_error("Module '%s' contains combinational loops", m);
|
||||
|
||||
// now we determine how long it takes for signals to stabilize
|
||||
|
||||
|
|
@ -342,7 +342,7 @@ struct EstimateSta {
|
|||
std::string src_attr = cell->get_src_attribute();
|
||||
cell_src = stringf(" source: %s", src_attr);
|
||||
}
|
||||
log(" cell %s (%s)%s\n", log_id(cell), log_id(cell->type), cell_src);
|
||||
log(" cell %s (%s)%s\n", cell, cell->type.unescape(), cell_src);
|
||||
printed.insert(cell);
|
||||
}
|
||||
} else {
|
||||
|
|
@ -425,7 +425,7 @@ struct TimeestPass : Pass {
|
|||
|
||||
if (clk_domain_specified) {
|
||||
if (!m->wire(RTLIL::escape_id(clk_name))) {
|
||||
log_warning("No domain '%s' in module %s\n", clk_name.c_str(), log_id(m));
|
||||
log_warning("No domain '%s' in module %s\n", clk_name.c_str(), m);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ struct TorderPass : public Pass {
|
|||
|
||||
for (auto module : design->selected_modules())
|
||||
{
|
||||
log("module %s\n", log_id(module));
|
||||
log("module %s\n", module);
|
||||
|
||||
SigMap sigmap(module);
|
||||
dict<SigBit, pool<IdString>> bit_drivers, bit_users;
|
||||
|
|
@ -116,12 +116,12 @@ struct TorderPass : public Pass {
|
|||
for (auto &it : toposort.loops) {
|
||||
log(" loop");
|
||||
for (auto cell : it)
|
||||
log(" %s", log_id(cell));
|
||||
log(" %s", cell);
|
||||
log("\n");
|
||||
}
|
||||
|
||||
for (auto cell : toposort.sorted)
|
||||
log(" cell %s\n", log_id(cell));
|
||||
log(" cell %s\n", cell);
|
||||
}
|
||||
}
|
||||
} TorderPass;
|
||||
|
|
|
|||
|
|
@ -28,34 +28,34 @@ struct TraceMonitor : public RTLIL::Monitor
|
|||
{
|
||||
void notify_module_add(RTLIL::Module *module) override
|
||||
{
|
||||
log("#TRACE# Module add: %s\n", log_id(module));
|
||||
log("#TRACE# Module add: %s\n", module);
|
||||
}
|
||||
|
||||
void notify_module_del(RTLIL::Module *module) override
|
||||
{
|
||||
log("#TRACE# Module delete: %s\n", log_id(module));
|
||||
log("#TRACE# Module delete: %s\n", module);
|
||||
}
|
||||
|
||||
void notify_connect(RTLIL::Cell *cell, RTLIL::IdString port, const RTLIL::SigSpec &old_sig, const RTLIL::SigSpec &sig) override
|
||||
{
|
||||
log("#TRACE# Cell connect: %s.%s.%s = %s (was: %s)\n", log_id(cell->module), log_id(cell), log_id(port), log_signal(sig), log_signal(old_sig));
|
||||
log("#TRACE# Cell connect: %s.%s.%s = %s (was: %s)\n", cell->module, cell, port.unescape(), log_signal(sig), log_signal(old_sig));
|
||||
}
|
||||
|
||||
void notify_connect(RTLIL::Module *module, const RTLIL::SigSig &sigsig) override
|
||||
{
|
||||
log("#TRACE# Connection in module %s: %s = %s\n", log_id(module), log_signal(sigsig.first), log_signal(sigsig.second));
|
||||
log("#TRACE# Connection in module %s: %s = %s\n", module, log_signal(sigsig.first), log_signal(sigsig.second));
|
||||
}
|
||||
|
||||
void notify_connect(RTLIL::Module *module, const std::vector<RTLIL::SigSig> &sigsig_vec) override
|
||||
{
|
||||
log("#TRACE# New connections in module %s:\n", log_id(module));
|
||||
log("#TRACE# New connections in module %s:\n", module);
|
||||
for (auto &sigsig : sigsig_vec)
|
||||
log("## %s = %s\n", log_signal(sigsig.first), log_signal(sigsig.second));
|
||||
}
|
||||
|
||||
void notify_blackout(RTLIL::Module *module) override
|
||||
{
|
||||
log("#TRACE# Blackout in module %s:\n", log_id(module));
|
||||
log("#TRACE# Blackout in module %s:\n", module);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ struct Graph {
|
|||
|
||||
Graph(Module *module, const VizConfig &config) : module(module), config(config)
|
||||
{
|
||||
log("Running 'viz -%d' for module %s:\n", config.effort, log_id(module));
|
||||
log("Running 'viz -%d' for module %s:\n", config.effort, module);
|
||||
log(" Phase %d: Construct initial graph\n", phase_counter++);
|
||||
|
||||
SigMap sigmap(module);
|
||||
|
|
@ -718,7 +718,7 @@ struct VizWorker
|
|||
|
||||
void write_dot(FILE *f)
|
||||
{
|
||||
fprintf(f, "digraph \"%s\" {\n", log_id(module));
|
||||
fprintf(f, "digraph \"%s\" {\n", module->name.unescape().c_str());
|
||||
fprintf(f, " rankdir = LR;\n");
|
||||
|
||||
dict<GraphNode*, std::vector<std::vector<std::string>>> extra_lines;
|
||||
|
|
@ -734,7 +734,7 @@ struct VizWorker
|
|||
buffer.emplace_back();
|
||||
|
||||
for (auto name : g->names())
|
||||
buffer.back().push_back(log_id(name));
|
||||
buffer.back().push_back(name.unescape());
|
||||
|
||||
std::sort(buffer.back().begin(), buffer.back().end());
|
||||
std::sort(buffer.begin(), buffer.end());
|
||||
|
|
@ -782,7 +782,7 @@ struct VizWorker
|
|||
g->names().sort();
|
||||
std::string label; // = stringf("vg=%d\\n", g->index);
|
||||
for (auto n : g->names())
|
||||
label = label + (label.empty() ? "" : "\\n") + log_id(n);
|
||||
label = label + (label.empty() ? "" : "\\n") + n.unescape();
|
||||
fprintf(f, "\tn%d [shape=rectangle,label=\"%s\"];\n", g->index, label.c_str());
|
||||
} else {
|
||||
std::string label = stringf("vg=%d | %d cells", g->index, GetSize(g->names()));
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ std::optional<std::string> format_with_params(std::string fmt, const dict<IdStri
|
|||
} else {
|
||||
auto id = RTLIL::escape_id(std::string(beg, it));
|
||||
if (!parameters.count(id)) {
|
||||
log("Parameter %s referenced in format string '%s' not found\n", log_id(id), fmt);
|
||||
log("Parameter %s referenced in format string '%s' not found\n", id, fmt);
|
||||
return {};
|
||||
}
|
||||
|
||||
|
|
@ -210,7 +210,7 @@ struct WrapcellPass : Pass {
|
|||
|
||||
if (!ct.cell_known(cell->type))
|
||||
log_error("Non-internal cell type '%s' on cell '%s' in module '%s' unsupported\n",
|
||||
log_id(cell->type), log_id(cell), log_id(module));
|
||||
cell->type.unescape(), cell, module);
|
||||
|
||||
std::vector<std::pair<IdString, int>> unused_outputs, used_outputs;
|
||||
for (auto conn : cell->connections()) {
|
||||
|
|
@ -233,7 +233,7 @@ struct WrapcellPass : Pass {
|
|||
std::optional<std::string> unescaped_name = format_with_params(name_fmt, cell->parameters, context);
|
||||
if (!unescaped_name)
|
||||
log_error("Formatting error when processing cell '%s' in module '%s'\n",
|
||||
log_id(cell), log_id(module));
|
||||
cell, module);
|
||||
|
||||
IdString name = RTLIL::escape_id(unescaped_name.value());
|
||||
if (d->module(name))
|
||||
|
|
@ -274,7 +274,7 @@ struct WrapcellPass : Pass {
|
|||
|
||||
if (!value)
|
||||
log_error("Formatting error when processing cell '%s' in module '%s'\n",
|
||||
log_id(cell), log_id(module));
|
||||
cell, module);
|
||||
|
||||
subm->set_string_attribute(rule.name, value.value());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -467,7 +467,7 @@ struct XpropWorker
|
|||
return;
|
||||
}
|
||||
|
||||
log_warning("Unhandled cell %s (%s) during maybe-x marking\n", log_id(cell), log_id(cell->type));
|
||||
log_warning("Unhandled cell %s (%s) during maybe-x marking\n", cell, cell->type.unescape());
|
||||
mark_outputs_maybe_x(cell);
|
||||
}
|
||||
|
||||
|
|
@ -862,7 +862,7 @@ struct XpropWorker
|
|||
|
||||
if ((ff.has_clk || ff.has_gclk) && !ff.has_ce && !ff.has_aload && !ff.has_srst && !ff.has_arst && !ff.has_sr) {
|
||||
if (ff.has_clk && maybe_x(ff.sig_clk)) {
|
||||
log_warning("Only non-x CLK inputs are currently supported for %s (%s)\n", log_id(cell), log_id(cell->type));
|
||||
log_warning("Only non-x CLK inputs are currently supported for %s (%s)\n", cell, cell->type.unescape());
|
||||
} else {
|
||||
auto init_q = ff.val_init;
|
||||
auto init_q_is_1 = init_q;
|
||||
|
|
@ -907,7 +907,7 @@ struct XpropWorker
|
|||
return;
|
||||
}
|
||||
} else {
|
||||
log_warning("Unhandled FF-cell %s (%s), consider running clk2fflogic, async2sync and/or dffunmap\n", log_id(cell), log_id(cell->type));
|
||||
log_warning("Unhandled FF-cell %s (%s), consider running clk2fflogic, async2sync and/or dffunmap\n", cell, cell->type.unescape());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -964,9 +964,9 @@ struct XpropWorker
|
|||
log("Running 'demuxmap' preserves x-propagation and can be run before 'xprop'.\n");
|
||||
|
||||
if (options.required)
|
||||
log_error("Unhandled cell %s (%s)\n", log_id(cell), log_id(cell->type));
|
||||
log_error("Unhandled cell %s (%s)\n", cell, cell->type.unescape());
|
||||
else
|
||||
log_warning("Unhandled cell %s (%s)\n", log_id(cell), log_id(cell->type));
|
||||
log_warning("Unhandled cell %s (%s)\n", cell, cell->type.unescape());
|
||||
}
|
||||
|
||||
void split_ports()
|
||||
|
|
@ -980,7 +980,7 @@ struct XpropWorker
|
|||
auto wire = module->wire(port);
|
||||
if (module->design->selected(module, wire)) {
|
||||
if (wire->port_input == wire->port_output) {
|
||||
log_warning("Port %s not an input or an output port which is not supported by xprop\n", log_id(wire));
|
||||
log_warning("Port %s not an input or an output port which is not supported by xprop\n", wire);
|
||||
} else if ((options.split_inputs && !options.assume_def_inputs && wire->port_input) || (options.split_outputs && wire->port_output)) {
|
||||
auto port_d = module->uniquify(stringf("%s_d", port));
|
||||
auto port_x = module->uniquify(stringf("%s_x", port));
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ struct EquivInductWorker : public EquivWorker<>
|
|||
|
||||
void run()
|
||||
{
|
||||
log("Found %d unproven $equiv cells in module %s:\n", GetSize(workset), log_id(module));
|
||||
log("Found %d unproven $equiv cells in module %s:\n", GetSize(workset), module);
|
||||
|
||||
if (satgen.model_undef) {
|
||||
for (auto cell : cells)
|
||||
|
|
@ -217,7 +217,7 @@ struct EquivInductPass : public Pass {
|
|||
}
|
||||
|
||||
if (unproven_equiv_cells.empty()) {
|
||||
log("No selected unproven $equiv cells found in %s.\n", log_id(module));
|
||||
log("No selected unproven $equiv cells found in %s.\n", module);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ struct EquivMakeWorker
|
|||
|
||||
if (encdata.count(id))
|
||||
{
|
||||
log("Creating encoder/decoder for signal %s.\n", log_id(id));
|
||||
log("Creating encoder/decoder for signal %s.\n", id.unescape());
|
||||
|
||||
Wire *dec_wire = equiv_mod->addWire(id.str() + "_decoded", gold_wire->width);
|
||||
Wire *enc_wire = equiv_mod->addWire(id.str() + "_encoded", gate_wire->width);
|
||||
|
|
@ -227,15 +227,15 @@ struct EquivMakeWorker
|
|||
|
||||
if (gold_wire == nullptr || gate_wire == nullptr || gold_wire->width != gate_wire->width) {
|
||||
if (gold_wire && gold_wire->port_id)
|
||||
log_error("Can't match gold port `%s' to a gate port.\n", log_id(gold_wire));
|
||||
log_error("Can't match gold port `%s' to a gate port.\n", gold_wire);
|
||||
if (gate_wire && gate_wire->port_id)
|
||||
log_error("Can't match gate port `%s' to a gold port.\n", log_id(gate_wire));
|
||||
log_error("Can't match gate port `%s' to a gold port.\n", gate_wire);
|
||||
continue;
|
||||
}
|
||||
|
||||
log("Presumably equivalent wires: %s (%s), %s (%s) -> %s\n",
|
||||
log_id(gold_wire), log_signal(assign_map(gold_wire)),
|
||||
log_id(gate_wire), log_signal(assign_map(gate_wire)), log_id(id));
|
||||
gold_wire, log_signal(assign_map(gold_wire)),
|
||||
gate_wire, log_signal(assign_map(gate_wire)), id.unescape());
|
||||
|
||||
if (gold_wire->port_output || gate_wire->port_output)
|
||||
{
|
||||
|
|
@ -314,7 +314,7 @@ struct EquivMakeWorker
|
|||
new_sig[i] = old_sig[i];
|
||||
if (old_sig != new_sig) {
|
||||
log("Changing input %s of cell %s (%s): %s -> %s\n",
|
||||
log_id(conn.first), log_id(c), log_id(c->type),
|
||||
conn.first.unescape(), c, c->type.unescape(),
|
||||
log_signal(old_sig), log_signal(new_sig));
|
||||
c->setPort(conn.first, new_sig);
|
||||
}
|
||||
|
|
@ -345,7 +345,7 @@ struct EquivMakeWorker
|
|||
goto try_next_cell_name;
|
||||
|
||||
log("Presumably equivalent cells: %s %s (%s) -> %s\n",
|
||||
log_id(gold_cell), log_id(gate_cell), log_id(gold_cell->type), log_id(id));
|
||||
gold_cell, gate_cell, gold_cell->type.unescape(), id.unescape());
|
||||
|
||||
for (auto gold_conn : gold_cell->connections())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ struct EquivMarkWorker
|
|||
|
||||
void run()
|
||||
{
|
||||
log("Running equiv_mark on module %s:\n", log_id(module));
|
||||
log("Running equiv_mark on module %s:\n", module);
|
||||
|
||||
// marking region 0
|
||||
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ struct EquivMiterWorker
|
|||
|
||||
for (auto c : source_module->selected_cells())
|
||||
if (c->type == ID($equiv)) {
|
||||
log("Seed $equiv cell: %s\n", log_id(c));
|
||||
log("Seed $equiv cell: %s\n", c);
|
||||
seed_cells.insert(c);
|
||||
}
|
||||
|
||||
|
|
@ -194,11 +194,11 @@ struct EquivMiterWorker
|
|||
w->port_input = true;
|
||||
}
|
||||
if (w->port_output && w->port_input)
|
||||
log("Created miter inout port %s.\n", log_id(w));
|
||||
log("Created miter inout port %s.\n", w);
|
||||
else if (w->port_output)
|
||||
log("Created miter output port %s.\n", log_id(w));
|
||||
log("Created miter output port %s.\n", w);
|
||||
else if (w->port_input)
|
||||
log("Created miter input port %s.\n", log_id(w));
|
||||
log("Created miter input port %s.\n", w);
|
||||
}
|
||||
|
||||
miter_module->fixup_ports();
|
||||
|
|
@ -252,7 +252,7 @@ struct EquivMiterWorker
|
|||
|
||||
void run()
|
||||
{
|
||||
log("Creating miter %s from module %s.\n", log_id(miter_module), log_id(source_module));
|
||||
log("Creating miter %s from module %s.\n", miter_module, source_module);
|
||||
find_miter_cells_wires();
|
||||
copy_to_miter();
|
||||
make_stuff();
|
||||
|
|
@ -320,7 +320,7 @@ struct EquivMiterPass : public Pass {
|
|||
extra_args(args, argidx, design);
|
||||
|
||||
if (design->module(worker.miter_name))
|
||||
log_cmd_error("Miter module %s already exists.\n", log_id(worker.miter_name));
|
||||
log_cmd_error("Miter module %s already exists.\n", worker.miter_name.unescape());
|
||||
|
||||
worker.source_module = nullptr;
|
||||
for (auto m : design->selected_modules()) {
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ struct EquivPurgeWorker
|
|||
Wire *wire = sig.as_wire();
|
||||
if (wire->name.isPublic()) {
|
||||
if (!wire->port_output) {
|
||||
log(" Module output: %s (%s)\n", log_signal(wire), log_id(cellname));
|
||||
log(" Module output: %s (%s)\n", log_signal(wire), cellname.unescape());
|
||||
wire->port_output = true;
|
||||
}
|
||||
return wire;
|
||||
|
|
@ -53,7 +53,7 @@ struct EquivPurgeWorker
|
|||
Wire *wire = module->addWire(name, GetSize(sig));
|
||||
wire->port_output = true;
|
||||
module->connect(wire, sig);
|
||||
log(" Module output: %s (%s)\n", log_signal(wire), log_id(cellname));
|
||||
log(" Module output: %s (%s)\n", log_signal(wire), cellname.unescape());
|
||||
return wire;
|
||||
}
|
||||
}
|
||||
|
|
@ -87,7 +87,7 @@ struct EquivPurgeWorker
|
|||
|
||||
void run()
|
||||
{
|
||||
log("Running equiv_purge on module %s:\n", log_id(module));
|
||||
log("Running equiv_purge on module %s:\n", module);
|
||||
|
||||
for (auto wire : module->wires()) {
|
||||
wire->port_input = false;
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ struct EquivRemovePass : public Pass {
|
|||
{
|
||||
for (auto cell : module->selected_cells())
|
||||
if (cell->type == ID($equiv) && (mode_gold || mode_gate || cell->getPort(ID::A) == cell->getPort(ID::B))) {
|
||||
log("Removing $equiv cell %s.%s (%s).\n", log_id(module), log_id(cell), log_signal(cell->getPort(ID::Y)));
|
||||
log("Removing $equiv cell %s.%s (%s).\n", module, cell, log_signal(cell->getPort(ID::Y)));
|
||||
module->connect(cell->getPort(ID::Y), mode_gate ? cell->getPort(ID::B) : cell->getPort(ID::A));
|
||||
module->remove(cell);
|
||||
remove_count++;
|
||||
|
|
|
|||
|
|
@ -205,10 +205,10 @@ struct EquivSimpleWorker : public EquivWorker<EquivSimpleConfig>
|
|||
(GetSize(cone_a.cells) + GetSize(cone_b.cells)) - GetSize(cells));
|
||||
#if 0
|
||||
for (auto cell : short_cells_cone_a)
|
||||
log(" A-side cell: %s\n", log_id(cell));
|
||||
log(" A-side cell: %s\n", cell);
|
||||
|
||||
for (auto cell : short_cells_cone_b)
|
||||
log(" B-side cell: %s\n", log_id(cell));
|
||||
log(" B-side cell: %s\n", cell);
|
||||
#endif
|
||||
}
|
||||
void report_new_assume_cells(const pool<Cell*>& extra_problem_cells, int old_size, const pool<Cell*>& problem_cells) const
|
||||
|
|
@ -219,7 +219,7 @@ struct EquivSimpleWorker : public EquivWorker<EquivSimpleConfig>
|
|||
old_size - (GetSize(problem_cells) - GetSize(extra_problem_cells)));
|
||||
#if 0
|
||||
for (auto cell : extra_problem_cells)
|
||||
log(" cell: %s\n", log_id(cell));
|
||||
log(" cell: %s\n", cell);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
@ -305,7 +305,7 @@ struct EquivSimpleWorker : public EquivWorker<EquivSimpleConfig>
|
|||
pool<SigBit> seed_b = { bit_b };
|
||||
|
||||
if (cfg.verbose) {
|
||||
log(" Trying to prove $equiv cell %s:\n", log_id(cell));
|
||||
log(" Trying to prove $equiv cell %s:\n", cell);
|
||||
log(" A = %s, B = %s, Y = %s\n", log_signal(bit_a), log_signal(bit_b), log_signal(cell->getPort(ID::Y)));
|
||||
} else {
|
||||
log(" Trying to prove $equiv for %s:", log_signal(cell->getPort(ID::Y)));
|
||||
|
|
@ -477,7 +477,7 @@ struct EquivSimplePass : public Pass {
|
|||
continue;
|
||||
|
||||
log("Found %d unproven $equiv cells (%d groups) in %s:\n",
|
||||
unproven_cells_counter, GetSize(unproven_equiv_cells), log_id(module));
|
||||
unproven_cells_counter, GetSize(unproven_equiv_cells), module);
|
||||
|
||||
for (auto cell : module->cells()) {
|
||||
if (!ct.cell_known(cell->type))
|
||||
|
|
|
|||
|
|
@ -67,17 +67,17 @@ struct EquivStatusPass : public Pass {
|
|||
}
|
||||
|
||||
if (unproven_equiv_cells.empty() && !proven_equiv_cells) {
|
||||
log("No $equiv cells found in %s.\n", log_id(module));
|
||||
log("No $equiv cells found in %s.\n", module);
|
||||
continue;
|
||||
}
|
||||
|
||||
log("Found %d $equiv cells in %s:\n", GetSize(unproven_equiv_cells) + proven_equiv_cells, log_id(module));
|
||||
log("Found %d $equiv cells in %s:\n", GetSize(unproven_equiv_cells) + proven_equiv_cells, module);
|
||||
log(" Of those cells %d are proven and %d are unproven.\n", proven_equiv_cells, GetSize(unproven_equiv_cells));
|
||||
if (unproven_equiv_cells.empty()) {
|
||||
log(" Equivalence successfully proven!\n");
|
||||
} else {
|
||||
for (auto cell : unproven_equiv_cells)
|
||||
log(" Unproven $equiv %s: %s %s\n", log_id(cell), log_signal(cell->getPort(ID::A)), log_signal(cell->getPort(ID::B)));
|
||||
log(" Unproven $equiv %s: %s %s\n", cell, log_signal(cell->getPort(ID::A)), log_signal(cell->getPort(ID::B)));
|
||||
}
|
||||
|
||||
unproven_count += GetSize(unproven_equiv_cells);
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ struct EquivStructWorker
|
|||
inputs_a.append(bits_a[i]);
|
||||
inputs_b.append(bits_b[i]);
|
||||
input_names.push_back(GetSize(bits_a) == 1 ? port_a.first.str() :
|
||||
stringf("%s[%d]", log_id(port_a.first), i));
|
||||
stringf("%s[%d]", port_a.first.unescape(), i));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -111,7 +111,7 @@ struct EquivStructWorker
|
|||
}
|
||||
|
||||
auto merged_attr = cell_b->get_strpool_attribute(ID::equiv_merged);
|
||||
merged_attr.insert(log_id(cell_b));
|
||||
merged_attr.insert(cell_b->name.unescape());
|
||||
cell_a->add_strpool_attribute(ID::equiv_merged, merged_attr);
|
||||
module->remove(cell_b);
|
||||
}
|
||||
|
|
@ -144,7 +144,7 @@ struct EquivStructWorker
|
|||
SigBit sig_b = sigmap(cell->getPort(ID::B).as_bit());
|
||||
SigBit sig_y = sigmap(cell->getPort(ID::Y).as_bit());
|
||||
if (sig_a == sig_b && equiv_inputs.count(sig_y)) {
|
||||
log(" Purging redundant $equiv cell %s.\n", log_id(cell));
|
||||
log(" Purging redundant $equiv cell %s.\n", cell);
|
||||
module->connect(sig_y, sig_a);
|
||||
module->remove(cell);
|
||||
merge_count++;
|
||||
|
|
@ -266,9 +266,9 @@ struct EquivStructWorker
|
|||
run_strategy:
|
||||
int total_group_size = GetSize(gold_cells) + GetSize(gate_cells) + GetSize(other_cells);
|
||||
log(" %s merging %d %s cells (from group of %d) using strategy %s:\n", phase ? "Bwd" : "Fwd",
|
||||
2*GetSize(cell_pairs), log_id(cells_type), total_group_size, strategy);
|
||||
2*GetSize(cell_pairs), cells_type.unescape(), total_group_size, strategy);
|
||||
for (auto it : cell_pairs) {
|
||||
log(" Merging cells %s and %s.\n", log_id(it.first), log_id(it.second));
|
||||
log(" Merging cells %s and %s.\n", it.first, it.second);
|
||||
merge_cell_pair(it.first, it.second);
|
||||
}
|
||||
}
|
||||
|
|
@ -347,7 +347,7 @@ struct EquivStructPass : public Pass {
|
|||
|
||||
for (auto module : design->selected_modules()) {
|
||||
int module_merge_count = 0;
|
||||
log("Running equiv_struct on module %s:\n", log_id(module));
|
||||
log("Running equiv_struct on module %s:\n", module);
|
||||
for (int iter = 0;; iter++) {
|
||||
if (iter == max_iter) {
|
||||
log(" Reached iteration limit of %d.\n", iter);
|
||||
|
|
@ -359,7 +359,7 @@ struct EquivStructPass : public Pass {
|
|||
module_merge_count += worker.merge_count;
|
||||
}
|
||||
if (module_merge_count)
|
||||
log(" Performed a total of %d merges in module %s.\n", module_merge_count, log_id(module));
|
||||
log(" Performed a total of %d merges in module %s.\n", module_merge_count, module);
|
||||
}
|
||||
}
|
||||
} EquivStructPass;
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ static void detect_fsm(RTLIL::Wire *wire, bool ignore_self_reset=false)
|
|||
|
||||
if (wire->width <= 1) {
|
||||
if (has_fsm_encoding_attr) {
|
||||
log_warning("Removing fsm_encoding attribute from 1-bit net: %s.%s\n", log_id(wire->module), log_id(wire));
|
||||
log_warning("Removing fsm_encoding attribute from 1-bit net: %s.%s\n", wire->module, wire);
|
||||
wire->attributes.erase(ID::fsm_encoding);
|
||||
}
|
||||
return;
|
||||
|
|
@ -230,23 +230,23 @@ static void detect_fsm(RTLIL::Wire *wire, bool ignore_self_reset=false)
|
|||
warnings.push_back("FSM seems to be self-resetting. Possible simulation-synthesis mismatch!\n");
|
||||
|
||||
if (!warnings.empty()) {
|
||||
string warnmsg = stringf("Regarding the user-specified fsm_encoding attribute on %s.%s:\n", log_id(wire->module), log_id(wire));
|
||||
string warnmsg = stringf("Regarding the user-specified fsm_encoding attribute on %s.%s:\n", wire->module, wire);
|
||||
for (auto w : warnings) warnmsg += " " + w;
|
||||
log_warning("%s", warnmsg);
|
||||
} else {
|
||||
log("FSM state register %s.%s already has fsm_encoding attribute.\n", log_id(wire->module), log_id(wire));
|
||||
log("FSM state register %s.%s already has fsm_encoding attribute.\n", wire->module, wire);
|
||||
}
|
||||
}
|
||||
else
|
||||
if (looks_like_state_reg && looks_like_good_state_reg && !has_init_attr && !is_module_port && !is_self_resetting)
|
||||
{
|
||||
log("Found FSM state register %s.%s.\n", log_id(wire->module), log_id(wire));
|
||||
log("Found FSM state register %s.%s.\n", wire->module, wire);
|
||||
wire->attributes[ID::fsm_encoding] = RTLIL::Const("auto");
|
||||
}
|
||||
else
|
||||
if (looks_like_state_reg)
|
||||
{
|
||||
log("Not marking %s.%s as FSM state register:\n", log_id(wire->module), log_id(wire));
|
||||
log("Not marking %s.%s as FSM state register:\n", wire->module, wire);
|
||||
|
||||
if (is_module_port)
|
||||
log(" Register is connected to module port.\n");
|
||||
|
|
|
|||
|
|
@ -189,12 +189,12 @@ struct FsmExpand
|
|||
|
||||
if (GetSize(input_sig) > 10)
|
||||
log_warning("Cell %s.%s (%s) has %d input bits, merging into FSM %s.%s might be problematic.\n",
|
||||
log_id(cell->module), log_id(cell), log_id(cell->type),
|
||||
GetSize(input_sig), log_id(fsm_cell->module), log_id(fsm_cell));
|
||||
cell->module, cell, cell->type.unescape(),
|
||||
GetSize(input_sig), fsm_cell->module, fsm_cell);
|
||||
|
||||
if (GetSize(fsm_data.transition_table) > 10000)
|
||||
log_warning("Transition table for FSM %s.%s already has %d rows, merging more cells "
|
||||
"into this FSM might be problematic.\n", log_id(fsm_cell->module), log_id(fsm_cell),
|
||||
"into this FSM might be problematic.\n", fsm_cell->module, fsm_cell,
|
||||
GetSize(fsm_data.transition_table));
|
||||
|
||||
std::vector<FsmData::transition_t> new_transition_table;
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ void write_kiss2(struct RTLIL::Module *module, struct RTLIL::Cell *cell, std::st
|
|||
kiss_name.assign(attr_it->second.decode_string());
|
||||
}
|
||||
else {
|
||||
kiss_name.assign(log_id(module) + std::string("-") + log_id(cell) + ".kiss2");
|
||||
kiss_name.assign(module->name.unescape() + std::string("-") + cell->name.unescape() + ".kiss2");
|
||||
}
|
||||
|
||||
log("\n");
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ struct FsmInfoPass : public Pass {
|
|||
for (auto cell : mod->selected_cells())
|
||||
if (cell->type == ID($fsm)) {
|
||||
log("\n");
|
||||
log("FSM `%s' from module `%s':\n", log_id(cell), log_id(mod));
|
||||
log("FSM `%s' from module `%s':\n", cell, mod);
|
||||
FsmData fsm_data;
|
||||
fsm_data.copy_from_cell(cell);
|
||||
fsm_data.log_info(cell);
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ static void fsm_recode(RTLIL::Cell *cell, RTLIL::Module *module, FILE *fm_set_fs
|
|||
log_error("FSM encoding `%s' is not supported!\n", encoding);
|
||||
|
||||
if (encfile)
|
||||
fprintf(encfile, ".fsm %s %s\n", log_id(module), RTLIL::unescape_id(cell->parameters[ID::NAME].decode_string()).c_str());
|
||||
fprintf(encfile, ".fsm %s %s\n", module->name.unescape().c_str(), RTLIL::unescape_id(cell->parameters[ID::NAME].decode_string()).c_str());
|
||||
|
||||
int state_idx_counter = fsm_data.reset_state >= 0 ? 1 : 0;
|
||||
for (int i = 0; i < int(fsm_data.state_table.size()); i++)
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ struct FlattenWorker
|
|||
hier_wire->attributes.erase(ID::hierconn);
|
||||
if (GetSize(hier_wire) < GetSize(tpl_wire)) {
|
||||
log_warning("Widening signal %s.%s to match size of %s.%s (via %s.%s).\n",
|
||||
log_id(module), log_id(hier_wire), log_id(tpl), log_id(tpl_wire), log_id(module), log_id(cell));
|
||||
module, hier_wire, tpl, tpl_wire, module, cell);
|
||||
hier_wire->width = GetSize(tpl_wire);
|
||||
}
|
||||
new_wire = hier_wire;
|
||||
|
|
@ -261,7 +261,7 @@ struct FlattenWorker
|
|||
|
||||
if (sigmap(new_conn.first).has_const())
|
||||
log_error("Cell port %s.%s.%s is driving constant bits: %s <= %s\n",
|
||||
log_id(module), log_id(cell), log_id(port_it.first), log_signal(new_conn.first), log_signal(new_conn.second));
|
||||
module, cell, port_it.first.unescape(), log_signal(new_conn.first), log_signal(new_conn.second));
|
||||
|
||||
module->connect(new_conn);
|
||||
sigmap.add(new_conn.first, new_conn.second);
|
||||
|
|
@ -316,12 +316,12 @@ struct FlattenWorker
|
|||
continue;
|
||||
|
||||
if (cell->get_bool_attribute(ID::keep_hierarchy) || tpl->get_bool_attribute(ID::keep_hierarchy)) {
|
||||
log("Keeping %s.%s (found keep_hierarchy attribute).\n", log_id(module), log_id(cell));
|
||||
log("Keeping %s.%s (found keep_hierarchy attribute).\n", module, cell);
|
||||
used_modules.insert(tpl);
|
||||
continue;
|
||||
}
|
||||
|
||||
log_debug("Flattening %s.%s (%s).\n", log_id(module), log_id(cell), log_id(cell->type));
|
||||
log_debug("Flattening %s.%s (%s).\n", module, cell, cell->type.unescape());
|
||||
// If a design is fully selected and has a top module defined, topological sorting ensures that all cells
|
||||
// added during flattening are black boxes, and flattening is finished in one pass. However, when flattening
|
||||
// individual modules, this isn't the case, and the newly added cells might have to be flattened further.
|
||||
|
|
@ -443,7 +443,7 @@ struct FlattenPass : public Pass {
|
|||
if (cleanup && top != nullptr)
|
||||
for (auto module : design->modules().to_vector())
|
||||
if (!used_modules[module] && !module->get_blackbox_attribute(worker.ignore_wb)) {
|
||||
log("Deleting now unused module %s.\n", log_id(module));
|
||||
log("Deleting now unused module %s.\n", module);
|
||||
design->remove(module);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ struct IFExpander
|
|||
// about it and don't set has_interfaces_not_found (to avoid a
|
||||
// loop).
|
||||
log_warning("Could not find interface instance for `%s' in `%s'\n",
|
||||
log_id(interface_name), log_id(&module));
|
||||
interface_name.unescape(), &module);
|
||||
}
|
||||
|
||||
// Handle an interface connection from the module
|
||||
|
|
@ -268,12 +268,12 @@ struct IFExpander
|
|||
|
||||
// Go over all wires in interface, and add replacements to lists.
|
||||
for (auto mod_wire : mod_replace_ports->wires()) {
|
||||
std::string signal_name1 = conn_name.str() + "." + log_id(mod_wire->name);
|
||||
std::string signal_name2 = interface_name.str() + "." + log_id(mod_wire);
|
||||
std::string signal_name1 = conn_name.str() + "." + mod_wire->name.unescape();
|
||||
std::string signal_name2 = interface_name.str() + "." + mod_wire->name.unescape();
|
||||
connections_to_add_name.push_back(RTLIL::IdString(signal_name1));
|
||||
if(module.wire(signal_name2) == nullptr) {
|
||||
log_error("Could not find signal '%s' in '%s'\n",
|
||||
signal_name2.c_str(), log_id(module.name));
|
||||
signal_name2.c_str(), module.name.unescape());
|
||||
}
|
||||
else {
|
||||
RTLIL::Wire *wire_in_parent = module.wire(signal_name2);
|
||||
|
|
@ -432,7 +432,7 @@ void check_cell_connections(const RTLIL::Module &module, RTLIL::Cell &cell, RTLI
|
|||
if (id <= 0 || id > GetSize(mod.ports))
|
||||
log_error("Module `%s' referenced in module `%s' in cell `%s' "
|
||||
"has only %d ports, requested port %d.\n",
|
||||
log_id(cell.type), log_id(&module), log_id(&cell),
|
||||
cell.type.unescape(), &module, &cell,
|
||||
GetSize(mod.ports), id);
|
||||
continue;
|
||||
}
|
||||
|
|
@ -441,8 +441,8 @@ void check_cell_connections(const RTLIL::Module &module, RTLIL::Cell &cell, RTLI
|
|||
if (!wire || wire->port_id == 0) {
|
||||
log_error("Module `%s' referenced in module `%s' in cell `%s' "
|
||||
"does not have a port named '%s'.\n",
|
||||
log_id(cell.type), log_id(&module), log_id(&cell),
|
||||
log_id(conn.first));
|
||||
cell.type.unescape(), &module, &cell,
|
||||
conn.first.unescape());
|
||||
}
|
||||
}
|
||||
for (auto ¶m : cell.parameters) {
|
||||
|
|
@ -450,7 +450,7 @@ void check_cell_connections(const RTLIL::Module &module, RTLIL::Cell &cell, RTLI
|
|||
if (id <= 0 || id > GetSize(mod.avail_parameters))
|
||||
log_error("Module `%s' referenced in module `%s' in cell `%s' "
|
||||
"has only %d parameters, requested parameter %d.\n",
|
||||
log_id(cell.type), log_id(&module), log_id(&cell),
|
||||
cell.type.unescape(), &module, &cell,
|
||||
GetSize(mod.avail_parameters), id);
|
||||
continue;
|
||||
}
|
||||
|
|
@ -460,8 +460,8 @@ void check_cell_connections(const RTLIL::Module &module, RTLIL::Cell &cell, RTLI
|
|||
strchr(param.first.c_str(), '.') == NULL) {
|
||||
log_error("Module `%s' referenced in module `%s' in cell `%s' "
|
||||
"does not have a parameter named '%s'.\n",
|
||||
log_id(cell.type), log_id(&module), log_id(&cell),
|
||||
log_id(param.first));
|
||||
cell.type.unescape(), &module, &cell,
|
||||
param.first.unescape());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1036,7 +1036,7 @@ struct HierarchyPass : public Pass {
|
|||
if (top_mod == nullptr)
|
||||
for (auto mod : design->modules())
|
||||
if (mod->get_bool_attribute(ID::top)) {
|
||||
log("Attribute `top' found on module `%s'. Setting top module to %s.\n", log_id(mod), log_id(mod));
|
||||
log("Attribute `top' found on module `%s'. Setting top module to %s.\n", mod, mod);
|
||||
top_mod = mod;
|
||||
}
|
||||
|
||||
|
|
@ -1057,12 +1057,12 @@ struct HierarchyPass : public Pass {
|
|||
dict<Module*, int> db;
|
||||
for (Module *mod : design->selected_modules()) {
|
||||
int score = find_top_mod_score(design, mod, db);
|
||||
log("root of %3d design levels: %-20s\n", score, log_id(mod));
|
||||
log("root of %3d design levels: %-20s\n", score, mod);
|
||||
if (!top_mod || score > db[top_mod])
|
||||
top_mod = mod;
|
||||
}
|
||||
if (top_mod != nullptr)
|
||||
log("Automatically selected %s as design top module.\n", log_id(top_mod));
|
||||
log("Automatically selected %s as design top module.\n", top_mod);
|
||||
}
|
||||
|
||||
if (top_mod != nullptr && top_mod->name.begins_with("$abstract")) {
|
||||
|
|
@ -1162,7 +1162,7 @@ struct HierarchyPass : public Pass {
|
|||
std::map<RTLIL::Module*, bool> cache;
|
||||
for (auto mod : design->modules())
|
||||
if (set_keep_print(cache, mod)) {
|
||||
log("Module %s directly or indirectly displays text -> setting \"keep\" attribute.\n", log_id(mod));
|
||||
log("Module %s directly or indirectly displays text -> setting \"keep\" attribute.\n", mod);
|
||||
mod->set_bool_attribute(ID::keep);
|
||||
}
|
||||
}
|
||||
|
|
@ -1171,7 +1171,7 @@ struct HierarchyPass : public Pass {
|
|||
std::map<RTLIL::Module*, bool> cache;
|
||||
for (auto mod : design->modules())
|
||||
if (set_keep_assert(cache, mod)) {
|
||||
log("Module %s directly or indirectly contains formal properties -> setting \"keep\" attribute.\n", log_id(mod));
|
||||
log("Module %s directly or indirectly contains formal properties -> setting \"keep\" attribute.\n", mod);
|
||||
mod->set_bool_attribute(ID::keep);
|
||||
}
|
||||
}
|
||||
|
|
@ -1190,7 +1190,7 @@ struct HierarchyPass : public Pass {
|
|||
src += ": ";
|
||||
|
||||
log_error("%sProperty `%s' in module `%s' uses unsupported SVA constructs. See frontend warnings for details, run `chformal -remove a:unsupported_sva' to ignore.\n",
|
||||
src, log_id(cell->name), log_id(mod->name));
|
||||
src, cell->name.unescape(), mod->name.unescape());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1499,7 +1499,7 @@ struct HierarchyPass : public Pass {
|
|||
bool resize_widths = !keep_portwidths && GetSize(w) != GetSize(conn.second);
|
||||
if (resize_widths && verific_mod && boxed_params)
|
||||
log_debug("Ignoring width mismatch on %s.%s.%s from verific, is port width parametrizable?\n",
|
||||
log_id(module), log_id(cell), log_id(conn.first)
|
||||
module, cell, conn.first.unescape()
|
||||
);
|
||||
else if (resize_widths) {
|
||||
if (GetSize(w) < GetSize(conn.second))
|
||||
|
|
@ -1523,14 +1523,14 @@ struct HierarchyPass : public Pass {
|
|||
}
|
||||
|
||||
if (!conn.second.is_fully_const() || !w->port_input || w->port_output)
|
||||
log_warning("Resizing cell port %s.%s.%s from %d bits to %d bits.\n", log_id(module), log_id(cell),
|
||||
log_id(conn.first), GetSize(conn.second), GetSize(sig));
|
||||
log_warning("Resizing cell port %s.%s.%s from %d bits to %d bits.\n", module, cell,
|
||||
conn.first.unescape(), GetSize(conn.second), GetSize(sig));
|
||||
cell->setPort(conn.first, sig);
|
||||
}
|
||||
|
||||
if (w->port_output && !w->port_input && sig.has_const())
|
||||
log_error("Output port %s.%s.%s (%s) is connected to constants: %s\n",
|
||||
log_id(module), log_id(cell), log_id(conn.first), log_id(cell->type), log_signal(sig));
|
||||
module, cell, conn.first.unescape(), cell->type.unescape(), log_signal(sig));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ struct ThresholdHierarchyKeeping {
|
|||
return 0;
|
||||
|
||||
if (module->get_blackbox_attribute())
|
||||
log_error("Missing cost information on instanced blackbox %s\n", log_id(module));
|
||||
log_error("Missing cost information on instanced blackbox %s\n", module);
|
||||
|
||||
if (done.count(module))
|
||||
return done.at(module);
|
||||
|
|
@ -61,13 +61,13 @@ struct ThresholdHierarchyKeeping {
|
|||
RTLIL::Module *submodule = design->module(cell->type);
|
||||
if (!submodule)
|
||||
log_error("Hierarchy contains unknown module '%s' (instanced as %s in %s)\n",
|
||||
log_id(cell->type), log_id(cell), log_id(module));
|
||||
cell->type.unescape(), cell, module);
|
||||
size += visit(submodule);
|
||||
}
|
||||
}
|
||||
|
||||
if (size > threshold) {
|
||||
log("Keeping %s (estimated size above threshold: %" PRIu64 " > %" PRIu64 ").\n", log_id(module), size, threshold);
|
||||
log("Keeping %s (estimated size above threshold: %" PRIu64 " > %" PRIu64 ").\n", module, size, threshold);
|
||||
module->set_bool_attribute(ID::keep_hierarchy);
|
||||
size = 0;
|
||||
}
|
||||
|
|
@ -124,7 +124,7 @@ struct KeepHierarchyPass : public Pass {
|
|||
worker.visit(top);
|
||||
} else {
|
||||
for (auto module : design->selected_modules()) {
|
||||
log("Marking %s.\n", log_id(module));
|
||||
log("Marking %s.\n", module);
|
||||
module->set_bool_attribute(ID::keep_hierarchy);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ struct UniquifyPass : public Pass {
|
|||
for (auto cell : module->selected_cells())
|
||||
{
|
||||
Module *tmod = design->module(cell->type);
|
||||
IdString newname = module->name.str() + "." + log_id(cell->name);
|
||||
IdString newname = module->name.str() + "." + cell->name.unescape();
|
||||
|
||||
if (tmod == nullptr)
|
||||
continue;
|
||||
|
|
@ -82,14 +82,14 @@ struct UniquifyPass : public Pass {
|
|||
if (tmod->get_bool_attribute(ID::unique) && newname == tmod->name)
|
||||
continue;
|
||||
|
||||
log("Creating module %s from %s.\n", log_id(newname), log_id(tmod));
|
||||
log("Creating module %s from %s.\n", newname.unescape(), tmod);
|
||||
|
||||
auto smod = tmod->clone();
|
||||
smod->name = newname;
|
||||
cell->type = newname;
|
||||
smod->set_bool_attribute(ID::unique);
|
||||
if (smod->attributes.count(ID::hdlname) == 0)
|
||||
smod->attributes[ID::hdlname] = string(log_id(tmod->name));
|
||||
smod->attributes[ID::hdlname] = string(tmod->name.unescape());
|
||||
design->add(smod);
|
||||
|
||||
did_something = true;
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ struct rules_t
|
|||
|
||||
void dump_config() const
|
||||
{
|
||||
log(" bram %s # variant %d\n", log_id(name), variant);
|
||||
log(" bram %s # variant %d\n", name.unescape(), variant);
|
||||
log(" init %d\n", init);
|
||||
log(" abits %d\n", abits);
|
||||
log(" dbits %d\n", dbits);
|
||||
|
|
@ -61,16 +61,16 @@ struct rules_t
|
|||
|
||||
void check_vectors() const
|
||||
{
|
||||
if (groups != GetSize(ports)) log_error("Bram %s variant %d has %d groups but only %d entries in 'ports'.\n", log_id(name), variant, groups, GetSize(ports));
|
||||
if (groups != GetSize(wrmode)) log_error("Bram %s variant %d has %d groups but only %d entries in 'wrmode'.\n", log_id(name), variant, groups, GetSize(wrmode));
|
||||
if (groups != GetSize(enable)) log_error("Bram %s variant %d has %d groups but only %d entries in 'enable'.\n", log_id(name), variant, groups, GetSize(enable));
|
||||
if (groups != GetSize(transp)) log_error("Bram %s variant %d has %d groups but only %d entries in 'transp'.\n", log_id(name), variant, groups, GetSize(transp));
|
||||
if (groups != GetSize(clocks)) log_error("Bram %s variant %d has %d groups but only %d entries in 'clocks'.\n", log_id(name), variant, groups, GetSize(clocks));
|
||||
if (groups != GetSize(clkpol)) log_error("Bram %s variant %d has %d groups but only %d entries in 'clkpol'.\n", log_id(name), variant, groups, GetSize(clkpol));
|
||||
if (groups != GetSize(ports)) log_error("Bram %s variant %d has %d groups but only %d entries in 'ports'.\n", name.unescape(), variant, groups, GetSize(ports));
|
||||
if (groups != GetSize(wrmode)) log_error("Bram %s variant %d has %d groups but only %d entries in 'wrmode'.\n", name.unescape(), variant, groups, GetSize(wrmode));
|
||||
if (groups != GetSize(enable)) log_error("Bram %s variant %d has %d groups but only %d entries in 'enable'.\n", name.unescape(), variant, groups, GetSize(enable));
|
||||
if (groups != GetSize(transp)) log_error("Bram %s variant %d has %d groups but only %d entries in 'transp'.\n", name.unescape(), variant, groups, GetSize(transp));
|
||||
if (groups != GetSize(clocks)) log_error("Bram %s variant %d has %d groups but only %d entries in 'clocks'.\n", name.unescape(), variant, groups, GetSize(clocks));
|
||||
if (groups != GetSize(clkpol)) log_error("Bram %s variant %d has %d groups but only %d entries in 'clkpol'.\n", name.unescape(), variant, groups, GetSize(clkpol));
|
||||
|
||||
int group = 0;
|
||||
for (auto e : enable)
|
||||
if (e > dbits) log_error("Bram %s variant %d group %d has %d enable bits but only %d dbits.\n", log_id(name), variant, group, e, dbits);
|
||||
if (e > dbits) log_error("Bram %s variant %d group %d has %d enable bits but only %d dbits.\n", name.unescape(), variant, group, e, dbits);
|
||||
}
|
||||
|
||||
vector<portinfo_t> make_portinfos() const
|
||||
|
|
@ -100,7 +100,7 @@ struct rules_t
|
|||
log_assert(name == other.name);
|
||||
|
||||
if (groups != other.groups)
|
||||
log_error("Bram %s variants %d and %d have different values for 'groups'.\n", log_id(name), variant, other.variant);
|
||||
log_error("Bram %s variants %d and %d have different values for 'groups'.\n", name.unescape(), variant, other.variant);
|
||||
|
||||
if (abits != other.abits)
|
||||
variant_params[ID::CFG_ABITS] = abits;
|
||||
|
|
@ -112,7 +112,7 @@ struct rules_t
|
|||
for (int i = 0; i < groups; i++)
|
||||
{
|
||||
if (ports[i] != other.ports[i])
|
||||
log_error("Bram %s variants %d and %d have different number of %c-ports.\n", log_id(name), variant, other.variant, 'A'+i);
|
||||
log_error("Bram %s variants %d and %d have different number of %c-ports.\n", name.unescape(), variant, other.variant, 'A'+i);
|
||||
if (wrmode[i] != other.wrmode[i])
|
||||
variant_params[stringf("\\CFG_WRMODE_%c", 'A' + i)] = wrmode[i];
|
||||
if (enable[i] != other.enable[i])
|
||||
|
|
@ -428,7 +428,7 @@ bool replace_memory(Mem &mem, const rules_t &rules, FfInitVals *initvals, const
|
|||
transp_max = max(transp_max, pi.transp);
|
||||
}
|
||||
|
||||
log(" Mapping to bram type %s (variant %d):\n", log_id(bram.name), bram.variant);
|
||||
log(" Mapping to bram type %s (variant %d):\n", bram.name.unescape(), bram.variant);
|
||||
// bram.dump_config();
|
||||
|
||||
std::vector<int> shuffle_map;
|
||||
|
|
@ -715,21 +715,21 @@ grow_read_ports:;
|
|||
for (auto it : match.min_limits) {
|
||||
if (!match_properties.count(it.first))
|
||||
log_error("Unknown property '%s' in match rule for bram type %s.\n",
|
||||
it.first.c_str(), log_id(match.name));
|
||||
it.first.c_str(), match.name.unescape());
|
||||
if (match_properties[it.first] >= it.second)
|
||||
continue;
|
||||
log(" Rule for bram type %s rejected: requirement 'min %s %d' not met.\n",
|
||||
log_id(match.name), it.first.c_str(), it.second);
|
||||
match.name.unescape(), it.first.c_str(), it.second);
|
||||
return false;
|
||||
}
|
||||
for (auto it : match.max_limits) {
|
||||
if (!match_properties.count(it.first))
|
||||
log_error("Unknown property '%s' in match rule for bram type %s.\n",
|
||||
it.first.c_str(), log_id(match.name));
|
||||
it.first.c_str(), match.name.unescape());
|
||||
if (match_properties[it.first] <= it.second)
|
||||
continue;
|
||||
log(" Rule for bram type %s rejected: requirement 'max %s %d' not met.\n",
|
||||
log_id(match.name), it.first.c_str(), it.second);
|
||||
match.name.unescape(), it.first.c_str(), it.second);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -759,13 +759,13 @@ grow_read_ports:;
|
|||
if (!exists)
|
||||
ss << "!";
|
||||
IdString key = std::get<1>(sums.front());
|
||||
ss << log_id(key);
|
||||
ss << key.unescape();
|
||||
const Const &value = rules.map_case(std::get<2>(sums.front()));
|
||||
if (exists && value != Const(1))
|
||||
ss << "=\"" << value.decode_string() << "\"";
|
||||
|
||||
log(" Rule for bram type %s rejected: requirement 'attribute %s ...' not met.\n",
|
||||
log_id(match.name), ss.str().c_str());
|
||||
match.name.unescape(), ss.str().c_str());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -874,7 +874,7 @@ grow_read_ports:;
|
|||
for (int dupidx = 0; dupidx < dup_count; dupidx++)
|
||||
{
|
||||
Cell *c = module->addCell(module->uniquify(stringf("%s.%d.%d.%d", mem.memid, grid_d, grid_a, dupidx)), bram.name);
|
||||
log(" Creating %s cell at grid position <%d %d %d>: %s\n", log_id(bram.name), grid_d, grid_a, dupidx, log_id(c));
|
||||
log(" Creating %s cell at grid position <%d %d %d>: %s\n", bram.name.unescape(), grid_d, grid_a, dupidx, c);
|
||||
|
||||
for (auto &vp : variant_params)
|
||||
c->setParam(vp.first, vp.second);
|
||||
|
|
@ -1004,7 +1004,7 @@ grow_read_ports:;
|
|||
|
||||
void handle_memory(Mem &mem, const rules_t &rules, FfInitVals *initvals)
|
||||
{
|
||||
log("Processing %s.%s:\n", log_id(mem.module), log_id(mem.memid));
|
||||
log("Processing %s.%s:\n", mem.module, mem.memid.unescape());
|
||||
mem.narrow();
|
||||
|
||||
bool cell_init = !mem.inits.empty();
|
||||
|
|
@ -1031,7 +1031,7 @@ void handle_memory(Mem &mem, const rules_t &rules, FfInitVals *initvals)
|
|||
auto &match = rules.matches.at(i);
|
||||
|
||||
if (!rules.brams.count(rules.matches[i].name))
|
||||
log_error("No bram description for resource %s found!\n", log_id(rules.matches[i].name));
|
||||
log_error("No bram description for resource %s found!\n", rules.matches[i].name.unescape());
|
||||
|
||||
for (int vi = 0; vi < GetSize(rules.brams.at(match.name)); vi++)
|
||||
{
|
||||
|
|
@ -1047,7 +1047,7 @@ void handle_memory(Mem &mem, const rules_t &rules, FfInitVals *initvals)
|
|||
avail_wr_ports += GetSize(bram.ports) < j ? bram.ports.at(j) : 0;
|
||||
}
|
||||
|
||||
log(" Checking rule #%d for bram type %s (variant %d):\n", i+1, log_id(bram.name), bram.variant);
|
||||
log(" Checking rule #%d for bram type %s (variant %d):\n", i+1, bram.name.unescape(), bram.variant);
|
||||
log(" Bram geometry: abits=%d dbits=%d wports=%d rports=%d\n", bram.abits, bram.dbits, avail_wr_ports, avail_rd_ports);
|
||||
|
||||
int dups = avail_rd_ports ? (match_properties["rports"] + avail_rd_ports - 1) / avail_rd_ports : 1;
|
||||
|
|
@ -1077,11 +1077,11 @@ void handle_memory(Mem &mem, const rules_t &rules, FfInitVals *initvals)
|
|||
goto next_match_rule;
|
||||
|
||||
log(" Metrics for %s: awaste=%d dwaste=%d bwaste=%d waste=%d efficiency=%d\n",
|
||||
log_id(match.name), awaste, dwaste, bwaste, waste, efficiency);
|
||||
match.name.unescape(), awaste, dwaste, bwaste, waste, efficiency);
|
||||
|
||||
if (cell_init && bram.init == 0) {
|
||||
log(" Rule #%d for bram type %s (variant %d) rejected: cannot be initialized.\n",
|
||||
i+1, log_id(bram.name), bram.variant);
|
||||
i+1, bram.name.unescape(), bram.variant);
|
||||
goto next_match_rule;
|
||||
}
|
||||
|
||||
|
|
@ -1090,11 +1090,11 @@ void handle_memory(Mem &mem, const rules_t &rules, FfInitVals *initvals)
|
|||
continue;
|
||||
if (!match_properties.count(it.first))
|
||||
log_error("Unknown property '%s' in match rule for bram type %s.\n",
|
||||
it.first.c_str(), log_id(match.name));
|
||||
it.first.c_str(), match.name.unescape());
|
||||
if (match_properties[it.first] >= it.second)
|
||||
continue;
|
||||
log(" Rule #%d for bram type %s (variant %d) rejected: requirement 'min %s %d' not met.\n",
|
||||
i+1, log_id(bram.name), bram.variant, it.first.c_str(), it.second);
|
||||
i+1, bram.name.unescape(), bram.variant, it.first.c_str(), it.second);
|
||||
goto next_match_rule;
|
||||
}
|
||||
|
||||
|
|
@ -1103,11 +1103,11 @@ void handle_memory(Mem &mem, const rules_t &rules, FfInitVals *initvals)
|
|||
continue;
|
||||
if (!match_properties.count(it.first))
|
||||
log_error("Unknown property '%s' in match rule for bram type %s.\n",
|
||||
it.first.c_str(), log_id(match.name));
|
||||
it.first.c_str(), match.name.unescape());
|
||||
if (match_properties[it.first] <= it.second)
|
||||
continue;
|
||||
log(" Rule #%d for bram type %s (variant %d) rejected: requirement 'max %s %d' not met.\n",
|
||||
i+1, log_id(bram.name), bram.variant, it.first.c_str(), it.second);
|
||||
i+1, bram.name.unescape(), bram.variant, it.first.c_str(), it.second);
|
||||
goto next_match_rule;
|
||||
}
|
||||
|
||||
|
|
@ -1137,18 +1137,18 @@ void handle_memory(Mem &mem, const rules_t &rules, FfInitVals *initvals)
|
|||
if (!exists)
|
||||
ss << "!";
|
||||
IdString key = std::get<1>(sums.front());
|
||||
ss << log_id(key);
|
||||
ss << key.unescape();
|
||||
const Const &value = rules.map_case(std::get<2>(sums.front()));
|
||||
if (exists && value != Const(1))
|
||||
ss << "=\"" << value.decode_string() << "\"";
|
||||
|
||||
log(" Rule for bram type %s (variant %d) rejected: requirement 'attribute %s ...' not met.\n",
|
||||
log_id(bram.name), bram.variant, ss.str().c_str());
|
||||
bram.name.unescape(), bram.variant, ss.str().c_str());
|
||||
goto next_match_rule;
|
||||
}
|
||||
}
|
||||
|
||||
log(" Rule #%d for bram type %s (variant %d) accepted.\n", i+1, log_id(bram.name), bram.variant);
|
||||
log(" Rule #%d for bram type %s (variant %d) accepted.\n", i+1, bram.name.unescape(), bram.variant);
|
||||
|
||||
if (or_next_if_better || !best_rule_cache.empty())
|
||||
{
|
||||
|
|
@ -1156,7 +1156,7 @@ void handle_memory(Mem &mem, const rules_t &rules, FfInitVals *initvals)
|
|||
log_error("Found 'or_next_if_better' in last match rule.\n");
|
||||
|
||||
if (!replace_memory(mem, rules, initvals, bram, match, match_properties, 1)) {
|
||||
log(" Mapping to bram type %s failed.\n", log_id(match.name));
|
||||
log(" Mapping to bram type %s failed.\n", match.name.unescape());
|
||||
failed_brams.insert(pair<IdString, int>(bram.name, bram.variant));
|
||||
goto next_match_rule;
|
||||
}
|
||||
|
|
@ -1183,12 +1183,12 @@ void handle_memory(Mem &mem, const rules_t &rules, FfInitVals *initvals)
|
|||
|
||||
auto &best_bram = rules.brams.at(rules.matches.at(best_rule.first).name).at(best_rule.second);
|
||||
if (!replace_memory(mem, rules, initvals, best_bram, rules.matches.at(best_rule.first), match_properties, 2))
|
||||
log_error("Mapping to bram type %s (variant %d) after pre-selection failed.\n", log_id(best_bram.name), best_bram.variant);
|
||||
log_error("Mapping to bram type %s (variant %d) after pre-selection failed.\n", best_bram.name.unescape(), best_bram.variant);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!replace_memory(mem, rules, initvals, bram, match, match_properties, 0)) {
|
||||
log(" Mapping to bram type %s failed.\n", log_id(match.name));
|
||||
log(" Mapping to bram type %s failed.\n", match.name.unescape());
|
||||
failed_brams.insert(pair<IdString, int>(bram.name, bram.variant));
|
||||
goto next_match_rule;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ struct MemMapping {
|
|||
if (!check_init(rdef))
|
||||
continue;
|
||||
if (rdef.prune_rom && mem.wr_ports.empty()) {
|
||||
log_debug("memory %s.%s: rejecting mapping to %s: ROM mapping disabled (prune_rom set)\n", log_id(mem.module->name), log_id(mem.memid), log_id(rdef.id));
|
||||
log_debug("memory %s.%s: rejecting mapping to %s: ROM mapping disabled (prune_rom set)\n", mem.module->name.unescape(), mem.memid.unescape(), rdef.id.unescape());
|
||||
continue;
|
||||
}
|
||||
MemConfig cfg;
|
||||
|
|
@ -323,7 +323,7 @@ struct MemMapping {
|
|||
|
||||
void log_reject(const Ram &ram, std::string message) {
|
||||
if(ys_debug(1)) {
|
||||
rejected_cfg_debug_msgs += stringf("can't map to to %s: ", log_id(ram.id));
|
||||
rejected_cfg_debug_msgs += stringf("can't map to to %s: ", ram.id.unescape());
|
||||
rejected_cfg_debug_msgs += message;
|
||||
rejected_cfg_debug_msgs += "\n";
|
||||
}
|
||||
|
|
@ -338,7 +338,7 @@ struct MemMapping {
|
|||
rejected_cfg_debug_msgs += portname;
|
||||
first = false;
|
||||
}
|
||||
rejected_cfg_debug_msgs += stringf("] of %s: ", log_id(ram.id));
|
||||
rejected_cfg_debug_msgs += stringf("] of %s: ", ram.id.unescape());
|
||||
rejected_cfg_debug_msgs += message;
|
||||
rejected_cfg_debug_msgs += "\n";
|
||||
}
|
||||
|
|
@ -361,7 +361,7 @@ struct MemMapping {
|
|||
rejected_cfg_debug_msgs += portname;
|
||||
first = false;
|
||||
}
|
||||
rejected_cfg_debug_msgs += stringf("] of %s: ", log_id(ram.id));
|
||||
rejected_cfg_debug_msgs += stringf("] of %s: ", ram.id.unescape());
|
||||
rejected_cfg_debug_msgs += message;
|
||||
rejected_cfg_debug_msgs += "\n";
|
||||
}
|
||||
|
|
@ -380,7 +380,7 @@ void MemMapping::dump_configs(int stage) {
|
|||
default:
|
||||
abort();
|
||||
}
|
||||
log_debug("Memory %s.%s mapping candidates (%s):\n", log_id(mem.module->name), log_id(mem.memid), stage_name);
|
||||
log_debug("Memory %s.%s mapping candidates (%s):\n", mem.module->name.unescape(), mem.memid.unescape(), stage_name);
|
||||
if (logic_ok) {
|
||||
log_debug("- logic fallback\n");
|
||||
log_debug(" - cost: %f\n", logic_cost);
|
||||
|
|
@ -391,7 +391,7 @@ void MemMapping::dump_configs(int stage) {
|
|||
}
|
||||
|
||||
void MemMapping::dump_config(MemConfig &cfg) {
|
||||
log_debug("- %s:\n", log_id(cfg.def->id));
|
||||
log_debug("- %s:\n", cfg.def->id.unescape());
|
||||
for (auto &it: cfg.def->options)
|
||||
log_debug(" - option %s %s\n", it.first, log_const(it.second));
|
||||
log_debug(" - emulation score: %d\n", cfg.score_emu);
|
||||
|
|
@ -527,7 +527,7 @@ void MemMapping::determine_style() {
|
|||
auto find_attr = search_for_attribute(mem, ID::lram);
|
||||
if (find_attr.first && find_attr.second.as_bool()) {
|
||||
kind = RamKind::Huge;
|
||||
log("found attribute 'lram' on memory %s.%s, forced mapping to huge RAM\n", log_id(mem.module->name), log_id(mem.memid));
|
||||
log("found attribute 'lram' on memory %s.%s, forced mapping to huge RAM\n", mem.module->name.unescape(), mem.memid.unescape());
|
||||
return;
|
||||
}
|
||||
for (auto attr: {ID::ram_block, ID::rom_block, ID::ram_style, ID::rom_style, ID::ramstyle, ID::romstyle, ID::syn_ramstyle, ID::syn_romstyle}) {
|
||||
|
|
@ -536,7 +536,7 @@ void MemMapping::determine_style() {
|
|||
Const val = find_attr.second;
|
||||
if (val == 1) {
|
||||
kind = RamKind::NotLogic;
|
||||
log("found attribute '%s = 1' on memory %s.%s, disabled mapping to FF\n", log_id(attr), log_id(mem.module->name), log_id(mem.memid));
|
||||
log("found attribute '%s = 1' on memory %s.%s, disabled mapping to FF\n", attr.unescape(), mem.module->name.unescape(), mem.memid.unescape());
|
||||
return;
|
||||
}
|
||||
std::string val_s = val.decode_string();
|
||||
|
|
@ -549,20 +549,20 @@ void MemMapping::determine_style() {
|
|||
// Nothing.
|
||||
} else if (val_s == "logic" || val_s == "registers") {
|
||||
kind = RamKind::Logic;
|
||||
log("found attribute '%s = %s' on memory %s.%s, forced mapping to FF\n", log_id(attr), val_s, log_id(mem.module->name), log_id(mem.memid));
|
||||
log("found attribute '%s = %s' on memory %s.%s, forced mapping to FF\n", attr.unescape(), val_s, mem.module->name.unescape(), mem.memid.unescape());
|
||||
} else if (val_s == "distributed") {
|
||||
kind = RamKind::Distributed;
|
||||
log("found attribute '%s = %s' on memory %s.%s, forced mapping to distributed RAM\n", log_id(attr), val_s, log_id(mem.module->name), log_id(mem.memid));
|
||||
log("found attribute '%s = %s' on memory %s.%s, forced mapping to distributed RAM\n", attr.unescape(), val_s, mem.module->name.unescape(), mem.memid.unescape());
|
||||
} else if (val_s == "block" || val_s == "block_ram" || val_s == "ebr") {
|
||||
kind = RamKind::Block;
|
||||
log("found attribute '%s = %s' on memory %s.%s, forced mapping to block RAM\n", log_id(attr), val_s, log_id(mem.module->name), log_id(mem.memid));
|
||||
log("found attribute '%s = %s' on memory %s.%s, forced mapping to block RAM\n", attr.unescape(), val_s, mem.module->name.unescape(), mem.memid.unescape());
|
||||
} else if (val_s == "huge" || val_s == "ultra") {
|
||||
kind = RamKind::Huge;
|
||||
log("found attribute '%s = %s' on memory %s.%s, forced mapping to huge RAM\n", log_id(attr), val_s, log_id(mem.module->name), log_id(mem.memid));
|
||||
log("found attribute '%s = %s' on memory %s.%s, forced mapping to huge RAM\n", attr.unescape(), val_s, mem.module->name.unescape(), mem.memid.unescape());
|
||||
} else {
|
||||
kind = RamKind::NotLogic;
|
||||
style = val_s;
|
||||
log("found attribute '%s = %s' on memory %s.%s, forced mapping to %s RAM\n", log_id(attr), val_s, log_id(mem.module->name), log_id(mem.memid), val_s);
|
||||
log("found attribute '%s = %s' on memory %s.%s, forced mapping to %s RAM\n", attr.unescape(), val_s, mem.module->name.unescape(), mem.memid.unescape(), val_s);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -1991,7 +1991,7 @@ void MemMapping::emit_port(const MemConfig &cfg, std::vector<Cell*> &cells, cons
|
|||
}
|
||||
|
||||
void MemMapping::emit(const MemConfig &cfg) {
|
||||
log("mapping memory %s.%s via %s\n", log_id(mem.module->name), log_id(mem.memid), log_id(cfg.def->id));
|
||||
log("mapping memory %s.%s via %s\n", mem.module->name.unescape(), mem.memid.unescape(), cfg.def->id.unescape());
|
||||
// First, handle emulations.
|
||||
if (cfg.emu_read_first)
|
||||
mem.emulate_read_first(&worker.initvals);
|
||||
|
|
@ -2252,9 +2252,9 @@ struct MemoryLibMapPass : public Pass {
|
|||
int best = map.logic_cost;
|
||||
if (!map.logic_ok) {
|
||||
if (map.cfgs.empty()) {
|
||||
log_debug("Rejected candidates for mapping memory %s.%s:\n", log_id(module->name), log_id(mem.memid));
|
||||
log_debug("Rejected candidates for mapping memory %s.%s:\n", module->name.unescape(), mem.memid.unescape());
|
||||
log_debug("%s", map.rejected_cfg_debug_msgs);
|
||||
log_error("no valid mapping found for memory %s.%s\n", log_id(module->name), log_id(mem.memid));
|
||||
log_error("no valid mapping found for memory %s.%s\n", module->name.unescape(), mem.memid.unescape());
|
||||
}
|
||||
idx = 0;
|
||||
best = map.cfgs[0].cost;
|
||||
|
|
@ -2266,7 +2266,7 @@ struct MemoryLibMapPass : public Pass {
|
|||
}
|
||||
}
|
||||
if (idx == -1) {
|
||||
log("using FF mapping for memory %s.%s\n", log_id(module->name), log_id(mem.memid));
|
||||
log("using FF mapping for memory %s.%s\n", module->name.unescape(), mem.memid.unescape());
|
||||
} else {
|
||||
map.emit(map.cfgs[idx]);
|
||||
// Rebuild indices after modifying module
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ struct MemoryMemxPass : public Pass {
|
|||
{
|
||||
if (port.clk_enable)
|
||||
log_error("Memory %s.%s has a synchronous read port. Synchronous read ports are not supported by memory_memx!\n",
|
||||
log_id(module), log_id(mem.memid));
|
||||
module, mem.memid.unescape());
|
||||
|
||||
SigSpec addr_ok = make_addr_check(mem, port.addr);
|
||||
Wire *raw_rdata = module->addWire(NEW_ID, GetSize(port.data));
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ struct MemoryShareWorker
|
|||
if (GetSize(mem.rd_ports) <= 1)
|
||||
return false;
|
||||
|
||||
log("Consolidating read ports of memory %s.%s by address:\n", log_id(module), log_id(mem.memid));
|
||||
log("Consolidating read ports of memory %s.%s by address:\n", module, mem.memid.unescape());
|
||||
|
||||
bool changed = false;
|
||||
int abits = 0;
|
||||
|
|
@ -197,7 +197,7 @@ struct MemoryShareWorker
|
|||
if (GetSize(mem.wr_ports) <= 1)
|
||||
return false;
|
||||
|
||||
log("Consolidating write ports of memory %s.%s by address:\n", log_id(module), log_id(mem.memid));
|
||||
log("Consolidating write ports of memory %s.%s by address:\n", module, mem.memid.unescape());
|
||||
|
||||
bool changed = false;
|
||||
int abits = 0;
|
||||
|
|
@ -316,7 +316,7 @@ struct MemoryShareWorker
|
|||
if (eligible_ports.size() <= 1)
|
||||
return;
|
||||
|
||||
log("Consolidating write ports of memory %s.%s using sat-based resource sharing:\n", log_id(module), log_id(mem.memid));
|
||||
log("Consolidating write ports of memory %s.%s using sat-based resource sharing:\n", module, mem.memid.unescape());
|
||||
|
||||
// Group eligible ports by clock domain and width.
|
||||
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ struct MuxpackWorker
|
|||
{
|
||||
for (auto cell : candidate_cells)
|
||||
{
|
||||
log_debug("Considering %s (%s)\n", log_id(cell), log_id(cell->type));
|
||||
log_debug("Considering %s (%s)\n", cell, cell->type.unescape());
|
||||
|
||||
SigSpec a_sig = sigmap(cell->getPort(ID::A));
|
||||
if (cell->type == ID($mux)) {
|
||||
|
|
@ -272,7 +272,7 @@ struct MuxpackWorker
|
|||
Cell *last_cell = chain[cursor+cases-1];
|
||||
|
||||
log("Converting %s.%s ... %s.%s to a pmux with %d cases.\n",
|
||||
log_id(module), log_id(first_cell), log_id(module), log_id(last_cell), cases);
|
||||
module, first_cell, module, last_cell, cases);
|
||||
|
||||
mux_count += cases;
|
||||
pmux_count += 1;
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ struct OptBalanceTreeWorker {
|
|||
if (inner_cells)
|
||||
{
|
||||
// Create a tree
|
||||
log_debug(" Creating tree for %s with %d sources and %d inner cells...\n", log_id(head_cell), GetSize(sources), inner_cells);
|
||||
log_debug(" Creating tree for %s with %d sources and %d inner cells...\n", head_cell, GetSize(sources), inner_cells);
|
||||
|
||||
// Build a vector of all source signals
|
||||
vector<SigSpec> source_signals;
|
||||
|
|
@ -369,7 +369,7 @@ struct OptBalanceTreePass : public Pass {
|
|||
|
||||
// Log stats
|
||||
for (auto cell_type : cell_types)
|
||||
log("Converted %d %s cells into trees.\n", cell_count[cell_type], log_id(cell_type));
|
||||
log("Converted %d %s cells into trees.\n", cell_count[cell_type], cell_type.unescape());
|
||||
|
||||
// Clean up
|
||||
Yosys::run_pass("clean -purge");
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue