vivado vhdl项目的版本控制

时间:2016-07-04 09:21:05

标签: vhdl vivado

我想知道 VHDL 项目的 vivado 中是否存在版本控制方式。 一种方法是将版本号添加到比特流文件名。

这可能吗? 如果不可能,还有哪些其他选择?

提前致谢

1 个答案:

答案 0 :(得分:2)

想想你需要什么

  • 版本信息格式和尺寸:版本是什么?是自然数吗?串?真实?你保存日期或时间戳吗?你需要一个内部版本号吗?子单元版本需要额外的空间吗?

  • 版本来源和设计流程:什么设置版本?它是一个源控制工具吗?你手动设置版本?您是否需要自动化来更新部分版本信息(时间戳,内部版本号等)?

  • 版本可访问性/可观察性:您想在哪里阅读版本号并让它可见?在源代码中?外部文件?比特流文件名? flash文件内容?您是否需要FPGA逻辑才能访问版本信息(通过通信通道,嵌入式处理器等读取)?

  • 供应商工具/设备/系统/源依赖:版本信息的实现和自动化可能取决于以下几点:每个供应商都有不同的工具(即使在同一供应商中也是如此) )。不同的设备可能允许您做不同的事情。您工作的系统可能允许不同形式的自动化(操作系统,安装的脚本工具等)。源文件(VHDL,Verilog,System C,...)和目录结构可能会影响解决方案的适用性。

自动化选项

Makefile(构建器脚本)自动化

最灵活的方法是使用某种构建器脚本,它可能会也可能不会挂钩到源控制机制(makefile,perl,python等)。考虑项目在设计人员甚至设计平台(Windows,Linux等)之间的可传输性。

优点:

  • 完全控制你想做的事。
  • 可以挂钩任何源控件自动化。
  • 使用标准工具时可以修改为在任何平台上工作(务必特别注意操作系统之间不同的文件路径)。

缺点:

  • 使用GUI供应商工具不能很好地运行(参见Vivado TCL挂钩)。

Vivado TCL挂钩

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

优点:

  • 使用GUI流程(单击“合成”时自动处理所有内容)。

缺点:

  • (Vivado)依赖工具
  • 需要记住在Vivado项目中创建钩子

实施选项

源代码修改

版本号,内部版本号,时间戳,基本上您所需要的一切都可以使用解析已知文件格式的脚本自动修改(在VHDL / Verilog代码中)。我已经使用Vivado TCL钩子和格式良好的包VHDL文件完成了这项工作。奇迹般有效。

注意:使用预合成TCL挂钩更新源文件时,Vivado会认为文件在之后被修改,并将认为实现未更新。我在脚本中添加了一个命令,用于保存包文件的当前时间戳,更新它,然后回写时间戳(意味着包文件将永远保存其系统日期和时间)。

优点:

  • 设计人员可以轻松查看的版本信息(包文件)。
  • 可供逻辑使用轻松访问的版本信息。
  • 设备独立。

缺点:

  • 检查比特流文件无法读取版本信息。
  • 编写脚本可能需要一些工作,可能会迫使您对项目源目录结构进行标准化[这可能不是一件坏事;)

顶级实体/模块通用

顶层设计模块/实体的泛型可以通过综合工具进行修改,并可以通过设计的逻辑进行访问。

优点:

  • 比修改源代码更简单的脚本。

缺点:

  • 检查比特流文件无法读取版本信息。
  • 您仍需要在某处(文件)保存您的版本/内部版本号。
  • 对于VHDL / Verilog,使用泛型比使用包更复杂,因为您需要通过层次结构连接泛型,直到到达将值写入寄存器的设计代码。
  • 合成工具依赖项。不同的工具有不同的命令来更新顶级通用值。

JTAG USERCODE

大多数FPGA支持IEEE标准。 1149.1 JTAG功能USERCODE,为用户提供32位值以识别比特流。创建比特流文件时,可以使用Vendor工具设置此值。但是,FPGA的逻辑无法读取该值(除非您实现读取闪存的逻辑并跟踪该值的正确地址,这是一个很大的过度杀伤)。

优点:

  • 适合大多数设备。
  • 可以通过检查文件来访问版本信息。

缺点:

  • 没有极端程序,逻辑无法读取版本信息。
  • 信息量有限(仅限32位)。

Xilinx USR_ACCESS注册

与JTAG USERCODE类似,Xilinx为Virtex-5,Virtex-6和所有7系列器件实现了USR_ACCESS寄存器。他们为VHDL / Verilog提供了一个原语,允许您通过逻辑读取值。

此处提供更多信息:http://www.xilinx.com/support/documentation/application_notes/xapp497_usr_access.pdf

优点:

  • 设计逻辑可以读取版本信息。
  • 可以通过检查文件来访问版本信息。

缺点:

  • 特定设备的解决方案(甚至并非所有Xilinx设备都支持此功能)。
  • 信息量有限(仅限32位)。

ROM静态信息

您可以实现版本信息ROM并使用外部文件来设置其值。 (见Verilog : Memory block Instantiation

优点:

  • 可以包含大型版本信息(甚至是ASCII码)。
  • 设计者可查看的版本信息(外部文件)。
  • 适合大多数接受ROM的VHDL / Verilog代码的设备和工具。

缺点:

  • 读取所有ROM可能需要更复杂的逻辑(取决于您如何实现它)。
  • 通过检查文件(您需要提取ROM比特流位置)来检查版本信息是很困难的(但可能)。

Flash图像修改

许多系统都使用闪存设备加载FPGA。通常,只有FPGA比特流有更多的空间。可以创建大型闪存映像文件以包括额外信息,其中包括版本信息。这可能是我上面所写的最糟糕的选择,并提到这是完整的。

优点:

  • 潜在的大型信息缓存。
  • 可以检查Flash图像文件的版本信息。

缺点:

  • 难以实施。
  • 取决于供应商工具。