FC2カウンター FPGAの部屋 Vivado 2014.4のCドライバーファイル2
FC2ブログ

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

FPGAの部屋

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

Vivado 2014.4のCドライバーファイル2

Vivado 2014.4のCドライバーファイル1”の続き。

前回は、Vivado HLS 2014.4 で生成されたドライバーを使う方法について検討し、初期化ルーチン XLap_filter_axim_Initialize() の動作について考察した。今回は、初期化の後の関数の使用方法について検討する。

xlap_filter_axim_hw.h のコメントを見ると、大体の設定方法については予測がつく。下に、 xlap_filter_axim_hw.h のコメント部分を引用する。

// ==============================================================
// File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
// Version: 2014.4
// Copyright (C) 2014 Xilinx Inc. All rights reserved.
// 
// ==============================================================

// BUS_AXI4LS
// 0x00 : Control signals
//        bit 0  - ap_start (Read/Write/COH)
//        bit 1  - ap_done (Read/COR)
//        bit 2  - ap_idle (Read)
//        bit 3  - ap_ready (Read)
//        bit 7  - auto_restart (Read/Write)
//        others - reserved
// 0x04 : Global Interrupt Enable Register
//        bit 0  - Global Interrupt Enable (Read/Write)
//        others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
//        bit 0  - Channel 0 (ap_done)
//        bit 1  - Channel 1 (ap_ready)
//        others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
//        bit 0  - Channel 0 (ap_done)
//        bit 1  - Channel 1 (ap_ready)
//        others - reserved
// 0x10 : Data signal of ap_return
//        bit 31~0 - ap_return[31:0] (Read)
// 0x18 : Data signal of cam_addr
//        bit 31~0 - cam_addr[31:0] (Read/Write)
// 0x1c : reserved
// 0x20 : Data signal of lap_addr
//        bit 31~0 - lap_addr[31:0] (Read/Write)
// 0x24 : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)


割り込み処理を使わずに、ラプラシアンフィルタの変換終了はポーリングでやる仕様のため、割り込み処理の設定は必要無い。
ラプラシアンフィルタで画像を変換するために、最初にやらなければいけないことは、

0x18 : Data signal of cam_addr と 0x20 : Data signal of lap_addr に、それぞれカメラのフレームバッファのアドレスとラプラシアンフィルタ変換後の画像のフレームバッファのアドレスをWrite することだ。

0x00 : Control signals には、bit 0 - ap_start (Read/Write/COH) に 1 を書けばラプラシアンフィルタの変換がスタートするはずだ。COH = Clear on Handshake なので、1 を書いても内部の処理で 0 に戻る。

ラプラシアンフィルタの変換が終了したら、0x00 : Control signals の bit 1 - ap_done (Read/COR) が 1 になる。COR = Clear on Read なので、ap_done は Read すると 0 に戻る。

通常は、返り値を読むために、0x10 : Data signal of ap_return を Read する。今回のラプラシアンフィルタでは、1 しか返さないので、Read する必要は無さそうだ。

以上の処理を、”Vivado HLS 2013.4でラプラシアン・フィルタ関数をaxi masterモジュールにする7(ソース公開)”では、自作したドライバー・ルーチンで処理を行っていたが、今回は、Vivado HLSで生成されたドライバーでラプラシアンフィルタの変換を行うための方法を探っていく。

Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2014.3) 2014 年 10 月 1 日”(以下、高位合成ユーザーズガイドと呼ぶ)の 152 ページに”AXI4-Lite スレーブ インターフェイス をプログラムするのに最初に推奨される フ ロー”があって、レジスタ値を読み込むのに、 XExample_Set_a、XExample_Set_b、 XExample_Set_c_i を使用すると書いてある。a, b, c_i はアドレスをそれぞれ割り振られたポートなので、そのポートに書き込む関数があるらしい。

私のラプラシアンフィルタIPで言うと、xlap_filter_axim.c に XLap_filter_axim_Set_cam_addr() XLap_filter_axim_Set_lap_addr() があるので、これを使って、カメラのフレームバッファのアドレスとラプラシアンフィルタ変換後の画像のフレームバッファのアドレスをWrite する事ができる。
ちなみに、XLap_filter_axim_Get_cam_addr() XLap_filter_axim_Get_lap_addr() もセットであった。

次に XLap_filter_axim_Start() を使って、ラプラシアンフィルタの変換をスタートさせる。

ラプラシアンフィルタの変換が終了したかどうかは、XLap_filter_axim_IsDone() があるので、これを呼べば変換が終了したかどうかが分かるだろう。

高位合成ユーザーズガイドに書いてあるもう1つのフローのブロックの継続実行について検討してみた。これは、1度ラプラシアンフィルタの変換が終了しても、ソフトウェアの指示無しで、直ぐに次の変換を始めるという処理になる。

xlap_filter_axim.c の XLap_filter_axim_Set_cam_addr() XLap_filter_axim_Set_lap_addr() を使って、カメラのフレームバッファのアドレスとラプラシアンフィルタ変換後の画像のフレームバッファのアドレスをWrite する。

XLap_filter_axim_EnableAutoRestart() を使って、AutoRestart をイネーブルする。

ラプラシアンフィルタの変換が必要なくなったら、XLap_filter_axim_DisableAutoRestart() を使用して AutoRestart をディスエーブルする。
  1. 2015年02月16日 05:15 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/3078-dd804653
この記事にトラックバックする(FC2ブログユーザー)