blob: d1f45e50aad041d82c99a277a8d8e9bb96c705bb [file] [log] [blame]
#ifndef READ_OPTIONS_H
#define READ_OPTIONS_H
#include "read_blif.h"
#include "vpr_types.h"
#include "constant_nets.h"
#include "argparse_value.hpp"
#include "argparse.hpp"
struct t_options {
/* File names */
argparse::ArgValue<std::string> ArchFile;
argparse::ArgValue<std::string> CircuitName;
argparse::ArgValue<std::string> NetFile;
argparse::ArgValue<std::string> PlaceFile;
argparse::ArgValue<std::string> RouteFile;
argparse::ArgValue<std::string> BlifFile;
argparse::ArgValue<std::string> ActFile;
argparse::ArgValue<std::string> PowerFile;
argparse::ArgValue<std::string> CmosTechFile;
argparse::ArgValue<std::string> SDCFile;
argparse::ArgValue<e_circuit_format> circuit_format;
argparse::ArgValue<std::string> out_file_prefix;
argparse::ArgValue<std::string> pad_loc_file;
argparse::ArgValue<std::string> write_rr_graph_file;
argparse::ArgValue<std::string> read_rr_graph_file;
argparse::ArgValue<std::string> write_placement_delay_lookup;
argparse::ArgValue<std::string> read_placement_delay_lookup;
argparse::ArgValue<std::string> write_router_lookahead;
argparse::ArgValue<std::string> read_router_lookahead;
/* Stage Options */
argparse::ArgValue<bool> do_packing;
argparse::ArgValue<bool> do_placement;
argparse::ArgValue<bool> do_routing;
argparse::ArgValue<bool> do_analysis;
argparse::ArgValue<bool> do_power;
/* Graphics Options */
argparse::ArgValue<bool> show_graphics; //Enable argparse::ArgValue<int>eractive graphics?
argparse::ArgValue<int> GraphPause;
argparse::ArgValue<bool> save_graphics;
/* General options */
argparse::ArgValue<bool> show_help;
argparse::ArgValue<bool> show_version;
argparse::ArgValue<size_t> num_workers;
argparse::ArgValue<bool> timing_analysis;
argparse::ArgValue<bool> CreateEchoFile;
argparse::ArgValue<bool> verify_file_digests;
argparse::ArgValue<std::string> device_layout;
argparse::ArgValue<float> target_device_utilization;
argparse::ArgValue<e_constant_net_method> constant_net_method;
argparse::ArgValue<e_clock_modeling> clock_modeling;
argparse::ArgValue<bool> exit_before_pack;
argparse::ArgValue<bool> strict_checks;
argparse::ArgValue<std::string> disable_errors;
argparse::ArgValue<std::string> suppress_warnings;
argparse::ArgValue<bool> allow_dangling_combinational_nodes;
/* Atom netlist options */
argparse::ArgValue<bool> absorb_buffer_luts;
argparse::ArgValue<e_const_gen_inference> const_gen_inference;
argparse::ArgValue<bool> sweep_dangling_primary_ios;
argparse::ArgValue<bool> sweep_dangling_nets;
argparse::ArgValue<bool> sweep_dangling_blocks;
argparse::ArgValue<bool> sweep_constant_primary_outputs;
argparse::ArgValue<int> netlist_verbosity;
/* Clustering options */
argparse::ArgValue<bool> connection_driven_clustering;
argparse::ArgValue<e_unrelated_clustering> allow_unrelated_clustering;
argparse::ArgValue<float> alpha_clustering;
argparse::ArgValue<float> beta_clustering;
argparse::ArgValue<bool> timing_driven_clustering;
argparse::ArgValue<e_cluster_seed> cluster_seed_type;
argparse::ArgValue<bool> enable_clustering_pin_feasibility_filter;
argparse::ArgValue<e_balance_block_type_util> balance_block_type_utilization;
argparse::ArgValue<std::vector<std::string>> target_external_pin_util;
argparse::ArgValue<bool> pack_prioritize_transitive_connectivity;
argparse::ArgValue<int> pack_transitive_fanout_threshold;
argparse::ArgValue<int> pack_feasible_block_array_size;
argparse::ArgValue<std::vector<std::string>> pack_high_fanout_threshold;
argparse::ArgValue<int> pack_verbosity;
/* Placement options */
argparse::ArgValue<int> Seed;
argparse::ArgValue<bool> ShowPlaceTiming;
argparse::ArgValue<float> PlaceInnerNum;
argparse::ArgValue<float> PlaceInitT;
argparse::ArgValue<float> PlaceExitT;
argparse::ArgValue<float> PlaceAlphaT;
argparse::ArgValue<sched_type> anneal_sched_type;
argparse::ArgValue<e_place_algorithm> PlaceAlgorithm;
argparse::ArgValue<e_pad_loc_type> pad_loc_type;
argparse::ArgValue<int> PlaceChanWidth;
argparse::ArgValue<float> place_rlim_escape_fraction;
argparse::ArgValue<std::string> place_move_stats_file;
/* Timing-driven placement options only */
argparse::ArgValue<float> PlaceTimingTradeoff;
argparse::ArgValue<int> RecomputeCritIter;
argparse::ArgValue<int> inner_loop_recompute_divider;
argparse::ArgValue<float> place_exp_first;
argparse::ArgValue<float> place_exp_last;
argparse::ArgValue<float> place_delay_offset;
argparse::ArgValue<int> place_delay_ramp_delta_threshold;
argparse::ArgValue<float> place_delay_ramp_slope;
argparse::ArgValue<float> place_tsu_rel_margin;
argparse::ArgValue<float> place_tsu_abs_margin;
argparse::ArgValue<std::string> post_place_timing_report_file;
argparse::ArgValue<PlaceDelayModelType> place_delay_model;
argparse::ArgValue<e_reducer> place_delay_model_reducer;
argparse::ArgValue<std::string> allowed_tiles_for_delay_model;
/* Router Options */
argparse::ArgValue<int> max_router_iterations;
argparse::ArgValue<float> first_iter_pres_fac;
argparse::ArgValue<float> initial_pres_fac;
argparse::ArgValue<float> pres_fac_mult;
argparse::ArgValue<float> acc_fac;
argparse::ArgValue<int> bb_factor;
argparse::ArgValue<e_base_cost_type> base_cost_type;
argparse::ArgValue<float> bend_cost;
argparse::ArgValue<e_route_type> RouteType;
argparse::ArgValue<int> RouteChanWidth;
argparse::ArgValue<int> min_route_chan_width_hint; //Hint to binary search router about what the min chan width is
argparse::ArgValue<bool> verify_binary_search;
argparse::ArgValue<e_router_algorithm> RouterAlgorithm;
argparse::ArgValue<int> min_incremental_reroute_fanout;
/* Timing-driven router options only */
argparse::ArgValue<float> astar_fac;
argparse::ArgValue<float> max_criticality;
argparse::ArgValue<float> criticality_exp;
argparse::ArgValue<float> router_init_wirelength_abort_threshold;
argparse::ArgValue<e_incr_reroute_delay_ripup> incr_reroute_delay_ripup;
argparse::ArgValue<e_routing_failure_predictor> routing_failure_predictor;
argparse::ArgValue<e_routing_budgets_algorithm> routing_budgets_algorithm;
argparse::ArgValue<bool> save_routing_per_iteration;
argparse::ArgValue<float> congested_routing_iteration_threshold_frac;
argparse::ArgValue<e_route_bb_update> route_bb_update;
argparse::ArgValue<int> router_high_fanout_threshold;
argparse::ArgValue<int> router_debug_net;
argparse::ArgValue<int> router_debug_sink_rr;
argparse::ArgValue<e_router_lookahead> router_lookahead_type;
argparse::ArgValue<int> router_max_convergence_count;
argparse::ArgValue<float> router_reconvergence_cpd_threshold;
argparse::ArgValue<std::string> router_first_iteration_timing_report_file;
/* Analysis options */
argparse::ArgValue<bool> full_stats;
argparse::ArgValue<bool> Generate_Post_Synthesis_Netlist;
argparse::ArgValue<int> timing_report_npaths;
argparse::ArgValue<e_timing_report_detail> timing_report_detail;
argparse::ArgValue<bool> timing_report_skew;
};
argparse::ArgumentParser create_arg_parser(std::string prog_name, t_options& args);
t_options read_options(int argc, const char** argv);
void set_conditional_defaults(t_options& args);
bool verify_args(const t_options& args);
#endif