FC2カウンター FPGAの部屋 AXI4-Stream Switcher IP の製作3(C/RTLコシミュレーションとIP化)

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

FPGAの部屋

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

AXI4-Stream Switcher IP の製作3(C/RTLコシミュレーションとIP化)

AXI4-Stream Switcher IP の製作2(Cシミュレーションと高位合成)”の続き。

前回は、Cシミュレーションと高位合成を行った。今回は、C/RTLコシミュレーションをして、その波形をVivado 2015.1で観察し、IP化を行う。

Run C/RTL Cosimulation ボタンをクリックしてC/RTLコシミュレーションを行う。

Co-simulation Dialog でDump Trace を all に変更した。これは後で、Vivado 2015.1を立ちあげて、波形を観察するためだ。
AXI4_Stream_Switcher_8_150516.png

C/RTLコシミュレーションが終了した。
AXI4_Stream_Switcher_9_150516.png

ここで、高位合成では表示されていなかった Latency と Interval が表示された。同じ値なので、完全にパイプラインされていると思う。

シミュレーション波形を表示するために、Vivado 2015.1 を立ちあげて、tclコンソールに以下のコマンドを入力した。

cd C:/Users/Masaaki/Documents/Vivado_HLS/ZYBO/axis_switcher_2014_4/solution1/sim/verilog
current_fileset
open_wave_database axis_switcher.wdb
open_wave_config axis_switcher.wcfg


波形が表示された。
AXI4_Stream_Switcher_14_150516.png

波形を拡大した。
AXI4_Stream_Switcher_10_150516.png

最初のマーカーから2番めのマーカーまでは、ins0_TDATA のM系列が outs_TDATA に出力されている。
3番目のマーカーから4番目のマーカーまでは、ins1_TDATA の矩形波が outs_TDATA に出力されている。
よって、Switcher としての機能は問題無いと思う。outs の出力を見ても、1クロックごとにデータが出力されている。完全にパイプラインされているようだ。
AXI4_Stream_Switcher_11_150516.png

次の波形を説明する前に、ドライバの xaixs_switcher_hw.h のレジスタのアドレス参照部分を下に示す。

// 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 select_r
//        bit 31~0 - select_r[31:0] (Read/Write)
// 0x1c : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)


0x18 番地が select の値を書き込むレジスタとなっている。それを踏まえて下の波形を見ていこう。
AXI4_Stream_Switcher_12_150516.png
最初の点線のカーソルの所でAXI4 Lite Slave Write アクセスで 0x18 番地に 0 を書いている。つまり、select_r に 0 を入れている。次のAXI4 Lite Slave Write アクセスで、0x00 番地に 1 を書いている。つまり、Control signals レジスタの ap_start ビットに 1 を書いている。
その後、青いカーソルのところで、ins0_TUSER が 1 にアサートされて、M系列の AXI4 Stream がスタートしている。

下の波形では、M系列の AXI4 Stream の終了が青いカーソルで示されている。1450 ns 辺りで AXI4 Lite Slave Read で 0x6 が Read できている。これは、ap_done と ap_idle が 1 ということであり、M系列の AXI4 Stream が終了したことを示している。
AXI4_Stream_Switcher_13_150516.png
次の矩形波の AXI4 Stream を始めるために、点線のカーソルの所でAXI4 Lite Slave Write アクセスで 0x18 番地に 1 を書いている。つまり、select_r に 1 を入れている。次のAXI4 Lite Slave Write アクセスで、0x00 番地に 1 を書いている。つまり、Control signals レジスタの ap_start ビットに 1 を書いている。
次の青いカーソルのところで、ins0_TUSER が 1 にアサートされて、矩形波の AXI4 Stream がスタートしている。

最後に Export RTL ボタンをクリックして IP化を行った。
AXI4_Stream_Switcher_15_150517.png
  1. 2015年05月17日 03:43 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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