From: Kastil Jan on
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
>
>
>
From: Ben Jones on
On Nov 5, 7:56 pm, "Steve Ravet" <steve.ra...(a)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,
>
> --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.)
From: rickman on
On Nov 6, 1:41 am, Kim Enkovaara <kim.enkova...(a)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.  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.

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
From: Steve Ravet on
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(a)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


From: John Adair on
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...(a)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,
>
> --steve