summaryrefslogtreecommitdiff
path: root/passes
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2013-11-28 21:02:19 +0100
committerClifford Wolf <clifford@clifford.at>2013-11-28 21:02:19 +0100
commit792bbad44882914b9a0d3c20acfead7f67a46dbd (patch)
tree5df5d98bf2472de5738fbde20a675a23f744483f /passes
parent9595eca181d94064fa20e4746c3888f3c8091f15 (diff)
Fixes and improvements in "show" command
Diffstat (limited to 'passes')
-rw-r--r--passes/cmds/show.cc52
1 files changed, 42 insertions, 10 deletions
diff --git a/passes/cmds/show.cc b/passes/cmds/show.cc
index c4d93333..fc3575c6 100644
--- a/passes/cmds/show.cc
+++ b/passes/cmds/show.cc
@@ -46,6 +46,8 @@ struct ShowWorker
uint32_t currentColor;
bool genWidthLabels;
bool stretchIO;
+ bool enumerateIds;
+ bool abbreviateIds;
int page_counter;
const std::vector<std::pair<std::string, RTLIL::Selection>> &color_selections;
@@ -114,11 +116,17 @@ struct ShowWorker
return "";
if (id[0] == '$' && is_name) {
- if (autonames.count(id) == 0) {
- autonames[id] = autonames.size() + 1;
- log("Generated short name for internal identifier: _%d_ -> %s\n", autonames[id], id.c_str());
+ if (enumerateIds) {
+ if (autonames.count(id) == 0) {
+ autonames[id] = autonames.size() + 1;
+ log("Generated short name for internal identifier: _%d_ -> %s\n", autonames[id], id.c_str());
+ }
+ id = stringf("_%d_", autonames[id]);
+ } else if (abbreviateIds) {
+ const char *p = id.c_str();
+ const char *q = strrchr(p, '$');
+ id = std::string(q);
}
- id = stringf("_%d_", autonames[id]);
}
if (id[0] == '\\')
@@ -377,6 +385,8 @@ struct ShowWorker
code += gen_portbox("", sig, false, &node);
fprintf(f, "%s", code.c_str());
net_conn_map[node].out.insert(stringf("p%d", pidx));
+ net_conn_map[node].bits = sig.width;
+ net_conn_map[node].color = nextColor(sig, net_conn_map[node].color);
}
for (auto &sig : output_signals) {
@@ -384,12 +394,14 @@ struct ShowWorker
code += gen_portbox("", sig, true, &node);
fprintf(f, "%s", code.c_str());
net_conn_map[node].in.insert(stringf("p%d", pidx));
+ net_conn_map[node].bits = sig.width;
+ net_conn_map[node].color = nextColor(sig, net_conn_map[node].color);
}
std::string proc_src = RTLIL::unescape_id(proc->name);
if (proc->attributes.count("\\src") > 0)
proc_src = proc->attributes.at("\\src").str;
- fprintf(f, "p%d [shape=box, style=rounded, label=\"PROC\\n%s\"];\n", pidx, proc_src.c_str());
+ fprintf(f, "p%d [shape=box, style=rounded, label=\"PROC %s\\n%s\"];\n", pidx, escape(proc->name, true), proc_src.c_str());
}
for (auto &conn : module->connections)
@@ -414,8 +426,8 @@ struct ShowWorker
if (left_node[0] == 'x' && right_node[0] == 'x') {
currentColor = xorshift32(currentColor);
- fprintf(f, "%s:e -> %s:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, %s, %s];\n", left_node.c_str(), right_node.c_str(), nextColor(conn).c_str(), widthLabel(conn.first.width).c_str());
- } else {
+ fprintf(f, "%s:e -> %s:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, %s, %s];\n", left_node.c_str(), right_node.c_str(), nextColor(conn).c_str(), widthLabel(conn.first.width).c_str());
+ } else {
net_conn_map[right_node].bits = conn.first.width;
net_conn_map[right_node].color = nextColor(conn, net_conn_map[right_node].color);
net_conn_map[left_node].bits = conn.first.width;
@@ -458,10 +470,12 @@ struct ShowWorker
fprintf(f, "};\n");
}
- ShowWorker(FILE *f, RTLIL::Design *design, std::vector<RTLIL::Design*> &libs, uint32_t colorSeed, bool genWidthLabels, bool stretchIO,
+ ShowWorker(FILE *f, RTLIL::Design *design, std::vector<RTLIL::Design*> &libs, uint32_t colorSeed,
+ bool genWidthLabels, bool stretchIO, bool enumerateIds, bool abbreviateIds,
const std::vector<std::pair<std::string, RTLIL::Selection>> &color_selections,
const std::vector<std::pair<std::string, RTLIL::Selection>> &label_selections) :
- f(f), design(design), currentColor(colorSeed), genWidthLabels(genWidthLabels), stretchIO(stretchIO),
+ f(f), design(design), currentColor(colorSeed), genWidthLabels(genWidthLabels),
+ stretchIO(stretchIO), enumerateIds(enumerateIds), abbreviateIds(abbreviateIds),
color_selections(color_selections), label_selections(label_selections)
{
ct.setup_internals();
@@ -543,6 +557,12 @@ struct ShowPass : public Pass {
log(" -pause\n");
log(" wait for the use to press enter to before returning\n");
log("\n");
+ log(" -enum\n");
+ log(" enumerate objects with internal ($-prefixed) names\n");
+ log("\n");
+ log(" -long\n");
+ log(" do not abbeviate objects with internal ($-prefixed) names\n");
+ log("\n");
log("When no <format> is specified, SVG is used. When no <format> and <viewer> is\n");
log("specified, 'yosys-svgviewer' is used to display the schematic.\n");
log("\n");
@@ -567,6 +587,8 @@ struct ShowPass : public Pass {
bool flag_width = false;
bool flag_stretch = false;
bool flag_pause = false;
+ bool flag_enum = false;
+ bool flag_abbeviate = true;
size_t argidx;
for (argidx = 1; argidx < args.size(); argidx++)
@@ -622,6 +644,16 @@ struct ShowPass : public Pass {
flag_pause= true;
continue;
}
+ if (arg == "-enum") {
+ flag_enum = true;
+ flag_abbeviate = false;
+ continue;
+ }
+ if (arg == "-long") {
+ flag_enum = false;
+ flag_abbeviate = false;
+ continue;
+ }
break;
}
extra_args(args, argidx, design);
@@ -663,7 +695,7 @@ struct ShowPass : public Pass {
delete lib;
log_cmd_error("Can't open dot file `%s' for writing.\n", dot_file.c_str());
}
- ShowWorker worker(f, design, libs, colorSeed, flag_width, flag_stretch, color_selections, label_selections);
+ ShowWorker worker(f, design, libs, colorSeed, flag_width, flag_stretch, flag_enum, flag_abbeviate, color_selections, label_selections);
fclose(f);
for (auto lib : libs)