-
Notifications
You must be signed in to change notification settings - Fork 415
Timing-driven placer bug when a block is not connectable #512
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Thanks for the report! Since 0b0ef1b there have been some enhancements to the placer delay lookup to make it more robust. With the latest master code I don't run into the placement failure caused by an I'll look into the |
OK I've tracked down the issue. At a high-level, your clock input got mapped into the wrong block type (IO_TOP) when the location specified in the .pads file is an IO_LEFT. Since these are different block types the placement consistency check complains:
This is a known limitation, the pad file only effects placement, not packing -- see #268 (and #349). Short Term Workaround (Alternately you could manually edit the Long Term Fix |
We are working on the equivalent placement sites issue and have a document about it here. It is like this work will be done over the next couple of weeks. |
@kmurray thanks for looking into it. I have workarounds, so this is not a big issue to me right now. I just found this and I think it's better to report to you. Also as you said, I'm using a version that's a bit old. In addition, I think I attached the wrong On the "dedicated clock block type" topic, I would suggest that non-clock global wires are treated similarly if generated clock, global routing wires and global buffers are to be supported in the future. |
I tried that and everything worked for me with 0ef9c1c.
The way we model this is to just embed the appropriate edges/nodes into the RR graph (potentially with non-configurable switches where appropriate) to model the global routing network. #405 added support for defining clock networks in the architecture file and VPR generated RR graphs. While that is functionally correct with the router as-is (if clocks are set to be routed) at the moment, it may generate sub-optimal clock trees (e.g. split between the dedicated and local routing). @mustafabbas is working to enhance the router so it understands how to use these types of global networks appropriately. |
This was added with #988, so closing this issue. |
Context
The IO block type in the architecture has
capacity = 2
. The first IO block at(0, 0)
is reserved for global inputclk
, and--fix_pins
is used to force placingclk
at this block location. To further constrain VPR, custom rr_graph.xml is used, in which the pins of the first IO block at(0, 0)
are not connected to any routing segments. The second IO block is still connectable through routing segments in the custom rr_graph.xml. In addition, two types of wire segments exist in the architecture, one with length 1, the other with length 2.Expected Behaviour
VPR should be able to place and route a design onto this architecture given the correct
io.pads
file for--fix_pins
.Current Behaviour
VPR fails at initial placement step, when trying to estimate the delay to route a net from the second IO block at
(0, 0)
, because the estimated delay fordelta_x=width-2, delta_y=0
isinf
. This is because when initializingplace/timing_place_lookup.cpp: f_delta_delay
, the first output pin of the first IO block is used to estimate the inter-block routing delay, which isinf
because the pin is not connected to any wire segments. Delays with smallerdelta_x
are fixed later, butdelta_x=width-2
remainsinf
.Possible Solution
In function
place/timing_place_lookup.cpp: route_connection_delay
, if the pin returned byget_base_class
cannot be successfully routed, try another one.Steps to Reproduce
vpr arch.vpr.xml bcd2bin.blif --net_file bcd2bin.net --place --route --route_chan_width 24 --read_rr_graph rrg.vpr.xml --fix_pins io.pads
See attachments for the files.
files.tar.gz
Your Environment
The text was updated successfully, but these errors were encountered: