3 demo bundle 的实施
3.1 概述
对于希望跳过下文详细说明的 Vivado 用户,以下是运行首次实施的步骤:
-
将 demo bundle 解压到工作目录。
-
启动 Vivado,若 Vivado 已在运行则关闭所有打开的项目。
-
选择 Tools > Run Tcl Script... 并选择 xillydemo-vivado.tcl(位于 verilog/ 或 vhdl/ 目录下,视情况而定)。
-
点击“Generate Bitstream”(或“Generate Device Image”)。
-
实施成功后,在 vivado/xillydemo.runs/impl_1/ 目录下找到比特流文件。
以下是更详细的说明: 实施 Xillybus demo bundle 并获取比特流文件有三种可行方法:
-
直接使用 bundle 中的项目文件。这是最简单的方法,适用于使用 demo bundle 列表中除 ML506 (Virtex-5) 之外的板 卡。
-
修改文件以适配不同的 FPGA。适用于使用其他板卡和/或其他 FPGA 的情况。当使用 Virtex-5 时也需采用此方法。更多信息 参见第 4.3 段。
-
从头建立 Vivado(或 ISE)项目。在需要将 demo bundle 与现有应用逻辑集成时可能需要此方法。更多细节见第 4.2 段。
本节的剩余部分将详细说明第一种工作流程,它是最简单且最常被选用的方式。另外两种工作流程基于第一种,其区别已在 上述段落中说明。
重要
的:
评估用 bundle 的配置以简单性而非性能为目标。对于需要持续稳定数据流的应用,尤其是高带宽场景,可以获得显著更好
的结果。针对这些场景,建议使用 Web 应用轻松构建并下载自定义 IP 核。
3.2 文件结构概述
bundle 包含以下部分目录(具体包含哪些目录取决于目标 FPGA):
-
core —— 存放 Xillybus IP 核
-
instantiation templates —— 包含该核的例化模板(Verilog 和 VHDL 两种版本)
-
verilog —— 包含 demo bundle 的项目文件以及 Verilog 源文件(位于 ’src’ 子目录下)
-
vhdl —— 包含 demo bundle 的项目文件以及 VHDL 源文件(位于 ’src’ 子目录下)
-
vivado-essentials —— 逻辑的定义文件和构建目录,供 Vivado 使用
-
blockplus —— 该目录仅与 Virtex-5 相关,参见第 4.3.5 段
注意,每个 demo bundle 针对特定板卡,该板卡在下载 demo bundle 的网站页面上列出。如果使用其他板卡,或者板卡上 添加或移除了某些配置电阻,则必须相应编辑约束文件。
对于 Vivado 项目,该文件是 vivado-essentials/xillydemo.xdc;对于 ISE 项目,则是位于 verilog/ 或 vhdl/ 下所选 ’src’ 目录中 的 UCF 文件。
此外请注意,vhdl 目录中包含 Verilog 文件,但通常不需要对这些文件做重大修改。
Xillybus IP 核与应用逻辑之间的接口位于 xillydemo.v 文件或 xillydemo.vhd 文件中(分别位于对应的 ’src’ 子目录下)。要尝试将 Xillybus 与您自己的数据结合使用,请编辑该文件。
3.3 使用 Vivado 生成比特流文件
ISE 用户:请跳至第 3.4 段。
Vivado 会在相对复杂的目录结构中生成许多中间文件,这使得项目难以管理。为保持 bundle 中文件结构的紧凑,提供了 Tcl 脚本用于创 建 Vivado 项目。该脚本会在当前目录下创建一个新的子目录“vivado”,并将所需的文件放入其中。
项目依赖于 src/ 子目录中的文件(不会复制这些文件)。PCIe 模块以及逻辑所使用的 FIFO 均在 vivado-essentials/ 中定 义。在项目实施过程中,Vivado 也会在该目录中填充中间文件。
启动 Vivado。在没有打开任何项目的情况下,选择 Tools > Run Tcl Script...,然后根据偏 好选择 verilog/ 或 vhdl/ 子目录下的 xillydemo-vivado.tcl。整个过程在一分钟内完成。可通过选择 Vivado 窗口底部 的“Tcl Console”选项卡并确认显示以下内容来验证项目是否成功部署:
INFO: Project created: xillydemo
如果 Tcl 控制台中的最后一行并非此信息,则说明出现了问题,最可能的原因是使用了错误的 Vivado 版本。
在此阶段会出现警告,但不会出现错误。然而,如果项目已生成(即脚本已运行过),再次运行脚本将导致以下错误:
ERROR: [Common 17-53] User Exception: Project already exists on disk, please use '-force' option to overwrite:
请注意,新的“vivado”子目录会创建在包含 Tcl 脚本的目录中。
项目创建完成后,即可开始实施:点击左侧 Flow Navigator 栏中的“Generate Bitstream”(或“Generate Device Image”)。
可能会弹出一个窗口询问是否启动综合和实施——选择“Yes”。
Vivado 会依次运行一系列流程。通常需要几分钟时间。期间会发出若干警告,但均不属于关键警告(不过执行 Tcl 脚本时留下的日志中 可能仍存在某些关键警告)。
之后会弹出一个窗口,指示比特流已成功生成,并提供后续操作选项。任何选项均可,包括“Cancel”。
比特流文件 xillydemo.bit 位于 vivado/xillydemo.runs/impl_1/。对于 Versal FPGA,该文件为 xillydemo.pdi。
实施过程预计不会失败。但有一种错误情况值得提及:
当集成了自定义逻辑后,可能会出现“Timing constraints weren’t met”的错误。这意味着工具未能满足时序要求。此时,设计 在语法上是正确的,但需要修改以确保某些路径在给定时钟频率和/或 I/O 要求下足够快。修正设计以改善时序的过程通常称为 时序收敛。
时序约束失败通常以关键警告 (critical warning) 的形式报告,因此 Vivado 不会阻止用户生成可能无法保证 FPGA 可靠行为 的比特流文件。为防止生成有问题的比特流,时序失败将通过一个小型 Tcl 脚本(即“showstopper.tcl”)转换为错误,该脚本会在布线 (route) 运行结束时自动执行。若要关闭此安全措施,请点击 Flow Navigator 中“Project Manager”下的“Project Settings”,选择“Implementation”按 钮,向下滚动到“route_design”的设置,然后从 tcl.post 中移除 showstopper.tcl。
Vivado 用户可以跳过以下各节,直接转到第 3.6 段。
3.4 设置 AMD PCIe IP 核
本部分仅与 ISE 工具链相关,适用于除 Spartan-6 之外的 FPGA。如果使用 Vivado,请参考第 3.3 段。使用 Spartan-6 FPGA 的用户可直接跳至第 3.5 段。
AMD PCIe 的 Coregen IP 核组织方式较为特殊,不允许将 XCO 文件直接包含在实施项目中,而是由核生成软件创建 Verilog 文件以供包 含。这种情况仅适用于 Virtex-5、Virtex-6 和 series-7。
Virtex-5 FPGA 需要特殊处理 XCO 文件,参见第 4.3.5 段。
请在 bundle 中的 blockplus 目录或 pcie_core 目录下找到项目文件 (.xise),双击打开 ISE。在“Design Utilities”下点 击“Regenerate all cores”,等待过程完成,然后关闭 ISE。无需进一步操作。
此过程会生成一组 Verilog 文件,这些文件是 AMD PCIe 核的包装器 (wrapper)。这些文件被用于生成 demo bundle 比特流 的项目。无论您偏好 Verilog 还是 VHDL,这些文件都以 Verilog 格式生成。
无需手动将这些 Verilog 文件包含到主项目中,但在尝试实施整个项目之前,必须生成这些文件一次。即使重新实施主项 目,也无需重复此过程。
3.5 使用 ISE 套件生成比特文件
当使用 Virtex 或 series-7 系列的 FPGA 时,请确保已按照上文第 3.4 段所述准备 好 PCIe 包装器。
根据偏好,双击 ’verilog’ 或 ’vhdl’ 子目录中的 ’xillydemo.xise’ 文件。ISE 将启动并打开项目,设置正确。ISE 不应提示缺少 任何文件。如果出现缺少文件的情况,且 FPGA 属于 series-7 或任意 Virtex 系列,则很可能是未按第 3.4 段所述准备 PCIe 包装器。
点击“Generate Programming File”开始实施。
在首次实施过程中,需要重新生成两个或三个 AMD Coregen IP 核。此过程耗时较长,但只需执行一次。会弹出类似以下的 窗口两次或三次:
在所有弹出窗口上均点击“Yes”。
此过程会产生若干警告(FPGA 项目的实施总会产生警告),但不应出现任何错误。过程结束后,比特文件为 xillydemo.bit。
务必确认时序约束已满足,方法是在日志中(靠近末尾处)查找以下语句:
All constraints were met.
这一点至关重要,尤其是在对项目进行更改之后。如果未满足约束,工具仍会生成比特文件,但 FPGA 可能会表现出不可预 测的行为(可能由允许温度范围内的温度变化导致)。
类似的信息也可以从 ISE 的设计摘要中找到。
未能满足时序约束可能是因为添加的逻辑速度不够快,无法承受 bus_clk 的速率。但如果无故出现失败,可能是 AMD 的工 具在尝试将逻辑组件放置到 FPGA 逻辑阵列上时做出了不佳的初始猜测,而后续运行的优化算法无法纠正。后一种情况可以通过更改 placer cost table(放置成本表)数值(即初始放置随机性的种子)来解决。在 ISE Project Navigator 的 Processes 窗格中,右键单击“Map”并选 择“Process Properties...”。确保属性显示级别为“Advanced”,然后将“Starting Placer Cost Table”更改为其他未尝试过的数值。该数值的大小 没有实际意义。然后重新点击“Generate Programming File”。
重要
的:
在某些 ISE 版本中,特别是 ISE 14.2,verilog/ 目录下的构建可能会失败,并显示类似于以下的错误:
ERROR:HDLCompiler:687 - “C:/try/xillybus-eval-kintex7-1.1/verilog/src/fifo_32x512_synth.v” Line 54: Illegal redeclaration of module
fifo_32x512. 这是由于 AMD 工具的一个 bug。要解决此问题,请删除 src/ 目录中的 fifo_8x2048_synth.v 和 fifo_32x512_synth.v
文件,然后重新运行“Generate Programming File”。此时会出现若干警告,指示工具找不到这些文件,但实施过程应能正常完
成。
3.6 加载比特文件
在开发初期阶段,建议通过 JTAG 加载 FPGA。对于大多数板卡,只需在运行 Vivado 的计算机与板卡上的 USB 接口之间连 接一根普通的 USB 线即可。使用 ISE 的用户请使用 iMPACT 加载比特文件。
关于如何通过 JTAG 加载 FPGA,请参考板卡说明。
对于 XillyUSB 项目,可随时加载和重新加载 FPGA,即使 USB 接口已连接到正在工作的计算机。
对于 PCIe 项目,必须在计算机开机之前将比特文件加载到 FPGA:计算机在上电时期望 PCIe 外设处于适当状态,并且可能 无法容忍之后出现任何意外情况。
因此,在主机运行期间,请不要重新加载 FPGA。尽管 PCIe 规范要求支持热插拔,但主 板通常不期望 PCIe 卡消失后又重新出现。因此,某些主板可能无法正确响应。然而,在操作系统运行期间重新加载 FPGA 在 某些 主板上是可以工作的。
Xillybus 的驱动程序设计为能够合理响应热插拔,但无法保证计算机的整体稳定性。相关讨论请见以下页面:
https://xillybus.com/doc/hot-reconfiguration
如果 FPGA 在上电时从闪存加载配置(与计算机一同上电),则必须确保 FPGA 加载足够快,以便在 BIOS 扫描总线时 PCIe 设备已经存在。
