我想知道 VHDL 项目的 vivado 中是否存在版本控制方式。 一种方法是将版本号添加到比特流文件名。
这可能吗? 如果不可能,还有哪些其他选择?
提前致谢
答案 0 :(得分:2)
版本信息格式和尺寸:版本是什么?是自然数吗?串?真实?你保存日期或时间戳吗?你需要一个内部版本号吗?子单元版本需要额外的空间吗?
版本来源和设计流程:什么设置版本?它是一个源控制工具吗?你手动设置版本?您是否需要自动化来更新部分版本信息(时间戳,内部版本号等)?
版本可访问性/可观察性:您想在哪里阅读版本号并让它可见?在源代码中?外部文件?比特流文件名? flash文件内容?您是否需要FPGA逻辑才能访问版本信息(通过通信通道,嵌入式处理器等读取)?
供应商工具/设备/系统/源依赖:版本信息的实现和自动化可能取决于以下几点:每个供应商都有不同的工具(即使在同一供应商中也是如此) )。不同的设备可能允许您做不同的事情。您工作的系统可能允许不同形式的自动化(操作系统,安装的脚本工具等)。源文件(VHDL,Verilog,System C,...)和目录结构可能会影响解决方案的适用性。
最灵活的方法是使用某种构建器脚本,它可能会也可能不会挂钩到源控制机制(makefile,perl,python等)。考虑项目在设计人员甚至设计平台(Windows,Linux等)之间的可传输性。
优点:
缺点:
Vivado有TCL挂钩,您可以在合成,实施等时使用它们。
使用预合成 TCL挂钩将允许您连接脚本以在合成之前运行,并实现您的版本信息更新机制。
使用 post-bitstream TCL挂钩将允许您连接脚本以在创建比特流文件后运行,并创建与更新的版本信息匹配的文件名,或者您可能需要的其他最终操作。
更多信息:
http://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_4/ug894-vivado-tcl-scripting.pdf
http://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_4/ug835-vivado-tcl-commands.pdf
优点:
缺点:
版本号,内部版本号,时间戳,基本上您所需要的一切都可以使用解析已知文件格式的脚本自动修改(在VHDL / Verilog代码中)。我已经使用Vivado TCL钩子和格式良好的包VHDL文件完成了这项工作。奇迹般有效。
注意:使用预合成TCL挂钩更新源文件时,Vivado会认为文件在之后被修改,并将认为实现未更新。我在脚本中添加了一个命令,用于保存包文件的当前时间戳,更新它,然后回写时间戳(意味着包文件将永远保存其系统日期和时间)。
优点:
缺点:
顶层设计模块/实体的泛型可以通过综合工具进行修改,并可以通过设计的逻辑进行访问。
优点:
缺点:
大多数FPGA支持IEEE标准。 1149.1 JTAG功能USERCODE,为用户提供32位值以识别比特流。创建比特流文件时,可以使用Vendor工具设置此值。但是,FPGA的逻辑无法读取该值(除非您实现读取闪存的逻辑并跟踪该值的正确地址,这是一个很大的过度杀伤)。
优点:
缺点:
与JTAG USERCODE类似,Xilinx为Virtex-5,Virtex-6和所有7系列器件实现了USR_ACCESS寄存器。他们为VHDL / Verilog提供了一个原语,允许您通过逻辑读取值。
此处提供更多信息:http://www.xilinx.com/support/documentation/application_notes/xapp497_usr_access.pdf
优点:
缺点:
您可以实现版本信息ROM并使用外部文件来设置其值。 (见Verilog : Memory block Instantiation)
优点:
缺点:
许多系统都使用闪存设备加载FPGA。通常,只有FPGA比特流有更多的空间。可以创建大型闪存映像文件以包括额外信息,其中包括版本信息。这可能是我上面所写的最糟糕的选择,并提到这是完整的。
优点:
缺点: