@@ -154,15 +154,16 @@ def step(self):
154154 install_path = INSTALL_PATH ,
155155 )
156156 self .step_ += 1
157- (score , effective_clk_period , num_drc ) = self .evaluate (
158- read_metrics (metrics_file )
157+ (score , effective_clk_period , num_drc , die_area ) = self .evaluate (
158+ read_metrics (metrics_file , args . stop_stage )
159159 )
160160 # Feed the score back to Tune.
161161 # return must match 'metric' used in tune.run()
162162 return {
163163 METRIC : score ,
164164 "effective_clk_period" : effective_clk_period ,
165165 "num_drc" : num_drc ,
166+ "die_area" : die_area ,
166167 }
167168
168169 def evaluate (self , metrics ):
@@ -174,13 +175,13 @@ def evaluate(self, metrics):
174175 error = "ERR" in metrics .values ()
175176 not_found = "N/A" in metrics .values ()
176177 if error or not_found :
177- return (ERROR_METRIC , "-" , "-" )
178+ return (ERROR_METRIC , "-" , "-" , "-" )
178179 effective_clk_period = metrics ["clk_period" ] - metrics ["worst_slack" ]
179180 num_drc = metrics ["num_drc" ]
180181 gamma = effective_clk_period / 10
181182 score = effective_clk_period
182183 score = score * (100 / self .step_ ) + gamma * num_drc
183- return (score , effective_clk_period , num_drc )
184+ return (score , effective_clk_period , num_drc , metrics [ "die_area" ] )
184185
185186 def _is_valid_config (self , config ):
186187 """
@@ -247,13 +248,13 @@ def evaluate(self, metrics):
247248 error = "ERR" in metrics .values () or "ERR" in reference .values ()
248249 not_found = "N/A" in metrics .values () or "N/A" in reference .values ()
249250 if error or not_found :
250- return (ERROR_METRIC , "-" , "-" )
251+ return (ERROR_METRIC , "-" , "-" , "-" )
251252 ppa = self .get_ppa (metrics )
252253 gamma = ppa / 10
253254 score = ppa * (self .step_ / 100 ) ** (- 1 ) + (gamma * metrics ["num_drc" ])
254255 effective_clk_period = metrics ["clk_period" ] - metrics ["worst_slack" ]
255256 num_drc = metrics ["num_drc" ]
256- return (score , effective_clk_period , num_drc )
257+ return (score , effective_clk_period , num_drc , metrics [ "die_area" ] )
257258
258259
259260def parse_arguments ():
@@ -307,6 +308,14 @@ def parse_arguments():
307308 default = None ,
308309 help = "Time limit (in hours) for each trial run. Default is no limit." ,
309310 )
311+ parser .add_argument (
312+ "--stop_stage" ,
313+ type = str ,
314+ metavar = "<str>" ,
315+ choices = ["floorplan" , "place" , "cts" , "globalroute" , "route" , "finish" ],
316+ default = "finish" ,
317+ help = "Name of the stage to stop after. Default is finish." ,
318+ )
310319 tune_parser .add_argument (
311320 "--resume" ,
312321 action = "store_true" ,
@@ -598,7 +607,7 @@ def main():
598607 TrainClass = set_training_class (args .eval )
599608 # PPAImprov requires a reference file to compute training scores.
600609 if args .eval == "ppa-improv" :
601- reference = read_metrics (args .reference )
610+ reference = read_metrics (args .reference , args . stop_stage )
602611
603612 tune_args = dict (
604613 name = args .experiment ,
0 commit comments