From 5afa31d0314caef74270cb6be8bdfac115da2068 Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Sun, 27 Jan 2019 11:43:55 -0800 Subject: [PATCH] [timing] Add legend --- common/timing.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/common/timing.cc b/common/timing.cc index 212c88c8..69932d63 100644 --- a/common/timing.cc +++ b/common/timing.cc @@ -642,7 +642,14 @@ struct Timing log_info("Writing timing.dot\n"); std::ofstream f("timing.dot"); f << "digraph T {" << std::endl; - f << "\tlabel=\"clk_period=" << clk_period << "\";" << std::endl; + f << "\tlabel=<clk_period=" << clk_period << "" + << "" + << "
Nodes represent ports, clustered by their cells, and annotated with max arrival times." + << "
Filled nodes represent timing start points (i.e. flip-flops)." + << "
Solid edges represent inter-cell delays (i.e. nets) and are annotated with net name at its center, as well as net delay/budget at its head." + << "
Dotted edges represent intra-cell delays and are annotated with this value." + << "
>;" + << std::endl; f << "\tlabelloc=t;" << std::endl; // Use the new ranking algorithm in dot to allow ranking of nodes across clusters f << "\tnewrank=true;" << std::endl; @@ -699,9 +706,9 @@ struct Timing output_ports.push_back(port.first); // Label port f << "\t\t" << "\"" << cell.second->name.str(ctx) << "." << port.first.str(ctx) << "\" [label = \"" << port.first.str(ctx); - for (const auto &i : net_data.at(port.second.net)) { + // A:d for each clock event, label node with event as well as max arrival time + for (const auto &i : net_data.at(port.second.net)) f << "\\n" << (i.first.edge == RISING_EDGE ? "posedge" : "negedge") << " " << i.first.clock.str(ctx) << " @ " << i.second.max_arrival; - } f << "\""; // IOB outputs are startpoints if (ctx->getBelIOB(cell.second->bel))