4 修改

4.1 与定制逻辑集成

Xillybus demo bundle 的设计便于与应用逻辑集成。数据连接的入口位于 xillydemo.v 或 xillydemo.vhd 文件中(取决于偏好的语言)。使 用 Xillybus IP 核在主机(Linux 或 Windows)与 FPGA 之间传输数据时,bundle 中的所有其他 HDL 文件均可忽略。

可以按照第 3.3 节所述准备的工程中添加 包含定制逻辑设计的其他 HDL 文件,然后通过单击 “Compile Design” 重新构建。无需重复初始部署的其他步骤,因此逻辑的开发周期相当快 速且简单。

当将 Xillybus IP 核连接到定制应用逻辑时,强烈建议仅通过 FIFO 与 Xillybus IP 核交互,至少在第一阶段不要尝试用逻辑模 拟其行为。

例外情况是将存储器或寄存器阵列连接到 Xillybus,此时应遵循 xillydemo 模块中展示的示例。

在 xillydemo 模块中,使用 FIFO 执行数据环回(loopback)。换句话说,从主机到达的数据被送回主机。FIFO 的两侧均连 接到 Xillybus IP 核,因此该核既是数据源也是数据消费者。

在实际使用场景中,FIFO 只有一侧连接到 Xillybus IP 核。另一侧连接到提供或消耗数据的应用逻辑。

xillydemo 模块中使用的 FIFO 仅使用一个公共时钟驱动两侧(scfifo),因为两侧都由 Xillybus 的主时钟驱动。在实际应用中,可能希望 将其替换为具有独立读写时钟的 FIFO。这允许使用除 bus_clk 以外的时钟来驱动数据源和数据消费者。通过这样做,FIFO 不仅充当中介, 还用于正确的时钟域跨越(clock domain crossing)。

请注意,Xillybus IP 核期望从 FPGA 到主机的流使用普通 FIFO 接口(而 非“look-ahead”或“show-ahead”模式)。

与集成定制逻辑相关的文档如下:

4.2 修改 Altera 的 PCIe IP / Megafunction

除非绝对必要,否则不应更改 Altera IP Compiler for PCI Express Megafunction 的配置。

特别是,接收缓冲区的分配非常敏感。Xillybus IP 核依赖于 demo bundle 中 IP Compiler / MegaWizard 给出的这些缓冲区的 大小。如果 PCIe 核分配的缓冲区空间小于 Xillybus IP 核的预期,则从主机到 FPGA 的通信中可能出现偶发数据错误。这也可能导致该方向 通信完全停滞。此类问题的原因是到达 FPGA 的数据包导致这些缓冲区溢出(overflow)。

如果需要对 IP / Megafunction 进行任何更改,请通过 Xillybus 网站上公布的电子邮件地址寻求帮助。

4.3 纳入自定义工程

如果需要,可以将 Xillybus IP 核包含在现有的 Quartus 工程中,或者从头创建一个新工程。此节涉及用于 PCIe 的 Xillybus,但类似流程也适用于 XillyUSB。

如果工程尚不存在,请启动一个新工程,并将其设置为基于您偏好的 HDL 语言和目标 FPGA。

将 Xillybus IP 核包含在工程中:

  • 将 pcie_core/ 子目录中的 pcie_c4_1x.v 文件(或类似文件)复制到与工程相关的目录中。

  • 对于 Cyclone V、Arria V、Stratix V 以及系列 10 FPGA,还需将 pcie_core/pcie_reconfig.qsys(或 pcie_core/pcie_ip.ip)复 制到同一目录中。

  • 如果所选 FPGA 需要,请遵循第 3.3.2 节概述的流程,以构建 Altera 的 PCIe 模块。

  • 对于 Cyclone IV,应添加以下文件(可能是副本):

    • pcie_c4_1x.v

    • pcie_c4_1x_core.v

    • pcie_c4_1x_serdes.v

    • pcie_c4_1x_examples/chaining_dma/pcie_c4_1x_rs_hip.v

    • ip_compiler_for_pci_express-library/altpcie_hip_pipen1b.v

    • ip_compiler_for_pci_express-library/altpcie_reconfig_3cgx.v

    • ip_compiler_for_pci_express-library/altpcie_rs_serdes.v

    对于 Stratix IV 和 Arria II,应添加以下文件:

    • pcie_s4_4x.v

    • pcie_s4_4x_core.v

    • pcie_s4_4x_serdes.v

    • pcie_s4_4x_examples/chaining_dma/pcie_s4_4x_rs_hip.v

    • ip_compiler_for_pci_express-library/altpcie_hip_pipen1b.v

    • ip_compiler_for_pci_express-library/altpcie_reconfig_4sgx.v

    • ip_compiler_for_pci_express-library/altpcie_rs_serdes.v

    对于系列 V FPGA,无需复制类似文件,因为它们由 Qsys 生成并包含。

  • 将两个 HDL 文件(xillybus.v 和 xillydemo.v(hd))从其中一个 src/ 子目录复制出来(取决于语言偏好),并将它们添加到工 程中。

  • 采用任一 src/ 目录中 SDC 文件的约束(可能需要稍作修改以匹配工程顶层信号的名称)。

  • 从 core/ 目录复制 xillybus_core.qxp 或 xillybus_core.vqm,并将其也添加到工程中。

  • 如果 xillydemo 模块不是工程的顶层模块,请将其端口连接到顶层。

  • 要将 Xillybus IP 核连接到定制应用逻辑,请编辑 xillydemo 模块,将现有应用逻辑替换为所需逻辑。

4.4 使用其他开发板

4.4.1 通用说明

当使用不在 demo bundle 列表中的开发板时,需要对 bundle 进行一些轻微修改。

4.4.2 器件系列

demo bundle 包含一个 QXP 或 VQM 文件,这是针对特定器件系列综合得到的文件。它可以与该系列中的任何器件一起使用。

4.4.3 引脚布局

大多数购买的开发板都有自己的 FPGA 设计示例,展示了如何在板上使用 PCIe 接口。通常,最简便的方法是在目标开发板 的 QSF 文件中找到相关的引脚分配,然后将引脚名称修改为 Xillybus 的 QSF 文件中所使用的名称。完成此操作后,可以替换 Xillybus 工程 所使用的 QSF 文件中的相关行。

还有四根 user_led 线,没有功能上的重要意义。但如果板上有空闲的 LED,建议连接它们,因为它们可以提供一些关于通 信状态的指示。user_led 信号采用低电平有效逻辑(逻辑 ’0’ 表示 LED 点亮)。

4.4.4 仅 PCIe:时钟

xillydemo 模块需要这三时钟中的部分或全部作为输入。所需的时钟是 xillydemo 模块的输入。

  • pcie_refclk – 直接连接到主机主板提供的参考时钟。该时钟的频率应为 100 MHz。当主机断电时,以及 PCIe 规范允许的其他情况下,该 时钟可能不活动。根据 FPGA 的要求,主板时钟与 FPGA 之间可能存在时钟清洗电路。如果该输入端口提供不同的时钟频率(例如时钟清洗 器提供的 125 MHz),则需要在 IP Compiler for PCI Express 设置中相应更改 Xcvr_ref_clk 参数。这可以在调用相关 IP Compiler / MegaWizard Plug-In Manager 时完成,如第 3.3 节所示。

  • clk_50 – 驱动千兆收发器的 reconfig_clk,并且必须始终有效。因此它不能依赖于主板的参考时钟。该时钟的允许频率范围取决于 FPGA 系列(例如 Cyclone IV 上为 37.5 MHz 到 50 MHz)。该时钟的规格可在相关 FPGA 器件手册中搜索 “reconfig_clk” 找到。

  • clk_125 – 驱动收发器所需的始终有效的时钟。该时钟的频率必须为 125 MHz,并且不能依赖于主板的参考时钟。

重要 的:
pcie_refclk 不得仅由板上的某个振荡器驱动。与主机时钟的任何微小频率差异都会导致通信不可靠或 无法将 FPGA 检测为 PCIe 设备。

在 Cyclone IV GX Transceiver Starter Board 的 demo bundle 中,clk_50 和 clk_125 输入直接由连接到板上 50 MHz 和 125 MHz 时钟源的 I/O 引脚驱动。如果板上没有合适的直接时钟,可以使用 PLL 生成这两个时钟,如 Altera 发布的 IP Compiler for PCI Express User Guide 第 7 节所述。

使用 PLL 时,必须编辑 xillybus.v,将 reconfig_clk_locked 信号连接到 PLL 的锁定指示。这在 Stratix IV 的 demo bundle 中 已经完成,因为 DE4 板不提供 125 MHz 的始终有效时钟。

在 pcie_core 子目录中的文件(生成 PCI Compiler for PCI Express 文件后)中可以找到使用 PLL 的示例,例如 pcie_c4_1x_examples/chaining_dma 目录中的 pcie_c4_1x_example_chaining_pipen1b.v(使用 Cyclone IV 以外的系列时类似文 件)。

4.4.5 使用 XillyUSB

XillyUSB 可用于具有 SFP+ 接口的其他开发板。在这种情况下,只需设置设计的约束以使用连接到 SFP+ 连接器的 MGT 即可。

开发板还应提供一个低抖动的 125 MHz 参考时钟供 MGT 使用。尽管 USB 规范有要求,但不应启用扩频时钟(SSC)(如 果存在此选项):使用 SSC 参考时钟时,MGT 无法正确锁定接收信号。

对于定制开发板,建议参考 sfp2usb 模块的原理图,因为 SFP+ 连接器的引脚直接连接到 FPGA 的 MGT。可以选择像 sfp2usb 模块那样交换 SSRX 线。仅在简化 PCB 设计时推荐这样做。

如果需要,也可以交换 SSTX 线。这需要编辑 *_frontend.v 文件,使发送位的极性反转,从而补偿线对交换。请注意,即使 不进行此编辑,USB 连接也有很大可能正常运行,因为 USB 规范要求链路伙伴即使在极性交换的情况下也能正常工作。但仍建议不要依赖 于此。