This repository is a fork of Digilent/digilent-vivado-scripts, however, it does not try to maintain compatibility. If you already use the Digilent scripts, then switching to this repository will require a small number of changes.
This is a collection of scripts for maintaining a Xilinx Vivado and SDK projects as a minimal git repository. These scripts have been tested with Vivado 2018.2 and 2019.1 and they may or may not work with newer or older versions of Vivado.
Requirements
- A Xilinx Vivado install
- Python 3.6.3 or newer
The provided Python script, git-vivado.py
, is provided as a clean front-end
to the Tcl scripts which do the heavy lifting. Here is how it can be run:
- With no arguments the configuration that will be used is printed.
checkin
creates the repository to track with git from the XPR path. It can accept the following options:-b
is the path to the Vivado binary to use-r
is the path to the repository root-w
is the path to the SDK workspace-x
is the path to the XPR file to use-v
is the version number of the Vivado binary-h
shows help information for this subcommand Note that sources do not need to be added local to a Vivado project in order to be detected by this script.
checkout
creates the project using the XPR path from the repository. It can accept the following options:-b
is the path to the Vivado binary to use-r
is the path to the repository root-w
is the path to the SDK workspace-x
is the path to the XPR file to use-v
is the version number of the Vivado binary-h
shows help information for this subcommand
Multiple configuration files can be specified, and they are read in a specific order, each one overwriting the last.
On Linux, the order is:
$XDG_CONFIG_HOME/vivado-scripts/vivado-scripts.json
$XDG_CONFIG_HOME/vivado-scripts.json
$HOME/.vivado-scripts/vivado-scripts.json
$HOME/.vivado-scripts.json
./vivado-scripts.json
If $XDG_CONFIG_HOME
is not defined, then $HOME/.config
will be used.
On Windows, the order is:
%APPDATA/vivado-scripts/vivado-scripts/config/vivado-scripts.json
./vivado-scripts.json
The configuration file may contain the following:
{
"project_name": "Project",
"repo_path": ".",
"vivado_path": "/opt/Xilinx/Vivado/{vivado_version}/bin/vivado",
"vivado_version": "2019.1",
"workspace_path": "{repo_path}/sdk",
"xpr_path": "proj/{project_name}.xpr"
}
The above is for Linux. On Windows it will look more like:
{
"project_name": "Project",
"repo_path": ".",
"vivado_path": "C:/Xilinx/Vivado/{vivado_version}/bin/vivado",
"vivado_version": "2019.1",
"workspace_path": "{repo_path}/sdk",
"xpr_path": "proj/{project_name}.xpr"
}
The configs support interpolation of other parameters using the {...}
syntax.
Note that nested interpolation is undefined behaviour. Suppose xpr_path
interpolates project_name
(like the above example), and project_name
interpolates vivado_version
, this may or may not work depending on the order
that the parameters are interpolated. Therefore, nested interpolation should
not be relied on.
It is recommended to have at least the vivado_path
and vivado_version
stored external to the project. For most projects, it is likely that the
project local vivado-scripts.json
only needs to define project_name
,
which should be the same as the project name selected in Vivado.
In order to ensure that any changes to this repository do not break the projects that use them, it is expected that this repository will be used as a submodule of each project repository that is intended to use them.
The project structure is outlined below, relative to the repository root.
/vivado-scripts
contains the scripts described by this document./proj
contains a checked-out Vivado project./repo
contains local IP, IP submodules, and cached generated sources./sdk
contains exported SDK sources./src
contains source files for the Vivado Project./src/bd
contains a TCL script used to re-create a block design./src/constraints
contains XDC constraint files./src/hdl
contains Verilog and VHDL source files./src/ip
contains XCI files describing IP to be instantiated in non-IPI/src/sim
contains Verilog and VHDL simulation sources projects.
/.gitignore
is a file describing which sources should be version controlled. An example is generated by the checkin process./.gitmodules
is a file describing submodules of the repository. Automatically maintained by the "git submodule" command./project_info.tcl
is a script generated by first-time checkin used to save and re-apply project settings like board/part values. This can be modified after initial creation to manually configure settings that are not initially supported. Note that this should be deleted and recreated when porting a project from one board to another./README.md
is a Markdown file describing the project and the process needed to use the project.
- Create a new Vivado project at an arbitrary location on your computer. When
exporting to and launching SDK, make sure to use exported locations and
workspaces that are not
Local to Project
. - Create a repository on Github for your project. Use the naming convention
<board>-<variant_number>-<project name>
(for example:Zybo-Z7-20-DMA
). Do not have Github create a gitignore file for you. Clone the repository. - Add these scripts to the repository as a git submodule using
git submodule add git@github.com:AdamChristiansen/vivado-scripts.git # or if you prefer HTTP over SSH git submodule add https://github.com/AdamChristiansen/vivado-scripts.git
- Add configuration files.
- Call
This command can be called from anywhere in your filesystem, with relative paths changed as required. This will also create a
python ./vivado-scripts/git-vivado.py checkin
.gitignore
file for the repository. - If required, in Xilinx SDK, right click on your application project's
src
folder and select "Export". Use this to copy all of the sources from<app>/src
to<project_repo>/sdk/appsrc
. - Create a
README.md
for the repo that specifies what the project is. - Add, commit, and push your changes.
- Clone (or pull) the Vivado project to be retargeted. Use its existing
version control system to generate an XPR. Make sure to run
if it uses any submodules.
git submodule init && git submodule update
- Open the project in Vivado and make any changes necessary (perhaps
upgrading IP). When exporting to and launching SDK, make sure to use
exported locations and workspaces that are not
Local to Project
. - Clone the project repository again in a different location. Remove all files from this directory.
- Add these scripts to the repository as a git submodule using
git submodule add git@github.com:AdamChristiansen/vivado-scripts.git # or if you prefer HTTP over SSH git submodule add https://github.com/AdamChristiansen/vivado-scripts.git
- Add configuration files.
- Call
This command can be called from anywhere in your filesystem, with relative paths changed as required. This will also create a
python ./vivado-scripts/git-vivado.py checkin -x <path_to_XPR>
.gitignore
file for the repository. - If required, in Xilinx SDK, right click on your application project's
src
folder and select "Export". Use this to copy all of the sources from<app>/src
to<project_repo>/sdk/appsrc
. - Create a
README.md
for the repo that specifies what the project is. - Add, commit, and push your changes.
- Clone (or pull) the Vivado project to be changed. Get these scripts by
running
git submodule init && git submodule update
- Call
This command can be called from anywhere in your filesystem, with relative paths changed as required. This will also create a
python ./vivado-scripts/git-vivado.py checkout
.gitignore
file for the repository. - Add a
vivado.json
configuration file for the installed Vivado version. - Run
python ./vivado-scripts/git-vivado.py checkout
- Open the project in Vivado and make any changes necessary (perhaps
upgrading IP or fixing a bug). When exporting to and launching SDK, make
sure to use exported locations and workspaces that are not
Local to Project
. - Call
This command can be called from anywhere in your filesystem, with relative paths changed as required. This will also create a
python ./vivado-scripts/git-vivado.py checkin -x <path_to_XPR>
.gitignore
file for the repository. - If required, in Xilinx SDK, right click on your application project's
src
folder and select "Export". Use this to copy all of the sources from<app>/src
to<project_repo>/sdk/appsrc
. - Make sure to update the repo's README as required.
- Add, commit, and push your changes.
- For Checked out repositories, SDK Application and BSP projects must be manually configured in order to add any additional libraries and compiler flags. This process is fairly error-prone.
- There is some danger that modifications to Digilent's board files may break existing projects, it may be worth considering adding the Digilent/vivado-boards repository as a submodule to project repositories.