FPGARelated.com
Forums

Does anyone ever use placement?

Started by Steve Ravet November 5, 2009
Do any of you advanced users ever use the floorplanning tools to do 
placement?  I'm not talking about placing clock buffers or other individual 
items, I'm talking about ASIC style floorplanning for units and sub-units. 
I've asked AE's about that and the response is always to let the tool do 
placement.  So I'm asking experts:  Do you ever floorplan, and if so why? 
To speed up map?  To help with timing?  Thanks for any insight,

--steve


On Nov 5, 2:56=A0pm, "Steve Ravet" <steve.ra...@arm.com> wrote:
> Do any of you advanced users ever use the floorplanning tools to do > placement? =A0I'm not talking about placing clock buffers or other indivi=
dual
> items, I'm talking about ASIC style floorplanning for units and sub-units=
.
> I've asked AE's about that and the response is always to let the tool do > placement. =A0So I'm asking experts: =A0Do you ever floorplan, and if so =
why?
> To speed up map? =A0To help with timing? =A0Thanks for any insight, > > --steve
My approach is let the tools run, and if they fail miserably (generally only a matter of meeting timing, not completing routing) then see how I can help them along. I had a fairly full Virtex 2 design and had some issues with timing. This was before Xilinx picked up PlanAhead and I tried the PlanAhead tool from HierDesign. I found that at least in my case PlanAhead actually made matters worse than just letting the tools place anything anywhere. I imagine there are some more highly- structured designs where this would not be the case. About the only other thing I do is place block RAM's when I find that the tools are not placing them efficiently. My experience has been that the general FPGA fabric is best placed by the tools. I should also note that my designs are generally for boards that already exist so the pins are locked down. I normally assign pins myself except for things like DDR memory, where I let the MIG core guide the pin placement, and even then I restrict the banks to help in PCB layout. Also my experience is limited to Xilinx and Lattice parts. Regards, Gabor
Gabor <gabor@alacron.com> wrote:

>On Nov 5, 2:56=A0pm, "Steve Ravet" <steve.ra...@arm.com> wrote: >> Do any of you advanced users ever use the floorplanning tools to do >> placement? =A0I'm not talking about placing clock buffers or other indivi= >dual >> items, I'm talking about ASIC style floorplanning for units and sub-units= >. >> I've asked AE's about that and the response is always to let the tool do >> placement. =A0So I'm asking experts: =A0Do you ever floorplan, and if so = >why? >> To speed up map? =A0To help with timing? =A0Thanks for any insight, >> >> --steve > >My approach is let the tools run, and if they fail miserably >(generally only a matter of meeting timing, not completing >routing) then see how I can help them along. I had a fairly >full Virtex 2 design and had some issues with timing. This was >before Xilinx picked up PlanAhead and I tried the PlanAhead tool >from HierDesign. I found that at least in my case PlanAhead >actually made matters worse than just letting the tools place >anything anywhere. I imagine there are some more highly- >structured designs where this would not be the case. About >the only other thing I do is place block RAM's when I find that >the tools are not placing them efficiently. My experience has >been that the general FPGA fabric is best placed by the tools.
I had to do that once but I used the constraints to force the location of a block RAM. That improved timing considerably. -- Failure does not prove something is impossible, failure simply indicates you are not using the right tools... "If it doesn't fit, use a bigger hammer!" --------------------------------------------------------------
On Nov 5, 2:56 pm, "Steve Ravet" <steve.ra...@arm.com> wrote:
> Do any of you advanced users ever use the floorplanning tools to do > placement? I'm not talking about placing clock buffers or other individual > items, I'm talking about ASIC style floorplanning for units and sub-units. > I've asked AE's about that and the response is always to let the tool do > placement. So I'm asking experts: Do you ever floorplan, and if so why? > To speed up map? To help with timing? Thanks for any insight,
Floorplanning is a major PITA, not from the perspective of the tools not being easy to use (although I don't make any claims to the contrary either) but just from a development perspective. To use floorplanning you need to add a fairly messy/complex step to your process in order to get a design you can test. This has to be repeated each time you make a change, at least on the part changed. A small change to an HDL design can often result in much larger changes to the implementation due to optimizations. I can't say any of this for certain since I have not needed to floorplan for almost a decade and I am sure the tools are better. I believe at least Xilinx has some incremental compile feature which should help to minimize the extent of changes due to a design change. That would help, but it still remains a messy proposition. I know there are some people who use floorplanning regularly, Ray Andraka for one. He started with FPGAs back when we used schematic for entry. He had built up a large library of schematic functional blocks with hierarchical placement properties which allowed him to floorplan an entire design. I believe he resisted HDL for some time because he thought he would loose this investment. After his customers insisted that he use VHDL (government I believe) he looked at it with a critical eye, tried some test cases with support from Xilinx (his is mainly a Xilinx house) and found he could use the same placement features by instantiating the same sort of functional and primitive elements. So I believe this has worked out very well for him, especially since HDL also adds a lot of benefit from being text based rather than requiring a particular product for the schematics. The bottom line, yes, you can do projects with floorplanning which will help with both fitting and speed in a design, especially if it has repeating units. But it is a long row to hoe and works best if you will be using this process repeatedly to amortize the learning curve costs as well as take advantage of design reuse that is possible. But if your project doesn't *require* it, why bother? Rick
rickman wrote:
> I can't say any of this for certain since I have not needed to > floorplan for almost a decade and I am sure the tools are better. I > believe at least Xilinx has some incremental compile feature which > should help to minimize the extent of changes due to a design change. > That would help, but it still remains a messy proposition.
My biggest problem is that the Xilinx placer is horribly bad. It seems to place everything at random and then just hopes that it might be able to meet the timing and route the mess. Of course if you have time just run all the different seeds for the placement, one of them might be good enough guess ;) Manual placement of the memories usually helps a lot. My own feeling is that the Altera placer is better than the Xilinx altough it also has some problems with the different size memories (M144k vs M9k etc.). Fortunately there are physical synthesis tools for FPGAs from 3rd parties, they at least make reasonable placement for the FPGA tools to start their work. --Kim
Hi,
   I do not know if I am an advanced user, but I have a few experiance with 
floorplanning tool. I tried use a PlanAhead tool to meet timing of the 
design in Virtex5 110 and failed misserably. But during this time I gained 
a few experiance, some of them comes from reading I did, others I 
discovered by my own.

First, you should floorplan complete and optimized design. Floorplanning 
is a complex issue, such as optimalization and it is much more harder to 
do both at the time.

Design should be modular. Meaning that if you have a design, where every 
unit communicates with every other on the high frequency (which is exactly what 
we had). Than you will not be able to floorplan very effectively (you can 
at least place some critical components). If you have such modules, that 
the problems are inside the module, than your floorplanning will help. 
PlanAhead also allows you to run map and par only on the problematic 
module, which can decrease time of the work.

Be carefull with the LOC (placing of the part). Once I tried to LOC all 
components of the component in the design that was placed to ensure 
repeatibility of the map and par. The result was that map failed saying 
that LOC constrains are incorect.

A few times I met a strange situation, where correct LOC (on LUT, 
register, ..) made the path worse. Let me explain: There was a 
time critical path. After some time, map a par found the solution for this 
path that met the timing. So I LOC its parts in the design and run map and 
par. I was surprised, that the path did not met the timing again. So 
LOCking of the critical path is surely not a right way.

This is my personal experience from the ISE10.1 and ISE11.2.

If you want to decrease time of the implementation run, you could look at 
the guided map or partitions.

Jan


On Thu, 5 Nov 2009, Steve Ravet wrote:

> Do any of you advanced users ever use the floorplanning tools to do > placement? I'm not talking about placing clock buffers or other individual > items, I'm talking about ASIC style floorplanning for units and sub-units. > I've asked AE's about that and the response is always to let the tool do > placement. So I'm asking experts: Do you ever floorplan, and if so why? > To speed up map? To help with timing? Thanks for any insight, > > --steve > > >
On Nov 5, 7:56=A0pm, "Steve Ravet" <steve.ra...@arm.com> wrote:
> Do any of you advanced users ever use the floorplanning tools to do > placement? =A0I'm not talking about placing clock buffers or other indivi=
dual
> items, I'm talking about ASIC style floorplanning for units and sub-units=
.
> I've asked AE's about that and the response is always to let the tool do > placement. =A0So I'm asking experts: =A0Do you ever floorplan, and if so =
why?
> To speed up map? =A0To help with timing? =A0Thanks for any insight, > > --steve
I think floorplanning is undersupported in most current FPGA tools (certainly in the Xilinx tools), but sometimes it's a necessity. In fact, I'd say that anyone doing a non-trivial FPGA design (and is there any other kind?) should at least be aware of the impact that placement decisions will have on their design. And this goes double for anyone using hard blocks such as DSPs and processors and EMACs and so on. In the end, your design is not being turned into software, but hardware - a real, physical thing that has a real physical layout. As you point out, ASIC people fully realise that layout is important (and hard). I fail to see why FPGA design is really that different. To my mind there are two aspects to placement/floorplanning. One is the "low-level tweaking" aspect, where you might have to fiddle around making sure that a few critical elements are placed properly relative to one another so that timing isn't compromised. Or you might be trying to do a very dense design, with no wasted space, and use placement constraints to force certain logic functions to share a resource. This sort of placement is fiddly, time-consuming, error- prone, and often needs to be re-done when a design undergoes changes - and worse, you can easily make your design bigger and/or slower if you're not 100% sure of what you're doing. This is the placement job that you'd really hope the FPGA tools would do well, because it seems ideally suited to automation based on the software's intimate knowledge of the device architecture and design rules. It's similar to the argument for high-level languages versus assembly language in the software domain. Most of the time, the tools do an OK job of the low-level mapping. When they don't, it's often very hard to persuade them to do it differently. This is often a source of great frustration if you're trying to push the boundaries of what's possible in a device. I personally think there are three occasions on which this sort of dabbling-in-black-magic is warranted: 1) When designing a common component that will be re-used often within a design, and within other designs. So the pain can be amortized over many projects. 2) When the component in question is the "key" to the success of a particular design. The commercial viability of your product might hinge on the ability to do (say) a very fast pipelined 72-bit addition operation. So the pain can be justified. 3) When you've finished your design and it doesn't meet timing because the tools are misbehaving. In this case, the pain can be partially mitigated by ranting about your problems on usenet. :-) But there's a whole other kind of placement, too, which is device- level floorplanning. That is, rather than being concerned about the details of which LUT goes where, you're thinking about whether the DDR controller should go on the left- or the right-hand side of the chip. Taking into account the locations of other devices on your PCB, you must decide which Ethernet MAC to use. Or which PowerPC, and then, where to put all its peripherals. Or you have two filter blocks that use DSP slices, and you want to ensure that they both take them from the same column. Or you have two blocks with very complex internal routing and you want to make sure the tools keep their areas completely separate to improve runtime and avoid congestion. This is the sort of problem that I think is very hard to solve automatically. It's a bit like town planning. You wouldn't just say "I need 10,000 houses, four schools, 50 shops and restaurants and a hospital" and expect some piece of software to come up with an optimal solution. You at least need to give it some constraints. Some idea of the geography. Some idea of what ought to be near to what. Tools like planahead are supposed to help with this sort of thing, but there are plenty of other ways. For example, I have seen a design go from <130MHz to >200MHz simply from adding a few area-group constraints to guide the placement algorithm into making sensible decisions. Usually you don't get much run-time improvement out of the mapper - if anything, constraint processing tends to slow the tools down - but that's usually re-couped in the routing stage, because the problem the router has to solve is far better defined when the functional sub-blocks are nicely separated out, rather than tangled together in spahetti. Depending on what you're trying to achieve with an FPGA, you might never ever need to touch a placement constraint at all. But as devices get bigger and bigger I think more and more users are going to hit the limits of the tools, and will start to require an awareness of the true physical nature of their designs in order to complete them successfully. When that happens, I'm also hoping we'll see an improvement in the actual mechanics of influencing placement decisions - both low-level and high-level - within the various design suites. Cheers, -Ben- (It seems that, thanks to quantitative easing, my $0.02 is now trading at around $0.22.)
On Nov 6, 1:41=A0am, Kim Enkovaara <kim.enkova...@iki.fi> wrote:
> rickman wrote: > > I can't say any of this for certain since I have not needed to > > floorplan for almost a decade and I am sure the tools are better. =A0I > > believe at least Xilinx has some incremental compile feature which > > should help to minimize the extent of changes due to a design change. > > That would help, but it still remains a messy proposition. > > My biggest problem is that the Xilinx placer is horribly bad. It seems > to place everything at random and then just hopes that it might be > able to meet the timing and route the mess. Of course if you have > time just run all the different seeds for the placement, one of them > might be good enough guess ;) Manual placement of the memories usually > helps a lot. > > My own feeling is that the Altera placer is better than the Xilinx > altough it also has some problems with the different size memories > (M144k vs M9k etc.). > > Fortunately there are physical synthesis tools for FPGAs from > 3rd parties, they at least make reasonable placement for the FPGA > tools to start their work.
I wasn't aware that any of the third party tools did *any* placement. I thought they just produced a net list of the primitives and let the Xilinx place and route tools do all of that. Am I mistaken? I don't disagree that the placer is nowhere near optimal. But I have done enough hand placement to realize that unless you have a very regular design that you can clearly see the optimal placement, it can be very hard to do a good job yourself. Of course you can spot the bad placements the tool does, but it is very often true that if you optimize one thing, you will mess up something else. Of course, the point is that you optimize the parts that have trouble meeting timing and allow the portions with lots of slack to get worse. For the tool to know which parts these are would require iterating through placement *and* routing which I don't think they do. Am I wrong about that? I guess that is where the multiple seeds come in. Don't mention Altera to me. Although their current tool might be a lot better, I had to do a project using Max Plus II and it totally sucked! Not only was it not so good at the P&R thing, it would claim a design was passing timing analysis when it would fail on the bench. We spent tons of time trying to get that blivet* to work using cold spray and a chip heater. * A blivet is 10 pounds of $#!? in a 5 pound bag or in this case an FPGA using 90% of the logic. Rick
Synplify Premier includes physical synthesis for Xilinx, which does graph 
based placement while synthesizing.  It knows about all the routing 
resources and can place logic accordingly.  It forwards a boatload of 
location constraints to the placer.  I evaluated it a couple years ago and 
it didn't work, there was some lack of communication between synthesis and 
ISE.  I'll be using it again in a couple months, this time on big v6 parts.

Thanks for the comments everyone.  My FPGA work is mainly ASIC emulation, so 
no IP blocks, no particular PCB concerns (most FPGA I/O is connected to 
other FPGAs).  I just know that the ASIC implementation team spends a lot of 
time floorplanning, and I was wondering if there was any benefit to applying 
that to the FPGA.

Someone else mentioned the smartguide option...  I use this all the time. 
It cut P&R runtime from 18 hours down to 6 on a 92% full V5 LX330 design. 
When I get a design that routes successfully and has good timing I keep it 
and use it to guide the next placement.

regards,
--steve

"rickman" <gnuarm@gmail.com> wrote in message news:a53d433a-97a2-4d7e-a9c2-
I wasn't aware that any of the third party tools did *any* placement.
I thought they just produced a net list of the primitives and let the
Xilinx place and route tools do all of that.  Am I mistaken?

Rick 


I'd pretty much agree with other comments and say I use it as a last
resort tool. The problems when parts are changed make it a problem.
That all said we used floorplanning in conjunction with FPGA Editor
some years ago to achieve our 10Gbit CRC32 IP in relative slow Virtex-
II fabric. That particular design has 3 levels of LUTs in some of it
and had to run at 300Mhz+. We got down to identifying individual
inputs of the LUT to use in interconnecting logic in some cases to
make go quick enough. A long job but in the end successful.

I would always play with synthesis, map and P&R options before using
floorplanning for these reasons. I would also look at the worst areas
in the design too and see if the design could change to sort a timing
issue that way. Using the multiple P&R seeds is often worth one or two
nS.

John Adair
Enterpoint Ltd.


On 5 Nov, 19:56, "Steve Ravet" <steve.ra...@arm.com> wrote:
> Do any of you advanced users ever use the floorplanning tools to do > placement? =A0I'm not talking about placing clock buffers or other indivi=
dual
> items, I'm talking about ASIC style floorplanning for units and sub-units=
.
> I've asked AE's about that and the response is always to let the tool do > placement. =A0So I'm asking experts: =A0Do you ever floorplan, and if so =
why?
> To speed up map? =A0To help with timing? =A0Thanks for any insight, > > --steve