5 进行修改

5.1 与自定义逻辑集成

重要 的:
如果使用非 demo bundle 自带的 QSF 文件构建 FPGA 设计,请参阅第 5.3 节以了解更多信 息。

Xillinux 发行版的设计便于与应用程序逻辑进行集成。用于连接数据源(data source)和数据接收器(data sink)的前端是 xillydemo.v 或 xillydemo.vhd 文件(取决于偏好的语言)。仅为了使用 Xillybus IP 核在 Linux 主机(host)与逻辑结构体(logic fabric)之间传输数据,可 以忽略启动镜像工具包中的所有其他 HDL 文件。

可以将包含自定义逻辑设计的其他 HDL 文件添加到第 3.4 节处理的项目中,然后按 照首次构建的相同方式重新构建。要使用更新后的逻辑启动系统,需要按照第 3.4 节的描述重新生成 soc_system.rbf,并按照第 3.6 节的描述写入 microSD 卡。无需重复初始发行版部署的其他步骤,因此逻辑的开发周期相当快速且简单。

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

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

在 xillydemo 模块中,FIFO 用于将从主机(host)到达的数据环回(loopback)给主机。FIFO 的两端都连接到 Xillybus IP 核,这使得该核充当自己的数据源和数据接收器。

在更有用的场景中,FIFO 只有一端连接到 Xillybus IP 核,另一端连接到应用程序数据源或数据接收器。

xillydemo 模块中使用的 FIFO 仅接受两端共用一个时钟,因为两端都由 Xillybus 的主时钟驱动。在实际应用中,可能希望将其替换为读 写端具有独立时钟的 FIFO,从而允许数据源和数据接收器由总线时钟以外的时钟驱动。这样,FIFO 不仅充当中介,还用于正确的时钟域交 叉(clock domain crossing)。

请注意,对于从 FPGA 到主机(host)的流(stream),Xillybus IP 核期望的是普通 FIFO 接口 (而非“首字预出”类型(First Word Fall Through))。

以下文档与集成自定义逻辑相关:

5.2 使用其他开发板

在尝试于 SoCKit 开发板以外的其他开发板上运行 Xillinux 之前,可能需要进行某些修改。

其中涉及更换引脚和时钟等方面:

  • xillybus.v 中定义的时钟 PLL 的属性必须进行设置,以匹配连接到 clk_bot1 的 free-running 时钟(如果该频率不是 50 MHz),同时更新 SDC 文件。

  • VGA 输出需要与目标开发板相匹配。

  • HPS 的多路复用引脚:ARM 核心具有 I/O 引脚,这些引脚通过固定的布局(placement)连接到芯片上的物理引脚。在 Qsys 中配置 ARM 核心,为其分配特定的角色(例如 USB 接口、以太网等)。这些角色必须与这些引脚在开发板上的实际连接一致。

后一个问题很重要,不仅因为关键硬件功能可能失效,而且板上非法的物理信号条件可能导致硬件损坏(尽管实际损坏非常 罕见)。

HPS 引脚分配不一致的问题可通过三个步骤纠正:

  • 在 Qsys 中纠正这些分配。

  • 构建整个项目(包括 FPGA 部分),并基于新的交接文件(handoff files)生成更新的启动加载程序(boot loader)(即 U-boot 中设置处理器相关寄存器的 SPL 部分)。

  • 更新 DTS 文件以匹配设备分配,并对该文件进行编译,生成用于启动系统的 DTB 文件。

5.3 自定义构建项目与 preflow.tcl

如果将 demo bundle 的源文件移植到另一个 Quartus II 项目中,则适用在 QSF 文件之间传递信息的常见做法。必须特别注 意处理一个非标准脚本 preflow.tcl,该脚本位于 demo bundle 的 soc_system 子目录中。

该脚本的主要目的是重新连接由 Qsys 生成的 SoC 基础设施的顶层模块,以绕过实现互连的、存在缺陷的 AXI 总线逻辑。如 果不进行此重新连接,AXI 总线上的数据传输可能看似正常工作,但会观察到零星的数据损坏。

该脚本由 Quartus II 在编译前自动执行。这是 xillydemo.qsf 中以下行的结果:

set_global_assignment -name PRE_FLOW_SCRIPT_FILE \
           quartus_sh:../soc_system/preflow.tcl

为了确保基于 Xillybus 的 FPGA 设计不会意外使用未经重新连接的基础设施,preflow.tcl 还会修改某些顶层端口的名称,使 其与原始名称不兼容。这些端口是名为 xillybus_0_conduit_* 的端口。

判断模块是否已被脚本修改很容易:修改后的文件 soc_system/soc_system/synthesis/soc_system.v 的第一行包含

// soc_system.v (mangled by preflow.tcl)

如果文件确实已重新连接。

要在自定义项目中包含 SoC 基础设施,请从已完全构建的 demo bundle 中复制文件来移植整个 SoC 模块树,并在 QSF 文 件中添加以下行:

set_global_assignment -name QIP_FILE path/to/soc_system.qip

5.4 对 Qsys 项目的更改

由于 Qsys 生成的 Verilog 文件之一会被自动修改,因此不建议对 Qsys 项目进行修改。无法保证修改后的 Qsys 项目能被脚 本正确修复,尤其是在项目拓扑结构发生变化的情况下。

更改元素的属性(例如修改处理器的引脚复用)可能是安全的。但请注意,如果对 HPS 处理器的属性进行了更改,这些更 改将通过包含在预加载器(preloader)中的 C 文件的变化生效,而不是通过逻辑生效。