- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi all,
We are having problems to make our design meet timing stably. We made two builds based on the same set of source code, one meets timing well and the other one just fails timing. When checking the violated path in the failed build against the timing-met build, we see that the slack in the failed build is -0.106ns, while the timing-met build has a positive slack of 0.632ns. Taking the clock arrival time into consideration, the actual data path delay difference is 0.579ns. We know that quartus fitter uses a random seed so it is reasonable to see some difference in different builds, however such difference of almost 0.6ns on the same path is difficult to accept. Looking into the timequest, we see that quartus seems to use different routing resources for the two builds. In the failed build (the pic on the left), in the red block, it can be seen that quartus uses both V_SEG and H_SEG (I guess they mean vertical and horizontal routing resources?) which introduces quite large delay. In the timing-passed build (the pic on the right), in the red block, quartus only uses the H_SEG for routing, which has relatively small delay. In the whole data path, such routing difference happens several times. In my guess, quartus uses some vertical routing resources as well as horizontal routing resources in the timing-failed design, and the vertical routing resources introduces considerable delay to the data path. Is this correct? If so, is there any way to force quartus not doing such stupid routing? I guess that quartus does this just because of some possible routing congestion due to difference in the placement. But since it is possible to find a placement/routing scheme to meet the timing, why can't it always do this? Thanks, XinLink Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
There is no random number in Quartus. Given the same input, it always gives the same output. (But even the smallest change will cause a different result).
Part of the reason you get variation is that the solution space is so large. Look at: http://www.alterawiki.com/wiki/the_quartus_ii_fitter_and_seed_sweeps So the two paths have different placement. One goes to a LAB that is both an X and Y hop away(basically diagonal) and hence a row and column hop are both necessary. The second one is placed in the same row and therefore only needs a single short line. The placement and route will be different compile to compile, so it's really not possible to compare a sub-portion of the path, as the fitter is working on the whole path. Also note that you have an adder, so there are multiple signals going into the carry-chain, and may not always be able to put them into the LAB right next to the carry-chain.
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page