Alveo アクセラレータ カードには、HBM DRAM および DDR DRAM メモリ リソースが含まれています。一部のアクセラレータ カードでは、内部 FPGA PLRAM (UltraRAM およびブロック RAM) を追加のメモリ リソースとして使用できます。サポートされるプラットフォームには、通常各 SLR に PLRAM のインスタンスが含まれます。各 PLRAM のサイズとタイプは、カーネルまたは計算ユニットがシステムにリンクされる前に、ターゲット プラットフォームで設定できます。
Tcl スクリプトを使用すると、システム リンクが発生する前に PLRAM を設定できます。Tcl スクリプトの使用は、次のように
v++
コマンドラインでイネーブルにできます。v++ -l --advanced.param compiler.userPreSysLinkOverlayTcl=<path_to>/user_tcl_file.tcl
このユーザーの指定する Tcl スクリプト内には、PLRAM インスタンスまたはメモリ リソースを設定するための API が含まれます。
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 x 32 KB → 合計 128 個の UltraRAM。
- 各 PLRAM インスタンスは 512 ビット幅 → 8 個の UltraRAM が必要。
- 合計 128 個の UltraRAM、8 個の UltraRAM の幅 → 16 個の UltraRAM 深さ。
- 経験則によれば適切な読み出しレイテンシは深さ/2 + 2 なので、この場合は
READ_LATENCY
= 10。
これにより、1 つおきの UltraRAM にパイプラインを挿入できるので、次のようになります。
- UltraRAM 間のタイミング パフォーマンスが向上します。
- カスケードのためにすべての UltraRAM を同じ UltraRAM 列に配置する必要がないので、配置を柔軟に実行できます。