FC2カウンター FPGAの部屋
FC2ブログ

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

FPGAの部屋

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

Vivado HLS 2019.2 で xfOpenCV を使用する1(dilation 1)

Vivado HLS 2019.2 で xfOpenCV を使ってみることにした。どのくらい使えるのだろうか?
前回、Vivado HLS 2018.3 でも同様に dilation をやっている。
Vivado HLS で xfOpenCV を使用する1
Vivado HLS で xfOpenCV を使用する2(Vivado HLS 2018.3 のGUI を使用する)

ザイリンクス OpenCV ユーザ ー ガイド UG1233 (v2019.1) 2019 年 6 月 5 日”の 46 ページの”第4章 HLS の使用”によると以下の制限があるそうです。引用します。

Vivado HLS 2019.1 で使用モデルが正しく機能するようにするため、次の変更を加える必要があります。
1. 適切なコンパイル時間オプションの使用: HLS で xfOpenCV 関数を使用する際、コンパイル時に -D__SDSVHLS__
および -std=c++0x オプションを使用する必要があります。
2. インターフェイス レベル引数へのインターフェイス プラグマの指定: 最上位インターフェイス引数を (1 つ以上の
読み出し/書き込みアクセスを持つ) ポインターとして含む関数には、m_axi インターフェイス プラグマを指定す
る必要があります。次に例を示します。
void lut_accel(xf::Mat<TYPE, HEIGHT, WIDTH, NPC1> &imgInput,
xf::Mat<TYPE, HEIGHT, WIDTH, NPC1> &imgOutput, unsigned char *lut_ptr)
{
#pragma HLS INTERFACE m_axi depth=256 port=lut_ptr offset=direct bundle=lut_ptr
 xf::LUT< TYPE, HEIGHT, WIDTH, NPC1> (imgInput,imgOutput,lut_ptr);
}


早速、xfOpenCV を git clone した。
git clone https://github.com/Xilinx/xfopencv.git
xfOpenCV_1_200219.png

今回は、xfopencv/HLS_Use_Model/Standalone_HLS_AXI_Example をやってみよう。
xfOpenCV_2_200220.png

これをなぜやるかと言うと、AXI4-Stream 入力、出力になっているからである。実際の回路で使用する時に沿った入出力になっているからだ。ソースコードトップの xf_ip_accel_app.cpp を引用する。
xfOpenCV_3_200220.png

dilation_accel() を挟んで、xf::AXIvideo2xfMat() と xf::xfMat2AXIvideo() が使用されている。

それでは、この Standalone_HLS_AXI_Example ディレクトリを Vivado_HLS/xfOpenCV ディレクトリの下にコピーした。
xfOpenCV_4_200220.png

そして、 script.tcl を起動する前に、インクルード・ディレクトリを変更した。ディレクトリをコピーしてあるので、相対パスではなく絶対パスに変更した。
元の script.tcl を示す。
xfOpenCV_5_200220.png

変更後の script.tcl を示す。
xfOpenCV_6_200220.png

-cflags "-D__SDSVHLS__ -I../../include --std=c++0x"

-cflags "-D__SDSVHLS__ -I/home/masaaki/xfopencv/include --std=c++0x"

に変更した。

script.tcl を実行した。
vivado_hls -f script.tcl
xfOpenCV_7_200220.png

Vivado HLS の GUI を立ち上げて、いま作成した dillation_project を読み込んだ。
xfOpenCV_8_200220.png

持っていないFPGA が指定されていた。
Ultra96-V2 の ZYNQ UltraScale+ MPSoC に変更しよう。
Solution メニューから Solution Settings... を選択した。
Solution Settings (solution1) で Synthesis を選択して、Part Selection を xczu3eg-sbva481-1-e に変更した。
xfOpenCV_9_200220.png

これで FPGA が置き換わったが、C シミュレーションは変更なしなはずなので、見ていこう。
csim のレポートを見た。成功している。
xfOpenCV_10_200220.png

dillation_project/solution1/csim/build ディレクトリを見た。
xfOpenCV_11_200220.png

元画像の tsetcase55.jpg を示す。
xfOpenCV_12_200220.jpg

ハードウェアで Dilation 処理しているはずの hls.jpg を示す。
なお、Dilation は膨張という意味で、白部分を拡張する機能らしい。”モルフォロジー変換”参照。
xfOpenCV_13_200220.jpg

白黒になっている以外の違いが良く分からない?
多少、白い点々が大きくなっているか?
  1. 2020年02月20日 04:57 |
  2. reVISION, xfOpenCV
  3. | トラックバック:0
  4. | コメント:0

Vitis 2019.2 アプリケーション・プロジェクトでラプラシアン・フィルタAXI4-Streamバージョンのカーネルを複数インスタンス

今回は、Vitis 2019.2 アプリケーション・プロジェクトでラプラシアン・フィルタAXI4-Streamバージョンのカーネルを複数インスタンスしてみよう。

Vitis 統合ソフトウェア プラットフォームの資料 アプリケーション アクセラレーション開発 UG1393 (v2019.2) 2019 年 11 月 11 日”の”第 55 章 アドバンス トピック: 複数の計算ユニットおよびカーネルのストリーミング”の”複数の計算ユニット”によると、

Vitis 環境では、v++ コマンドで --nk オプションを使用してカーネル (計算ユニット) のインスタンス数を指定します。--nk オプションは、xlcbin ファイルにインスタンシエートするカーネルの数と名前マップを指定します。

ということなので、やってみよう。

Vitis 2019.2 の streaming_lap_filter4 プロジェクトを作成した。(もうすでにビルドしてあるが)
streaming_lap_filter_92_200219.png

Assistant ウインドウの streaming_lap_filter4_system -> streaming_lap_filter4 を右クリックして右クリックメニューから Settings... を選択する。

Project Settings ダイアログが表示される。
V++ linker options: に

--config ../src/krnl_stream_dmar_lap_dmaw.ini

を入力した。
streaming_lap_filter_93_200219.png

krnl_stream_dmar_lap_dmaw.ini の内容を示す。

[connectivity]
nk=dma_read:1:dma_read_2
nk=krnl_lap_filter_dmaw:1:krnl_lap_filter_dmaw_2

stream_connect=dma_read_2.outs:krnl_lap_filter_dmaw_2.ins
stream_connect=dma_read_1.outs:krnl_lap_filter_dmaw_1.ins


これで Hardware をビルドした。

Vivado のブロックデザインを見てみよう。
streaming_lap_filter_94_200219.png

dma_read_1, dma_read_2, krnl_lap_filter_dmaw_1, krnl_lap_filter_dmaw_2 が実装されているのが分かる。2 組のストリーミング接続のカーネルが実装された。

アドレス・エディタの画面を示す。
streaming_lap_filter_95_200219.png

ホスト・プログラムも作ったが、まだうまく動いていない。とりあえず、他に書きたい内容が目白押しなので、後でデバックしようと思う。

(追記)
Vitis_Accel_Examples/host/mult_compute_units/ が複数の計算ユニットを使った簡単な例だそうだ。ホスト・プログラムを作る際には、Vitis_Accel_Examples/host/mult_compute_units/ を参考にしよう。
  1. 2020年02月19日 04:07 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

Ultra96 USB-to-JTAG/UART Pod がWindows 10 で動作しなくなった2

Ultra96 USB-to-JTAG/UART Pod がWindows 10 で動作しなくなった”の続き。

Ultra96 USB-to-JTAG/UART Pod Ver.1 を Ultra96-V2 に取り付けたのに、USB ケーブルをつないだ Windows 10 でシリアル変換の COM ポートが生成されなくて困っていたが COM ポートを生成させることができたのでブログに書いておく。

最初に、本当にイダさんにお世話になりました。ありがとうございました。トラブルシューティング方法を教えていただきました。

デバイスマネージャーの画面を示す。
Ultra96_JTAG_3_200218.png

USB Serial Port(COM6) が生成されているのが分かる。

やり方を示す。
USB Serial Converter B を右クリックし右クリックメニューからプロパティを選択する。
USB Serial Converter B のプロパティが開いたら詳細設定タブをクリックして、セットアップの” VCP をロードする”にチェックを入れる。(これが入っていなかった)
Ultra96_JTAG_4_200218.png

そうすると、COM6 が出てきた。
COM6 はTera Term からも選択できた。
Ultra96_JTAG_5_200218.png

最後にドライバの使用しているファイルを示す。
Ultra96_JTAG_2_200218.png

本当に良かった。。。うれしい。。。
  1. 2020年02月18日 05:00 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

Ultra96 USB-to-JTAG/UART Pod がWindows 10 で動作しなくなった

TMMF2020 でフィルタ処理の様子を展示しようとして、 Ultra96-V2 を Ultra96 USB-to-JTAG/UART Pod ( AES-ACC-U96-JTAG ) を使用して、Windows 10 のノートパソコンに接続しようとしたら、Tera Term のシリアル接続に候補が出てこなかった。
イダさんに Ultra96 用 USB シリアル変換基板を持ってきていただいて事なきを得た。
Ultra96 USB-to-JTAG/UART Pod を落としてしまったので、壊れたのか?と思って、新しい Ultra96 USB-to-JTAG/UART Pod を購入してしまったのだが、家に帰ってきて、Ubuntu 18.04 に Ultra96 USB-to-JTAG/UART Pod を接続したら普通に動作する。
これはおかしいということで、もう一度、Windows 10 のノートパソコンに接続してデバイスマネージャーを見たら、表示メニューから”非表示のデバイスの表示”を選択すると、COM3 と COM4 が見えている。
Ultra96_JTAG_1_200217.png

ドライバがおかしいのか?と思って、https://www.ftdichip.com/Drivers/VCP.htm に行って、ドライバをもう一度インストールしてみたが、同様だった。

Windows 10 のバージョンは 1909 のためかもしれないとツィターで教えてもらったが、皆さん、このような症状が出ている方はいますでしょうか?
よろしければコメント欄でお知らせください。動作している、動作していない、その際のWindows 10 のバージョンもお知らせください。
よろしくお願いいたします。

RTLを語る会16”でデモしたときには、同じノートパソコンで Ultra96 USB-to-JTAG/UART Pod を使ってデモしたんですよ。それが 2019/11/09 で、Windows 10 の 1909 出たのが、2019/11/12 なので、時期的にはおかしくないんです。

なお、私の使用している Ultra96 USB-to-JTAG/UART Pod はコネクタが 1 ピン少ない Ultra96-V1 の時に買った Ultra96 USB-to-JTAG/UART Pod です。

(追記)
職場のWindows 10 1909バージョンでは、Tera TermでUltra96のUltra96 USB-to-JTAG/UART Pod でシリアル接続できたので、Windows 10 1909バージョンの問題ではないようです。

(2020/02/18:追記)
いろいろな方からレポートいただきました。ありがとうございます。
やはり、皆さん、うまく行っているのので、自分のノートパソコン固有の問題のようです。新しい Ultra96 USB-to-JTAG/UART Pod を購入したので、それが来たら確かめてみようと思います。
  1. 2020年02月17日 04:46 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

TMMF2020 に出展しました2

昨日でTMMF2020 の出展も終わりました。
プレゼンも思いがけなくたくさんの人に聞いていただいて嬉しかったです。ありがとうございました。
私のブースはFPGA のことを効いてくる人がほとんどでしたが、FPGA って知らないけど使ってみたい、興味あるという若い方に来ていただいたのが良かったです。そういう場合には、小林さんのFPGA大全が良い本ですから、それ見てやってみてくださいとご案内しました。
隣がミクニンさんで、とても素晴らしいM5StackV で学習がすぐできるディープラーニングのアプリを展示されていました。後で自分でもやってみたいです。ミクニンさん、いろいろとありがとうございました。
また、何か作品作って出てみたいですね。。。
TMMF2020_10_200217.jpeg

TMMF2020_11_200217.jpeg

TMMF2020_12_200217.jpeg
  1. 2020年02月17日 04:26 |
  2. Make出展
  3. | トラックバック:0
  4. | コメント:0

TMMF2020 に出展しました

TMMF2020 に出展しました。
隣のブースはミクニンさんでした。偶然。。。

朝、ストライズの練習会で 12.8 km 洞峰公園を走ってから、午前 9 時 30 分にカビオに行って準備を始めました。
準備しているときの様子を 2 階から取った写真です。
TMMF2020_6_200216.jpeg

TMMF2020_7_200216.jpeg

TMMF2020_8_200216.jpeg

私のブースの写真です。
TMMF2020_9_200216.jpeg

Ultra96 の JTAG ボードを落として、動かなくなって焦りました。イダさんに Ultra96 のシリアル-USB 変換をいただいて無事にフィルタ結果を表示することができました。イダさんありがとうございました。
家に帰ってきて、早速、AES-ACC-U96-JTAG を注文しました。

FPGAの部屋のブログを見ていただいている方にも来ていただいて、嬉しかったです。今日も展示していますので、よろしくお願いいたします。
  1. 2020年02月16日 04:50 |
  2. Make出展
  3. | トラックバック:0
  4. | コメント:0

Tsukuba Mini Maker Faire 2020 に出展します

今日、明日と Tsukuba Mini Maker Faire 2020 に出展します。
皆さん、よろしければ見に来てください。

展示物は、Ultra96-V2 のPMOD 拡張基板すべてと、Ultra96-V2 と PMOD 拡張基板+OV5642 カメラで自分の家の前の道をガボールフィルタ、ラプラシアンフィルタでどう見えるかをディスプレイに表示します。
ガボールフィルタとラプラシアンフィルタを使ってUltra96-V2でカメラ画像をフィルタする3(完成)”を展示します。

家の前の道
TMMF2020_4_200215.jpeg

ラプラシアンフィルタ処理
TMMF2020_3_200215.jpeg

ガボールフィルタ左白線用
TMMF2020_1_200215.jpeg

ガボールフィルタ右白線用
TMMF2020_2_200215.jpeg

Zybot を静的展示して、走っている様子の動画を流します。
TMMF2020_5_200215.jpeg

後は、過去に作ったアクリルサインを持っていこうと思っています。
Make_2013_3_131104.jpg

プレゼンテーションもします。日曜日のオオトリです。
FPGAでリアルタイムに画像をフィルタしよう”という題です。

どうぞよろしくお願いします。

時節柄、マスク姿でいると思いますので、ご理解ください。
  1. 2020年02月15日 04:53 |
  2. Make出展
  3. | トラックバック:0
  4. | コメント:0