blob: c5961468c25fabd38ede77bcc844db0dbd63ef32 [file] [log] [blame]
#ifndef READOPTIONS_H
#define READOPTIONS_H
#include "OptionTokens.h"
typedef struct s_options t_options;
struct s_options {
/* File names */
char *ArchFile;
char *SettingsFile;
char *CircuitName;
char *NetFile;
char *PlaceFile;
char *RouteFile;
char *BlifFile;
char *ActFile;
char *PowerFile;
char *CmosTechFile;
char *out_file_prefix;
char *SDCFile;
char *dump_rr_structs_file;
/* General options */
int GraphPause;
float constant_net_delay;
bool TimingAnalysis;
bool CreateEchoFile;
bool Generate_Post_Synthesis_Netlist;
char SlackDefinition;
/* Clustering options */
bool global_clocks;
int cluster_size;
int inputs_per_cluster;
int lut_size;
bool hill_climbing_flag;
bool sweep_hanging_nets_and_inputs;
bool timing_driven;
enum e_cluster_seed cluster_seed_type;
float alpha;
float beta;
int recompute_timing_after;
float block_delay;
float intra_cluster_net_delay;
float inter_cluster_net_delay;
bool skip_clustering;
bool allow_unrelated_clustering;
bool allow_early_exit;
bool connection_driven;
enum e_packer_algorithm packer_algorithm;
/* Placement options */
enum e_place_algorithm PlaceAlgorithm;
float PlaceInitT;
float PlaceExitT;
float PlaceAlphaT;
float PlaceInnerNum;
int Seed;
float place_cost_exp;
int PlaceChanWidth;
char *PinFile;
bool ShowPlaceTiming;
int block_dist;
/* Timing-driven placement options only */
float PlaceTimingTradeoff;
int RecomputeCritIter;
int inner_loop_recompute_divider;
float place_exp_first;
float place_exp_last;
/* Router Options */
int max_router_iterations;
int bb_factor;
bool congestion_analysis;
bool fanout_analysis;
bool switch_usage_analysis;
float initial_pres_fac;
float pres_fac_mult;
float acc_fac;
float first_iter_pres_fac;
float bend_cost;
enum e_route_type RouteType;
int RouteChanWidth;
bool TrimEmptyChan;
bool TrimObsChan;
enum e_router_algorithm RouterAlgorithm;
enum e_base_cost_type base_cost_type;
#ifdef INTERPOSER_BASED_ARCHITECTURE
int percent_wires_cut;
int num_cuts;
int delay_increase;
float placer_cost_constant;
int constant_type;
/* architecture experiments */
bool allow_chanx_interposer_connections;
bool transfer_interposer_fanins;
bool allow_additional_interposer_fanins;
int pct_of_interposer_nodes_each_chany_can_drive;
bool transfer_interposer_fanouts;
bool allow_additional_interposer_fanouts;
int pct_of_chany_wires_an_interposer_node_can_drive;
#endif
/* Timing-driven router options only */
float astar_fac;
float criticality_exp;
float max_criticality;
enum e_routing_failure_predictor routing_failure_predictor;
/* State and metadata about various settings */
int Count[OT_BASE_UNKNOWN];
int Provenance[OT_BASE_UNKNOWN];
/* Last read settings file */
int read_settings;
};
enum e_echo_files {
E_ECHO_INITIAL_CLB_PLACEMENT = 0,
E_ECHO_INITIAL_PLACEMENT_TIMING_GRAPH,
E_ECHO_INITIAL_PLACEMENT_SLACK,
E_ECHO_INITIAL_PLACEMENT_CRITICALITY,
E_ECHO_END_CLB_PLACEMENT,
E_ECHO_PLACEMENT_SINK_DELAYS,
E_ECHO_FINAL_PLACEMENT_TIMING_GRAPH,
E_ECHO_FINAL_PLACEMENT_SLACK,
E_ECHO_FINAL_PLACEMENT_CRITICALITY,
E_ECHO_PLACEMENT_CRIT_PATH,
E_ECHO_PB_GRAPH,
E_ECHO_LB_TYPE_RR_GRAPH,
E_ECHO_ARCH,
E_ECHO_PLACEMENT_CRITICAL_PATH,
E_ECHO_PLACEMENT_LOWER_BOUND_SINK_DELAYS,
E_ECHO_PLACEMENT_LOGIC_SINK_DELAYS,
E_ECHO_ROUTING_SINK_DELAYS,
E_ECHO_POST_FLOW_TIMING_GRAPH,
E_ECHO_POST_PACK_NETLIST,
E_ECHO_BLIF_INPUT,
E_ECHO_COMPRESSED_NETLIST,
E_ECHO_NET_DELAY,
E_ECHO_TIMING_GRAPH,
E_ECHO_PRE_PACKING_TIMING_GRAPH,
E_ECHO_PRE_PACKING_TIMING_GRAPH_AS_BLIF,
E_ECHO_CLUSTERING_TIMING_INFO,
E_ECHO_PRE_PACKING_SLACK,
E_ECHO_PRE_PACKING_CRITICALITY,
E_ECHO_CLUSTERING_BLOCK_CRITICALITIES,
E_ECHO_PRE_PACKING_MOLECULES_AND_PATTERNS,
E_ECHO_MEM,
E_ECHO_RR_GRAPH,
E_ECHO_TIMING_CONSTRAINTS,
E_ECHO_CRITICAL_PATH,
E_ECHO_SLACK,
E_ECHO_COMPLETE_NET_TRACE,
E_ECHO_SEG_DETAILS,
E_ECHO_CHAN_DETAILS,
E_ECHO_SBLOCK_PATTERN,
E_ECHO_END_TOKEN
};
enum e_output_files {
E_CRIT_PATH_FILE,
E_SLACK_FILE,
E_CRITICALITY_FILE,
E_FILE_END_TOKEN
};
void ReadOptions(INP int argc,
INP char **argv,
OUTP t_options * Options);
bool getEchoEnabled(void);
void setEchoEnabled(bool echo_enabled);
void setAllEchoFileEnabled(bool value);
void setEchoFileEnabled(enum e_echo_files echo_option, bool value);
void setEchoFileName(enum e_echo_files echo_option, const char *name);
bool isEchoFileEnabled(enum e_echo_files echo_option);
char *getEchoFileName(enum e_echo_files echo_option);
void alloc_and_load_echo_file_info();
void free_echo_file_info();
void setOutputFileName(enum e_output_files ename, const char *name, const char* default_name);
char *getOutputFileName(enum e_output_files ename);
void alloc_and_load_output_file_names(const char* default_name);
void free_output_file_names();
bool IsTimingEnabled(INP t_options *Options);
bool IsEchoEnabled(INP t_options *Options);
bool GetPostSynthesisOption(void);
void SetPostSynthesisOption(bool post_synthesis_enabled);
bool IsPostSynthesisEnabled(INP t_options *Options);
#endif