⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checkoptions.c

📁 VPR布局布线源码
💻 C
字号:
#include <assert.h>#include "util.h"#include "vpr_types.h"#include "globals.h"#include "OptionTokens.h"#include "ReadOptions.h"#include "xml_arch.h"#include "SetupVPR.h"/* Checks that options don't conflict and that  * options aren't specified that may conflict */voidCheckOptions(IN t_options Options,	     IN boolean TimingEnabled){    int i;    boolean Placer;    boolean TimingPlacer;    boolean Router;    boolean TimingRouter;    const struct s_TokenPair *Cur;    enum e_OptionBaseToken Yes;    /* Check that all filenames were given */    if((NULL == Options.NetFile) ||       (NULL == Options.ArchFile) ||       (NULL == Options.PlaceFile) || (NULL == Options.RouteFile))	{	    printf(ERRTAG "Not enough args. Need at least 'vpr "		   "<netfile> <archfile> <placefile> <routefile>'\n");	    exit(1);	}    /* Check that options aren't over specified */    Cur = OptionBaseTokenList;    while(Cur->Str)	{	    if(Options.Count[Cur->Enum] > 1)		{		    printf(ERRTAG "Parameter '%s' was specified more than "			   "once on command line.\n", Cur->Str);		    exit(1);		}	    ++Cur;	}    /* Check for conflicting parameters and determine if placer and      * router are on. */    i = 0;    Placer = TRUE;		/* On by default */    Router = TRUE;		/* On by default */    if(Options.Count[OT_ROUTE_ONLY])	{	    ++i;	    Placer = FALSE;	}    if(Options.Count[OT_PLACE_ONLY])	{	    ++i;	    Router = FALSE;	}    if(Options.Count[OT_TIMING_ANALYZE_ONLY_WITH_NET_DELAY])	{	    ++i;	    Placer = FALSE;	    Router = FALSE;	}    if(i > 1)	{	    printf(ERRTAG "'route_only', 'place_only', and "		   "'timing_analysis_only_with_net_delay' are mutually "		   "exclusive flags\n");	    exit(1);	}    /* If placing and timing is enabled, default to a timing placer */    TimingPlacer = (Placer && TimingEnabled);    if(Options.Count[OT_PLACE_ALGORITHM] > 0)	{	    if((PATH_TIMING_DRIVEN_PLACE != Options.PlaceAlgorithm) &&	       (NET_TIMING_DRIVEN_PLACE != Options.PlaceAlgorithm))		{		    /* Turn off the timing placer if they request a different placer */		    TimingPlacer = FALSE;		}	}    /* If routing and timing is enabled, default to a timing router */    TimingRouter = (Router && TimingEnabled);    if(Options.Count[OT_ROUTER_ALGORITHM] > 0)	{	    if(TIMING_DRIVEN != Options.RouterAlgorithm)		{		    /* Turn off the timing router if they request a different router */		    TimingRouter = FALSE;		}	}    Yes = OT_BASE_UNKNOWN;    if(Options.Count[OT_SEED] > 0)	{	    Yes = OT_SEED;	}    if(Options.Count[OT_INNER_NUM] > 0)	{	    Yes = OT_INNER_NUM;	}    if(Options.Count[OT_INIT_T] > 0)	{	    Yes = OT_INIT_T;	}    if(Options.Count[OT_ALPHA_T] > 0)	{	    Yes = OT_ALPHA_T;	}    if(Options.Count[OT_EXIT_T] > 0)	{	    Yes = OT_EXIT_T;	}    if(Options.Count[OT_FIX_PINS] > 0)	{	    Yes = OT_FIX_PINS;	}    if(Options.Count[OT_PLACE_ALGORITHM] > 0)	{	    Yes = OT_PLACE_ALGORITHM;	}    if(Options.Count[OT_PLACE_COST_TYPE] > 0)	{	    Yes = OT_PLACE_COST_TYPE;	}    if(Options.Count[OT_PLACE_COST_EXP] > 0)	{	    Yes = OT_PLACE_COST_EXP;	}    if(Options.Count[OT_PLACE_CHAN_WIDTH] > 0)	{	    Yes = OT_PLACE_CHAN_WIDTH;	}    if(Options.Count[OT_NUM_REGIONS] > 0)	{	    Yes = OT_NUM_REGIONS;	}    if(Options.Count[OT_ENABLE_TIMING_COMPUTATIONS] > 0)	{	    Yes = OT_ENABLE_TIMING_COMPUTATIONS;	}    if(Options.Count[OT_BLOCK_DIST] > 0)	{	    Yes = OT_BLOCK_DIST;	}    /* Make sure if place is off none of those options were given */    if((FALSE == Placer) && (Yes < OT_BASE_UNKNOWN))	{	    Cur = OptionBaseTokenList;	    while(Cur->Str)		{		    if(Yes == Cur->Enum)			{			    printf(ERRTAG				   "Option '%s' is not allowed when placement is "				   "not run.\n", Cur->Str);			    exit(1);			}		    ++Cur;		}	}    Yes = OT_BASE_UNKNOWN;    if(Options.Count[OT_TIMING_TRADEOFF] > 0)	{	    Yes = OT_TIMING_TRADEOFF;	}    if(Options.Count[OT_RECOMPUTE_CRIT_ITER] > 0)	{	    Yes = OT_RECOMPUTE_CRIT_ITER;	}    if(Options.Count[OT_INNER_LOOP_RECOMPUTE_DIVIDER] > 0)	{	    Yes = OT_INNER_LOOP_RECOMPUTE_DIVIDER;	}    if(Options.Count[OT_TD_PLACE_EXP_FIRST] > 0)	{	    Yes = OT_TD_PLACE_EXP_FIRST;	}    if(Options.Count[OT_TD_PLACE_EXP_LAST] > 0)	{	    Yes = OT_TD_PLACE_EXP_LAST;	}    /* Make sure if place is off none of those options were given */    if((FALSE == TimingPlacer) && (Yes < OT_BASE_UNKNOWN))	{	    Cur = OptionBaseTokenList;	    while(Cur->Str)		{		    if(Yes == Cur->Enum)			{			    printf(ERRTAG				   "Option '%s' is not allowed when timing placement is "				   "not used.\n", Cur->Str);			    exit(1);			}		    ++Cur;		}	}    Yes = OT_BASE_UNKNOWN;    if(Options.Count[OT_ROUTE_TYPE] > 0)	{	    Yes = OT_ROUTE_TYPE;	}    if(Options.Count[OT_ROUTE_CHAN_WIDTH] > 0)	{	    Yes = OT_ROUTE_CHAN_WIDTH;	}    if(Options.Count[OT_ROUTER_ALGORITHM] > 0)	{	    Yes = OT_ROUTER_ALGORITHM;	}    if(Options.Count[OT_MAX_ROUTER_ITERATIONS] > 0)	{	    Yes = OT_MAX_ROUTER_ITERATIONS;	}    if(Options.Count[OT_INITIAL_PRES_FAC] > 0)	{	    Yes = OT_INITIAL_PRES_FAC;	}    if(Options.Count[OT_FIRST_ITER_PRES_FAC] > 0)	{	    Yes = OT_FIRST_ITER_PRES_FAC;	}    if(Options.Count[OT_PRES_FAC_MULT] > 0)	{	    Yes = OT_PRES_FAC_MULT;	}    if(Options.Count[OT_ACC_FAC] > 0)	{	    Yes = OT_ACC_FAC;	}    if(Options.Count[OT_BB_FACTOR] > 0)	{	    Yes = OT_BB_FACTOR;	}    if(Options.Count[OT_BASE_COST_TYPE] > 0)	{	    Yes = OT_BASE_COST_TYPE;	}    if(Options.Count[OT_BEND_COST] > 0)	{	    Yes = OT_BEND_COST;	}    if(Options.Count[OT_BASE_COST_TYPE] > 0)	{	    Yes = OT_BASE_COST_TYPE;	}    if(Options.Count[OT_ASTAR_FAC] > 0)	{	    Yes = OT_ASTAR_FAC;	}    /* Make sure if router is off none of those options were given */    if((FALSE == Router) && (Yes < OT_BASE_UNKNOWN))	{	    Cur = OptionBaseTokenList;	    while(Cur->Str)		{		    if(Yes == Cur->Enum)			{			    printf(ERRTAG				   "Option '%s' is not allowed when router is "				   "not used.\n", Cur->Str);			    exit(1);			}		    ++Cur;		}	}    Yes = OT_BASE_UNKNOWN;    if(Options.Count[OT_MAX_CRITICALITY] > 0)	{	    Yes = OT_MAX_CRITICALITY;	}    if(Options.Count[OT_CRITICALITY_EXP] > 0)	{	    Yes = OT_CRITICALITY_EXP;	}    /* Make sure if timing router is off none of those options were given */    if((FALSE == TimingRouter) && (Yes < OT_BASE_UNKNOWN))	{	    Cur = OptionBaseTokenList;	    while(Cur->Str)		{		    if(Yes == Cur->Enum)			{			    printf(ERRTAG				   "Option '%s' is not allowed when timing router is "				   "not used.\n", Cur->Str);			    exit(1);			}		    ++Cur;		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -