Skip to content

Commit 56ed9e8

Browse files
committed
vpr: added option for dangling comb nodes
Signed-off-by: Alessandro Comodi <[email protected]>
1 parent 2bb3101 commit 56ed9e8

File tree

5 files changed

+21
-6
lines changed

5 files changed

+21
-6
lines changed

vpr/src/base/read_options.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -949,6 +949,16 @@ static argparse::ArgumentParser create_arg_parser(std::string prog_name, t_optio
949949
"This option should be only used for development purposes.")
950950
.default_value("");
951951

952+
gen_grp.add_argument<bool, ParseOnOff>(args.allow_dangling_combinational_nodes, "--allow_dangling_combinational_nodes")
953+
.help(
954+
"Option to allow dangling combinational nodes in the timing graph.\n"
955+
"This option should normally be off, as dangling combinational nodes are unusual\n"
956+
"in the timing graph and may indicate a problem in the circuit or architecture.\n"
957+
"Unless you understand why your architecture/circuit can have valid dangling combinational nodes, this option should be off.\n"
958+
"In general this is a dev-only option and should not be turned on by the end-user.")
959+
.default_value("off")
960+
.show_in(argparse::ShowIn::HELP_ONLY);
961+
952962
auto& file_grp = parser.add_argument_group("file options");
953963

954964
file_grp.add_argument(args.BlifFile, "--circuit_file")

vpr/src/base/read_options.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ struct t_options {
5252
argparse::ArgValue<bool> strict_checks;
5353
argparse::ArgValue<std::string> disable_errors;
5454
argparse::ArgValue<std::string> suppress_warnings;
55+
argparse::ArgValue<bool> allow_dangling_combinational_nodes;
5556

5657
/* Atom netlist options */
5758
argparse::ArgValue<bool> absorb_buffer_luts;

vpr/src/base/vpr_api.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ void vpr_init(const int argc, const char** argv, t_options* options, t_vpr_setup
304304
auto& timing_ctx = g_vpr_ctx.mutable_timing();
305305
{
306306
vtr::ScopedStartFinishTimer t("Build Timing Graph");
307-
timing_ctx.graph = TimingGraphBuilder(atom_ctx.nlist, atom_ctx.lookup).timing_graph();
307+
timing_ctx.graph = TimingGraphBuilder(atom_ctx.nlist, atom_ctx.lookup).timing_graph(options->allow_dangling_combinational_nodes);
308308
VTR_LOG(" Timing Graph Nodes: %zu\n", timing_ctx.graph->nodes().size());
309309
VTR_LOG(" Timing Graph Edges: %zu\n", timing_ctx.graph->edges().size());
310310
VTR_LOG(" Timing Graph Levels: %zu\n", timing_ctx.graph->levels().size());

vpr/src/timing/timing_graph_builder.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ TimingGraphBuilder::TimingGraphBuilder(const AtomNetlist& netlist,
4040
//pass
4141
}
4242

43-
std::unique_ptr<TimingGraph> TimingGraphBuilder::timing_graph() {
44-
build();
43+
std::unique_ptr<TimingGraph> TimingGraphBuilder::timing_graph(bool allow_dangling_combinational_nodes) {
44+
build(allow_dangling_combinational_nodes);
4545
opt_memory_layout();
4646

4747
VTR_ASSERT(tg_);
@@ -50,9 +50,13 @@ std::unique_ptr<TimingGraph> TimingGraphBuilder::timing_graph() {
5050
return std::move(tg_);
5151
}
5252

53-
void TimingGraphBuilder::build() {
53+
void TimingGraphBuilder::build(bool allow_dangling_combinational_nodes) {
5454
tg_ = std::make_unique<tatum::TimingGraph>();
5555

56+
// Optionally allow dangling combinational nodes.
57+
// Set by `--allow_dangling_combinational_nodes on`. Default value is false
58+
tg_->set_allow_dangling_combinational_nodes(allow_dangling_combinational_nodes);
59+
5660
for (AtomBlockId blk : netlist_.blocks()) {
5761
AtomBlockType blk_type = netlist_.block_type(blk);
5862

vpr/src/timing/timing_graph_builder.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ class TimingGraphBuilder {
1010
TimingGraphBuilder(const AtomNetlist& netlist,
1111
AtomLookup& netlist_lookup);
1212

13-
std::unique_ptr<tatum::TimingGraph> timing_graph();
13+
std::unique_ptr<tatum::TimingGraph> timing_graph(bool allow_dangling_combinational_nodes);
1414

1515
private:
16-
void build();
16+
void build(bool allow_dangling_combinational_nodes);
1717
void opt_memory_layout();
1818

1919
void add_io_to_timing_graph(const AtomBlockId blk);

0 commit comments

Comments
 (0)