36

Set up Xilinx Vivado for source control

 4 years ago
source link: https://github.com/jhallen/vivado_setup
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Xilinx Vivado setup for source control

This was tested on Vivado version 2019.1

Here is one way to structure your FPGA project so that it is compatible with both Xilinx Vivado GUI in project mode and version control. This setup allows you to check in the minimum number of files needed so that you can easily recreate the project in another workspace.

To save you some time:

  • Once you have a Vivado project, you can not move it to a different directory. The project files are filled with absolute paths. It is therefore pointless to check in the entire project.

  • There is a TCL command "write_project_tcl" which generates a TCL script which rebuilds the project in a new directory. This method is shown here.

  • Even with "write_project_tcl", the project has to be structured correctly or the script will not work. In particular, none of the files needed to recreate the project should be in the project subdirectory.

Although it's possible to script the entire FPGA build process, it is also important to be able to use project mode to access the Vivado GUI for such tasks as debugging with the integrated logic analyzer and pin-planning.

If your setup is incorrect, you will waste a lot of time fixing it, or create a mess in your repository by checking in too many files. Unfortunately, Vivado really would like your source code to be in the project directory, so you have to actively fight it to prevent this.

The directory structure should be this:

example_fpga/
    rebuild.tcl   - TCL script created by Vivado.  Checked in.
    rtl/          - Your Verilog (or VHDL) source code.  All checked in.
    cons/         - Your constraint files.  All checked in.
    project_1/    - Vivado project.  Nothing here is checked in.
    ip/           - Xilinx IP.  Some files checked in.

The idea is to have the minimal set of files checked in so that you get the Vivado project back after a fresh clone. You should only have to type these commands:

git clone https://github.com/jhallen/example_fpga.git
cd example_fpga
vivado -source rebuild.tcl

Also, you can always delete project_1/ and rebuild it:

rm -rf project_1
vivado -source rebuild.tcl

The ip/ directory gets polluted with derived files, but at least Vivado tells you which ones need to be saved in source control.

Initial project build

Suppose you don't have the project_1/ and rebuild.tcl script. This is how to create them.

Start Vivado. Change directory to example_fpga first. [There are other possibilities here, but this will get you started.]

cd example_fpga
vivado

Go through the usual sequence of creating a project, but do not check any of the boxes that say "copy into project":

BJjeUvV.png!webjERrair.png!web7rYbEbf.png!webUVJZvub.png!webIZRZvee.png!web

You need your Verilog or VHDL source files:

7JfArqj.png!web

You need the .xci files for Xilinx "IP Catalog" IP. You also need the wrapper file for block designs (see below for more about this).

QvUn2aJ.png!web

Do not check the box here:

iQZbmai.png!web3Y7zme3.png!web

You need your constraint files:

I7jayiY.png!web

Don't check it here either!

UBzQRrb.png!webIfMBnqU.png!webErm6nua.png!web

Then we wait a long time, why is Vivado so slow?

YjINvmz.png!web

Now finally the project appears:

zaAJVnV.png!web

Save the script

Use the write_project_tcl command to save the script:

6NnEn2i.png!web

Here are the messages this command prints:

JZnMzi2.png!web

That's it. Now you can regenerate the project with:

rm -rf project_1
vivado -source rebuild.tcl

Note that the rebuild.tcl script shows you the files that need to be saved in source control in comments. This is in the file:

# 3. The following remote source files that were added to the original project:-
#
#    "/home/jallen/example_fpga/ip/clk_wiz_0/clk_wiz_0.xci"
#    "/home/jallen/example_fpga/rtl/testtop.v"
#    "/home/jallen/example_fpga/cons/mycons.xdc"

You will have big problems if any of these are in the project directory (example_fpga/project_1 in this case).

It does not work to delete the project_1/ directory, and sneakily write the files back. First the rebuild.tcl script will fail in the line with create_project because the directory already exists. You can try to get around this by adding -force the line with create_project. Unfortunately, create_project -force deletes the entire directory, so then Vivado will complain that the files are missing. Also, you will be writing out rebuilt.tcl many times, so you don't want to edit it.

You really need to create the source files outside of the project directory in the first place.

Xilinx IP

The next difficulty is that Xilinx IP from the "IP Catalog" is written by default to the project directory.

An example is the clock wizard IP to use the PLL or MMCM.

YBbY73v.png!web

Take note of the "IP Location" in the top left of the window. It should just show you the location, but the GUI design is bad here so have to click on it.

aYrqAzQ.png!web

When you click on it, you will see that it wants to put it in the project:

JzEBji6.png!web

Instead put it in the ip/ directory.

mYJvYrE.png!web

You need to generete the output products, even though they do not have to be saved in git. When you generate them here, then Vivado knows to regenerate them when you rebuild the project.

amqiYzI.png!web

Just the .xci file needs to be saved in source control, but it's a good idea to run the write_project_tcl command and check the comments to be sure.

Unfortunately the output products are generated in the same tree as the .xci files, so you have to pay close attention to the ip/ directory.

IP Integrator / Block design

Block designs must also be created outside of the project directory (for example, in our ip/ directory). This is odd, because the block design ends up as a set of commands in the project tcl script produced by write_project_tcl. The problem is that the HDL wrapper file is not produced by the project tcl, but must exist for this script to work without failing.

When block designs are produced in ip/, many files are generated, but only the wrapper file has to be checked into the source control. This file is in the list in the comments of the project tcl script:

# 3. The following remote source files that were added to the original project:-
#
#    "/home/jallen/tryit/ip/design_1/hdl/design_1_wrapper.v"
#    "/home/jallen/tryit/cons/mycons.xdc"

Anyway, when you create a block design, the default is for it to be produced inside the project:

UbQJba2.png!web

2Ynuqy3.png!web

Change this to ip/:

yEVrUvR.png!web

Now we create the block design:

nYfIRzy.png!web

RJfQnqY.png!web

Right click on the block design and create the HDL wrapper:

jeuyuuz.png!web

That's it. Now you have the files necessary for checking into source control so you can use the write_project_tcl command.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK