FC2カウンター FPGAの部屋 2017年10月14日
FC2ブログ

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

FPGAの部屋

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

a と b の信号を切り替えるVivado HLSのセレクタ

a と b の信号を切り替えるVivado HLSのセレクタを作った。
これだけならば、Verilog HDL で書いて、なひたふさんの記事”VivadoのIPインテグレータでRTLソースをIP化せずに、モジュールとして追加する”を参考にしてRTL のIP としてIP Integrator にインスタンスして使えばよいのだが、選択信号(select)をARM プロセッサから選択したいということでVivado HLS 2017.2 でプロジェクトを作ってやってみた。

まずはVivado HLS で ZYBO Z7-20 用の select_one プロジェクトを作った。
select_one_1_171014.png

select_one.cpp を貼っておく。

// select_one.cpp
// 2017/10/14 by marsee
//

#include <ap_int.h>

int select_one(
    ap_uint<1> a,
    ap_uint<1> b,
    ap_uint<1> select,
    ap_uint<1> &out
){
#pragma HLS INTERFACE ap_none port=out
#pragma HLS INTERFACE s_axilite port=select
#pragma HLS INTERFACE ap_none port=b
#pragma HLS INTERFACE ap_none port=a
#pragma HLS INTERFACE s_axilite port=return
    switch(select){
        case 0:
            out = a;
            break;
        default:
            out = b;
            break;
    }
    return(0);
}



a と b は入力ポートとして合成、select はAXI4 Lite Slave インターフェース、out は出力ポートとした。

C コードの合成を行った。
select_one_2_171014.png

Latency が 0 なので組み合わせ回路だ。

出力されたVerilog HDL コードを見てみよう。
select_one.v を見てみると 120 行目にそのままの記述が。。。

assign out_V = ((select_V[0:0] === 1'b1) ? b_V : a_V);

select_one_4_171014.png

組み合わせ回路なので、ap_start をアサートしなくても 0x18 番地に書けば select の値が変わるようだ。

select_one_AXILiteS_s_axi.v のアドレス・マップを貼っておく。

//------------------------Address Info-------------------
// 0x00 : Control signals
//        bit 0  - ap_start (Read/Write/SC)
//        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)
//        others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
//        bit 0  - Channel 0 (ap_done)
//        others - reserved
// 0x10 : Data signal of ap_return
//        bit 31~0 - ap_return[31:0] (Read)
// 0x18 : Data signal of select_V
//        bit 0  - select_V[0] (Read/Write)
//        others - reserved
// 0x1c : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)


Export RTL を行って、IP にした。
select_one_3_171014.png

本来であればシミュレーションを行うのだが、Verilog HDL のコードがとってもわかりやすいので、その必要もないだろう。
10 分でAXI4 Lite Slave インタフェースのセレクタIP ができた。。。
  1. 2017年10月14日 08:17 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

白線間走行畳み込みニューラルネットワーク・システムをZYBO Z7-20で動作させる2

白線間走行畳み込みニューラルネットワーク・システムをZYBO Z7-20で動作させる1”の続き。

前回は、カメラ・インタフェースIP のAXI4 Lite Slave インターフェースから接続されているAXI Interconnect のAXI4 Master ポートに空きがあったので、空きを無くしたらカメラ・インタフェースIP が動作することが分かった。しかし、今度はカメラ制御用のI2C インタフェースIP がおかしくなっているようだ。今回はカメラ制御用のI2C インタフェースIP を調査する。

カメラ制御用のI2C インタフェースIP (axi_iic_0)のAXI4 Lite Slave の配線(S_AXI)にDebug を指定した。
ZYBO_Z7_118_171013.png

論理合成、インプリメント、ビットストリームの生成を行った。
ハードウェアをエクスポートし、SDK を立ち上げて、HelloWorld プロジェクトと cam_disp3_axis プロジェクトを作成した。
ビットファイルをダウンロードしてから、HelloWorld プロジェクトを起動した。これでPS のクロックが出たので、Vivado 2017.2 でVivado Analyzer を起動した(Open Hardware Manager を開いてOpen Target をクリックし、Auto Target を選択した)。
axi_iic_0 のAXI4 Lite Slave インターフェースのAWVALID にトリガを掛けた。
cam_disp3_axis プロジェクトを起動しても、トリガがかからなかった。
ZYBO_Z7_117_171013.png

これは、もうAXI Interconnect がおかしいとしか考えられない。ということでAXI Interconnect を交換することにした。
AXI Interconnect を削除する前に各IP のアドレスを確認した。
ZYBO_Z7_119_171013.png

このAXI Interconnect を指定する。
ZYBO_Z7_120_171013.png

AXI Interconnect を削除した。
オートではAXI SmartConnect がインスタンスされるが16個しか接続できないため、1個が接続できない。そこで、AXI Interconnect を自分でAdd IP しておいて、1つのIP だけ手動で配線した。そして、そこからオートで配線したら、AXI Interconnect を使ってくれた。配線後の様子を下の図に示す。といってもあまり変わりはない。
ZYBO_Z7_121_171013.png

その後同様にVivado Analyzer を使用して、axi_iic_0 のAXI4 Lite Slave インタフェースをプローブしたところ、波形が表示された。
ZYBO_Z7_122_171013.png

拡大図。
ZYBO_Z7_123_171013.png

カメラ画像の表示は正常になった。
ZYBO_Z7_127_171014.jpg

良かった。。。これで成功した。。。

Debug 用のsystem_ila が入っているので、それを全部削除した。
ブロックデザイン全体を示す。
ZYBO_Z7_124_171013.png

論理合成、インプリメント、ビットストリームの生成を行った。結果を示す。
ZYBO_Z7_125_171013.png
ZYBO_Z7_126_171013.png

この後、カメラ画像を表示してみたがOKだった。問題ない。

しかし、これだとガボール・フィルタも入るな。。。
  1. 2017年10月14日 04:33 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0