描述
Vitis HLS 在代码中使用特定存储器资源(或类型)来分配阵列。该工具会自动判定要使用的资源。或者,您也可以定义 syn.storage
来笼统指定存储器类型,如 存储配置 中所述。
syn.directive.bind_storage
命令用于将代码中的特定变量(阵列或函数实参)分配到 RTL 中的特定存储器类型 (type
)。例如,您可使用 syn.directive.bind_storage
命令指定用于阵列变量的存储器的类型以及要使用的实现。并且,此命令还允许您控制此阵列是作为单端口 RAM 还是双端口 RAM 来实现。
重要: 此功能特性对于顶层函数接口上的阵列尤为重要,因为与阵列关联的存储器类型可用于判定 RTL 中所需的端口数量和类型,如Vitis 高层次综合用户指南(UG1399) 的“接口上的阵列”章节中所述。但对于分配给顶层函数实参的变量,您必须使用
syn.directive.interface
的 storage_type
选项和 storage_impl
选项来分配存储器类型和实现。您也可使用 syn.directive.bind_storage
的 latency
选项来指定实现的时延。对于接口上的块 RAM,latency
选项允许您对接口上的片外非标准 SRAM 进行建模,例如,用于支持时延为 2 或 3 的 SRAM。对于内部运算,latency
选项允许使用多个流水打拍阶段来实现运算。这些附加的流水线阶段可帮助解决 RTL 综合期间的时序问题。
重要: 要使用
latency
选项,存储器必须具有 1 个可用的多阶段实现。HLS 工具可以为所有块 RAM 提供多阶段实现。语法
syn.directive.bind_storage=[OPTIONS] <location> <variable>
-
<location>
是包含变量的位置(格式为function[/label]
)。 -
<variable>
是要分配的变量。提示: 如果变量是顶层函数实参,则使用syn.directive.interface
的storage_type
选项和storage_impl
选项。
选项
-
type=<value>
- 定义要绑定到指定变量的存储器的类型。
-
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 |
重要: 上表中未列出的存储器类型与实现的任意组合均不受
syn.directive.bind_storage
支持。示例
在以下示例中,coeffs[128]
变量是 func1
函数的实参。该指令指定 coeffs
使用来自库的 BRAM 核上实现的单端口 RAM。
syn.directive.bind_storage=func1 coeffs type=RAM_1P impl=bram
提示: 在 RAM_1P 核中定义 RTL 中创建的用于访问
coeffs
值的端口。