在Xilinx Vivado中使用SVN吗?


13

我刚刚说过在新项目中使用Vivado,并且希望将项目文件放在SVN下。

Vivado似乎在项目名称下创建了所有项目文件(例如proj1):

/<path to the project>/proj1/
                            proj1.xpr
                            proj1.srcs/
                                       constrs_1/
                                                new/
                                                    const1.xdc
                            proj1.runs/
                            proj1.data/
                            proj1.cache/

我的问题是除XDC和XPR文件外,我还需要把哪些文件放在SVN下?


1
您为什么认为如果不需要它们,则不需要全部?
Grady Player

6
我不明白你在这里的意思。Vivado会创建大量不需要控制的文件,因为它们是生成的。我的源文件在其他地方,我只需要保存对Vivado重要的文件。
FarhadA 2013年

我要说的是,由于唯一的输入就是源代码,因此这是放在SVN下的唯一文件。但是我从没用过,只是猜测
clabacchio

有没有干净的选择?你可以清理再检查一切。
格雷迪球员

2
我正在创建一个TCL脚本来重新生成Vivado项目。并将其置于版本控制之下。在构建项目(使用make)时,它将创建Xilinx需要的文件。这使我不必检入Xilinx的完整项目目录和文件。
vermaete

Answers:


6

Xilinx创建YouTube视频(叹气)来解决这个问题。这是视频的链接

http://www.xilinx.com/training/vivado/vivado-version-control-overview.htm

这是我的视频摘要(8分钟)

在你开始之前

如果您真的喜欢完全控制,Xilinx建议您完全放弃GUI并在命令行上执行所有操作,然后您知道什么是源,什么不是源。

否则,Xilinx意识到Vivado项目不是为版本控制而设计的。请勿检查整个项目。但是请继续阅读以获取提示...

基准线

当然,您在Vivado工具之外编写的所有内容都应检入。

检入以下文件

*.v, *.vh, *.vhdl, *.edif  - HDL and Netlist
*.xdc - Constraints
*.xci - IP Core
*.bd  - IP Integrator Block Diagram
*.xmp - Embedded Subsystem
*.sgp - System Generator Subsystem
*.bmm
*.cdc - Chipscope
*.elf
*.mem

IP块

如果使用IP块,请在唯一的文件夹中生成IP,然后检查所有内容。

检查点

如果您希望能够在不运行所有内容的情况下重新运行流的一部分,请签入检查点文件。

*.dcp - Design Checkpoints

我的附录

如果Xilinx工具高效,我不建议您检入dcp文件,但是它们要花很多时间才能运行,因此以牺牲难看的版本控制系统为代价可能是值得的。

视频没有说关于Vivado项目文件(* .xpr)的内容,所以这是我的建议:

*.xpr
*.data/*/fileset.xml
*.data/*/runs.xml

Xilinx建议的替代方法(实际上是一种技巧,不适合版本控制)是File -> Write Project Tcl每次您要提交时都运行命令,然后将该TCL文件提交到版本控制中。更新本地文件夹时,需要重新运行该TCL文件以创建所有项目文件。uck


太好了,真的很有帮助。我不再使用SVN,而是使用GIT,但这可以帮助我将正确的文件放入存储库中。
FarhadA 2014年

1
我使用了tcl文件,它实际上工作得很好。仅当将文件添加到项目中时,才需要更新tcl脚本,通常,当所有文件都放入时,我会生成tcl。它们不像您确定的那样令人讨厌。
斯坦里2014年

如果Vivado在每次项目更改后自动创建TCL文件,并且将TCL文件读取为“项目”文件而不是xpr文件,则TCL解决方案将是理想的。换句话说,如果Xilinx摆脱了xpr文件并将其替换为tcl文件。
Mark Lakata 2014年

提交xpr文件有一个小问题:即使您只打开Vivado,它也会每次更改...
Piedone 2015年

3

Vivado 2014.1允许使用.tcl脚本来重新生成项目。

为此,请打开您的项目,然后转到文件->写入项目tcl。

基础项目

我通常将源代码和.tcl脚本存储在项目目录之外的位置。通过右键单击核心并选择“复制IP”,可以将项目内生成的xilinx IP核心复制到其他位置。并删除原来的。生成tcl脚本时,它将创建指向这些文件的相对链接。这通常是我的目录结构:

base_project/
 srcs/
  project.v
 ip/
  ip1/
   ip1.xml
   ip1.xci
 genproject.tcl

只需要提交IP .xml和.xci文件。(从技术上讲,这甚至不是必需的,请参阅末尾的注释)。

这就是致力于git的原因,请注意缺少project.xpr或项目目录。

当我运行时genproject.tcl,它将为项目创建另一个目录。

base_project/
 srcs/
 ip/
 genproject.tcl
 projectdir/
  project.runs/
  project.cache/
  project.xpr

这个新文件夹完全是一次性的。为了创建此结构,我以以下方式修改tcl脚本。

我将前三行更改如下:

# Set the reference directory for source file relative paths (by default the value is script directory path)
set origin_dir [file dirname [info script]]

# Set the directory path for the original project from where this script was exported
set orig_proj_dir "[file normalize "$origin_dir/projectdir"]"

# Create project
create_project project $projectdir/project

这将创建一个新项目目录,并在该目录中创建新项目。

然后,我修改路径以指向正确的位置。您可能需要在脚本的其他位置更改这些路径。

# Set 'sources_1' fileset object
set obj [get_filesets sources_1]
set files [list \
 "[file normalize "$origin_dir/srcs/project.v"]"\
 "[file normalize "$origin_dir/ip/ip1/ip1.xci"]"\
]
add_files -norecurse -fileset $obj $files

我还修改了IP内核的设计运行,如该答案所示

.wcfg文件的包含方式类似于ip和srcs。

这是处理更简单项目(仅包含源和IP,不包含框图)的地方。为了存储框图数据,还需要执行以下操作。

框图项目

为了保存程序框图,在程序框图打开的情况下,转到文件->导出->程序框图到Tcl,并将其保存在与另一个tcl文件相同的目录中。

然后,我制作了一个Generate_Wrapper.tcl脚本,该脚本创建了框图包装文件,因此您无需手动执行此操作。project / project.srcs文件夹用于存储bd数据,但是由于bd存储在tcl脚本中,因此它仍然是完全可抛弃的。与其他两个一起保存。

set origin_dir [file dirname [info script]]

make_wrapper -files [get_files $origin_dir/project/project.srcs/sources_1/bd/design_1/design_1.bd] -top
add_files -norecurse -force $origin_dir/project/project.srcs/sources_1/bd/design_1/hdl/design_1_wrapper.v
update_compile_order -fileset sources_1
update_compile_order -fileset sim_1

在我的结尾,我genproject.tcl添加了以下几行来生成框图和包装器:

source $origin_dir/Create_bd.tcl
source $origin_dir/Generate_Wrapper.tcl
regenerate_bd_layout

对于没有源代码的项目(仅是框图),我的git commit如下:

base_project/
 Generate_Wrapper.tcl
 Create_Bd.tcl
 genproject.tcl

为了生成所有内容,请运行genproject.tcl

如果您特别有效率,您甚至可以将所有这些组合成一个,我还没有解决这个问题。

自定义组件:组件项目

关于创建自定义组件的另一个快速说明。如果您有component.xml,请将其添加到tcl来源列表中:

  "[file normalize "$origin_dir/component.xml"]"\

然后还添加以下部分:

set file "$origin_dir/component.xml"
set file [file normalize $file]
set file_obj [get_files -of_objects [get_filesets sources_1] [list "*$file"]]
set_property "file_type" "IP-XACT" $file_obj

这包括组件设计到项目中以便于定制。

自定义组件:引用您的组件

您可以像这样定制您的自定义组件存储库路径:

# Set IP repository paths
set obj [get_filesets sources_1]
set_property "ip_repo_paths" "[file normalize "$origin_dir/path/to/repository"]" $obj

在我的repo文件夹中,有包含.xml文件的单个文件夹。因此,您不是在引用包含.xml的文件夹,而是该文件夹的父文件夹。例如:

repository/
 component1/component1.xml
 component2/component2.xml

我们如何运行这些tcl脚本?

打开Vivado,并且在不打开任何项目的情况下,选择“工具”->“运行TCL脚本”,然后导航到您的脚本。

额外的TCL笔记

您在Vivado中运行的每个命令都在tcl控制台中显示为tcl命令。例如,当我使用GUI生成新的Xilinx IP时,这在tcl控制台中出现:

create_ip -name floating_point -vendor xilinx.com -library ip -module_name floating_point_0
set_property -dict [list CONFIG.Operation_Type {Fixed_to_float} CONFIG.A_Precision_Type {Custom} CONFIG.C_A_Exponent_Width {38} CONFIG.C_A_Fraction_Width {0} CONFIG.Result_Precision_Type {Custom} CONFIG.C_Result_Exponent_Width {8} CONFIG.C_Result_Fraction_Width {16} CONFIG.Flow_Control {NonBlocking} CONFIG.Has_ARESETn {true}] [get_ips floating_point_0]

这意味着两件事:

  • 您甚至根本不需要保存xilinx ip内核-一旦它们成为您想要的方式,请将命令复制到tcl脚本中,您就不再需要提交ip /了。

  • 在-module_name之后使用-dir参数指定IP目录,以将其放置在您想要的任何位置(默认情况下在project.srcs中)。

  • 通常,您在GUI中所做的任何事情都可以在tcl中完成,查看xilinx的工作方式的最简单方法是在GUI中进行操作,然后查看TCL控制台中的内容。

  • 这个庞大的pdf详细介绍了所有vivado tcl命令。


2

有一个Xilinx培训视频,介绍了如何在Vivado中使用版本控制系统。基本上,文件列表取决于您使用的功能。

如果使用脚本化方法(如vermaete一样),则可以让Vivado将所有中间文件/临时文件写入单独的目录(请参见此处),以便轻松地将它们分开。

否则,您可以通过Vivado清理build文件夹,剩下的任何内容都可以置于版本控制下。


1
谢谢,我将对此进行研究,Xilinx可以提供如此昂贵的工具,却根本不用为它的版本控制提供适当的支持,这真是令人惊讶。
2013年

1
Xilinx论坛(来自2009 IIRC)有一个有趣的评论:这些工具是为硬件工程师设计的。硬件工程师也不了解,也不关心版本控制。但是我认为这种态度已经改变,并且越来越多的软件工程师正在使用这些工具。因此,现在修订控制比过去更重要。
hli 2013年

2
好吧,这是一个纯粹的侮辱,他曾经说过这些话。硬件工程师使用各种类型的版本控制,许多工具支持,许多工程师使用标准RC来做到这一点,以及其他人使用诸如带有内置RC的Mentor HDL Designer之类的工具。可悲的是,像Xilinx和Altera这样的FPGA供应商似乎并不关心这些问题,而这正是主要问题所在。
2013年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.