FPGAの部屋 2020年09月11日
FC2ブログ

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

FPGAの部屋

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

Vivado HLS 2020.1 vs Vitis HLS 2020.1 その4 (AXI4 Lite インターフェースの Slave 機能)

Vivado HLS 2020.1 vs Vitis HLS 2020.1 その3 (C/RTL 協調シミュレーション、Export RTL)”の続き。

簡単な乗算回路で、Vitis HLS 2020.1 と Vivado HLS 2020.1 を比較することにした。ということで、前回は C/RTL 協調シミュレーションと Export RTL を比較した。今回は、AXI4 Lite インターフェースの Slave 機能を比較してみよう。

今回のソースコードは C コード部分では前回と同じだが、INTERFACE 指示子のオプションを s_axilite にすることで、AXI4 Lite インターフェースの Slave にする。
multi_apuint.cpp を示す。

// multi_apuint.cpp

#include <ap_int.h>

void multi_apuint(ap_uint<8> multi_in0, ap_uint<8> multi_in1,
        ap_uint<16> *multi_out){
#pragma HLS INTERFACE s_axilite port=multi_out
#pragma HLS INTERFACE s_axilite port=multi_in1
#pragma HLS INTERFACE s_axilite port=multi_in0
#pragma HLS INTERFACE s_axilite port=return
    *multi_out = multi_in0 * multi_in1;
}


Vitis HLS 2020.1
Vitis_HLS_vs_Vivado_HLS_64_200911.png

Vivado HLS 2020.1
Vitis_HLS_vs_Vivado_HLS_65_200911.png


C コードの合成を行った。リソース使用量は Vivado HLS の方が少ない。

Vitis HLS 2020.1
Vitis_HLS_vs_Vivado_HLS_68_200911.png

Vivado HLS 2020.1
Vitis_HLS_vs_Vivado_HLS_69_200911.png


生成された Verilog HDL ファイルを比較してみよう。

Vitis HLS 2020.1
Vitis_HLS_vs_Vivado_HLS_70_200911.png

multi_apuint.v, multi_apuint_control_s_axi.v, multi_apuint_mul_8ns_8ns_16_1_1.v の 3 このファイルが合成されている。
AXI4 Lite インターフェースの信号名に s_axi_control_ が付けられている。

Vivado HLS 2020.1
Vitis_HLS_vs_Vivado_HLS_71_200911.png

multi_apuint.v, multi_apuint_AXILiteS_s_axi.v の 2 このファイルが合成されている。
AXI4 Lite インターフェースの信号名に s_axi_AXILiteS_ が付けられている。


AXI4 Lite インターフェースのアドレスマップを比較する。

Vitis HLS 2020.1

//------------------------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  - enable ap_done interrupt (Read/Write)
//        others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
//        bit 0  - ap_done (COR/TOW)
//        others - reserved
// 0x10 : Data signal of multi_in0
//        bit 31~0 - multi_in0[31:0] (Read/Write)
// 0x14 : reserved
// 0x18 : Data signal of multi_in1
//        bit 31~0 - multi_in1[31:0] (Read/Write)
// 0x1c : reserved
// 0x20 : Data signal of multi_out_i
//        bit 31~0 - multi_out_i[31:0] (Read/Write)
// 0x24 : reserved
// 0x28 : Data signal of multi_out_o
//        bit 31~0 - multi_out_o[31:0] (Read)
// 0x2c : Control signal of multi_out_o
//        bit 0  - multi_out_o_ap_vld (Read/COR)
//        others - reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)


Vivado HLS 2020.1

/------------------------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 multi_in0_V
//        bit 7~0 - multi_in0_V[7:0] (Read/Write)
//        others  - reserved
// 0x14 : reserved
// 0x18 : Data signal of multi_in1_V
//        bit 7~0 - multi_in1_V[7:0] (Read/Write)
//        others  - reserved
// 0x1c : reserved
// 0x20 : Data signal of multi_out_V
//        bit 15~0 - multi_out_V[15:0] (Read)
//        others   - reserved
// 0x24 : Control signal of multi_out_V
//        bit 0  - multi_out_V_ap_vld (Read/COR)
//        others - reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake


アドレスが異なる。Vitis HLS では信号名に _V が付かなくなったようだ。

Export RTL の結果を比較する。

Vitis HLS 2020.1
Vitis_HLS_vs_Vivado_HLS_66_200911.png

DSP が 1 個だけなのはなぜだろうか?

Vivado HLS 2020.1
Vitis_HLS_vs_Vivado_HLS_67_200911.png

やはり DSP が 1 個だけだ。


これでは AXI4 Lite インターフェースの Slave 機能が消えているとしか思えない。 2020.1 のバグか?

それでは、同じソースコードで Vivado HLS 2019.2 で C コード合成を行ってから、Export RTL をやってみた。
Vitis_HLS_vs_Vivado_HLS_72_200911.png

LUT 、 FF が使われている。 Vivado HLS 2019.2 は大丈夫そうだ。
  1. 2020年09月11日 04:19 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0