Vengineerの妄想

人生を妄想しています。

Xilinx Vitis の中を調べる(その3)

はじめに

Xilinx Vitis の中を調べるのその3。

今回は、

  • C SYNTHESIS => Run C Synthesis

を実行した時の生成ファイルをみていきます。

C SYNTHESIS => Run C Synthesis で生成されたファイル

Project => Project Setting => Synthesis にて、Top Function に、multi_apuint を設定し、OK。C SYNTHESIS => Run C Synthesisを実行

impl ディレクトの下には、以下のようなディレクトリが生成されています。Verilog HDLとVHDLの両方のコードが生成されています。

syn ディレクトの下には、以下のようなディレクトリが生成されています。Verilog HDLとVHDLのコードは、impl ディレクトリと同じもののようです。

  • report
  • verilog
  • vhdl

  • report/csynth.rpt

  • report/csynth.xml
  • report/multi_apuint_csynth.rpt
  • report/multi_apuint_csynth.xml
  • verilog/multi_apuint.v
  • verilog/multi_apuint_mul_8ns_8ns_16_1_1.v
  • verilog/multi_apuint_regslice_forward.v
  • vhdl/multi_apuint.vhd
  • vhdl/multi_apuint_mul_8ns_8ns_16_1_1.vhd
  • vhdl/multi_apuint_regslice_forward.vhd

  • report/csynth.rpt は、Synthesis Summary Report of 'multi_apuint'

  • report/multi_apuint_csynth.rpt は、Vitis HLS Report for 'multi_apuint'

multi_apuint_csynth.rpt の最後に、Interface の情報があります。

================================================================
== Interface
================================================================
* Summary:
+------------------+-----+-----+------------+--------------+--------------+
|     RTL Ports    | Dir | Bits|  Protocol  | Source Object|    C Type    |
+------------------+-----+-----+------------+--------------+--------------+
|ap_clk            |   in|    1|  ap_ctrl_hs|  multi_apuint|  return value|
|ap_rst            |   in|    1|  ap_ctrl_hs|  multi_apuint|  return value|
|ap_start          |   in|    1|  ap_ctrl_hs|  multi_apuint|  return value|
|ap_done           |  out|    1|  ap_ctrl_hs|  multi_apuint|  return value|
|ap_idle           |  out|    1|  ap_ctrl_hs|  multi_apuint|  return value|
|ap_ready          |  out|    1|  ap_ctrl_hs|  multi_apuint|  return value|
|multi_in1_ap_vld  |   in|    1|       ap_hs|     multi_in1|        scalar|
|multi_in1         |   in|    8|       ap_hs|     multi_in1|        scalar|
|multi_in1_ap_ack  |  out|    1|       ap_hs|     multi_in1|        scalar|
|multi_in0_ap_vld  |   in|    1|       ap_hs|     multi_in0|        scalar|
|multi_in0         |   in|    8|       ap_hs|     multi_in0|        scalar|
|multi_in0_ap_ack  |  out|    1|       ap_hs|     multi_in0|        scalar|
|multi_out_ap_ack  |   in|    1|       ap_hs|     multi_out|       pointer|
|multi_out         |  out|   16|       ap_hs|     multi_out|       pointer|
|multi_out_ap_vld  |  out|    1|       ap_hs|     multi_out|       pointer|
+------------------+-----+-----+------------+--------------+--------------+

これらの Interface は、multi_apuint.cpp の中の下記のような pragma で指定されたものに依存するんでしょうね。

  • HLS INTERFACE ap_hs
// 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 PIPELINE
#pragma HLS INTERFACE ap_hs register port=multi_out
#pragma HLS INTERFACE ap_hs register port=multi_in1
#pragma HLS INTERFACE ap_hs register port=multi_in0
    *multi_out = multi_in0 * multi_in1;
}

おわりに

次回は、

  • C/RTL COSIMULATION => Run Cosimulation

で生成されるファイルをみてみます。