プラットフォーム クロックの識別 - 2023.2 日本語

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

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語

プラットフォームのクロックの処理方法は、複数のプラットフォーム クロックとクロック周波数をサポートするように進化しています。カーネルには、任意の数の独立したクロックとエッジ揃いのクロックを含めることができ、プラットフォームには、ユーザー制御下で異なるクロック周波数で動作する複数のカーネルを含めることができます。プラットフォームには、さまざまなクロック (プロセッサ、PL、および AI エンジン クロック) が含まれます。次の表に、各クロックについて説明します。

表 1. プラットフォーム クロック
クロック 説明
AI エンジン プラットフォームの AI エンジン IP で設定できます。
Processor プラットフォームの CIPS IP で設定できます。
プログラマブル ロジック (PL) 複数のクロックを含めることができ、プラットフォームで設定できます。
NoC デバイスによって異なり、プラットフォームの CIPS および NoC IP で設定できます。
  1. これらのクロックは、プラットフォームから派生し、デバイス、スピード グレード、および動作電圧の影響を受けます。

プラットフォームには、スケーラブル クロックと固定クロックを含めることができます。

スケーラブル クロック

AMD Alveo™ プラットフォームには、すべての XRT 管理のカーネルを駆動する ID (または Index) 0 の周波数スケーラブルなカーネル クロックが含まれます。XRT では、xclbin ファイルを読み込むと、そのメタデータに従って、このクロックのクロック周波数を設定できます。また、Alveo プラットフォームには ID 1 の 2 つ目のスケーラブル クロックが含まれ、xclbin のメタデータに基づいて制御することもできます。スケーラブル クロックに接続するオプションを指定する必要はありませんが、v++ の一般オプション で説明されるように、--freqhz または --kernel_frequency オプションを使用すると、v++ リンク中にクロック周波数を指定できます。v++ リンカーは自動的にカーネル クロック ap_clk をクロック ID 0 に、ap_clk2 をクロック ID 1 に接続します。

ヒント: HLS コンパイラは複数のクロックを持つカーネルを生成しないため、実際には ap_clk2 は最初 RTL カーネルに含まれます。
固定クロック

固定クロックは、AMD Alveo™ プラットフォームと、Versal デバイスまたは Zynq MPSoC を使用するエンベデッド プラットフォームの両方で使用されます。固定クロックは、通常 RTL カーネルでも使用されます。

スケーラブル クロックは、 v++ コマンドで指定されたクロックとデザインのタイミング要件を満たすように XRT によりスケーリングされます。固定クロックは、デザインに追加された MMCM を使用し、プラットフォームで定義された固定周波数以外の周波数を生成します。たとえば、クロック周波数を 60、200、および 450 に指定すると、Vitis コンパイラが使用可能な固定クロックから必要なクロックを生成するのに必要なすべてのロジックを追加します。

--freqhz オプションを使用して、デザインのクロック周波数を指定します。--clock オプション は、特定のプラットフォーム クロックへの PL カーネル接続を指定したり、プラットフォーム上の固定クロックから生成されるクロック周波数を指定するためにも使用できます。

--clock オプションを指定すると、v++ にスケーラブル クロックではなく、プラットフォームの固定クロックを使用するよう指示できます。HLS カーネルの場合、クロック ID 0 が常に使用されます。1 つのクロックを含む RTL カーネルでは、クロック ID 0 がデフォルトで使用されますが、別のクロックを選択することもできます。

ヒント: 1 つのカーネルに固定クロックとスケーラブル クロックを混在させることはできませんが、1 つの .xclbin ファイル内では異なるカーネル間で混在させることができます。

Vivado 配置配線ツールが周波数仕様を満たすことができない場合、スケーラブル クロックが使用されていれば、ツールはクロック周波数を達成可能な周波数にスケーリングできます (--kernel_frequency)。ただし、固定クロックを使用する場合 (--clock)、インプリメンテーションを実行し直して、周波数ターゲットを更新する必要があります。

platforminfo コマンドを使用すると、ターゲット プラットフォームで使用可能なクロックを決定できます。たとえば、次のコマンドは、指定されたプラットフォームに関する詳細情報を返し、出力ファイルに書き出します。
platforminfo -v -p xilinx_u250_gen3x16_xdma_4_1_202210_1 -o pfmClocks.txt
[Clock Information] は次のように出力ファイルにレポートされ、プラットフォーム内のスケーラブル クロックと固定クロックが示されます。
=================
Clock Information
=================
  Default Clock Index: 0
  Default Clock Frequency: 300.000000
  Default Clock Pretty Name: PL 0
  Clock Index:         0
    Frequency:         300.000000
    Name:              ss_ucs_aclk_kernel_00
    Pretty Name:       PL 0
    Inst Ref:          ss_ucs
    Comp Ref:          shell_ucs_subsystem
    Period:            3.333333
    Normalized Period: .003333
    Status:            scalable
  Clock Index:         1
    Frequency:         500.000000
    Name:              ss_ucs_aclk_kernel_01
    Pretty Name:       PL 1
    Inst Ref:          ss_ucs
    Comp Ref:          shell_ucs_subsystem
    Period:            2.000000
    Normalized Period: .002000
    Status:            scalable
  Clock Index:         2
    Frequency:         50.000000
    Name:              ii_level1_wire_ulp_m_aclk_ctrl_00
    Pretty Name:       PL 2
    Inst Ref:          ii_level1_wire
    Comp Ref:          ii_level1_wire
    Period:            20.000000
    Normalized Period: .020000
    Status:            fixed
  Clock Index:         3
  ...

実際には、次のような考慮事項があります。スケーラブル クロックを使用すると、特定の周波数を達成したり、タイミングを満たすために必要に応じてクロックをスケーリングできるので、.xclbin ファイルを再生成しなくてもタイミングを達成しやすくなります。ただし、スケーリングによってクロック周波数がプラットフォーム周波数より高くなることはありません。固定クロックは、タイミング クロージャやパフォーマンス ターゲットを満たすため、異なるカーネルを異なる周波数で動作させる必要があるデザインに使用できます。最も本格的なデザインの場合、ある時点で達成可能な周波数ターゲットが何であるかを把握し、スケーラブルなクロック周波数を超える場合に固定クロックを指定する必要があります。

Versal デバイスの場合、v++ --link および v++ --package コマンドに --platform を使用する代わりに、--part オプションを使用できます。--part を使用すると、ツールがデバイスで使用するためのベース デザインを生成します。これは、通常、完全なプラットフォーム仕様の開発を待つ間に使用できます。ただし、v++ リンカーが生成したベース プラットフォーム デザインは PLRAM のみを使用しているため、ターゲット上で Linux アプリケーションを実行するのには向いていません。