cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
mbssch
Contributor
Contributor
6,646 Views
Registered: ‎03-20-2008

How to use version control with complex projects?

Hallo there,

 

I am wondering, if anybody here uses version control software like CVS or SVN for keeping track of changes to complex projects. For pure VHDL/UCF it is obvious which files to store. But if you mix VHDL with CoreGenerator, SystemGenerator, EDK (hardware *and* software), it's getting complicated. Missing one file means, that the whole thing does not implement anymore.

 

It would be nice if you could tell me, how you deal with this.

 

One idea of my own: Cleaning up all intermediate project files and then storing the remaining files (which should be necessary source files only). Probably some manual cleanup would be necessary anyway. Something like a dependency view would be nice to have for such tasks.

 

Greetings

Stefan Schwarzer

 

0 Kudos
4 Replies
drjohnsmith
Teacher
Teacher
6,640 Views
Registered: ‎07-09-2009

Hi

 

Xilinx has a few notes on CVS in it's knowledge base and other areas, but between you , me and the world, it's not wonderful in vhdl / verilog world.

 

http://forums.xilinx.com/xlnx/board/crawl_message?board.id=EDK&message.id=8379

 

http://www.xilinx.com/support/documentation/sw_manuals/xilinx11/SDK_doc/concepts/sdk_o_share.htm

 

 

 

<== If this was helpful, please feel free to give Kudos, and close if it answers your question ==>
0 Kudos
bassman59
Historian
Historian
6,634 Views
Registered: ‎02-25-2008


mbssch wrote:

Hallo there,

 

I am wondering, if anybody here uses version control software like CVS or SVN for keeping track of changes to complex projects. For pure VHDL/UCF it is obvious which files to store. But if you mix VHDL with CoreGenerator, SystemGenerator, EDK (hardware *and* software), it's getting complicated. Missing one file means, that the whole thing does not implement anymore.

 

It would be nice if you could tell me, how you deal with this.

 

One idea of my own: Cleaning up all intermediate project files and then storing the remaining files (which should be necessary source files only). Probably some manual cleanup would be necessary anyway. Something like a dependency view would be nice to have for such tasks.

 

Greetings

Stefan Schwarzer

 


First and foremost, remember that Xilinx doesn't believe in any proper revision control.  They think that hardware guys don't use it so their tools are designed in such a way as to make SCC really difficult. Also, I use Subversion; other tools may have other ways of dealing with this.

 

For 10.1, I do the following.

 

The only thing you need in your repository for standard ISE projects are the sources, the UCF and the three tcl scripts created when you do a "Source Control -> Export." That's all. (You do NOT want to keep the binary .ise file in the repo.) When you check out your project, open ISE and import the myproj_import.tcl script and the project will be re-created. This actually works.

 

Of course for 11.x, this clever import script concept has been completely deleted (not even deprecated with a warning saying, "This is not going to be used going forward ..." Thanks, Xilinx! We LOVE you!). However, the .xise project file is now XML and as such is a source file so hopefully it won't suck to keep it in the repo. I dunno, since I haven't moved to 11.

 

As for EDK: all you really need in the repo, at least for 10.1, are the .xmp, .mhs and .mss files, and of course any custom cores and C source files. You might wish to maintain the C sources as a separate project and bring them into the main project using svn:externals.

 

Proper SCC for SDK 10.1 is a right royal PITA because Eclipse creates a boatload of xml files in hidden dot directories and it's almost impossible to know what's important and what's cruft. I keep the .cdtbuild, .cdtproject, .project and .xdssdkproject files in the repo in addition to the sources. We are not going to use EDK moving forward so I cannot tell you what annoyances 11.x will bring to the table.

 

Good luck.

 

-a

----------------------------Yes, I do this for a living.
ditiris
Participant
Participant
6,600 Views
Registered: ‎11-27-2007

Stefan, there is no easy way to do this.  My workplace uses SVN, so I'll describe what I do...

 

I don't use EDK (yet), but I do use Picoblaze, System Generator, Coregen, ModelSim, and of course good old source files.

 

My project directories look like this:

~/build
~/cores
~/logs
~/matlab

~/settings
~/sim
~/src

I also use the command-line version of the tools for building, because I can automate the cleanup after each build.  However, you could just use ISE and execute the project cleanup before each commit. 

Build is where I build the project and where my bit and prom files end up.  You have to read the command-line manual to find out which files you have to have and just grind through the build process and delete all the other after each build (at least that's what I did with my scripts).

Cores is the coregen directory and I generally save all the information from the core except the PDFs.

Logs is used during my automated build and simulations for storing lots of log files.  Yay for regression testing.

Matlab is where I store all my sysgen junk.  Generally, I only save the NGC or NGD outputs from Simulink, along with whatever Simulink or Matlab scripts I want.

Settings contains a lot of settings for build options, typically external files for all the Xilinx command-line tools.

Simulation is my Modelsim folder and contains all my testbenches, and has the work directory for simulations.  Only the testbenches actually go in SVN, everything else can be recreated as needed.  My scripts destory the simulation work directory and recreate from scratch before every test.

And finally src is where I keep all my VHDL, UCF, Verilog, Tcl, etc.

 

So, that's what I do.  Quite frankly it's very hard to do that, and requires reading the command-line tools manual very, very closely and just iterating more and more functionality into your scripts.  So I wouldn't recommend that method.  You wind up duplicating a lot of the GUI functionality.  

 

I would instead recommend you come up with a directory hierarchy that makes sense to you and use the GUI as you have been, then augment it with the cleanup command.  Then I would create a repository on your local machine (I know you can do this with Subversion, not so sure about CVS) and try it out.  That was you can iterate and come up with what works for you.  Create your project, get it as clean as you can, then commit to your local repository, then create another different working directory for your project, check it out, and see if you can build it.  Then just keep iterating.

0 Kudos
mbssch
Contributor
Contributor
6,471 Views
Registered: ‎03-20-2008

Thank you for the replies. I think ditiris is right, you need a lot of manual work and good understanding of all tools/files to build a reliable version control strategy. I'm glad I didn't read your replies before christmas holidays, otherwise I would have spent it with reading manuals ;-)

Thanks again

Stefan

 

0 Kudos