描述
set_directive_bind_storage
命令可用于将代码中的变量(阵列或函数实参)分配给 RTL 中的特定存储器类型 (type
)。如果不指定此命令,那么 Vitis HLS 工具会判定要分配的存储器类型。HLS 工具在硬件中使用指定的实现 (impl
) 来实现该存储器。例如,您可使用 set_directive_bind_storage
命令指定用于阵列变量的存储器的类型以及要使用的实现。并且,此命令还允许您控制此阵列是作为单端口 RAM 还是双端口 RAM 来实现。
重要: 此功能特性对于顶层函数接口上的阵列尤为重要,因为与阵列关联的存储器类型可用于判定 RTL 中所需的端口数量和类型,如 接口上的阵列 中所述。但对于分配给顶层函数实参的变量,您必须使用 INTERFACE 编译指示或指令的
-storage_type
选项和 -storage_impl
选项来分配存储器类型和实现。您可使用 -latency
选项来指定实现的时延。对于接口上的块 RAM,-latency
选项允许您对接口上的片外非标准 SRAM 进行建模,例如,用于支持时延为 2 或 3 的 SRAM。对于内部运算,-latency
选项允许使用多个流水打拍阶段来实现运算。这些附加的流水线阶段可帮助解决 RTL 综合期间的时序问题。
重要: 要使用
-latency
选项,运算必须具有 1 个可用的多阶段实现。HLS 工具可以为所有块 RAM 提供多阶段实现。为实现最佳结果,AMD 建议使用 -std=c99
(针对 C)和 -fno-builtin
(针对 C 和 C++)。要指定 -std=c99
等 C 语言编译选项,请使用 Tcl 命令 add_files
搭配 -cflags
选项。或者,选中Project Settings(工程设置)对话框中的Edit CFLAGs(编辑 CFLAG)按钮,如 创建 HLS 组件 中所述。
语法
set_directive_bind_storage [OPTIONS] <location> <variable>
-
<location>
是包含变量的位置(格式为function[/label]
)。 -
<variable>
是要分配的变量。提示: 如果变量是顶层函数实参,则使用 INTERFACE 编译指示或指令的-storage_type
选项和-storage_impl
选项。
选项
-
-type
- 定义要绑定到指定变量的存储器的类型。
-
-impl <value>
- 定义指定存储器类型的实现。受支持的实现包括:
bram
、bram_ecc
、lutram
、uram
、uram_ecc
、srl
、memory
和auto
,如下所述。 -
-latency <int>
- 定义用于将存储类型绑定到实现的默认时延。有效的时延值因指定的
type
和impl
而异。默认值为 -1,即交由 Vitis HLS 选择时延。
类型 | 实现 | 最小时延 | 最大时延 |
---|---|---|---|
FIFO | BRAM | 1 | 4 |
FIFO | LUTRAM | 1 | 4 |
FIFO | MEMORY | 1 | 4 |
FIFO | SRL | 1 | 4 |
FIFO | URAM | 1 | 4 |
RAM_1P | AUTO | 1 | 3 |
RAM_1P | BRAM | 1 | 3 |
RAM_1P | LUTRAM | 1 | 3 |
RAM_1P | URAM | 1 | 3 |
RAM_1WNR | AUTO | 1 | 3 |
RAM_1WNR | BRAM | 1 | 3 |
RAM_1WNR | LUTRAM | 1 | 3 |
RAM_1WNR | URAM | 1 | 3 |
RAM_2P | AUTO | 1 | 3 |
RAM_2P | BRAM | 1 | 3 |
RAM_2P | LUTRAM | 1 | 3 |
RAM_2P | URAM | 1 | 3 |
RAM_S2P | BRAM | 1 | 3 |
RAM_S2P | BRAM_ECC | 1 | 3 |
RAM_S2P | LUTRAM | 1 | 3 |
RAM_S2P | URAM | 1 | 3 |
RAM_S2P | URAM_ECC | 1 | 3 |
RAM_T2P | BRAM | 1 | 3 |
RAM_T2P | URAM | 1 | 3 |
ROM_1P | AUTO | 1 | 3 |
ROM_1P | BRAM | 1 | 3 |
ROM_1P | LUTRAM | 1 | 3 |
ROM_2P | AUTO | 1 | 3 |
ROM_2P | BRAM | 1 | 3 |
ROM_2P | LUTRAM | 1 | 3 |
ROM_NP | BRAM | 1 | 3 |
ROM_NP | LUTRAM | 1 | 3 |
重要: 上表中未列出的存储器类型与实现的任意组合均不受
set_directive_bind_storage
支持。示例
在以下示例中,coeffs[128]
变量是 func1
函数的实参。该指令指定 coeffs
使用来自库的 BRAM 核上实现的单端口 RAM。
set_directive_bind_storage -impl bram "func1" coeffs RAM_1P
提示: 在 RAM_1P 核中定义 RTL 中创建的用于访问
coeffs
值的端口。