Jump to content

Xilinx Tools FPGA and ARM Coding ?


Recommended Posts

Xilinx Tools FPGA and ARM Coding?


How does one program the newer boards with HDL and C coding on one platform?  Do the tools support both processor and  VHDL or Verilog?

I don't see the big picture here.

I am working the Spartan 3 and 6 designs.  I would like to move into the Artix 7 at some point.

I need a working platform for USB 3.0  and Ethenet 1 G.



Link to comment
Share on other sites

Hi Phil,

I assume that you want an FPGA board with an ARM or intend to use a soft-core processor for you designs.

Here's my ( arguably debatable ) perspective. I much prefer to do everything in an HDL. All of the FPGA vendors support mixed Verilog and VHDL source. If you are into something more exotic then you need to do some research on their support of your favorite HDL. There are a lot of good reasons for doing an all HDL design. There are discussions in the Digilent forums you might find interesting. If you want to use NIOS or MicroBlaze then you are constrained to use a specific development flow that I find problematic. I rarely need to use an embedded processor but confess that I love ZYNQ when a processor makes sense. For XIlinx their ZYNQ ARM based products might best be thought of as an ARM with a programmable FPGA embedded. The tools for coding for the ARM are part of the free SDK and are, to my mind, pretty darn good. There are tool version incompatibility/change issues for all ARM software tools ( a big reason to avoid embedded processors when not needed ) though, in my experience, Xilinx tends to be the least painful. HDL only projects are pretty easy to maintain through tool version releases. If you really need a low-end processor without floating point then there is a variety of options for third party implementations of low end micros out there. I'll warn you that replicating a project is one thing but if you want to create your own FPGA/ARM design things can get very complicated very quickly. For all ARM based FPGA devices there are two distinct flows involved. First you need to implement the FPGA (PL) side using the traditional FPGA tool flows. The you export the hardware to an SDK to do the software development. It can take some time to figure out how to set up and use the SDK efficiently. You can program the device, run, and debug the ARM code from the SDK ( debugging the PL and PS code is not integrated but not necessarily difficult ).

Digilent doesn't offer an FPGA board with a USB 3.0 interface. Generally the USB interface also handles configuration. Opal Kelly offers a good selection of USB 3.0 boards, at a higher price point than other vendors. I prefer something like a Genesis2 or Nexys Video with an FMC connector. You can get inexpensive USB 3.0 development boards and software to add USB 3.0 connectivity to these boards. I've done so using FTDI and Cypress tools for both of the Digilent boards successfully. Before spending money spend some time checking on support for FPGA boards first. What kind of demos do they offer? Do they supply source code? Is their source problematic? For Digilent products there is definitely an issue for users trying to rebuild projects due to Vivado version issues. This is mostly a problem of them shooting themselves in the foot rather than trying to work smarter. I'm pretty certain that this is almost, but not quite, as painful for them as it is for their customers.

As to 1G Ethernet this depends on how you want to use it. There aren't a lot of ARM based boards with an Ethernet PHY connected to the PL ( FPGA fabric ). The more expensive ARM based boards have a 1G Ethernet PHY connected to the PS (ARM). This might be great if you want to use the Ethernet in a traditional way. I prefer my Ethernet PHYs connected to the FPGA but that's just me. One nice thing about Digilent's gigabit Ethernet PHYs is that they initialize them on power up to be useful without having to program them and reset them post power up.  Intel really really wants users to be dependent closed IP to use Ethernet and make it as difficult as possible to use FPGA connected Ethernet. If you choose the Genesis2 you could, in theory ( I haven't done this ), add a 10G Ethernet interface using an FMC Mezzanine board.

Link to comment
Share on other sites

Hi @pgmaser,

Welcome to the Digilent Forums!

You can use the ADD a Module function to connect a HDL module/entity to the axi bus using microblaze . Here is a forum thread that discusses this option.

All of our boards use USB 2.0. The Nexys Video which has the Artix 7 fpga can be used with Gigabit Ethernet.  Here is a community members gigabit project with the Nexys Video.

Best regards,


Link to comment
Share on other sites

Very nice zygot,

FPGA Boards with Arm processors is one design type.   FPGA boards with soft processors is another.   I have an old Spartan 3E I was playing with an Ethernet port RS232, VGA and PS2  all of which I would like to write code for just to get the feel of this project.  Basic keypad,  LCD with ethernet or RS232 as a com.   I only see this being done with a soft processor.

I don't believe this PHY is connected to the core.   I have not been able to find any IP or C that would allow this port to be initialized.   I did find some basic RS232

code.   They broke it done nicely into a state machine with a test bench.   Very hard to get started with FPGA huge learning curve and if you through a processor into the mix now one needs to write c code and HDL to maintain the form.

My point being.  I do like the idea of writing all HDL code no soft processor.   On the other hand, I see the ARM with an FPGA as easier flow in the design.   A lot of times

we will have a floating point processor and timing constraints.    IO is a really big point here and with this comes floating measurement then the math. Special control

system applications.   State Machine and Laplacian filters and control system structures. 

Hardware IO is one state.   Software design and  Matlab tools for solving math would be a need as well.  All of it needs to be integrated via HDL and or C.

Do compilers provide the Floating point Processor or is this soft or hard?

If one needed an OS like Linux or Real-Time Solution along with Hardware FPGA and ARM.   Now it gets even more complex.

My whole point --- has does one get or find the IP's to push this product through fast.  Ethernet chip from microchip has a lot of complexity someone out there must have an IP module or Component for this.  VGA appears to be timing in HDL not to bad.   Same as RS232 if one can get Baud Rate Right?  

Diglent has provided a basic platform,   SPI and I2C would nice as well for the PMOD's.  

Right now basic steps getting LCD and Keyboard to work with HDL possible RS232.   This should be fairly straight forward.

Then integrated soft processor like MicroBlaze and working with SDK...     Does the free Version of Xilinx work with this type applications or is it the paid version?

Signing out -- Any links to code development for this bard would be a plus.   Also, I notice extra FPGA's on the board.  I don't have any code for this

not sure what this is about.   USB JTAG is one and another might be memory map?    If I was going to route my own board,   I don't think I would include these extra FPGA's  on a new board any ideas on this?




Link to comment
Share on other sites

3 hours ago, pgmaser said:

FPGA Boards with Arm processors is one design type.   FPGA boards with soft processors is another.

And designs without a programmable core is a third; also happens to account for 90% of my design projects. As you point out there is a use case for having an embedded processor in your FPGA when your platform only has an FPGA for processing. But the overhead for a processor is not free, especially when the software tools change 2-3 time a year and break your design. In my experience implementing everything in an HDL is appropriate and sufficient. There is a fourth option and that is to make an interface to a high performance SBC. For a Raspberry Pi this is an inexpensive way to add processing power with relatively stable software development tools. If a few SPI ports allow sufficient data rates for your project goals then connecting boards is almost trivial.

I wouldn't argue for a superiority of any choice here; just that it pays to think about what makes the most sense, is the most productive in the long run, gets a project competed efficiently, and for a lot of cases is the least painful to maintain over a few years. Part of that analysis is understanding the development flows and what kinds of issues typical users have with these design decisions.


Link to comment
Share on other sites

13 hours ago, pgmaser said:

...I have an old Spartan 3E
...Very hard to get started with FPGA huge learning curve
...with HDL and C coding on one platform
...get or find the IP's to push this product through fast. 
... Does the free Version of Xilinx work with this type applications or is it the paid version?
... If I was going to route my own board



just a thought, reading and guessing what you're after (and I may be wrong). I see a risk that you're underestimating the difficulty / workload / learning curve substantially, by orders of magnitude. There is nothing that cannot be done, but so many things that need to be done and stack up. Many people have learned the hard way there's a long distance between features on vendors' slideware and functional features in a design.

Zynq would seem the logical choice. Soft core doesn't even get close to 2x 666 MHz, 256 kB processor memory, 512 kB cache plus the FPGA.

You might do the experiment, get some cheap recent board, set yourself the goal of a basic "pipe-cleaning" exercise to bring up the basic features using only the tools (not just build a ready-made example project, stealing line-by-line is OK). If you eventually start to feel this takes too much work for stuff that "should work", this is just the point I'm trying to make ?

If you're getting into the technology, I would strongly suggest to first get a "simple" Artix board e.g. CMOD A7 for the FPGA end of the "pipe-cleaning". A Zynq contains almost exactly the same FPGA but is less accessible because it is "owned" by the PS = ARM side. The small ones need only no-cost licenses (=Vivado "Webpack").

Link to comment
Share on other sites

8 hours ago, xc6lx45 said:

The small ones need only no-cost licenses

Perhaps a better way to address the question of what's supported by the free "Web" version of Vivado is to defer to the Xilinx website. If you hunt around long enough you will find a list of devices that you can target using the 'free' tools. Xilinx used to produce a brochure with this information but I didn't find it just now when I looked. I use free in quotes because a 16 GB a lot of people, including me, without broadband might not think of obtaining it as free. Most of the ZYNQ devices are on the list. The selection of other devices is more limited, even for low-end parts (not the way that it used to be... older FPGA vendor tools used to support all of the low-end, i.e. Cyclone, Spartan devices).

If you can live with a licence that is node locked to a particular device,  1 or 2 version(s) of Vivado and one PC then it might make sense buying a more expensive board like the Genesys2. Vendors generally offer such licenses at a very reasonable price and you get all of the basic features of the tools with it. Note that Vivado doesn't support older devices like the still very useful Spartan6, Spartan3 devices but ISE is still available for free.

Some FPGA vendors stick with devices supported in the WEBPACK free Vivado tools.

If you have a really low budget to work with there's no harm in using QUARTUS 15 or ISE or an older version of Vivado that is a bit more generous with device support. You can learn/hone your HDL skills with these just fine and even buy some pretty nice hardware platforms at a reasonable cost to see your efforts at work. If you just have to have an ARM in your FPGA, or you want to buff your resume then you probably want to stick with the latest tools.

My position is that you can't do much that's useful and creative with an ARM based FPGA without learning how to do the full FPGA development flow; and to me that means HDL source. You don't need an ARM based FPGA to do that; and you don't need to deal with the added headaches involved either. If you have a project that requires an embedded processor in the FPGA then you'll have to figure out how you will want to spend your time getting 'up to speed' with the tools, languages, concepts and practical skills involved.

For what it's worth. When I want to do a project requiring a PC interface and data rates in the 30 MB/s range ( there's a lot of qualifications behind that figure ) the old Spartan 6 ATLYS is my go-to board in lieu of its more expensive cousins sitting around. Those Spartan6 and Spartan3 devices might not have the block ram resources of the Series7 devices but their IO can so some tricks that the current generation can't. If I need to transfer a lot of data at 300 MB/s then USB 3.0 is my option.

Link to comment
Share on other sites


This topic is now archived and is closed to further replies.

  • Create New...