Co-design
Vivado
HLSで作ったラプラシアン・フィルタIPを使ってみる1
Vivado
HLSで作ったラプラシアン・フィルタIPを使ってみる2
前回、ビットストリームの生成まで出来たので、今回はSDKにハードウェアをエクスポートして
ソフトウェアを作る。
SDカードにBOOT.bin を書き込むところまで。
Vivado
HLSで作ったラプラシアン・フィルタIPを使ってみる3
今までのDigilent社のLinuxにカメラ回路とビットマップ・ディスプレイ・コント
ローラを付けた回路に、Vivado HLSで作ったラプラシアン・フィルタの AXI4 Lite Slave IP
を追加して、XPSプロジェクトを構成して、論理合成、インプリメントした。ソフトウェアを作って実行したところ、1.94sec
かかって、最適化したソフトウェアの 5倍の実行時間になった。
Vivado
HLSで作ったラプラシアン・フィルタIPを使ってみる4
Vivado HLSで作ったラプラシアン・フィルタの AXI4 Lite Slave
IP を追加した時のCのソースコードを貼った。
Vivado
HLSで作ったラプラシアン・フィルタIPを使ってみる5
今回は、ChipScope を使用して、AXI4 Lite Slave
バスのバス・トランザクションを見た。
Vivado
HLSで作ったラプラシアン・フィルタAXI4 Master IPを使う1
XPSにラプラシアン・フィルタ AX4 Master IP をAdd
IPして、接続するまで。
Vivado
HLSで作ったラプラシアン・フィルタAXI4 Master IPを使う2
Project Navigator
に戻って論理合成、インプリメントを行ったが、問題なく終了した。
SDKでCソフトウェアを作製、実機でテストしたが、ap_done が上がらずにソフトウェアが終了できなかった。
Vivado
HLSで作ったラプラシアン・フィルタAXI4 Master IPを使う3
前回は、Vivado HLSで作ったAXI4 Lite Slave と AXI4
Master の 2種類のAXIバスを実装するラプラシアン・フィルタ
IPをXPSのカスタムIPとして、SDKからのソフトウェア制御で使用してみたら動作しなかった(ap_done
がアサートされなかった)という問題が合った。
今回は、XPSプロジェクトに入れてあったChipScope AXI Monitor を使用してAXI4バスのトランザクションを見ることにした。
AXI4 Lite Slave は問題無し、AXI4 Master Readは問題ないが、AXI4 Master Write のアクセスが無かった。
Vivado HLS
2013.3 で作ったラプラシアン・フィルタAXI4 Master IPを使う1
Vivado HLS
2013.3 で作ったラプラシアン・フィルタAXI4 Master IPを使う2
AXI4 Master
アクセスのラプラシアン・フィルタ IP1(構想)
以前にもラプラシアン・フィルタをFPGAのハードウェアで作ったことがあるが、それは、1連
のパイプラインされた構造だった。1ピクセルの画像データが入ってきて、パイプラインにデータが満たされていれば、ラプラシアン・フィルタ後のデータが出てく
る構造だ。
今回はわざとこの構造は取らずに、C言語からHLSで合成したようにシリアライズしてみようと思うのだが、なかなかわざと遅くしようと作ったことがなので、戸
惑っている。ともかくC言語からHDLを合成したようにメモリベースで、ある程度シリアライズされた構成で作ってみようと思う。
AXI4 Master
アクセスのラプラシアン・フィルタ IP2(現在作成中)
”AXI4 Master アクセスのラプラシアン・フィルタ
IP1(構想)”の構想を元に、現在、AXI4 Master アクセスのラプラシアン・フィルタ IPを作製中だ。
AXI4 Master
アクセスのラプラシアン・フィルタ IP3(シミュレーション)
AXI4 Master アクセスのラプラシアン・フィルタ
IPが出来てシミュレーションを行った。
AXI4 Master
アクセスのラプラシアン・フィルタ IP4(シミュレーション2)
前回の AXI4 Master アクセスのラプラシアン・フィルタ IP
には欠点があった。それは、ラプラシアン・フィルタ結果をDDR3 SDRAMにWrite するときに終了をブロックしていないことだ。もし、AXI4
Write Transaction の終了、次のAXI4 Read Transaction より長く掛かってしまった場合は、write_data
FIFOが溢れてしまう危険がある。現在のところwrite_data FIFOがFULLなった時ののデータ停止は行っていない。つまり手抜きです。。。
その代わり、AXI4 Write Transaction
の終了までブロックするようにメインのステートマシンを変更した。メインのステートマシンを下に示す。
AXI4 Master
アクセスのラプラシアン・フィルタ IP5(lap_filter_axim.v のHDLソース)
現在のところの lap_filter_axim.v を貼っておく。
AXI4 Master
アクセスのラプラシアン・フィルタ IP6(lap_filter_axim_LiteS_if.v のHDLソース)
Vivado HLSでラプラシアン・フィルタ AXI Master IP
を作った際のAXI4 Lite Slave モジュール lap_filter_axim_LiteS_if.v を貼っておく。
AXI4 Master
アクセスのラプラシアン・フィルタ IP6(line_read_and_y.v と Dual_Port_Memory.v)
下位モジュールの line_read_and_y.v と
Dual_Port_Memory.v を貼っておく。
AXI4 Master アクセスのラプラシアン・フィルタ IP7(インプリメント1)
MPDファイルやPAOファイルを作って、カスタムIPとしてXPSプロジェクトにADD
IPして、ISEから論理合成、インプリメントを行った。
AXI4 Master
アクセスのラプラシアン・フィルタ IP8(インプリメント2、実機テスト)
インプリメントと実機テストを行ったが、ラプラシアン・フィルタ画像がおかしかった。HDL
コードの Writeアドレスの増加ステップがおかしかったので、修正を行った。
AXI4 Master
アクセスのラプラシアン・フィルタ IP9(できた。完成)
バグを修正したら、できました。完成です。ラプラシアン・フィルタのAXI4 Master
IPへのハードウェア・オフロードが完成しました。
lap_filter_axim.c、lap_fil_axim_uty.c と lap_fil_axim_uty.h を貼っておきます。