-
Notifications
You must be signed in to change notification settings - Fork 428
Description
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-verilog-to-routing/vpr/src/timing/slack_evaluation.cpp
Lines 286 to 288 in 3e53a93
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:
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.