FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

Vivado HLS 2015.4を試す (チュートリアル Lab.1)

Vivado 2015.4 HLSでは、遂にHLSの機能が無償化されたらしい! 今まで触ってみたいと思いつつ、期限付きの評価ライセンスはきちんと使い切れる自信が無かったりて、申請していなかったので、今回の無償化は非常に嬉しい。さっそく試してみよう。

http://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx2015_4/ug973-vivado-release-notes-install-license.pdf

Vivado®DesignSuite2015.4リリースから、高位合成ツールであるVivadoHLSが無償で提供されるようになり、Vivado
のすべてのエディションに含まれるようになりました。この変更を示すため、エディションの名前はVivadoDesign
SuiteHLxEditionに変更されています。HLxEditionには、HLSystemEdition、HLDesignEdition、およびHLWebPACK™
Editionがあります。これらのエディションでは、AllProgrammableFPGA、SoC、および再利用可能なプラットフォー
ムを高い生産性で設計するための新しい手法がイネーブルになっています。すべてのHLxエディションにはVivado
高位合成(HLS)、VivadoIPインテグレーター、LogicCoreIPサブシステム、およびVivadoインプリメンテーション
ツールスイートすべてが含まれており、生産性が高く、高度なCおよびIPベースのデザインフローを即座に導入で
きるようになっています。

Lab1. FIRフィルタの高位合成を試してみる

Vivado 2015.4 HLSの起動画面はこんな感じだ。

f:id:msyksphinz:20151126225551p:plain

2014年のチュートリアルだが、一つ一つ試していこう。使ったのは以下のチュートリアル

http://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_2/ug871-vivado-high-level-synthesis-tutorial.pdf

まずは言われるがままに、Lab1の、firのプロジェクトからHDLの生成を試してみる。 ただし、利用するボードを選択する所では、所持しているZedBoardを選択した。

f:id:msyksphinz:20151126230038p:plain

ちなみに元になっているfir.cだが、まあC言語っぽいとは言え、多少はHDL生成用にキーワードが入っている。 テストベンチであるfir_test.cは、まるっきりC言語という感じだ。

C言語によるシミュレーション

[Project]→[Run C Simulation]を選択すると、どうやらバイナリが生成され、シミュレーションが実行される。

f:id:msyksphinz:20151126230432p:plain

このバイナリ、生成オプションは良く分からないが、

   Compiling(apcc) ../../../../../lab1/fir_test.c in debug mode
@I [HLS-10] Running 'c:/Xilinx/Vivado_HLS/2015.4/bin/unwrapped/win64.o/apcc.exe'
            for user 'masayuki' on host 'fixedesk' (Windows NT_amd64 version 6.1) on Thu Nov 26 23:01:45 +0900 2015
            in directory 'C:/usr/work/vivado_hls/ug871-design-files/Vivado_HLS_Tutorial/Introduction/lab1_work/fir/solution1/csim/build'
@I [APCC-3] Tmp directory is apcc_db
@I [APCC-1] APCC is done.
   Compiling(apcc) ../../../../../lab1/fir.c in debug mode
@I [HLS-10] Running 'c:/Xilinx/Vivado_HLS/2015.4/bin/unwrapped/win64.o/apcc.exe'
            for user 'masayuki' on host 'fixedesk' (Windows NT_amd64 version 6.1) on Thu Nov 26 23:01:52 +0900 2015
            in directory 'C:/usr/work/vivado_hls/ug871-design-files/Vivado_HLS_Tutorial/Introduction/lab1_work/fir/solution1/csim/build'
@I [APCC-3] Tmp directory is apcc_db
@I [APCC-1] APCC is done.

APCCという謎なツールが動作しているね。最初はC言語によるシミュレーションだから,GCCとかが動いているのかと思ったけど、良く考えるとC言語以外のHDL生成用プリミティブも入っているからそうは行かないのか。 じゃあこれ、GCCとかで一般的に利用されているライブラリとかは、どこまで使えるんだろうね?

csim.exeというものが生成されており、これを実行することでシミュレーションとしている。

合成する

[Solution]→[Run C Synthesis]→[Active Solution]で合成が始まる。この規模だと、7秒くらいで終了した。

f:id:msyksphinz:20151126231311p:plain

でも、この規模を7秒でHDL生成してしまうというのは凄いな。生産性については物凄く上がりそうだ。 ただし、HDLソースをちらっと覗いてみると、必ずしも分かりやすいソースコードにはなっていないと感じた。ちょっとHDLの状態でのデバッグは厳しそうだ。。。

RTLとC言語のコシミュレーション

生成されたRTLのコードと、C言語のテストパタンを複合させて検証を走らせるらしい。チュートリアルの説明には、以下のように説明されている。

  • The C test bench generates input vectors for the RTL design.
  • The RTL design is simulated.
  • The output vectors from the RTL are applied back into the C test bench and the results-checking in the test bench verify whether or not the results are correct.

一旦C言語のテストベンチをRTLに変換?というかRTLのテストベクタを生成すると書いてあるが、詳細は分からない。普通にRTLを走らせて、その結果を再度C言語のテストベンチにフィードバックすると書いてある。 単純に考えた場合、そんなことしなくてもDPI-Cとかで接続すればいいんじゃないのと思うのだが、そうも行かないのかな(複雑そうだしな)

f:id:msyksphinz:20151126231926p:plain

IPの生成

xprを生成する。[Solution]→[Export RTL]を選択する。

f:id:msyksphinz:20151126232025p:plain

IPカタログを生成することで、Vivadoの方でも使えるようになるのかな?とりあえずこれでチュートリアルのLab.1は終了。