FC2カウンター FPGAの部屋 2017年05月05日

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vivado HLSで stdint.h を使用する

FPGAマガジンNo16 のAXI4 Master のソースコードと、FPGAマガジン No.17 のAXI4-Stream のソースコードを公開しているが、taksei さんから「ソースコードを64bit Linux版VivadoでC-Sim実行してみたのですが、long型が8バイトとして確保されるため、BMPファイルのリード・ライトに失敗するようです。」との報告があった。long型で4バイトのところ、8バイトになっていたようだ。
そこで、taksei さんに教えて頂いたように、stdint.h を使用して、uintX_t や intX_t を使用することにした。taksei さん、ありがとうございました。

私もVirtualBox 上に64ビット版のUbuntu 16.04 をインストールしてあって、その上にVivado 2016.4 をインストールしてある。よって、それ上のVivado HLS 2016.4 で確かめてみよう。

まずは、64ビット版Ubuntu 16.04 の Vivado HLS 2016.4 を起動した。
まずは、以前のままの bitmap_header.h でやってみよう。
stdint_1_170505.png

これで C シミュレーションを行った。
stdint_2_170505.png

”Can't allocate rd_bmp memory”エラーになってしまった。
taksei さんによると、”stdint.h” を使えば良いらしい。
”stdint.h”は、少なくとも 8, 16, 32, 64 ビット長の intN_t, uintN_t という型を宣言してるようだ。つまり、ビット長が明確に定義されている。
これを使用して、BMPのフォーマットに関しての資料を参考に、 intN_t, uintN_t で bitmap_header.h を書き直してみよう。実際には、taksei さんのコードを検証しながら、コピー&ペーストを行った。
更に、lap_filter_tb.c にもBMPのフォーマットがあるので、それも同様に、 intN_t, uintN_t に修正した。
stdint_3_170505.png

stdint_4_170505.png

修正後に C シミュレーションを行ったところ、今度は成功した。
stdint_5_170505.png

C コードの合成結果を示す。Windows 10 での結果と同じレイテンシだった。
stdint_6_170505.png

C/RTL協調シミュレーション結果を示す。これも、Windows 10 での結果と同じだった。
stdint_7_170505.png

lap_filter0_axim/solution1/sim/wrap_pc ディレクトリを見ると、test_lap.bmp が出来て、正常にラプラシアンフィルタ処理が行われているのが分かる。
stdint_8_170505.png

Export RTL も正常に行うことができた。
stdint_9_170505.png

更新した bmp_header.h, lap_filter_tb.c を Windows 10 のVivado HLS 2017.1 に持って行っても正常にシミュレーション、合成を行うことができた。
stdint_10_170505.png

OS によって、int, long の型のビット長は変化するので、ビット長が決まっている変数を宣言する場合は、stdint.h の intN_t, uintN_t を使用して書いたほうが良い。
  1. 2017年05月05日 16:25 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0