Alveo 加速器卡包含 HBM DRAM 和 DDR DRAM 存储器资源。在某些加速器卡中,另一个可供使用的存储器资源是内部 FPGA PLRAM(UltraRAM 和块 RAM)。支持平台通常在每个 SLR 内都包含 PLRAM 的实例。每个 PLRAM 的大小和类型均可先在目标平台上进行配置,然后再将内核或计算单元链接到系统。
您可以使用 Tcl 脚本来配置 PLRAM,然后再执行系统链接。在
v++
命令行上可启用使用 Tcl 脚本,如下所示:v++ -l --advanced.param compiler.userPreSysLinkOverlayTcl=<path_to>/user_tcl_file.tcl
在此用户指定的 Tcl 脚本内,提供了一个 API 以便您配置 PLRAM 实例或存储器资源:
sdx_memory_subsystem::update_plram_specification <memory_subsystem_bdcell> <plram_resource> <plram_specification>
<plram_specification>
是由以下条目组成的 Tcl 词典(以下条目为平台中每个实例的默认值):
{
SIZE 128K # Up to 4M
AXI_DATA_WIDTH 512 # Up to 512
SLR_ASSIGNMENT SLR0 # SLR0 / SLR1 / SLR2
READ_LATENCY 1 # To optimise timing path
MEMORY_PRIMITIVE BRAM # BRAM or URAM
}
在以下示例中,PLRAM_MEM00
大小已更改为 2 MB,并由 UltraRAM 组成;PLRAM_MEM01
大小已更改为 4 MB,并由 UltraRAM 组成。PLRAM_MEM00
和 PLRAM_MEM01
对应于 --conectivity.sp
存储器资源 PLRAM[0] 和 PLRAM[1]。
# Setup PLRAM
sdx_memory_subsystem::update_plram_specification
[get_bd_cells /memory_subsystem] PLRAM_MEM00 { SIZE 2M AXI_DATA_WIDTH 512
SLR_ASSIGNMENT SLR0 READ_LATENCY 10 MEMORY_PRIMITIVE URAM}
sdx_memory_subsystem::update_plram_specification
[get_bd_cells /memory_subsystem] PLRAM_MEM01 { SIZE 4M AXI_DATA_WIDTH 512
SLR_ASSIGNMENT SLR0 READ_LATENCY 10 MEMORY_PRIMITIVE URAM}
validate_bd_design -force
save_bd_design
READ_LATENCY
是一个重要的属性,因为它用于设置深度级联存储器之间的流水线级数。这因设计而异,并影响平台的时序 QoR 和最终的内核时钟速率。在以上 PLRAM_MEM01
示例中:
- 共需要 4 MB 的存储器。
- 每个 UltraRAM 为 32 KB(64 位宽)。4 MB × 32 KB → 共计 128 个 UltraRAM。
- 每个 PLRAM 实例为 512 位宽 → 宽度中需要 8 个 UltraRAM。
- 总共 128 个 UltraRAM,宽度含 8 个 UltraRAM → 深度中含 16 个 UltraRAM。
- 有一条经验法则很有用,即选择深度/2 + 2 的读取时延,在此情况下
READ_LATENCY
= 10。
这样即可每隔一个 UltraRAM 设置一条流水线,从而产生以下结果:
- UltraRAM 间能实现良好的时序性能。
- 布局灵活性;并非所有的 UltraRAM 都需要布局在同一个 UltraRAM 列中进行级联。