Re: Version Control for VHDL Project
- From: Andy Peters <google@xxxxxxxxx>
- Date: Mon, 18 May 2009 11:04:32 -0700 (PDT)
On May 17, 2:24 pm, "KJ" <kkjenni...@xxxxxxxxxxxxx> wrote:
"Charles Gardiner" <inva...@xxxxxxxxxxxxxxx> wrote in message
news:gupq5e$m3p$01$1@xxxxxxxxxxxxxxxxxxxx
KJ schrieb:
What method do you use to lock down the revision of the subversion
external
references within the customer repository (for archival purposes) but
still
allow the latest/greatest revision to be used for development (or future
customer enhancements)? svncopy.pl? Manually? Something else?
KJ
I followed the subversion suggestions here. Each reusable unit (and of
course each customer project) has a tags, branches and trunk
subdirectory. Every project release to a customer is tagged (svn copy)
and the output of 'svn -R propget svn:externals .' documented just for
safety.
Creating tags using 'svn copy' though doesn't lock down the revision of
externals when creating the tag so when you go back later to get the tag and
check it out, anything from an 'svn_external' will return the 'head'
revision of the referenced folder, not the revision that existed at the time
that you created the tag...good thing you have the 'svn -R propget
svn:externals .' documented so you know which revision was really used at
the time the tag was created.
Kevin,
I've been using Subversion for FPGA designs for quite awhile now and
I've come up with what I think is a reasonable workflow.
Of course lots of things are reusable, and anything that is so is a
separate project in the repository. As an overview, my repository
structure is as follows:
---------------------------------------------------------------
root\fpga\projects <-- All chip-level designs go here
\projects\A\tags\
\branches\
\trunk\src\ <-- VHDL goes here
\projects\A\trunk\fitter\ <- synthesis/P+R stuff
\projects\A\trunk\testbench\ <- obvious!
\fpga\models <- various simulation models for
testbenches
\fpga\modules <- resuable "cores" go here
\fpga\modules\spimaster\tags\
\branches\
\trunk\src
\trunk\testbench
\pwm\tags\
\branches\
\trunk\src\
\trunk\testbench\
----------------------------------------------------
Now here is how it works. When I'm doing a new FPGA design that needs
an existing module, I always use TAGGED versions of those modules.
This means I put the svn:externals property on the design's src
directory as follows:
spi svn://repo/fpga/modules/spi/tags/spi_v1.0.0/src
pwm svn://repo/fpga/modules/spi/tags/spi_v1.1.0/src
(don't forget the src, otherwise you get the testbench for the module
too!)
Now when you check out the FPGA design, you get the tagged (by
convention, immutable) versions of those modules.
If you are developing a new module along with your FPGA design, still
keep it as a module, but just include the trunk of that module until
you decide that it's ready for "release," at which point you tag it.
Oftentimes I will check out the submodule into its own working copy,
code it up, verify with the testbench, and commit, and only after
that's done will I add it to the externals for the larger design.
If you decide to change a tagged module, change the external to
reference either the trunk of that module, or create a branch of it.
Update the FPGA design's working copy and now you are developing on
the module's trunk. When you are finished and satisfied that the
module works as required, create a new tag, then change the chip
design's src directory's externals to reference the module's new tag.
Basically, then, when you decide to release the whole design, ALL of
the submodules pulled in by svn:externals should be TAGGED versions,
not from their respective trunks. So when you check out your design's
released tagged version you get what you expect, regardless of later
changes to any modules, which I suppose is the whole point of version
control.
I like to add the .bit and .mcs files to my design release tags, too.
Here's what I do. Before you tag your FPGA design for release, check
out a working copy (all tagged submodules!) _from the trunk_ and build
it. When complete, do an svn add on the .bit and .mcs files. (You
might wish to create a separate directory for these files under the
project root, and add that directory instead.) Do NOT commit the
change. Instead, create a tag from the _working copy_ (very easy in
TortoiseSVN). When that's done, your repo has a tagged release version
of the FPGA including .bit and .mcs. The working copy remains on the
Now, do an svn revert on the .bit and .mcs files because there's no
reason the trunk should contain build results.
Anyways, it's actually easier to use than to describe, and it works
for me.
-a
.
- References:
- Version Control for VHDL Project
- From: AndreasWallner
- Re: Version Control for VHDL Project
- From: Charles Gardiner
- Re: Version Control for VHDL Project
- From: KJ
- Re: Version Control for VHDL Project
- From: Charles Gardiner
- Re: Version Control for VHDL Project
- From: KJ
- Version Control for VHDL Project
- Prev by Date: Re: Version Control for VHDL Project
- Next by Date: Re: Version Control for VHDL Project
- Previous by thread: Re: Version Control for VHDL Project
- Next by thread: Re: Version Control for VHDL Project
- Index(es):
Relevant Pages
|