From f22f7cac73f3187619a6b5d1929068a19da2fd5b Mon Sep 17 00:00:00 2001 From: David Biancolin Date: Mon, 13 Jul 2020 18:18:53 +0000 Subject: [PATCH 1/2] Promote design partially routed and timing failures to fatal errors --- .../cl_firesim/build/scripts/create_dcp_from_cl.tcl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hdk/cl/developer_designs/cl_firesim/build/scripts/create_dcp_from_cl.tcl b/hdk/cl/developer_designs/cl_firesim/build/scripts/create_dcp_from_cl.tcl index f1df1558..58fe7010 100644 --- a/hdk/cl/developer_designs/cl_firesim/build/scripts/create_dcp_from_cl.tcl +++ b/hdk/cl/developer_designs/cl_firesim/build/scripts/create_dcp_from_cl.tcl @@ -144,6 +144,10 @@ set_msg_config -id {DRC CKLD-2} -suppress set_msg_config -id {DRC REQP-1853} -suppress set_msg_config -id {Timing 38-436} -suppress +# Promote the following critical warnings to errors to prevent AGFI generation +# Design not completely routed +set_msg_config -id {Route 35-1} -new_severity "ERROR" + # Check that an email address has been set, else unset notify_via_sns if {[string compare $notify_via_sns "1"] == 0} { @@ -313,6 +317,12 @@ if {$implement} { puts "\nAWS FPGA: ([clock format [clock seconds] -format %T]) - Running post-route optimization"; impl_step route_phys_opt_design $TOP $post_phys_options $post_phys_directive $post_phys_preHookTcl $post_phys_postHookTcl } + # Check if slack has improved after physopt. + set SLACK [get_property SLACK [get_timing_paths]] + if {$SLACK < 0} { + puts "\nFATAL: Design did not meet timing requirements. Terminating."; + exit 3 + } ############################## # Final Implmentation Steps From d65ee3cf2e49960ccff34de962bcfe0561b9848d Mon Sep 17 00:00:00 2001 From: David Biancolin Date: Wed, 15 Jul 2020 19:01:31 +0000 Subject: [PATCH 2/2] Sort paths by slack; and check hold-timing slack --- .../build/scripts/create_dcp_from_cl.tcl | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/hdk/cl/developer_designs/cl_firesim/build/scripts/create_dcp_from_cl.tcl b/hdk/cl/developer_designs/cl_firesim/build/scripts/create_dcp_from_cl.tcl index 58fe7010..89045059 100644 --- a/hdk/cl/developer_designs/cl_firesim/build/scripts/create_dcp_from_cl.tcl +++ b/hdk/cl/developer_designs/cl_firesim/build/scripts/create_dcp_from_cl.tcl @@ -311,18 +311,12 @@ if {$implement} { ############################## # CL Post-Route Optimization ############################## - set SLACK [get_property SLACK [get_timing_paths]] + set SLACK [get_property -min SLACK [get_timing_paths -delay_type min_max]] #Post-route phys_opt will not be run if slack is positive or greater than -200ps. if {$route_phys_opt && $SLACK > -0.400 && $SLACK < 0} { puts "\nAWS FPGA: ([clock format [clock seconds] -format %T]) - Running post-route optimization"; impl_step route_phys_opt_design $TOP $post_phys_options $post_phys_directive $post_phys_preHookTcl $post_phys_postHookTcl } - # Check if slack has improved after physopt. - set SLACK [get_property SLACK [get_timing_paths]] - if {$SLACK < 0} { - puts "\nFATAL: Design did not meet timing requirements. Terminating."; - exit 3 - } ############################## # Final Implmentation Steps @@ -347,6 +341,13 @@ if {$implement} { # Generate debug probes file write_debug_probes -force -no_partial_ltxfile -file $CL_DIR/build/checkpoints/${timestamp}.debug_probes.ltx + # Before proceeding, coarsely check if we meet timing otherwise exit + set SLACK [get_property -min SLACK [get_timing_paths -delay_type min_max]] + if {$SLACK < 0} { + puts "\nFATAL: Design did not meet timing requirements. Terminating."; + exit 3 + } + close_project }