カーネル記述 XML ファイルの作成 - 2019.2 Japanese

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

Document ID
UG1393
Release Date
2020-02-28
Version
2019.2 Japanese

kernel.xml という XML カーネル記述ファイルは、Vitis アプリケーション アクセラレーション開発フローで使用できるように、RTL カーネルごとに作成される必要があります。このレジスタ マップおよびポートなどのカーネル属性を指定する kernel.xml ファイルは、ランタイムおよび Vitis フローで必要となります。次は kernel.xml ファイルの例です。

<?xml version="1.0" encoding="UTF-8"?>
<root versionMajor="1" versionMinor="6">
  <kernel name="vitis_kernel_wizard_0" language="ip_c" 
      vlnv="mycompany.com:kernel:vitis_kernel_wizard_0:1.0" 
      attributes="" preferredWorkGroupSizeMultiple="0" workGroupSize="1" interrupt="true">
    <ports>
      <port name="s_axi_control" mode="slave" range="0x1000" dataWidth="32" portType="addressable" base="0x0"/>
      <port name="m00_axi" mode="master" range="0xFFFFFFFFFFFFFFFF" dataWidth="512" portType="addressable" 
         base="0x0"/>
    </ports>
    <args>
      <arg name="axi00_ptr0" addressQualifier="1" id="0" port="m00_axi" size="0x8" offset="0x010" type="int*" 
         hostOffset="0x0" hostSize="0x8"/> 
    </args>
  </kernel>
</root>
注記: RTL カーネルのインターフェイス仕様を指定する kernel.xml ファイルは、RTL Kernel ウィザードを使用すると自動的に作成されます。詳細は、RTL Kernel ウィザード を参照してください。

次の表では、kernel.xml のフォーマットの詳細を説明します。

表 1. カーネル XML ファイルの内容
タグ 属性 説明
<root> versionMajor 現在のリリースの Vitis ソフトウェア プラットフォームでは 1 に設定しますソフトウェア プラットフォーム。
versionMinor 現在のリリースの Vitis ソフトウェア プラットフォームでは 6 に設定しますソフトウェア プラットフォーム。
<kernel> name カーネル名
language RTL カーネルの場合は常に ip_c に設定します。
vlnv IP の component.xml にあるベンダー、ライブラリ、名前、バージョン属性と一致している必要があります。たとえば、component.xml には次のタグがあります。

<spirit:vendor>xilinx.com</spirit:vendor>

<spirit:library>hls</spirit:library>

<spirit:name>test_sincos</spirit:name>

<spirit:version>1.0</spirit:version>

カーネル XML の vlnv 属性は xilinx.com:hls:test_sincos:1.0 に設定する必要があります。

attributes 予約されています。空の文字列 ("") に設定します。
preferredWorkGroupSizeMultiple 予約されています。0 に設定します。
workGroupSize 予約されています。1 に設定します。
interrupt 割り込みがある場合は true (interrupt="true") に設定し、それ以外の場合は削除します。
hwControlProtocol RTL カーネルの制御プロトコルを指定します。
  • ap_ctrl_hs: RTL カーネルのデフォルトの制御プロトコル。
  • ap_ctrl_chain: データフローをサポートするチェーン接続されたカーネルの制御プロトコル。ap_continue が制御レジスタに追加され、ap_done/ap_continue 終了承認信号がイネーブルになります。
  • ap_ctrl_none: 開始も終了もする必要のない継続して動作するカーネルに適用される制御プロトコル (none)。詳細は、フリーランニング カーネルを参照してください。
<port> name

ポート名を指定します。

重要: AXI4-Lite インターフェイスには、S_AXI_CONTROL という名前を付ける必要があります。
mode

少なくとも AXI4 マスター ポートが 1 つ、AXI4-Lite スレーブ コントロールポートが 1 つ必要です。

カーネル間でデータをストリームする場合は、AXI4-Stream ポートを指定できます。

  • AXI4 マスター ポートの場合は master に設定します。
  • AXI4 スレーブ ポートの場合は slave に設定します。
  • AXI4-Stream マスター ポートの場合は write_only に設定します。
  • AXI4-Stream スレーブ ポートの場合は read_only に設定します。
range ポートのアドレス空間の範囲です。
dataWidth ポートを通過するデータ幅で、デフォルト値は 32 ビットです。
portType ポートがアドレス指定可能か、またはストリーミングかを指定します。
  • AXI4 マスターおよびスレーブ ポートの場合は addressable に設定します。
  • AXI4-Stream ポートの場合は stream に設定します。
base AXI4 マスターおよびスレーブ ポートの場合は 0x0 に設定します。このタグは AXI4-Stream ポートには適用されません。
<args> name カーネル ソフトウェア引数の名前を指定します。
addressQualifier 有効値:
  • 0: スカラー カーネル入力引数
  • 1: グローバル メモリ
  • 2: ローカル メモリ
  • 3: 定数メモリ
  • 4: パイプ
id AXI4 マスターおよびスレーブ ポートのみに適用されます。ID は連続している必要があります。これはカーネル引数の順番を決めるのに使用されます。

AXI4-Stream ポートには適用されません。

port arg が接続されるポート名を指定します。
size 引数のサイズをバイトで指定します。デフォルトは 4 バイトです。
offset レジスタ メモリ アドレスを示します。
type 引数の C データ型です。たとえば uint*int*float* などを指定します。
hostOffset 予約されています。0x0 に設定します。
hostSize 引数のサイズです。デフォルトは 4 バイトです。
memSize

AXI4-Stream ポートの場合、作成される FIFO の深さは memSize で設定されます。

ヒント: AXI4 ポートには適用されません。
次のタグは、AXI4-Stream ポートの追加タグを指定します。これらは、AXI4 ポートには適用されません。
<pipe> 計算ユニットの各パイプに、データ バッファリング用の FIFO がコンパイラにより挿入されます。pipe タグは FIFO のコンフィギュレーションを決めます。
name AXI4-Stream ポート用に挿入された FIFO の名前を指定します。同じ計算ユニットで使用されているすべてのパイプの中で、この名前が重複しないように指定する必要があります。
width FIFO の幅をバイトで指定します。たとえば、32 ビットの FIFO では 0x4 を指定します。
depth FIFO の深さをワード数で指定します。
linkage 常に internal に設定します。
<connection> connection タグは、カーネルからパイプ用に挿入された FIFO まで、または FIFO からカーネルまでのハードウェアでの実際の接続を指定します。
srcInst 接続のソース インスタンスを指定します。
srcPort 接続のソース インスタンスのポートを指定します。
dstInst 接続のデスティネーション インスタンスを指定します。
dstPort 接続のデスティネーション インスタンスのポートを指定します。