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 黑盒,请使用以下步骤。
- 从顶层函数内或者从 Vitis HLS 工程的子函数内调用 C 语言函数签名。
- 在 Vitis HLS IDE 中使用Add Files命令(如 创建新的 Vitis HLS 工程 中所述)或者使用
add_files
命令将黑盒 JSON 描述文件添加到 HLS 工程中:add_files –blackbox my_file.json
提示: 如下一节所述,全新的“RTL Blackbox”Wizard 可帮助您生成 JSON 文件并将 RTL IP 添加到工程中。 - 运行 Vitis HLS 设计文件照常进行仿真、综合和协同仿真。
要求与限制
RTL 黑盒功能特性中使用的 RTL IP 具有下列要求:
- 应为 Verilog (.v) 代码。
- 必须包含唯一的时钟信号和唯一的高电平有效复位信号。
- 必须具有用于启用或停用 RTL IP 的 CE 信号。
- 必须使用
ap_ctrl_chain
协议,如 块级控制协议 中所述。
在 Vitis HLS 内,RTL 黑盒功能特性:
- 仅支持 C++。
- 无法连接到顶层接口 I/O 信号。
- 无法直接充当待测设计 (DUT)。
- 不支持
struct
或class
类型的接口。 - 支持以下接口协议,如 适用于 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 设计限制也都适用。