Co-design

Vivado HLSで作ったラプラシアン・フィルタIPを使ってみる1
"Vivado HLSでラプラシアン・フィルタ式のみをaxi lite slaveモジュールにする2"でラプラシアン・フィルタの式のみをEDKの pcore として出力したので、XPSのプロジェクトに入れてハードウェア化してLinuxのソフトウェアから使ってみようと思う。
XPSプロジェクトにラプラシアン・フィルタ式のみの axi lite slave カスタムIPをAdd IPして、Project Navigator に戻りビットストリームの生成まで。
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
Vivado HLSでラプラシアン・フィルタ関数をaxi masterモジュールにする2”で作ったAXI4 Lite Slave と AXI4 Master の 2種類のAXIバスを実装するラプラシアン・フィルタ IPをXPSのカスタムIPとして使って見ようと思う。
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でラプラシアン・フィルタ関数をaxi masterモジュールにする”でC言語からHDLに合成したラプラシアン・フィル タIPをDigilent LinuxのXPSプロジェクトに組み込んで、動作を確認したが、結果から言うと動作しなかった。
Vivado HLS 2013.3 で作ったラプラシアン・フィルタAXI4 Master IPを使う2
Vivado HLS 2013.3 で作ったラプラシアン・フィルタAXI4 Master IPを使う1”でVivado HLS 2013.3 でC言語から合成したIPが動かないということを書いた。今回は、予め入れておいたChipScope を使用して、ラプラシアン・フィルタAXI4 Master IPの2つのAXI4 Masterバスと1つのAXI4 Lite Slaveバスの波形を見てみた。

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 を貼っておきます。
inserted by FC2 system