Sign in

username:

password:



Not a member?

Search Comp.Arch.FPGA



Search tips

fpga by Keywords

Altera | ASIC | CPLD | Cyclone | DCM | DDR | DSP | Ethernet | ISE | JTAG | Linux | LVDS | Microblaze | ML310 | Modelsim | NIOS | OPB | PCI | Quartus | RocketIO | SDRAM | Spartan | Spartan3 | SRAM | Stratix | Verilog | VHDL | Virtex | Virtex-4 | Virtex-II | Xilinx | XST


Ads

See Also

DSPEmbedded SystemsElectronics

Comp.Arch.FPGA | ASIC Prototyping using FPGA

There are 9 messages in this thread.

You are currently looking at messages 0 to 9.

ASIC Prototyping using FPGA - Test01 - 2009-10-09 17:15:00

I am trying to understand if there is a well
defined procedure to do
ASIC prototyping using FPGA.  I was thinking that I can divide down
the ASIC design into multiple functional blocks. Such that each block
represents asn ASIC.  The design is in verilog HDL but it contains a
lot ASIC lib specific instantiations.   This is not understood by the
FPGA software.  Here are the things that I am trying to understand

(1) How to convert the ASIC libreray specific primitive such that the
FPGA software can understand?
(2) The ASIC design uses LATCHES every now and then for time
borrowing, I am not sure if it is OK to use the LATCH in FPGA design.
(3) What is the exact procedure of analyzing large designs containing
thousands of verilog modules?  I ran experment on a few selected
modules and dicovered some issues described in 1 and 2.  I am sure a
lot people use FPGAs for ASIC prototyping and do they go through the
verilog moduel one at a time to make them work with the FPGA.
(4) Deisgn of what complexity can be targeted for ASIC prototyping?
The design I have may require multiple big FPGAs.  I wish I could
everything into one big FPGA.
(5) Partitioning the design is also challenging that is why I was
thinking that the design should be partioned based on functional
blocks so there is clear division that matches the design.
(6) Is there a company that provides syhtnesis/partitioning software
and support for code synthesis that can run into above mentioned
problem?




Re: ASIC Prototyping using FPGA - glen herrmannsfeldt - 2009-10-09 17:31:00

Test01 <c...@yahoo.com> wrote:

< I am trying to understand if there is a well defined procedure to do
< ASIC prototyping using FPGA.  I was thinking that I can divide down
< the ASIC design into multiple functional blocks. Such that each block
< represents asn ASIC.  The design is in verilog HDL but it contains a
< lot ASIC lib specific instantiations.   This is not understood by the
< FPGA software.  Here are the things that I am trying to understand
 
< (1) How to convert the ASIC libreray specific primitive such that 
< the FPGA software can understand?

If they look like module references, you just need to write a
verilog module that does the same function.  Don't include it
when using the ASIC library.

< (2) The ASIC design uses LATCHES every now and then for time
< borrowing, I am not sure if it is OK to use the LATCH in FPGA design.

The usual FPGAs have an edge-triggered FF along with each LUT
(look-up table).  If that is what you mean by latch, then it
should work fine.  If you mean something more like a transparent
latch then it will be implemented with LUTs, take up more cells
and probably be slower.  It should still work, though.

< (3) What is the exact procedure of analyzing large designs containing
< thousands of verilog modules?  I ran experment on a few selected
< modules and dicovered some issues described in 1 and 2.  I am sure a
< lot people use FPGAs for ASIC prototyping and do they go through the
< verilog moduel one at a time to make them work with the FPGA.

As I understand it, with the current mask costs many projects 
previously targetting ASICs are now targetting FPGAs.  You might
check the total cost (NRE, masks, etc.)  Otherwise, FPGA arrays
are known to have been used for debugging microprocessors.
At that point, they can afford special software.

< (4) Deisgn of what complexity can be targeted for ASIC prototyping?
< The design I have may require multiple big FPGAs.  I wish I could
< everything into one big FPGA.

I believe there are stories about some of the intel Pentium series
prototyping in FPGA arrays.  I haven't followed them recently, though.
Is that big enough?

< (5) Partitioning the design is also challenging that is why I was
< thinking that the design should be partioned based on functional
< blocks so there is clear division that matches the design.

Well, partitioning is usually part of the design process. 
FPGA's are getting big enough that you won't have to partition
all that much, though.

< (6) Is there a company that provides syhtnesis/partitioning software
< and support for code synthesis that can run into above mentioned
< problem?

I believe so, but it might be pretty expensive.

-- glen 
______________________________
Join the blogging team on FPGARelated.com and earn rewards! Details Here.

Re: ASIC Prototyping using FPGA - HT-Lab - 2009-10-10 04:46:00

>I am trying to understand if there is a well
defined procedure to do
> ASIC prototyping using FPGA.

A study by Dataquest in 2005 showed that nearly 40% of all ASIC companies
prototype on FPGA's. I suspect this figure to be a lot higher these days and I
wouldn't be surprised if all digital ASIC's are prototyped on FPGA's.

>I was thinking that I can divide down
> the ASIC design into multiple functional blocks. Such that each block
> represents asn ASIC.  The design is in verilog HDL but it contains a
> lot ASIC lib specific instantiations.   This is not understood by the
> FPGA software.

Depends, if the ASIC design contains DesignWare components then both Mentor's
Precision and Synopsys Synplify can handle (some of) them. These tools can also
handle gated clocks and SDC constraint files.

>Here are the things that I am trying to understand
>
> (1) How to convert the ASIC libreray specific primitive such that the
> FPGA software can understand?

As mentioned above, look into DesignWare.

> (2) The ASIC design uses LATCHES every now and then for time
> borrowing, I am not sure if it is OK to use the LATCH in FPGA design.

See Glen's answer.

> (3) What is the exact procedure of analyzing large designs containing
> thousands of verilog modules?  I ran experment on a few selected
> modules and dicovered some issues described in 1 and 2.  I am sure a
> lot people use FPGAs for ASIC prototyping and do they go through the
> verilog moduel one at a time to make them work with the FPGA.

If the design is very large then I would recommend a static/dynamic linting tool
such as spyglass/designchecker. These tools can very quickly check for all sorts
of issues such as latches, missing block, unused logic, un-synthesisable
constructs, both clock edges used, combinatorial feedbacks, etc.I would also
recommend a clock domain checkers such as 0-in's CDC if you have multiple clock
domains.

> (4) Deisgn of what complexity can be targeted for ASIC prototyping?

In addition to Glen's answer I suspect that it will be highly unlikely your
can't fit your design on say a Hardi/Enterpoint/ProDesign/etc board.

Have a look at this board:  http://www.enterpoint.co.uk/merrick/merrick1.html

> The design I have may require multiple big FPGAs.  I wish I could
> everything into one big FPGA.
> (5) Partitioning the design is also challenging that is why I was
> thinking that the design should be partioned based on functional
> blocks so there is clear division that matches the design.

If speed is not an issue than I would recommend that as well. There are
partitioners than can partition based on delays but this is normally a lot more
difficult to do.

> (6) Is there a company that provides syhtnesis/partitioning software
> and support for code synthesis that can run into above mentioned
> problem?

I believe that Synopsys's Certify is the current market leader in partioning
software but I have heard that Auspy ACE is more powerful but more difficult to
use (they also have a dreadful website, see http://www.auspy.com/)

Good luck,
Hans
www.ht-lab.com




Re: ASIC Prototyping using FPGA - Roy_R - 2009-10-11 09:41:00

For the Multi-FPGA boards, checkout:

www.dinigroup.com

and I belief Synopsys has software called Certify that will partition yourdesign for you.

Have fun.



Re: ASIC Prototyping using FPGA - Gael Paul - 2009-10-11 19:13:00

Hi,

Here is a suggested methodology, based on my extensive experience with
FPGA prototyping...

(1) Design conversion
There are several types of ASIC elements that are not compatible with
FPGA prototyping:
(1.1) Memories
ASIC designs contains foundry-specific memory instances. For FPGA
prototyping, these should be replaced by FPGA friendly models. The
best solution is to rely on the ability of synthesis tool to
synthesize memories. In many cases, the simulation model from the
memory vendor will work fine. If not, you need to write your own
functional model.
(1.2) DesignWare
As mentioned by other posters, both Synopsys (Synplify and Certify)
and Mentor (Precision) have a built-in DW library that contains basic
DW IPs optimized for FPGA implementation. For unsupported DW IPs, you
will need to supply synthesizable model. Here again, simulation models
will mostly work fine, but are likely to result in poor performance.
You can always write you own models when required.
(1.3) Instantiated library cells
In some cases, your ASIC may contain instantiated cells from the
foundry-specific library. These can be handled automatically by
Synopsys Synplify/Certify by simply providing the .lib file(s) to the
synthesis tool. The alternate option is to supply synthesizable
models. Often, the simulation library will do the trick for basic
cells.
(1.4) Other hard IPs (analog, serdes, pll, etc)
For all other hard IPs (i.e. w/o a synthesizable model) you will need
to either partition it out of FPGAs (see partitioning topic below), or
write a FPGA friendly model. A good example is PLLs, which are
available on FPGAs, yet most likely with a different interface than
your ASIC one.
(1.5) Gated-clock and Generated-clock
FPGAs have a limited number of clock trees. Consequently, gated and
generated clocks must be transformed to "clock-enables". Synopsys
(Synplify and Certify) supports automatic conversion of gated and
generated clocks. Last I checked, Mentor Precision supports gated-
clock conversion but not generated-clock conversion (though rumored to
be coming).
Important note: gated/generated clock conversion is a global
optimization that requires the entire design to be provided at once to
the synthesis tool. Indeed, if the gated cell (the AND gate for
example) is located in a different partition (i.e. a distinct
synthesis project) than the driven FFs, then conversion cannot be
performed.
(1.6) Latches
Latches are supported by most FPGA vendors, though unequally. Watch
out vendors that implement latches as a feedback mux, as these
typically incur a noticeable clock skew. Additionally, and of critical
importance, no FPGA tools (synthesis or P&R) supports "time-
borrowing", and latches are treated as FFs during timing analysis.
This can result in both false positive and false negative, in presence
of shoot-through (of which time-borrowing is a special case). If you
have isolated latches that are always surrounded by rising-edge FFs
(either in the FPGA or outside the FPGA), then the default FF modeling
is safe (conservative).

=> A completed conversion should result in successful synthesis to the
FPGA target (possibly overflowing the resources of the target device).

(2) Partitioning
If the ASIC is too big to fit into one FPGA, then you need to
partition the logic. This consists in resolving several equations
simultaneously:
 - IOs: each partition should contain less IOs that the number of pins
on the target device
 - resources: each partition should not overflow the resource count
for each resource type (LUTs, DFFs, DSP blocks, memories, PLLs, clock
trees, etc)
 - board routability: if you're using an off-the-shelve board (Dini,
Synopsys/Hardi, Gidel, etc), you need to ensure that the number of
connections between any pairs of FPGAs can be accommodated by the
routing tracks on the board. If you plan on building a custom board,
this is not an issue.
 - performance: any path spanning two or more FPGAs will suffer from
severe performance degradation due to the IO delays (several ns). If
performance matters, one should try to contain critical paths in a
single device.
Synopsys Certify is the leading tool for FPGA partitioning. Although
both Synopsys and Auspy provide automatic partitioning, one most needs
to help the tool by manually specifying partition assignments. That's
largely due to the fact that partitioning algorithms don't "see" (e.g.
understand) your design, which can lead to poor results. At that game,
Certify has more powerful features for RTL and source code
partitioning, i.e. at the level you're familiar with (Try partitioning
synthesized LUTs by hand ...).
To my knowledge, Certify is also the only tool that resolves the board
routability for you: its reads-in the netlist of the target board, and
applies a routing algorithm to map the connections between partitions
onto wires on the board. This lets you quickly identify invalid
partitions when using off-the-shelve boards.

=> A valid partitioning should result in successful place and route
for each FPGA.

(3) Board management
You now need handle a few things to map your design to the target
board.
(3.1) Board creation
If you're not using an off-the-shelve board, you'll need to design
your own. Taray 7Circuits is a very neat tool that essentially is a
"PCB floorplanner". It allows you to quickly (i.e not manually) create
your board and automatically handles IO constraints (connectivity,
electrical, banking rules). There is a very nice flow with Synopsys
Certify to use 7Circuits to design your prototyping board (check
Taray's web site)
(3.1) Pin assignments
This consists in assigning every pin of each FPGA to the adequate
logic port, to properly connect the devices together. In other words,
this consists in "mapping" (routing) each connection between
partitions to a wire on the board. For off-the-shelve boards, both
Synopsys Certify and Auspy handle this automatically for you. This
saves the horribly tedious and error-prone job of performing pin-
assignment for each FPGA (picture a complex board with 4 FPGAs each
having 1,000+ pins - good luck handling this by hand looking at the
board schematic and your partitioned design). For custom boards, Taray
7Circuits will do the pin assignment for you.
(3.2) I/O timing constraints
This consists in applying input/output delay constraint to each pin of
each FPGA to ensure there are no timing violations for path spanning
across FPGAs. There again, both Certify and Auspy use timing-budgeting
to automatically generate timing constraints all FPGA pins. That is an
essential feature to avoid hidden timing violations on the board that
can take weeks or months to be identified (in lieu of a functional
bug).

=> At that point, you should be able to download each bitstream into
the board and boot it.

(4) Debug methodology
Your ASIC is now alive on the FPGA board. But most likely what you see
is ... well, functional bugs :~(. Debug such a beast if far from being
easy, and you should plan for it in advance:
(4.1) Probes
One basic debugging method is to send selected signals to FPGA pins
for observation with a logic analyzer. Auspy, Certify let you add
probes without editing your HDL. I don't know if Precision also
supports this (though I would guess it does).
(4.2) On-chip debugging
This consists in probing signals into FPGA memories and uploading
through JTAG. Synopsys Identify leads the pack, followed by SignalTap
and ChipScope from Altera and Xilinx, as well as tools from Temento or
DAFCA (no experience with these last two). One of the nicest feature
of Identify is to display the signal values back in your HDL. That's
much more efficient than looking at waveforms. Also, and importantly,
it is essential to insert such debugging logic *before* synthesis, in
the RTL. That's because FPGA synthesis perform many
complex optimizations, and sequential optimizations, can change very
subtly the behavior of your FFs (for example, pushing an inverter
through a FF). If your debug logic is inserted after synthesis, you
could very well end-up chasing false positive (i.e. chasing a non-
existent bug). However, if you insert your debug logic in the RTL,
this will prevent the synthesis from changing the functional behavior
of your FF (because the FF output is now 'observed').
Here, favor tools that can insert debug logic in your HDL without
requiring manual edit. Temento and Synopsys both have this feature,
and Auspy does not seem to support this.
(4.3) Assertions
I personally believe that synthesizing assertion into your FPGA
prototype is a very powerful methodology, in particular when combined
with on-chip debugging. This indeed allows capturing violations in on-
chip memories, but can also be used to trigger signal probing to help
diagnose the cause of the violation. I don't know which synthesis
tools actually support assertion synthesis yet.

(5) Additional considerations
(5.1) While I would believe the majority of FPGA prototypes to have
2-8 devices, I've heard of prototypes with 50+ -large- devices.
(5.2) Advanced partitioning features include pin-multiplexing (to save
FPGA pins at the expense of performance), high-speed IO (LVDS/SERDES)
support (to save FPGA pins with no performance impact), RTL hierarchy
manipulations (to allow for non module-based partitioning, such as
datapath slicing), logic replication (to save FPGA pins and board
traces), feedthrough elimination (to save FPGA pins), etc
(5.3) Emulation systems (EVE, Cadence, Synopsys, Mentor) also map
entire ASICs onto FPGAs for the sake of functional debugging. They
typically provide an extremely automated flow (much easier than FPGA
prototyping) and superior debugging tools (in particular, full
observability). However, these systems are *much* more expensive than
FPGA prototypes, and provide much lower operating frequencies (< 10
MHz).

(6) Conclusions
(6.1) For basic prototyping (vanilla RTL with 1 or 2 FPGAs), you can
use Mentor Precision or Synopsys Synplify and do partitioning and
board management by hand. I would stay away from FPGA vendor synthesis
tools who often want to "help the customer" by cleaning-up your design
in a way that does not exactly preserve the HDL behavior (not a good
idea for ASIC prototyping).
(6.2) For complex prototyping, you will have to use dedicated tools.
You can either opt for the integrated Synopsys flow (Certify +
Identify) or the composite Mentor + Auspy + Temento flow.

That's it for now, hope it helps,

- gael

PS: Despite my best efforts to be exhaustive and objective, I
apologize in advance for tools/companies I may have omitted or mis-
represented. I welcome their feedback through email: gael (at)
gaelpaul (dot) com

______________________________
Join the blogging team on FPGARelated.com and earn rewards! Details Here.

Re: ASIC Prototyping using FPGA - Test01 - 2009-10-13 10:12:00

Thanks Gae for detailed response.  This seems to
be a big
undertaking.  One of the issue that I see is that the ASIC design team
will be constantly reving the HDL code.  I get the feeling that there
is a fair amount of time needed to convert the asic design that can
work in FPGA.  I am not sure if it is easy to keep up with the latest
code drop from asic design team.  Cadence has emulation hardware
called Palladium.   ASIC to Palladium netlist conversion seems a bit
easier.  It does not require big changes to the design - for example
replacing latches with flipflops, clocking.  Thus asiic to palladium
netlist conversion process is able to keep up with the design team
code drop updates.

Any comments on how this can be as good as Palladium?

______________________________
Join the blogging team on FPGARelated.com and earn rewards! Details Here.

Re: ASIC Prototyping using FPGA - Gael Paul - 2009-10-13 16:11:00

Test01,

The initial mapping to an FPGA prototyping board is indeed a big
undertaking. However, if you use the dedicated tools described in the
previous post, then updating the prototype when the HDL changes will
be push-button in the vast majority of cases. Changes that would
require some assistance are of the kind that invalidate the partition:
 - changes to the interface between two modules that are in different
devices. This would require to incrementally update the partition and
pin assignment (Certify supports this, not sure about Auspy)
 - significant increase in resources leading to an overflow of one or
more devices. This would require an incremental update to the
partition to reassign logic in devices with some free room
 - etc

Emulation systems are in fact using commercial FPGAs. Thus, the
conversion effort is virtually identical. However, the partitioning
and board management tasks are fully automated and hidden from the
user.

The choice between emulation and prototyping should primary be based
on your objectives:
 - to perform early-stage functional debug, emulation is the better
choice. To some extent, emulation is HDL simulation on steroids.
 - to validate the chip in a (near) real-life environment, find the
late-stage functional bugs, develop and validate the embedded
software, pass certification, etc, prototyping is the better choice.
In fact, power users combine emulation and prototyping to validate
their SoCs.

Cheers,

 - gael

PS: a few additional notes on latches:
(1) wether using emulation of prototyping, there is no need to convert
latches to flip-flops as latches are supported in most FPGAs. However,
you cannot fully rely on timing analysis since it does not support
time-borrowing. This introduces the possibility of timing violations
on your emulator/prototype that would appear as functional bugs. If
you run the emulator/prototype at very low frequencies (e.g. < 1Mhz,
like emulators do), then this most likely not a problem. Otherwise, a
good option for power users would be to run PrimeTime (or any ASIC STA
that supports time-borrowing) on the protoype netlist annotated with
delays (SDF).
(2) wether using emulation or prototyping, you can opt for fully
automatic conversion of latches to flip-flops (Precision and Synplify/
Certify have this feature). While this resolves the above timing
analysis problem, it may create a design that is not functionally
equivalent. However, in my experience, if latches are used properly,
FF conversion will always be functionally equivalent. In other words,
if your ASIC design team is experienced and knows its trade, latches
should not be an issue and converting them to FFs is best option.

______________________________
Join the blogging team on FPGARelated.com and earn rewards! Details Here.

Re: ASIC Prototyping using FPGA - KJ - 2009-10-13 16:19:00

On Oct 13, 4:11=A0pm, Gael Paul
<gael.p...@gmail.com> wrote:
> (1) wether using emulation of prototyping, there is no need to convert
> latches to flip-flops as latches are supported in most FPGAs. However,
> you cannot fully rely on timing analysis since it does not support
> time-borrowing. This introduces the possibility of timing violations
> on your emulator/prototype that would appear as functional bugs. If
> you run the emulator/prototype at very low frequencies (e.g. < 1Mhz,
> like emulators do), then this most likely not a problem.

The timing issue with latches is hold time, not setup time.  Hold time
violations are independent of clock speed so if you have this problem
you'll have it whether you run the design at 1 Hz, or 500 MHz.

You'll likely find what turns out to be hold time problems started as
something that appears as a sensitivity to temperature, so cold spray
and heat guns can make the problem come and go.

You can get lucky with timing...or not.

Kevin Jennings
______________________________
Join the blogging team on FPGARelated.com and earn rewards! Details Here.

Re: ASIC Prototyping using FPGA - Test01 - 2009-10-15 11:40:00

On Oct 13, 3:11=A0pm, Gael Paul
<gael.p...@gmail.com> wrote:
> Test01,
>
> The initial mapping to an FPGA prototyping board is indeed a big
> undertaking. However, if you use the dedicated tools described in the
> previous post, then updating the prototype when the HDL changes will
> be push-button in the vast majority of cases. Changes that would
> require some assistance are of the kind that invalidate the partition:
> =A0- changes to the interface between two modules that are in different
> devices. This would require to incrementally update the partition and
> pin assignment (Certify supports this, not sure about Auspy)
> =A0- significant increase in resources leading to an overflow of one or
> more devices. This would require an incremental update to the
> partition to reassign logic in devices with some free room
> =A0- etc
>
> Emulation systems are in fact using commercial FPGAs. Thus, the
> conversion effort is virtually identical. However, the partitioning
> and board management tasks are fully automated and hidden from the
> user.
>
> The choice between emulation and prototyping should primary be based
> on your objectives:
> =A0- to perform early-stage functional debug, emulation is the better
> choice. To some extent, emulation is HDL simulation on steroids.
> =A0- to validate the chip in a (near) real-life environment, find the
> late-stage functional bugs, develop and validate the embedded
> software, pass certification, etc, prototyping is the better choice.
> In fact, power users combine emulation and prototyping to validate
> their SoCs.
>
> Cheers,
>
> =A0- gael
>
> PS: a few additional notes on latches:
> (1) wether using emulation of prototyping, there is no need to convert
> latches to flip-flops as latches are supported in most FPGAs. However,
> you cannot fully rely on timing analysis since it does not support
> time-borrowing. This introduces the possibility of timing violations
> on your emulator/prototype that would appear as functional bugs. If
> you run the emulator/prototype at very low frequencies (e.g. < 1Mhz,
> like emulators do), then this most likely not a problem. Otherwise, a
> good option for power users would be to run PrimeTime (or any ASIC STA
> that supports time-borrowing) on the protoype netlist annotated with
> delays (SDF).
> (2) wether using emulation or prototyping, you can opt for fully
> automatic conversion of latches to flip-flops (Precision and Synplify/
> Certify have this feature). While this resolves the above timing
> analysis problem, it may create a design that is not functionally
> equivalent. However, in my experience, if latches are used properly,
> FF conversion will always be functionally equivalent. In other words,
> if your ASIC design team is experienced and knows its trade, latches
> should not be an issue and converting them to FFs is best option.

Have you all heard of vavlog?  It seems that some people initially use
this software to screen the RTL code. based on the feedback from
vavlog, code changes are made to the design (verilog files) to be able
to do vaelab synthesis.  I am not sure if the output of vavlog can be
fed to Synopsys certify.
______________________________
Join the blogging team on FPGARelated.com and earn rewards! Details Here.