识别平台时钟 - 2023.2 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 简体中文

平台中时钟的处理方式已升级为支持多个平台时钟和多个时钟频率。内核可包含的独立时钟和边缘对齐时钟数量不存在限制,平台可包含多个内核,这些内核以不同时钟频率运行并受用户控制。平台具有各种时钟设置:处理器、PL 和 AI 引擎时钟设置。下表显示了上述各种时钟设置。

表 1. 平台时钟设置
时钟 描述
AI 引擎 可在平台内通过 AI 引擎 IP 来配置。
处理器 可在平台内通过 CIPS IP 来配置。
可编程逻辑 (PL) 可包含多个时钟,并且可在平台内配置。
NoC 与器件相关,可在平台内通过 CIPS 和 NoC IP 来配置。
  1. 这些时钟衍生自平台,并且受到器件、速度等级和工作电压的影响。

平台可包含可缩放时钟和固定时钟。

可缩放时钟

AMD Alveo™ 平台可提供频率可缩放的内核时钟,并包含 ID(或索引值)0,用于驱动所有 XRT 管理的内核。XRT 可在加载 xclbin 文件时,根据其中包含的元数据来设置此时钟的时钟频率。Alveo 平台还提供了另一个可缩放时钟 (ID 1),它同样可根据 xclbin 元数据来加以控制。您无需提供选项以连接到可缩放时钟,但可在 v++ 链接期间使用 --freqhz 选项或 --kernel_frequency 来指定时钟频率,如 v++ 常规选项 中所述。v++ 连接器会把 PL 内核时钟 ap_clk 自动连接到时钟 ID 0,把 ap_clk2 连接到时钟 ID 1。

提示: 实际上,由于 HLS 编译器不生成含多个时钟的内核,因此 ap_clk2 主要用于 RTL 内核。
固定时钟

在使用 Versal 器件或 Zynq MPSoC 的 AMD Alveo™ 平台和嵌入式平台上均可找到固定时钟。通常在 RTL 内核中也会使用固定时钟。

XRT 可对可缩放时钟进行缩放来满足 v++ 命令中指定的时钟要求以及设计的时序要求。固定时钟使用添加到设计的 MMCM 来生成不同于平台上定义的固定频率的频率。例如,如果您指定的时钟频率为 60、200 和 450,Vitis 编译器会添加所有必要的逻辑以便从可用的固定时钟生成所需的时钟。

--freqhz 选项可用于为设计指定时钟频率。--clock 选项 也可用于向特定平台时钟指定 PL 内核连接,或者指定从平台上的固定时钟生成的时钟频率。

指定 --clock 选项即可指令 v++ 使用平台的固定时钟,而不是可缩放时钟。对于 HLS 内核,始终使用时钟 ID 0。对于含单个时钟的 RTL 内核,默认使用时钟 ID 0,但您也可以选择其他时钟。

提示: 单个内核上不得混用固定时钟和可缩放时钟,但在单个 .xclbin 文件内则可跨不同内核混用这两种时钟。

如果 Vivado 布局布线工具无法满足频率规格的要求,那么已使用可缩放时钟 (--kernel_frequency) 的前提下,这些工具可将时钟频率缩放至可满足规格的频率。但如果使用固定时钟 (--clock),则需要重新运行实现才能更新频率目标。

您可使用 platforminfo 命令判定目标平台中可用的时钟。例如,以下命令会返回与指定平台相关的详细信息并将其写入输出文件:
platforminfo -v -p xilinx_u250_gen3x16_xdma_4_1_202210_1 -o pfmClocks.txt
在输出文件中会报告“Clock Information”(时钟信息),用于指示平台中的可缩放时钟和固定时钟:
=================
Clock Information
=================
  Default Clock Index: 0
  Default Clock Frequency: 300.000000
  Default Clock Pretty Name: PL 0
  Clock Index:         0
    Frequency:         300.000000
    Name:              ss_ucs_aclk_kernel_00
    Pretty Name:       PL 0
    Inst Ref:          ss_ucs
    Comp Ref:          shell_ucs_subsystem
    Period:            3.333333
    Normalized Period: .003333
    Status:            scalable
  Clock Index:         1
    Frequency:         500.000000
    Name:              ss_ucs_aclk_kernel_01
    Pretty Name:       PL 1
    Inst Ref:          ss_ucs
    Comp Ref:          shell_ucs_subsystem
    Period:            2.000000
    Normalized Period: .002000
    Status:            scalable
  Clock Index:         2
    Frequency:         50.000000
    Name:              ii_level1_wire_ulp_m_aclk_ctrl_00
    Pretty Name:       PL 2
    Inst Ref:          ii_level1_wire
    Comp Ref:          ii_level1_wire
    Period:            20.000000
    Normalized Period: .020000
    Status:            fixed
  Clock Index:         3
  ...

实际上有多个高层次注意事项需要考量。可缩放时钟允许工具按需缩放时钟以达成特定频率或者满足时序,因此无需重新生成 .xclbin 文件即可帮助您满足时序。但缩放操作并不会将缩放的时钟频率增大至超过平台频率。如果设计要求不同内核以不同频率运行以达成时序收敛或者满足性能目标,则可利用固定时钟。对于大多数严肃的设计,您都应在某个时间点能明确自己的设计可达成的频率目标,并且您需要在时钟频率超出可缩放时钟频率时指定固定时钟。

对于 Versal 器件,可使用 --part 选项来取代使用搭配 v++ --linkv++ --package 命令的 --platform。该工具使用 --part 即可生成基础设计以供在器件上使用,并且一般可在等待开发完整平台规格期间使用。不过,v++ 连接器生成的基本平台设计仅采用 PLRAM,因此不适合在目标上运行 Linux 应用程序。