• 0
zygot

How do I select the right FPGA board?

Question

Posted (edited)

I really don't know where to put this so I decided to ask myself a question and then propose an answer. Perhaps there needs to be a new home for basic assistance for users.

A frequent question for beginners and even experienced people resolves around how to select an FPGA development board. The answer depends on what you want to do with it. The analysis can be anywhere from simple to complex. But there are three issues to resolve that will simplify the process of making a selection.
Three questions that only you can answer are:

  1.   What do you want to do with the hardware ?
  2.   What is your budget ?
  3.   What is your experience level ?

For our context I'll be ignoring a 4th question, which might be the real driver for your interest. That question is: "What are your goals?". If you are just curious then that's different than if you want to add marketable skills to your resume. Also, you might perceive knowing how to develop with a particular device, such as Zynq, as an over-arching motivation. My view is that the Zynq is a great solution for a number of problems for a competent FPGA developer but except for running Ubuntu almost anything
that I can do in software can be done with logic resources in an FPGA.  On the theory that goals tend to change with experience and knowledge I'm going to proceed without answering that question.

 
So let's group some possible answers to the responses to the previously listed questions and provide a bit of guidance.

Case 1:
  1) $0 OR
  2) either "I don't know" or "I just want to  learn how to use an FPGA". OR
  3) None
If you don't have a specific hardware project requiring an FPGA you don't need to spend anything to learn or develop FPGA applications and I suggest that you don't. Just get the latest version of Vivado or ISE. You can do everything except  spend time debugging hardware with nothing more than Vivado or ISE. If you have  no experience with VHDL or Verilog then I strongly suggest buying a used textbook but this is not a requirement. Xilinx provides information about how to use its devices and tools but assumes that you know enough about an HDL to accomplish synthesis or simulation for a project. Learning an HDL in the context of a directed or group  setting is easier than teaching yourself, but not necessary.  FPGA devices are complex and the tools are complex and no one is going to spend a Saturday afternoon reading the  Xilinx literature and being a competent FPGA developer by Sunday. Understand that FPGA  development is really just digital logic development. So if you come from a software  background you might have to re-wire your brain a bit to grasp the basic concepts. Learn  the basic concepts, how to be fluent in an HDL for both synthesis and simulation and how to know how to simulate effectively. You simply  can't do competent FPGA development unless you know how to write a testbench in your HDL and perform  effective simulation.

You don't need to read the vendor manuals for the resources in  any particular FPGA device but having an understanding of what and FPGA is certainly can't hurt.
 
Case 2:
  1) "not much" AND
  2) "Nothing in particular but simple logic designs" AND
  3) I'm competent using an HDL, simulator tools, and Vivado or ISE
If these are your answers then the advice for case 1 might still be valid. It's true that  most of us need some form of positive feedback to motivate us to do hard work. An FPGA  development board might just do the trick. So my advice is simple. Spend the least  amount possible. There are decent boards with a JTAG programming and minimal interface  resources available such as the CMOD or DE0-NANO for < $100. Aside from the motivation  factor you still don't need hardware to accomplish even complicated designs so why spend  money until you know what to spend you money on? If you are determined to spend your  allowance then start off with the least expensive and least expensive to replace board.  The buttons, LEDs and switches can all be simulated. For basic HDL designs you can use  global clock buffers and not worry about anything except pin location constraints.
 
Case 3:
  1) "not much" AND
  2) "I want to use and FPGA to build a variety of hardware prototypes that don't require using advanced FPGA IO features" AND
  3) "I'm competent using an HDL, simulator tools, and Vivado or ISE plus I'm reasonably competent designing with digital, analog or mixed-signal devices."
For this case there are a number of inexpensive modules that offer 30 or more GPIO and basic functionally, but more importantly have the IO on headers that are easy to connect to a PCB of your own design that performs a specific function. In this case the FPGA development board is more of a component and might be dedicated to one prototype. There are a number of inexpensive modules from Digilent, Terasic and other vendors that might be ideal. You can make some  pretty useful things with one of these modules and PCB vendors offering free layout and design tools like ExpressPCB. Here are some specific considerations in making a choice:

  •  What kind of documentation is provided?
  •  What kind of customer support is available?
  •  What kinds of demo projects are available and can I actually build them with my tool version

Now of course merely understanding the manuals for clocking, IO, and other resources of a particular device isn't sufficient. You need to be able to make use of the device datasheet,  especially the AC specifications. To give you an idea here is a table of useful switching specifications for a number of Digilent boards that I own ( the CMOD-A7 is an Artix-1 device ).
         
                                                  Nexys Video     Genesys2     ATLAS
                                                        Artix(-1)       Kintex(-2)      Spartan6(LX-3)
                                                        DS181           DS182           DS162
                                                       -----------            -----------         --------------
    Fmax_bufg                              464                   710             400
    Fmax_bufh                              464                   710               -
    Fmax_bufr                               315                   540               -
    Fmax_bufio                            600                    800                -
    Fmax_bufio2                            -                          -                 525
    Fmax_buffpll                            -                          -                1050
    Fmax_buffgmux                     -                          -                 400
    PLL_Finmax                          800                    933              525
    PLL_Finmin                            19                      19                 19
    PLL_Foutmax                       800                   933             1050
    PLL_Finmain                         6.25                 6.25            3.125
    PLL_vcomax                        1600                1866            1050
    MMCM_Finmax                   800                  933                 -
    MMCM_Finmin                      10                   10                   -
    MMCM_Foutmax               800                   933                 -
    MMCM_Finmain                4.69                  4.69                -
    Fmax_bram_xxx           297-388**         427-544**      280
    Fmax_fifo                             388*                 544*                -
    Fmax_dsp48e               177-464**         249-650**        -
    Fmax_dsp48a                        -                         -                   333**
    
    All values in MHz
    -   not applicable
    *   non-ECC mode
    **  depends on modes used

[Update] Interesting SERDES performance specifications:

                                                                                                                                    Kintex-2     Artix-1                                  
  SDR LVDS transmitter (using OSERDES; DATA_WIDTH = 4 - 8          HR 710      600  Mb/s
                                                                                                                                   HP 710         -      Mb/s
  DDR LVDS transmitter (using OSERDES; DATA_WIDTH = 4 to 14)   HR 1250    950  Mb/s
                                                                                                                                   HP 1400      -       Mb/s
  SDR LVDS receiver (SFI-4.1)(1)                                                                    HR 710      600   Mb/s
                                                                                                                                   HP 710         -      Mb/s
  DDR LVDS receiver (SPI-4.2)(1)                                                                    HR 1250    950  Mb/s

  For Spartan6-3 (Network)
  SDR LVDS transmitter or receiver (using IOB SDR register)                      400 Mb/s
  DDR LVDS transmitter or receiver (using IOB ODDR2/IDDR2 register)  800 Mb/s
  SDR LVDS transmitter (using OSERDES2; DATA WIDTH = 2 to 8            1050 Mb/s
  DDR LVDS transmitter (using OSERDES2; DATA WIDTH = 2 to 8            1050 Mb/s
  SDR LVDS receiver (using ISERDES2; DATA WIDTH = 2 to  8                   1050 Mb/s
  DDR LVDS receiver (using ISERDES2; DATA WIDTH = 2 to 8                    1050 Mb/s                                                              


    
  You also need to understand thermal management. Some of these boards don't have much copper mass and do have a lot of heat dissipating
  components in a very small area. It is likely that you will have issues trying to push these modules to the extreme limits for an application
  even with their limited power supply resources.


  If what you need is for some custom logic and <100 MHz switching and a few are output pins then you aren't likely to have problems, assuming that
  you properly terminate your IO signals. Since you are competent doing digital and analog design you know the differences between a .1" header
  and and HSMC or FMC connector as far as signal integrity characteristics are concerned. You also understand from the FPGA vendor's literature the
  termination requirements for all supported logic standards and clocking limitations.
 
 
Case 5:
  1) "Less than $2000" AND
  2) "I want to experiment with using advanced IO resources" AND
  3) "I'm competent using an HDL, simulator tools, and Vivado or ISE plus I'm reasonably
        competent designing with digital, analog or mixed-signal devices."
In order to get experience using the advanced IO features or transceivers available in current generation FPGA devices you need a board that is designed to allow
you to use these features. I bought a Genesys2 primarily because the way that they implemented mDP allowed me to experiment with multi-lane transceiver designs. The
HPC FMC connector was a bonus but you have to do your homework if you plan on using a mezzanine board and the FMC connector. In particular, there are a lot of "FMC" mezzanine cards that aren't necessarily suitable for the Genesys2 FMC implementation or are even particularly VITA-57 compliant. Usually, this has to do with clocking and IO bank pin assignments. If you want to use a particular FPGA carrier board with a particular FMC type mezzanine card you have to trace through all of the pin assignments to make sure of compatibility. This is particularly true for differential LVDS IOSERDIES2 applications. In general it's easier to find an HSMC mezzanine card FPGA carrier board combination but you still have to do your homework as there are differences between differential signal pairs routed as differential pairs and differential signal pairs simply having matched trace lengths. If you have a bus of differential signals trace length matching across pairs is important. I've used the Nexys Video and Genesys2 boards for a number of projects using the FMC mezzanine cards with complete success. I've not been able to use either of those boards to connect every FMC card that I wanted to use. It is unlikely that you will find an FMC mezzanine card designed to work with an Intel based FPGA board that can be used on a Xilinx based FPGA board. It all has to do with pin assignments. This isn't a deficiency of the FMC implementation of the Digilent boards are even of the mezzanine boards, just an incompatibility for particular FPGA device pin locations and signal assignments.
 
If you only get one takeaway from this thread this is it... just because it's on an FMC or HSMC connector doesn't mean you can use it with your FMC or HSMC equipped FPGA board.
 
Digilent's current crop of FPGA boards provides either low speed PMOD connectors (<10 MHz) which are ease to connect to a custom PCB or high density FMC connectors which are expensive and difficult to connect to a custom PCB. No one knows what the so called high-speed PMODs were designed to do, but they aren't suitable for advanced IO experimentation.
 
If you want to experiment with transceivers you need to read the Xilinx transceiver user manual and know the difference between GTP, GTH and GTY transceiver implementations and maybe those from other vendors.
 
Before choosing a general purpose board to explore advances IO I suggest:

  • Have a thorough understanding of advanced constraints beyond location and IOSTANDARD. There are user manuals for this.
  • Have competence in timing closure methodologies. Read the manuals.
  • Thoroughly understand the Series7 IO, clocking, and transceiver users' manuals
  • Pore over the board documentation, especially the schematics, for boards on your short list.
  • A lot of FPGA board vendors will make you do the work to figure out which banks specific IO pins are assigned to.
  • Make sure that the support includes applicable demo projects that you can build them targettin that particular board with your version of Vivado easily.
  • Figure out what IP if any you need to do something useful with your advanced IO plans.  

Case 6:
  1) "The minimal to accomplish the project" AND
  2) "I have a very specific project to complete using specific advanced IO resources" AND
  3) "I'm competent using an HDL, simulator tools, and Vivado or ISE plus I'm reasonably
       competent designing with digital, analog or mixed-signal devices."
   
For this case the analysis gets complicated. If you want need to do video or Ethernet based communication there might be a board that fits your specific
needs for a particular project. The general rule is that buying hardware that isn't designed to accomplish a particular purpose is rarely a good investment. 10G
Ethernet is a different animal than Gigabit Ethernet. 12G SDI video is a different animal than HDMI video. You need to verify that either the board can do what you want
to do or provides the IO in a form that let's you add a mezzanine card to it to do the job. Neither of these investigations is necessarily straightforward or easy.
So by now you probably realize that each of the cases that I posit involve building an ever increasing level of competence and body of expertise. So everything that applies to the previous cases applies here except that you now have to select all of the boards that will allow you to complete your project. If you need to have a temporoary or time-restricted license to complete your project then what good will that be next year?
 
Clearly I haven't addressed all of the possible scenarios for the three questions put forth in the beginning but hopefully I've presented the basic ideas for a wide range of people willing to take the time to read it. One case that I didn't address is where you want to do something using one of the many PMODs available for purchase and want to create an HDL solution to accomplish something. Again, the cheapest board available with the most standard PMODs will likely be what you
want. Make sure that you understand what will be provided for you and what you needs to do for yourself. This is a small universe but one in which a lot of people will happily spend there lives.

A lot of what's been presented is 'common sense', whatever that is. If you've never ridden a bike but saw the Tour de France and want to dip your toe into competitive racing the first thing to do is not spend 100's of dollars on shoes, helmets, clothes and $10K on a road bike that's just over your wildest budget ( you know because you're going to grow into it...). If, once you know what you're doing, you decide that you want to do mountain trail racing none of that gear will be useful. Also learning
how to ride in the company of a local bike club will be much more productive and fun than spending weeks on the couch reading books on technical riding concepts.    

I hope that this provides some things to consider for the many of you not having the experience with a lot of FPGA development boards and projects.  I apologize for the rough formatting....   
 

Edited by zygot

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Hi @zygot,

Sorry for they late response. Thank you for taking the time to elaborate on the topic of select the right FPGA board.

cheers,

Jon

Share this post


Link to post
Share on other sites
  • 0

@jpeyron

Thanks. This seems to be one of those topics that need a special home.. other than a question and answer forum. My formatting is bad and I didn't quite do justice to the topic but I thought that I'd throw it up and see what happens.

Any ideas on having a FAQ section for special interests? I'm thinking about newbies, FMC, tools, etc. Some questions see to be repeated fairly often.and might be resolved if people can find answers. I haven't given a lot of time to the idea so far,

 

Share this post


Link to post
Share on other sites
  • 0

It's been a while since I posted this and I think that an update is warranted.

The three questions at the beginning are still the guide posts. Based on recent experience with a few boards I have additional comments.

For those wanting to use an FPGA board as a cost effective component for a project Digilent has a number of options below $100. The CMOD modules have their issues but nothing that has kept me from using the CMOD-A735T on a continuous basis. I recently started a thread SOC Strategies about either adding a low cost computing platform to your FPGA prototype module or adding an FPGA module to your computing platform, depending on how you wna to view it. I love ZYNQ but this doesn't always get me to where I need to go. Part of the initial exploration of connecting to something like the Raspberry Pi or Nvidia Jetson Nano involved enhancing the prototype module PC connectivity. That thread was last updated with performance results using a cheap FT232H module using some of the GPIO pins for the PC connection. I created the USB interface for both the CMOD-A735T and the Terasic DE0 Nano which costs the same. I've always intended to publish an FT232H demo for the CMOD based on this work but quite frankly I can think of a lot more useful things to do with a 40 MB/s USB 2.0 interface on an FPGA module for the Terasic module than the Digilent one. Partly this is due to the 32 MB SDRAM on the Terasic module that I can write or read through the FT232H interface without taking extraordinary measures. Partly this is due to the GPIO availability.

For about twice the cost of just mentioned modules you can get the MAX 10 development kit. It has dual 1G Ethernet ports, which is why I bought one in the first place. It also has a spacious MAX 10 device, DDR3 memory and an HSMC connector and even two PMODs. The board isn't suited for use as a component stuffed onto a project PCB like the FPGA modules but it is an inexpensive development board suggesting a lot of interesting possibilities. After spending a few weeks trying to get basic Ethernet connectivity based on the device features and Quartus support the board ended up in the closet. Recently I had reason to try again, using a less "informed" design approach and was able to complete a project using one of the Ethernet ports. While I'm not wild about the MAX 10 family this board could become a new favourite platform for some applications.

One thing that wasn't covered so far in the thread is PCIe connectivity. Until recently there hasn't been any good options for PCIe using low end devices from Xilinx or Intel. This has changed. Terasic has had the C5P Cyclone V board with a x4 PCIe Gen1 connector for a while. Only recently has this platform been re-imagined as a part of the Intel OpenVINO Deep Learning initiative. That may or may not be of general interest considering the alternative platforms competing with it but has resulted in two important changes for anyone needing high data rate connectivity to an FPGA plus DDR memory and with a limited budget (~$500); one is a driver that can be used with Visual Studio on Windows and a driver for Linux. The other is usable PCIe IP that is more accessible to the FPGA developer who doesn't have the time to become a PCIe expert. There are two 40-pin connectors for LVDS IO and a competent FPGA developer can be up and running with  a custom application in very little time. This is a milestone and I have to say something that I never would have imagined saying; thank you Intel (Terasic). It doesn't hurt that the driver can be used with the very capable Cyclone V GT board. I know because I've done it. 

In the past I've always used Xillybus demo code for FPGA board connectivity. I have a get admiration for the man who is Xiilybus but it's nice to have the flexibility of using FPGA vendor IP and a variety of application platforms.

As always any commentary, even "Why would I want to care?" is welcome.

Edited by zygot

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now