RTL コードを Vivado IP としてパッケージ - 2020.1 Japanese

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

Document ID
UG1393
Release Date
2020-08-20
Version
2020.1 Japanese

RTL カーネルは、IP インテグレーターで使用可能な Vivado IP としてパッケージする必要があります。Vivado ツールの IP パッケージの詳細は、 『Vivado Design Suite ユーザー ガイド: カスタム IP の作成とパッケージ』 (UG1118) を参照してください。

RTL カーネルに必要なインターフェイスは、次のようにパッケージする必要があります。

  • AXI4-Lite インターフェイスは、S_AXI_CONTROL という名前でパッケージする必要がありますが、その AXI ポートには異なる名前を指定できます。
  • AXI4 インターフェイスは、64 ビット アドレス サポートの AXI4 マスター エンドポイントとしてパッケージする必要があります。
  • ap_clk および ap_clk_2 は、クロック インターフェイスとしてパッケージする必要があります。ap_clk_2 は、RTL カーネルに 2 つのクロックがある場合にのみ必要です。
  • ap_rst_n および ap_rst_n_2 は、アクティブ Low のリセット インターフェイスとしてパッケージする必要があります (RTL カーネルにリセットが含まれる場合)。
  • ap_clk は、AXI4-LiteAXI4AXI4-Stream インターフェイスすべてと、使用されている場合は ap_rst_n と関連付ける必要があります。

IP をパッケージするには、次の手順に従います。

  1. 新規 IP を作成してパッケージします。
    1. RTL ソース ファイルを追加した Vivado プロジェクトで、Tools > Create and Package New IP をクリックします。
    2. Package your current project をオンにして Next をクリックします。

      IP のデフォルト ディレクトリを選択するか、または別のディレクトリを選択できます。

    3. Finish をクリックして Package IP ウィンドウを開きます。
  2. クロックを AXI インターフェイスに関連付けます。

    Package IP ウィンドウの Ports and Interfaces セクションで、ap_clkAXI4 インターフェイスおよび必要であればリセット信号と関連付けることができます。

    1. インターフェイスを右クリックし、Associate Clocks をクリックします。

      Associate Clocks ダイアログ ボックスが表示されます。ap_clk と場合によって ap_clk_2 がリストされています。

    2. ap_clk を選択して OK をクリックし、インターフェイスに関連付けます。
    3. この手順を繰り返して ap_clk を各 AXI インターフェイスおよびリセットに関連付けます。
  3. FREQ_HZ を ap_clk に追加します。
    1. Ports and Interfaces セクションで ap_clk ポートを右クリックして Edit Interface をクリックし、次の図に示す [Edit Interface] ダイアログ ボックスを開きます。

    2. 左側のペインで FREQ_HZ パラメーターを選択し、右方向矢印 (→) をクリックして右側に移動します。
    3. FREQ_HZ パラメーターの値は、ダイアログ ボックスの右側をスクロールして Value フィールドに値を Hz で入力 (例: 250000000) しても定義できます。
    4. OK をクリックしてパラメーターを追加します。
    5. RTL カーネルには、値の競合の解決方法を指定するため、FREQ_HZ パラメーターに value_resolve_type プロパティも必要です。次の Tcl コマンドを使用して、このプロパティ値を user に設定します。
      set_property value_resolve_type user [ipx::get_bus_parameters -of [::ipx::get_bus_interfaces -of [ipx::current_core] *clk*] "
  4. 制御レジスタおよびオフセットを追加します。

    カーネルのソフトウェア要件 で説明されているように、カーネルには制御レジスタが必要です。次の表に、必要なレジスタを示します。

    表 1. アドレス マップ
    レジスタ名 説明 アドレス オフセット サイズ
    CTRL 制御信号。
    重要: CTRL レジスタおよび <kernel_args> は、すべてのカーネルに必要です。割り込み関連のレジスタは、割り込みを使用するデザインにのみ必要です。
    0x000 32
    GIER グローバル割り込みイネーブル レジスタ。ホストへの割り込みをイネーブルにします。 0x004 32
    IP_IER IP 割り込みイネーブル レジスタ。割り込みを生成するのに使用する IP 生成信号を制御します。 0x008 32
    IP_ISR IP 割り込みステータス レジスタ。割り込みステータスを示します。 0x00C 32
    <kernel_args> ソフトウェア関数インターフェイスでの必要に応じて、各カーネル引数に個別のエントリが含まれます。すべてのユーザー定義のレジスタは、0x10 で開始する必要があります。これより下位の位置は予約されています。 0x010

    32/64

    スカラー引数は 32 ビット幅です。
    m_axi
    インターフェイスは 64 ビット幅です。
    1. この表に説明されているアドレスを作成するには、Package IP ウィンドウで Addressing and Memory セクションを選択します。Address Blocks を右クリックし、Add Register をクリックします。

      開いた Add Register ダイアログ ボックスで、上記の表にリストされているいずれかのレジスタの名前を入力します。

    2. 手順を繰り返して必要なすべてのレジスタを追加します。

      これで、Addressing and Memory セクションに Registers 表が作成されます。この表を編集して、各レジスタに説明 (Description)、アドレス オフセット ( Address Offset)、およびサイズ (Size) を追加できます。Registers 表は、次の図に示すようになります。



    3. 表で各ポインター引数のレジスタを右クリックし、Add Register Parameter をクリックします。開いたダイアログ ボックスに ASSOCIATED_BUSIF という名前を入力し、OK をクリックします。

      これにより、レジスタと AXI4 インターフェイスの関連性を定義できます。追加したパラメーターの値フィールドに、定義する引数に割り当てる m_axi インターフェイスの名前を入力します。上記の例では、引数 Am00_axi を使用し、引数 Bm01_axi を使用します。

  5. IP に必要なプロパティを追加します。
    IP には、コアに追加可能ないくつかの標準プロパティが必要です。これには、Vivado の [Tcl Console] ウィンドウで次のコマンドを使用するのが最も簡単です。
    set core [ipx::current_core]
    set_property xpm_libraries {XPM_CDC XPM_MEMORY XPM_FIFO} $core
    set_property sdx_kernel true $core
    set_property sdx_kernel_type rtl $core
    
  6. これで、IP をパッケージする準備ができました。
    1. Package IP ウィンドウの Review and Package セクションを選択し、Summary and After Packaging セクションを確認して、必要な変更を加えます。
      重要: IP アーカイブ ファイルの生成をイネーブルにする必要があります。After Packaging セクションに An archive will not be generated. (アーカイブは生成されません) と表示されている場合は、Edit packaging settings リンクをクリックして Create archive of IP をイネーブルにする必要があります。
    2. 準備ができたら、Package IP をクリックします。

      Vivado ツールでカーネル IP がパッケージされ、問題なく終了したことを示すダイアログ ボックスが表示されます。RTL カーネルからの .xo ファイルの作成 に説明されているように、package_xo コマンドを使用してカーネルをパッケージします。

  7. RTL カーネルが IP インテグレーター用に正しくパッケージされていることをテストするには、パッケージ済みのカーネル IP を IP インテグレーターでブロック デザインにインスタンシエートしてみます。ツールの詳細は、 『Vivado Design Suite ユーザー ガイド: IP インテグレーターを使用した IP サブシステムの設計』 (UG994) を参照してください。
  8. カーネル IP には、上記で説明したようなさまざまなインターフェイスが表示されるはずです。IP をキャンバスで確認します。AXI インターフェイスのプロパティは、キャンバスでインターフェイスを選択すると表示されます。Block Interface Properties ウィンドウで Properties タブをクリックし、CONFIG という表エントリを展開表示します。インターフェイスが読み出し専用または書き込み専用の場合は、未使用の AXI チャネルは削除され、READ_WRITE_MODE が読み出し専用または書き込み専用に設定されます。
  9. RTL カーネルの制約がクロックなどのスタティック エリアにある制約を参照している場合、RTL カーネルの制約ファイルの処理順序を late に設定して、RTL カーネル制約が正しく適用されるようにする必要があります。

    処理順序を late に設定するには、次の 2 つの方法があります。

    1. 制約が .ttcl ファイルで指定されている場合は、次のように <: setFileProcessingOrder "late" :> をファイルの .ttcl 前文セクションに追加します。
      <: set ComponentName [getComponentNameString] :>
      <: setOutputDirectory "./" :>
      <: setFileName $ComponentName :>
      <: setFileExtension ".xdc" :>
      <: setFileProcessingOrder "late" :>
      
    2. 制約が .xdc ファイルで定義されている場合、component.xml に次に示す <spirit:define> から始まる 4 行を追加します。component.xml のこの 4 行は .xdc ファイルの呼び出されるエリアの次に記述する必要があります。次の例では、my_ip_constraint.xdc ファイルを呼び出し、その後に定義した late 処理順序を指定しています。
      <spirit:file>
              <spirit:name>ttcl/my_ip_constraint.xdc</spirit:name>
              <spirit:userFileType>ttcl</spirit:userFileType>
              <spirit:userFileType>USED_IN_implementation</spirit:userFileType>
              <spirit:userFileType>USED_IN_synthesis</spirit:userFileType>
              <spirit:define>
                   <spirit:name>processing_order</spirit:name>
                   <spirit:value>late</spirit:value>
              </spirit:define>
      </spirit:file>