uClinuxチュートリアル
画像エッジ検出の例
目的
' 実用的な例での実装を体験
' uClinux下での実装評価方法
uClinux コンソール
(HyperTerminal)
開発システム
Xilinx
®ISE, EDK
+
Impulse CoDeveloper™
シリアル・ケーブル パラレル・ケーブ(JTAG) ネットワーク・ケーブルFTP サーバー
(画像ファイル転送) uClinux Image Filter実装後実装後実装後実装後
の の の の作業内容作業内容作業内容作業内容 1. TIFF 画像の元ファイルをFTP 経由でAlbertにPCから ダウンロード 2. TIFF画像を ソフトで処理 (Microblaze) 3. TIFF画像を ハードで処理 (FPGAハード化 エンジン) 4. 画像処理後の TIFFファイルをFTP経由で V2MB1000からPCに アップロードして結果を見る Xilinx® MicroBlaze™ ソフトコア組み込みプロセッサ上で uClinux が走行 テスト環境、マルチタスク処理を提供
uClinux Image Filter
Memec
Virtex-II 評価ボード V2MB1000
uClinux SFL BUS構成とペリフェラル
MicroBlaze LMB_BRAM IF_CNTLR OPB_V20 OPB_TIMER SYS_Clk / SYS_Rst OPB_INTC BRAM BLOCK OPB_UART LITE LMB_V10 OPB_ETHERNET PC COM1<=Serial Port Ethernet PHY OPB_SDRAM FPGA 外部外部外部外部ボードボードボードボード上上上上 DDR SDRAM LMB_BRAM IF_CNTLR LMB_V10 I-Side LMB D-Side LMB D-Side OPB I-Side OPB FSL_V20 FSL_V20 fsl_img FPGA 外部外部外部外部ボードボードボードボード上上上上 OPB_MDM PC LPT1<=<=<=<=JTAG Debug OPB_UART LITE Debug Portエッジ検出システム方式 1/2
sw/hwの関係
sw process フルカラー画像(24bit)ファイル からデータを読み出し、 そのまま32bit単位で エンジンに送信 hw process edge_detect_process sw process フルカラー画像(24bit)ファイル のデータ部へ 受信データを直接書き込み source TIF/Bitmap file result TIF/ Bitmap file (file_data_out) call_fpga 関数 edge_detect エンジン fromcpu stream source_file_data 32bit tocpu stream result_file_data 32bit call_fpga 関数 hw processes:パイプラインで構成 フルカラー画像(24bit)ファイルの データ列を受信し、エッジ検出結果を フルカラー画像ファイルに直接書き 込めるデータ列として出力 (file_data_in) output_stream input_stream output_stream input_streamエッジ検出hwシステム 2/2
istream source_pixel_data 32bit hw process prep_proc 3x3 画素処理の 切り出し処理 hw process edge_detectを4つのプロセスで構成 4段のパイプライン hw process filter 3x3 画素の フィルタリング処理 r2 header_ready Pixels_in prep_run関数 stream 32bit x 3 filter_run関数 ostream result_pixel_data 32bit r0 r2 r1 r2 r1 r0 output_stream input_stream unpack関数 input_stream pack関数 r2 input_stream fromcpu stream source_file_data 32bit tocpu stream result_file_data 32bit row0 row2 row1 output_stream output_stream hw process unpaker fileデータから ピクセルデータに 変換処理 hw process paker ピクセルデータから fileデータに 変換処理filter_run関数の 3x3 画像フィルタ
画像フィルタは注目している画素(ピクセル)と
隣接する8画素を加えた3X3に切り出した9画素の
線形演算を基本とする。
例での演算は下図「(8近傍)ラプラシアン・フィルタ」
-1
-1
-1
-1
8
-1
-1
-1
-1
header _ready Pixel s_inメインループ:1画素/ループ
prep_run関数
k+1
-n
k
-n
k-1
-n
k+1
k
k-1
k+1
+n
k
+n
k-1
+n
k+2
-n
k+1
-n
k
-n
k-1
-n
k+2
k+1
k
k-1
k+2
+n
k+1
+n
k
+n
k-1
+n
新たに
必要
不要に
なる
header _ready Pixel s_inメインループ:1画素/ループ
注目画素が
k => k+1 に進んだ時に「
「
「
「新
新
新
新たに
たに
たに
たに」
」
」
」
演算に必要になる3つの画素を決定して
ストリーム出力
unpack関数とpack関数
R2
B1
G1
R1
G3
R3
B2
G2
B4
G4
R4
B3
R5
B5
G5
R5
B1
G1
R1
0
B2
G2
R2
0
B3
G3
R3
0
B4
G4
R4
0
………
………
unpack
pack
画像ファイル・データ ピクセル・データ header _ready Pixel s_inメインループ:4画素/ループ
hw処理速度の見積もり
Results: unpack -Stages: 7 Block #1 loop: Stages: 5 Operators: 3 Comparator(s) (32 bit) Results: prep_run -Stages: 20 Block #1 loop: Stages: 3 Block #3 loop: Stages: 3 Block #6 loop: Stages: 2 Operators: 4 Adder(s)/Subtractor(s) (32 bit) 4 Comparator(s) (32 bit) Results: filter_run -Stages: 10 Block #1 pipeline: Latency: 8 Rate: 2 Operators: 27 Adder(s)/Subtractor(s) (16 bit) 1 Comparator(s) (32 bit) Results: pack -Stages: 7 Block #1 loop: Stages: 5 Operators: 4 Comparator(s) (32 bit) header _ready Pixel s_in r 2hw処理速度の見積もり
unpack:
4 pixel を 5 stage で処理
=> 8 pixel/10stage
prep_run:
1 pixel を 2 stage で処理
=> 5 pixel/10stage
filter_run:
1 pixel を 2 stage で処理
=> 5 pixel/10stage
pack:
4 pixel を 5 stage で処理
=> 8 pixel/10stage
=>
2 clock / pixcel
50MHzで24bit 512x512 フルカラー ~ 11ms
header _ready Pixel s_in r 2Lab4での操作内容
uClinux評価環境下のイメージフィルタ(エッジ検出)実装と評価
1. デスクトップシミュレーションのビルドと実行
2. 動作合成
3. Stage Master Explorer
4. 既に用意されているXPSプロジェクトへ、CoDeveloperのファイルを追加 5. XPSプロジェクトを開き、CoDeveloperで作られたハードを追加 6. 論理合成→配置配線→ビットマップファイル生成(バッチ括処理) 7. ハードウェアをダウンロード 8. uClinuxをボードへダウンロード 9. Makefile編集後、ソフトウェア部をコンパイル 10. 評価用入力ファイルとソフトウェアをTFTPでボードへ送る 11. ボード上でエッジ検出を実行 12. ボード上で処理された画像ファイルをPCへ送り確認する
CoDeveloperのプロジェクトを開く
File→Open Project…
ファイルを開くダイヤログで C(D):¥Impulse¥Lab4¥ImageFilter_uClinux の中にある img.icProjを開きます設定確認
Project→Options→Buildタブ
ハードウェアを含むファイル
ソフトウェアを含むファイル
デスクトップシミュレーションに使用さ
れるファイルやコンパイルオプション
シミュレーション実行ファイル名
設定確認(続き)
Project→Options→Simulateタブ
シミュレーション実行ファイルと実行
ファイルのオプション
設定確認(続き)
Project→Options→Generateタブ
生成したハードウェアとソフトウェア
の格納ディレクトリ
EDKプロジェクトディレクトリ
→ここで指定したディレクトリ下に
必要なファイルが展開される
デスクトップ・シミュレーション
Project→Launch Simulation Executable
作業ディレクトリ内にエッジ検出後
の画像出力:result.tiffが生成される
入力:peppers.tiff
Xilinx XPSのプロジェクト
'Lab4では、既に準備してあるXPS
プロジェクトディレクトリ「uclinux_edk」
を使用します。
'uclinux_edkには、「CoDeveloperか
ら生成・追加されるHW/SW」以外の
全てが既に用意されています。
'以降の作業では、uclinux_edkに
CoDeveloperで生成したHW/SWと追
加していきます。
ハードウェア・ソフトウェア生成
Project→Generate HDL
Cソースを解析し、ハードウェア化
が行われる。
EDKプロジェクトへ移行
Project→Export Generated Hardware
Project→Export Generated Software
Project→Options→Generate
で指定したディレクトリ下へ必
要なファイルが展開される
• 以上でCoDeveloper上での作業は終了です。
• ここまでの作業により、下記が行われました。
' コンフィグレーション関数で指定したプロセス、unpack、
prep_run、filter_run、packをハード化(HDL)
' Xilinxの環境に必要なファイルをCoDeveloperから
Xilinx環境へ移行
• ここからは、既に用意してあるXilinx Platform Studioのプ
ロジェクトを開き、CoDeveloperで作成したハード(fsl_img)
をハードウェアプラットフォームへ追加します。
XPSのプロジェクトを開く
C(D):¥Impulse¥Lab4¥ImageFilter_uClinux¥uclinux_edk の中にある
Add/Edit Coreダイヤログを開く
Xilinx Platform Studioの
メニュー[Project]
→[Add/Edit Cores...(dialog)]
を選択
パラメータの編集
C_FSL_LINKSを1→3へ変更:
イメージフィルタの入力と出力
のStreamの数ぶん
CoDeveloperで作成したハードをEDK上で追加
CoDeveloperで作成したハードウェ
ア部「fsl_img」がEDKの他IPと供に
リストされている
バスを追加しfsl_imgをバスへ接続
バスを追加: fsl_v20_v1_00_bを2つ追加 fsl_imgをバスへ接続: microblaze_0 mfsl1とfsl_v20_0を接続(Mが表示) microblaze_0 sfsl2とfsl_v20_1を接続(sが表示) fsl_img_0 sfsl0とfsl_v20_0を接続(sが表示) fsl_img_0 mfsl1とfsl_v20_1を接続(Mが表示)ポート追加
fsl_img_0のclkを追加、Net Nameはsys_clk
fsl_v20_0のFSL_Clkを追加、Net Nameはsys_clk
fsl_v20_0のSYS_Rstを追加、 Net Nameはnet_gnd
fsl_v20_1のFSL_Clkを追加、Net Nameはsys_clk
fsl_v20_1のSYS_Rstを追加、 Net Nameはnet_gnd
Net Nameのsys_clkはプルダウンメニューから選択
Net Nameのnet_gndは、直接入力
配置配線・ビットマップファイル生成
Tools→Generate Bitstream:
論理合成、配置配線、ビットストリー
ム生成が一括処理される
PCとボードの接続
Hub
uClinuxコンソール
ISE、EDK、 CoDeveloper、 及び画像ファイルFPGAにインプリメン
トされたMicroBlaze
上でuClinuxが動作
MicroBlaze上の
uClinuxを操作
コンフィグレーションと
FTPサーバ
PC1
PC2
Main boardのcom
ダウンロードケーブル
P160のcom
ビットマップファイルをダウンロード
Tools→Download:
イメージフィルタ(fsl_img)や
MicroBlaze、その他必要なハードウェ
ア構成がFPGA上に展開される
ターミナルウィンドウを開く
uClinuxのコンソールウィンドウとな
るターミナルウィンドウを開いておく。
ここでの設定は:115200 8-N-1
拡張ボードP160のCOMポートに繋がるPC
をuClinuxのコンソールマシンとして使用
Xilinx Xygwinの起動
Startボタン
→すべてのプログラム
→Xilinx Platform Studio 6.3i
→Xygwin Shell
Xygwinでカーネルダウンロードスクリプトを実行
'Xilinx Xygwinを起動 'uclinux_edkディレクトリまでcdコマンドで移動 'ダウンロードスクリプト「./dl.sh」を実行 uClinuxダウンロード完了後、ター ミナルウィンドウにログインプロン プトが表示されるので、rootでログ イン。イメージフィルタ・ソフトウェアをビルド
'Xilinx Xygwinでuclinux_edk下のcodeディレクトリへ移動 'codeディレクトリ内にあるMakefileの環境変数 IMPULSE_HOMEが実際のCoDeveloperまでのパスと一致 している事を確認 'コマンド「make FSL=1」を実行• 以上で、FPGAに実装するハードウェア、ソフトウェ
アに対する必要な処理が全て完了しました。
• 続いて、評価ボードを用いた実機検証に移りま
す。
• TFTPという簡易FTPを用いて、エッジ検出ソフト
imgとテスト用画像peppers.tiffをボードへ送り、ボー
ド上でエッジ検出を実行します。
TFTPのセットアップ
TFTPを起動し、Base Directoryの設定を 「アプリケーションプログラム:img」と 「入力ファイル:peppers.tiff」があるディレクトリ (ここではuclinux_edk)に設定する 実際にはどこにあって もかまいませんが、作 業が楽です。ここでは uclinux_edkへ置くこと にして話を進めます。 TFTPはImageFilter_uClinux¥tftpフォルダにあります。 ファイルtftpd32.exeをダブルクリックすると、プログラム が起動します。ftpコマンドでファイル転送
コンソールから下記コマンドを使用してimgとpeppers.tiffを ボードへ送ります: 'cd tmp 'tftp –g –r peppers.tiff ホストPCのアドレス 'tftp –g –r img ホストPCのアドレス 'コマンドlsで、ファイルが転送されている事を確認 •/tmpはRAMディスク •ファイル転送には数秒 要します。エッジ検出プログラムの実行
ファイルのアクセス権を変更後、プログラムを実行: 'chmod 777 img
出力ファイルの確認
結果ファイルの確認の為、results.tiffをPCへ送ります: 'tftp –p –r results.tiff ホストPCのアドレス