添加 RTL 黑盒函数 - 2021.2 Chinese

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2021-12-15
Version
2021.2 Chinese

RTL 黑盒支持在 HLS 工程中使用现有 Verilog RTL IP。这样您即可将 RTL 代码添加到 C/C++ 代码中,供 Vitis HLS 用于对工程进行综合。此 RTL IP 可在顺序区域、流水线区域或数据流区域内使用。请参阅 Github 上的 Vitis-HLS-Introductory-Examples/Misc/rtl_as_blackbox,以获取此方法的示例。

提示: 在设计中添加 RTL 黑盒将导致工具无法输出 VHDL 代码,因为 RTL 黑盒必须为 Verilog,输出也将为 Verilog。

将 RTL IP 集成到 Vitis HLS 工程中需要以下文件:

  • RTL 代码的 C 语言函数签名。此签名可置于头文件 (.h) 内。
  • 黑盒 JSON 描述文件,如 适用于 RTL 黑盒的 JSON 文件 中所述。
  • RTL IP 文件。

要在 HLS 工程中使用 RTL 黑盒,请使用以下步骤。

  1. 从顶层函数内或者从 Vitis HLS 工程的子函数内调用 C 语言函数签名。
  2. Vitis HLS IDE 中使用Add Files命令(如 创建新的 Vitis HLS 工程 中所述)或者使用 add_files 命令将黑盒 JSON 描述文件添加到 HLS 工程中:
    add_files –blackbox my_file.json
    提示: 如下一节所述,全新的“RTL Blackbox”Wizard 可帮助您生成 JSON 文件并将 RTL IP 添加到工程中。
  3. 运行 Vitis HLS 设计文件照常进行仿真、综合和协同仿真。

要求与限制

RTL 黑盒功能特性中使用的 RTL IP 具有下列要求:

  • 应为 Verilog (.v) 代码。
  • 必须包含唯一的时钟信号和唯一的高电平有效复位信号。
  • 必须具有用于启用或停用 RTL IP 的 CE 信号。
  • 必须使用 ap_ctrl_chain 协议,如 块级控制协议 中所述。

Vitis HLS 内,RTL 黑盒功能特性:

  • 仅支持 C++。
  • 无法连接到顶层接口 I/O 信号。
  • 无法直接充当待测设计 (DUT)。
  • 不支持 structclass 类型的接口。
  • 支持以下接口协议,如 适用于 RTL 黑盒的 JSON 文件 中所述:
    hls::stream
    RTL 黑盒 IP 支持 hls::stream 接口。在 C 语言函数中使用此数据类型时,请在 RTL 黑盒 IP 中针对该实参使用 FIFO RTL 端口协议。
    阵列
    RTL 黑盒 IP 针对阵列支持 RAM 接口。对于 C 语言函数中的阵列实参,请将以下 RTL 端口协议之一用于 RTL 黑盒 IP 中的对应实参:
    • 单端口 RAM - RAM_1P
    • 双端口 RAM - RAM_T2P
    标量和输入指针
    RTL 黑盒 IP 仅支持在顺序区域和流水线区域中使用 C 语言标量和输入指针。在数据流区域内则不受支持。在 C 语言函数中使用这些构造时,请在 RTL IP 内使用 wire 端口协议。
    输入输出指针和输出指针
    RTL 黑盒 IP 仅支持在顺序区域和流水线区域中使用输入输出指针和输出指针。在数据流区域内则不受支持。在 C 语言函数中使用这些构造时,RTL IP 应针对输出指针使用 ap_vld,针对输入输出指针使用 ap_ovld
提示: 在工程内使用 RTL 黑盒时,所有其它 Vitis HLS 设计限制也都适用。