But Vivado doesn't get the job done. The intended workflow is to click around in the GUI until it (hopefully) synthesizes something. The state is then recorded in some proprietary project file that cannot be version controlled or shared with other developers. The workaround is to generate some unholy mess of tcl scripts that automate the clicking, such that one can start from scratch for each synthesis. The scripting mess breaks with each minor release of Vivado, so you need to either never update, or have a separate (~100 GB) Vivado installation for every single project. And if your chip is more than a home-gamer ZYNQ, you hopefully like paying subscription fees for the experience.