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

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

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 简体中文

加速器卡中时钟的处理方式已演变为支持多个平台时钟和多个时钟频率。内核可包含的独立时钟和边缘对齐时钟数量不存在限制,平台可包含多个内核,这些内核以不同时钟频率运行并受用户控制。平台可包含可缩放时钟和固定时钟。

可缩放时钟

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

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

您可生成任意数量的衍生时钟,这些衍生时钟不受 XRT 控制。v++ 连接器可提供 --clock 选项 供用户用于指定各内核时钟管脚应连接到的对应时钟,并用于定义平台上未定义的时钟频率。固定时钟更常用于嵌入式平台和 RTL 内核。

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

可缩放时钟可用于对时钟本身进行缩放,而固定时钟则用于添加 MMCM 以生成与平台上定义的频率不同的频率。例如,如果您选择指定时钟频率 60、200 和 450,那么 Vitis 将添加所有必要的逻辑以生成所需时钟。

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

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

您可使用 platforminfo 命令判定目标平台中可用的时钟。例如,以下命令可返回与 U250 平台的新 shell 相关的详细信息:
platforminfo -v -p xilinx_u250_gen3x16_xdma_3_1_202020_1 -o pfmClocks.txt
输出文件中报告的信息包括以下时钟详细信息:
=================
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
    Frequency:         250.000000
    Name:              ii_level1_wire_ulp_m_aclk_pcie_user_00
    Pretty Name:       PL 3
    Inst Ref:          ii_level1_wire
    Comp Ref:          ii_level1_wire
    Period:            4.000000
    Normalized Period: .004000
    Status:            fixed
  Clock Index:         4
    Frequency:         100.000000
    Name:              ii_level1_wire_ulp_m_aclk_freerun_ref_00
    Pretty Name:       PL 4
    Inst Ref:          ii_level1_wire
    Comp Ref:          ii_level1_wire
    Period:            10.000000
    Normalized Period: .010000
    Status:            fixed

以下是按优先顺序由低到高使用 --clock 选项 进行时钟管理的部分示例:

  • 如无任何 --clock 选项,则将应用可缩放默认时钟。对于含两个时钟的内核,将为 ap_clk 分配时钟 ID 0,为 ap_clk_2 分配时钟 ID 1。
  • 指定 --clock.defaultId=<id> 即可覆盖平台默认设置。除非指定额外 --clock 选项,否则指定的时钟 <id> 将用作为所有 CU 上的所有管脚的参考时钟。
  • 指定 --clock.defaultFreq=<Hz> 即可覆盖含有指定频率的时钟的平台默认设置。除非指定额外 --clock 选项,否则将向所有 CU 上的所有管脚分配默认时钟。
  • 指定 --clock.id=<id>:<cu> 即可向指定 CU 上的所有时钟管脚分配指定 ID。
  • 指定 --clock.id=<id>:<cu>.<clk0> 即可向指定 CU 上的指定时钟管脚分配指定 ID。

实际上有多个高层次注意事项需要考量。可缩放时钟允许工具按需缩放时钟以达成特定频率或者满足时序,因此无需重新生成 .xclbin 文件即可帮助您满足时序。

如果设计要求不同内核以不同时钟速率运行(例如,为了达成时序收敛或者满足性能目标),就需要使用 --clock 指令来确定固定时钟目标。同样,如果 RTL 内核需要多个时钟,那么通常需要使用 --clock 指令。大部分严肃设计都期望用户在某个时间点能明确自己可达成的频率目标,并且在超出可缩放时钟频率时需指定这些固定时钟(缩放不会将已缩放的时钟频率增至超过平台默认设置)。