3 与应用逻辑集成
3.1 基础
与应用逻辑的集成通过 Vivado 的区块设计 GUI(block design GUI)完成:将 IP 模块添加到区块设计中,并按需连 接。
对于由 Vivado 高级综合(High Level Synthesis, HLS)生成的 IP 模块的集成,请参考第 6 节。
值得注意的是,尽管 Xillybus 文档中经常提到 FPGA 内的应用逻辑通过 FIFO 与主机通信,但在 Block Design 流程中 并非 如此(这只适用于 Verilog / VHDL 设计流程)。Xillybus IP 核中生成 AXI Stream 接口的胶合逻辑 已经包含了 FIFO(其中包括用于 bus_clk 与 ap_clk 之间跨时钟域处理的 FIFO)。因此,与 VHDL / Verilog 设计流程不同,当使用 Block Design 流程时,应用逻辑 无需 部署任何 FIFO 即可与 Xillybus IP 核接口。
对于 FPGA 与主机之间的数据交换,请将应用逻辑连接到专用的 AXI Stream 端口(可能需要在断开环回之后)。这些端口 仅提供 TDATA、TVALID 和 TREADY 信号,特别地 不 包含 TLAST 信号。因此,每个 AXI Stream 体 现的是一个无限数据流(而非数据包接口,后者本可由 TLAST 信号实现)。这与 Xillybus 设备文件通常具有无限流特性是一致的。
Xillybus 流可用于在 FPGA 与主机之间交换数据包,具体说明请参见以下两份指南中的第 6.3 节:
3.2 时钟
3.2.1 概述
为简化起见,连接用户应用逻辑与 Xillybus IP 核的所有信号必须由同一个时钟驱动,该时钟由区块设计中的时钟向导模块 (Clocking Wizard)生成。此时钟(“应用时钟”)是时钟向导的 clk_out1,同时也是 Xillybus IP 核模块的 ap_clk 输入。
通常建议使用这个单一时钟驱动整个用户应用模块,这样其内部逻辑以及接口均依赖于该时钟。例如,由 Vivado HLS 综合 器生成的逻辑具有一个时钟输入(名为 ap_clk)。将此时钟输入连接到时钟向导的输出,可确保与 Xillybus IP 核模块的 AXI Stream 端口连 接正常工作。
请注意,FPGA 工具有时会以频率本身(通常以 MHz 为单位)来表示时钟频率,有时则以时钟周期(通常以 ns 为单位)来 表示。时钟频率是时钟周期的倒数,例如 100 MHz 相当于 10 ns 的时钟周期。
3.2.2 设置应用时钟
应用时钟的频率可以调整,以提高性能或作为实现可工作比特文件(bitfile)的一个步骤:更快的时钟可实现更高的处理吞吐 量(除非存在其他瓶颈限制性能),但同时也对 FPGA 的逻辑元件及其由 AMD 工具使用的资源提出了更高要求。
如果应用时钟的频率选择过高,项目编译成 FPGA 比特流文件将因时序约束不满足而失败,这称为“时序违例”(timing failure)。这种情况意味着执行实现的工具未能以某种方式利用逻辑来确保可靠运行,而逻辑是在所定义的时钟频率下驱动的。此处的“时序 约束”(timing constraints)是对系统中时钟频率的要求。
降低应用时钟的频率始终是允许的(在时钟发生器的限制范围内),但会降低其所驱动逻辑的运行速度。
若要设置应用时钟的频率,请在区块设计视图中双击时钟向导模块(stream_clk_gen)。Vivado 将打开一个配置窗口。选 择“Output Clocks”选项卡,更改 clk_out1 的“Output Clock Requested”频率。“Actual”列中的频率显示时钟合成器将生成的频率。它可能与请 求的频率略有不同,因为输出时钟是通过将输入时钟乘以一个有理数(从一组有限的允许值中选取)而得到的。
当该时钟仅用于应用逻辑及其与 Xillybus IP 核的接口时,与请求频率的微小偏差是无害的。
不应更改时钟向导中的其他参数。
3.2.3 bus_clk 信号
Xillybus IP 核的内部逻辑由 bus_clk 驱动,在区块设计中暴露此信号仅用于允许从 bus_clk 导出应用时钟。通常此信号没有其他用途,因 为应用逻辑仅需要 ap_clk 用于其内部逻辑及与 Xillybus IP 核的接口。
然而,bus_clk 的频率可能有助于发现吞吐量瓶颈。例如,如果 bus_clk 以 100 MHz 运行,那么通过 32 位宽数据接口的最 大理论带宽为 400 MB/s,因为 Xillybus 内部数据管道以 bus_clk 的速率运行。如果 ap_clk 以更高频率运行,并且每个 ap_clk 周期都推送数 据,那么数据速率很可能会因 AXI Stream 流控信号(TREADY 和 TVALID)而降低。
因此,在尝试最大化应用的吞吐量时,应考虑到 bus_clk 的频率,特别是当数据接口预期包含长突发(或连续)数据流量 时。
bus_clk 的频率可以在“Clocking Options”选项卡下找到,作为主输入时钟 clk_in1 的频率。此参数告知时钟向导其输入端的预期频率,因 此可用于了解特定 Xillybus 套件的 bus_clk 频率。
