Vitis™ ハードウェア アクセラレーション チュートリアル

xilinx.com の Vitis™ 開発環境を参照

このセクションの内容
main を実行して tsp 関数を機能的に検証します。

Vitis HLS C シミュレーションの実行

既に説明したように、テストベンチ ファイルは Vitis HLS GUI の左側の [Explorer] ビューに表示されます (proj->TestBench のすぐ下のファイル tsp_TB.cpp)。テストベンチ内では、都市の座標が距離に変換されます。都市の座標は次のとおりです。

  const Coord cities[] = {{40.7127837, -74.0059413 },
                          {34.0522342, -118.2436849},
                          {41.8781136, -87.6297982 },
                          {29.7604267, -95.3698028 },
                          ...

距離の計算は次のとおりです (既に説明したように、これらの数値は tsp アクセラレーション関数に供給される前に整数に正規化される)。

float dist = std::sqrt(
                       std::pow(cities[i].x-cities[j].x, 2)
                     + std::pow(cities[i].y-cities[j].y, 2)
                      );

テストベンチは、効率の高いハードウェア処理のために浮動小数点からトランスコードされた 16 ビット (uint16_t) のデータ型を送信します。

// Normalizing distances to get the maximum precision on 16-bit integers
uint16_t maxUint = std::numeric_limits<uint16_t>::max();
for ( int i = 0; i < N*N; ++i ) {
  cout << "Distance (fp32): " << distances[i] << " Norm. (uint16): " << (uint16_t)((distances[i]/maxDist) * maxUint);
  inputDistances.write((distances[i]/maxDist) * maxUint);
}

シミュレーションを実行する前に、tsp.h ファイルを開いて都市の数 (N=5) を確認します。開始するには、数都市のみを使用してシミュレーションがすばやく完了するようにします。次の演習では、合成に対して都市の数を 13 に設定します。tsp.h ファイルは、Vitis HLS GUI で tsp.cpp ファイルの #include "tsp.h" 行にマウスを重ね、Ctrl キーを押しながらクリックして開くことができます。

重要: シミュレーションで N の値を少なくすることは重要です。そうしないと、シミュレーションの実行に長い時間がかかります。

Vitis HLS GUI からシミュレーションを実行するには、Vitis HLS GUI の上部ツールバーで再生アイコン play を見つけ、そのドロップダウン リストから [C Simulation] を選択します。

メイン メニューから ProjectRun C Simulation で開くこともできます。
Cシミュレーションのダイアログが表示されたら、
[OK] をクリックするだけです。C シミュレーションが終わると、Vitis HLS GUI は次のようになります。

Csim screen

上記のスクリーンショットを見ると、結果は 75662 (スケーリングされた整数) または 51.6494 で、これはテストベンチに格納されている事前に計算された結果と一致します。