How to start in FPGA development? - Simulation software tools

Nuria OrdunaSeptember 19, 20128 comments


This post is related to the first post How to start in FPGA development? - Some tips which aimed to show other options to work on the simulation of your project. In this first approach will be explained some advantages and disadvantages of using Xilinx ISE (+ModelSim) or using ModelSim, Precision and Xilinx ISE. And finally my opinion of which are the ones I use.

Which tool should I use?

To tell somebody what's better is quite difficult, basically because each has his own opinion of usability, ease, pragmatism, efficiency. It depends a lot on what are you more used to work with and what do you prefer or like. Anyway, there is always a path you have to follow. As I told in the first post, in a first approximation you can simulate your system using a script language. Next, describe it using a hardware description language and simulate it. I'm sure even hardware design gurus are not able to go through all the steps without simulating till the end of the implementation and expect a proper running of the system. So, I suggest you to simulate after the hardware description, the Translate and Map and obviously after the implementation into the FPGA. This will help also to debug if there is any unexpected error.

Block diagram for a system implementation

Now it's time to choose which software to use for each step!

Note: In this text I will assume that you are using Xilinx FPGAs to develop your design, in the future I will talk about other useful tools to work with.

ModelSim + Precision + Xilinx ISE

When I was studying they show me that for Xilinx FPGA development they were necessary 3 different kinds of software: ModelSim, Precision and Xilinx ISE. They explained to me that the first one, ModelSim, was only for simulation, the second one, Precision, was used during the synthesis, and the third one, Xilinx ISE, for the implementation. This was a little bit annoying because it was necessary to change from one tool to another and to have a very good file organization in folders, what at the beginning is always something difficult to maintain.

There are maybe more advantages of using Precision but I'm able to see only that synthesis is less strict than using Xilinx. In other words, the warnings found with Xilinx synthesis are not found during the synthesis with Precision (this means that not all warnings are really important). And also that there is a very extensive list of FPGA models to synthesize for (which is very useful depending on which FPGA do you work with). 

However, if you are using some blocks created with Core Generator from Xilinx, the way of making those files understandable for Precision is quite cumbersome if you want to simulate them properly, you must convert the .ngc files to .edf (see how to do it here).

Xilinx ISE (+ModelSim)

If your design will be implemented in a Xilinx FPGA, it should be obvious that you start your design using the Xilinx ISE. However, if you want to simulate your code and test if it works you must also need a simulation tool, like ModelSim (to configure the launch of ModelSim from Xilinx go to Edit -> Preferences -> ISE General -> Integrated tools -> Model Tech Simulator and add the path of modelsim.exe file and activate the simulation view in your Design window). You can also run ModelSim independently from Xilinx, just creating a project and adding the files you need.

One of the best advantages of using Xilinx is that you will be using the same software for all your design, during the simulation, synthesis and place and route. That's perfect because you will only have one folder for your project with all your files. It's also very useful for beginners because the "new source" option allows you to create files with integrated templates. If you want to create a .vhd file, the inputs and outputs can be created from the beginning and an automated template is written for you with the port and architecture declarations.

On the other hand, in my opinion one of the important lacks of Xilinx is the "editor"; window which is just functional. There are only the basic hotkeys like comment and uncomment, and it's missing something as stupid as the block indent hotkey, you must select, and use the mouse right button. And they are missing a lot of basic options found in other editors, like notepad++, which help to write code more efficiently.

What do I use?

As a result, after a while of working for my own I realize that to work with Precision is not the best option if you work with Xilinx FPGAs. One reason is what I already said; adding Coregens is totally annoying and is always a waste of time. I also like to have my files well organized and working with 3 different tools is a certain way of creating repeated files, and this is not helpful if the system start having errors; to find the right file could be worse than an odyssey.

And then, what do I use? Well I need Xilinx for the synthesis and implementation and I love coding over notepad++, and I also prefer to have the files from the simulation before synthesis and from simulation after synthesis separate in two different folders, just to make sure that my system worked before synthesis and is like having a backup of my files. So, I first describe the system in VHDL using notepad++ and simulate the project running ModelSim independently. IF this works properly THEN I copy the important files for my project in another folder and then create the project from Xilinx and simulate directly from there using the integrated ModelSim.

Why notepad++? Because it's open source, because there's the possibility to hide blocks along the code using the Folder Margin, to check which parenthesis close which (placing the cursor close to the parenthesis), to know 'for' hierarchy levels thanks to the indent dashed lines, to comment or uncomment with key short cuts (ctrl+K, ctrl+shift+K), and a lot of more things that you cannot do with ModelSim/Xilinx editor windows. There is something very useful also, the Doc Switcher, which can be activated Settings -> Preferences -> General -> Document Switcher (check show). And after reading the post An Editor for HDLs by Dave Vandenbout, I have realized that I'm not the only one using it :) .

I'm sure there is another more efficient way to work, but I have found that working separately helps me to debug and I'm efficient in my way.

[ - ]
Comment by cfeltonSeptember 19, 2012

Thanks for sharing your experinces. FPGA tools are a common
thread and often "heated" debate. There seems to be a *hole*
in the current offerings, ease of use (unified IDE), QoR,
performance, etc.

I agree, getting all the "tools" to work together can be a pain.

Other than Precision being a pain to incorporate into your FPGA
flow did you notice any "circuit" benefits from Precision? That
is; did your design synthesized with Precision vs. XST (Xilinx)
result in a smaller circuit (less resources) or a faster circuit?

[ - ]
Comment by nuriaordunaSeptember 26, 2012
Thanks for your comment Chris, in fact I realized that in some cases precision was more accurate and more "efficient" in synthesis than Xilinx. However I didn't find out a law for which was better.

What it really bothers me was the fact that using Xilinx the synthesis was always different for RAM blocks created with coregen.

BTW, I will look into a little bit more about and I will give you a real answer, maybe on my next post.

[ - ]
Comment by hassan.shabbirNovember 22, 2012
i am new in FPGA. could anyone guide me how to do image processing on FPGA. Please give me some useful links so that it will help in my thesis. I shall be very thankful to you.
[ - ]
Comment by nuriaordunaNovember 22, 2012
Hi Hassan,

I have some good background on Image Processing implemented on FPGA. I will appreciate if you can ask more detailed questions and I will answer them in a full post :) .

[ - ]
Comment by aktanJanuary 9, 2013
thanks for nice info:)
[ - ]
Comment by aktanJanuary 9, 2013
i am new on FPGA but worked on embedded systems . so familiar with logic design. planning to play with fpgas just to learn. i will try to develop a chess engine. i will use digilent spartan 6 lx45 development board. i am thinking to use microblaze running linuz for pc interface. and my ip will have interface with microblaze. (no idea how to do it now. reading documents) .. any tips welcome :)
[ - ]
Comment by subramaniHMarch 4, 2013
which is best vhdl or verilog.
currently i am having 2 yrs expin vhdl. i am not getting any call for vhdl .
my friends r say verilog is moct commonly used, wht shall i do \
[ - ]
Comment by muvvaMarch 6, 2015
I am using xilinx system generator +model sim
and i am some doubts regarding using system generator blocks , can you help me


To post reply to a comment, click on the 'reply' button attached to each comment. To post a new comment (not a reply to a comment) check out the 'Write a Comment' tab at the top of the comments.

Please login (on the right) if you already have an account on this platform.

Otherwise, please use this form to register (free) an join one of the largest online community for Electrical/Embedded/DSP/FPGA/ML engineers: