FC2カウンター FPGAの部屋 a と b の信号を切り替えるVivado HLSのセレクタ
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

コメント

コメントの投稿


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

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