Skip to content

[Routing] Incremental Slack Timing Analysis Does Not Match When Computed From Scratch #2754

@AlexandreSinger

Description

@AlexandreSinger

While working on the Analytical Placer, I generated a very basic clustering and cluster placement. The quality of both of these was meant to be low as this is mainly just a PoC flow through VPR. These tests go through routing without an issue; however, for one test they fail.

When the assert level is set to 4, there is a debug check which verifies that the incremental slack timing analysis gets the same answer as one computed from scratch:

VTR_ASSERT_DEBUG_MSG(verify_max_req_worst_slack(timing_graph, analyzer), "Calculated max required times and worst slacks should match those computed from scratch");

I have found on my testcase, this check gets tripped.

VTR was built with the following command:

make -j12 CMAKE_PARAMS="-DWITH_ODIN=off -DVTR_ASSERT_LEVEL=4"

Note: The assert level being 4 is important.

The testcase circuits and a testing script can be found in this tar file:
timing_bug.tar.gz

It contains a bash script with the command I used to run VPR:

VTR_DIR=~/vtr-verilog-to-routing                                                                                                                                                                            
                                                                                                                                                                                                            
$VTR_DIR/vpr/vpr \                                                                                                                                                                                          
    fixed_k6_frac_N8_22nm.xml \                                                                                                                                                                             
    ch_intrinsics \                                                                                                                                                                                         
    --circuit_file ch_intrinsics.pre-vpr.blif \                                                                                                                                                             
    --net_file ch_intrinsics.net \                                                                                                                                                                          
    --place_file ch_intrinsics.place \                                                                                                                                                                      
    --route \                                                                                                                                                                                               
    --device unnamed_device \                                                                                                                                                                               
    --read_vpr_constraints ch_intrinsics_fixed_io.xml \                                                                                                                                                     
    --min_route_chan_width_hint 40

The output looks like as follows:
image

This is the second routing attempt after routing at a channel width of 40.

Interestingly, if you do not provide the min chan width hint of --min_route_chan_width_hint 40 this does not happen.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions