From 792bbad44882914b9a0d3c20acfead7f67a46dbd Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Thu, 28 Nov 2013 21:02:19 +0100 Subject: [PATCH] Fixes and improvements in "show" command --- passes/cmds/show.cc | 52 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/passes/cmds/show.cc b/passes/cmds/show.cc index c4d933332..fc3575c62 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> &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 &libs, uint32_t colorSeed, bool genWidthLabels, bool stretchIO, + ShowWorker(FILE *f, RTLIL::Design *design, std::vector &libs, uint32_t colorSeed, + bool genWidthLabels, bool stretchIO, bool enumerateIds, bool abbreviateIds, const std::vector> &color_selections, const std::vector> &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 is specified, SVG is used. When no and 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) -- 2.30.2