PLRAM の設定と使用 - 2020.2 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2021-03-22
Version
2020.2 Japanese

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 列に配置する必要がないので、配置を柔軟に実行できます。