This website uses cookies. By using this site, you consent to the use of cookies. For more information, please take a look at our Privacy Policy.
Home > FPGA Technical Tutorials > FPGA-Based Prototyping Methodology > Design-for-Prototyping > Guidelines for isolating target specificity

TABLE OF CONTENTS

Xilinx FPGA FPGA Forum

Guidelines for isolating target specificity

FONT SIZE : AAA

An important modularity concept is the object-oriented notion of “hiding”  extraneous levels of definition details from the usage. Using wrappers and other  isolation techniques to locally contain or group design elements will help preserve interesting functional reference points in the prototyping flow.

Write pure RTL code

A disciplined effort should be made to create the full RTL description of the chip in  terms of generic logic elements or Synopsys DesignWare® components which are  well supported by most FPGA vendors. The SoC designer must avoid calling any  low-level primitives directly from the target technology library or introduce an  explicit clock in the design. Allow the SoC tool flow to infer clock gating, insert  test, apply low-power mitigation, etc. Avoid instantiating such measures directly  into RTL source. Designers generally follow top-down design methods owing to successive  refinements for implementation, technology-specific details become entangled into  the RTL and it is no longer “pure.” For many design teams, that means modifying  the RTL description over time so that the actual RTL passed to the prototyping team  contains many low-level technology library primitives intermixed with pure RTL  elements. This practice will needlessly complicate an FPGA-based prototype and  lead to potential errors.  

Recommendation: keep the reference RTL design pure and carefully introduce  technology specific details only at the leaf level so alternative FPGA and SoC  definitions can co-exist in the design database.  

By maintaining a pure RTL description of the design it will be possible to isolate all  target technology specific details. This is essential to allow sharing of the base RTL  code while providing supplemental detail for the FPGA implementation and the  SoC implementation separately.

Make source changes as low-impact as possible

Once the generic RTL design has been established, further changes should be done  locally without introducing new modularity. Always use wrappers and make  changes inside those design elements. Replace files, rather than edit them. Back annotate changes to real source files.

Make changes inside library elements (RAM, IO library etc.) rather than outside of  them in the RTL structure. This improves portability, and places the prototyping  code close to the original code it is replacing.

Maintain memory compatibility

Specialized elements or “cores” with optimized implementations are used in FPGAs  for bulk memories. It follows that each memory element in the RTL design must be  assigned alternative technology specific definitions for FPGA and SoC mapping.  This approach will result in the most efficient use of chip resources and insures that  some thought will be given to proper modeling of each memory element. For each  new memory generated for SoC, just supply a FPGA-compatible version using  vendor technology macros. The necessary code for each technology could be sideby-side in the RTL source file and the selection between options controlled with  `define. 

For the most part, synthesis tools are familiar with the target technology and can  map RTL code into FPGA elements in a process known as inference. Whenever  possible, having RTL synthesizable behavioral models will improve the FPGA  adaptability of our code. There are examples of the use of wrappers and synthesizable memories in chapter 7. 

This approach relies on technology mapping algorithms in the synthesis inference  tool, however a better implementation may be possible using the library or manual  design-file replacement mechanism. One way to do this would be to create a special  target direct (perhaps with “_fpga” or a similar prefix) and keep files of the same  name as those they are replacing in that directory. With some tools, you can add this  list to the end of a current file list, and they will thereby override the original RTL  higher in the file list. With others, you may need to create a second file list. There  are scripts available from Synopsys that help automate the file list management.  This flow should maintain as high a level of target isolation as possible, and avoid  having any miscellaneous logic not unique to the SoC/FPGA border.

Isolation of RAM and other macros

It is good practice to introduce an enclosing block or “wrapper” around every  technology-dependent element of the design. This includes configured RAMs and  other specialized macros in the technology library, which are not generally available  in other technologies. Wrappers are allowed break rules about only having logic on  lowest levels of RTL as they create a well-defined unit which is replaced with  functionally equivalent logic in the SoC design. 

The process of including such elements is as follows:

• Create the FPGA element using the tools supplied by the FPGA vendor (such as the Xilinx® CORE Generator™ tool, Memory Interface Generator,  etc.). Typically we specify the core type, the target technology, defines the  various parameters’ initial-states values, etc.  

• The FPGA tool generates the desired core’s FPGA netlist  and initialization file, where applicable. 

• The netlists are used in the place & route stage, and the  template file is used to instantiate the generated core into  the main design.  

• In addition, the tool generates a wrapper file containing  functional simulation customization data that, combined  with the primitive model used in the core, can be used for  functional simulation. 

• Add RTL code to instantiate the template file in the design,  and connect the module to the design.

Recommendation: use optimized FPGA macros and RAMs to improve FPGA  resource utilization and speed, enclosing technology dependent code within a  wrapper block to facilitate substitution of SoC implementation and creation of  functional test point for verification. 

Note: handling RAM in formal verification 

As we approach the issue of how to implement SoC RAMs in the prototype, we  should also address the question of “how do I verify that the behavior of my FPGA  RAMs are equivalent to my SoC RAMs?” 

Also, the prototype builder should be considering how to verify equivalency  through the entire process of converting the SoC design to FPGAs. Doing so will  save time later.  

The process of using formal verification (FV) on the designs would be much easier  if equivalency checking were considered early in the prototyping phase. If we can  plan for FV from the beginning with a methodology for verifying the RAMs using  testbenches and then plan to formally verify the remainder of the design by black  boxing the RAMs, then FV can be a more useful tool. This should be consistent  with the use of FV in a general SoC design methodology.

Use only IP that has an FPGA version or test chip

While FPGAs are the main prototyping resource in a typical prototyping system,  some SoCs may have a few blocks that either do not map into FPGAs, or blocks for  which better prototyping resources are available. Such blocks are typically analog  circuits, or fixed digital IP blocks for which neither source code nor FPGA netlist is  available. In these cases, we will need to consider solutions outside the FPGA to  model the block in the prototype.  

IP suppliers typically provide evaluation boards with the IP implemented in fixed  silicon. In other cases, the prototyping team may design and build boards that are  functionally equivalent to the IP blocks that do not map well into FPGA technology.  In still other cases, existing or legacy SoCs may be available on boards as part of  the prototyping project and can be added to and augment the FPGA platform.  

By using separate hard IP resources for these blocks we will benefit from higher  performance (compared to FPGA implementation) and will use less of the FPGA’s  resources

Recommendation: use plug-in hard IP “evaluation” devices on the prototype board  when available to improve prototype speed and reduce complexity of FPGA logic.  

Note: PHY compatibility 

Embedded IP blocks in the SoC that are provided from the vendor as a physical  block without detail RTL description will require special coding in the RTL. If a  test chip is available for the IP it should be connected to the prototype board as an  external plug-in and the RTL written to use this off-chip connection. Otherwise the  IP will need to be modeled with a generic RTL functional definition of the  algorithm to be mapped to the FPGA. Keep this in mind when choosing PHY  components for the SoC and planning overall architecture of the FPGA prototype.  For more information about IP in FPGA-based prototyping see chapter 10.




  • XC2V1000-4FF896I

    Manufacturer:Xilinx

  • FPGA Virtex-II Family 1M Gates 11520 Cells 650MHz 0.15um Technology 1.5V 896-Pin FCBGA
  • Product Categories: FPGAs

    Lifecycle:Obsolete -

    RoHS: No RoHS

  • XC3S700A-4FG484C

    Manufacturer:Xilinx

  • FPGA Spartan-3A Family 700K Gates 13248 Cells 667MHz 90nm Technology 1.2V 484-Pin FBGA
  • Product Categories: FPGAs

    Lifecycle:Active Active

    RoHS:

  • XC3S700A-4FTG256C

    Manufacturer:Xilinx

  • FPGA Spartan-3A Family 700K Gates 13248 Cells 667MHz 90nm Technology 1.2V 256-Pin FTBGA
  • Product Categories: FPGAs

    Lifecycle:Active Active

    RoHS:

  • XC2V1000-5FF896C

    Manufacturer:Xilinx

  • FPGA Virtex-II Family 1M Gates 11520 Cells 750MHz 0.15um Technology 1.5V 896-Pin FCBGA
  • Product Categories:

    Lifecycle:Obsolete -

    RoHS: No RoHS

  • XC2V1000-5FGG256C

    Manufacturer:Xilinx

  • FPGA Virtex-II Family 1M Gates 11520 Cells 750MHz 0.15um Technology 1.5V 256-Pin FBGA
  • Product Categories: FPGAs

    Lifecycle:Obsolete -

    RoHS:

Need Help?

Support

If you have any questions about the product and related issues, Please contact us.