The overall philosophy for revision controlling a design is to recreate the design from its sources using a Tcl script. The following steps outline how this is achieved:
- Use a scripted flow for revision control. Scripted flows enable repeatability, the design can be recreated by sourcing the Tcl script.
- Keep source files external to the project. Ideally, the source files are kept outside of the Vivado build directory. This helps to ensure separation of the source files and the tool generated files.
- Revision control the source repository. All sources should be managed by the revision control system. It is important to note that when Vivado is using the source files, they should be writable.
- Generate a script to recreate the design. Non-project flows are, by definition, scripted flows because the design is compiled strictly using Tcl commands. You would manually create this Tcl script. A project flow can be driven from the Vivado IDE or via a project based Tcl script. The recommendation is to use Tcl commands to recreate a project flow.
- Revision control the script. Once the script is created, it is important to manage this file as a source too. As the design changes, this script is updated accordingly to accommodate new sources or to capture new design configurations. It is important that this script is managed like any other design source.
- Test your methodology. Revision control holds good depending on how well you test and maintain your methodology. Ideally, to ensure no files are missed and the design rebuilds completely from design sources using a script, the design would be regressed at a regular cadence. By rebuilding the design regularly, any issues with the revision control methodology can be caught and addressed in a timely manner.
The subsequent sections of this chapter describe how this revision control philosophy should be applied to the scripted project flows. Non-project flow users should be aware of exactly which files are sources and which files are generated by the flow. They are also, rebuilding the design from scratch on each design iteration.