はじめに
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の両方のコードが生成されています。
- misc
- verilog
misc/logo.png
- 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
syn ディレクトの下には、以下のようなディレクトリが生成されています。Verilog HDLとVHDLのコードは、impl ディレクトリと同じもののようです。
- report
- verilog
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
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
で生成されるファイルをみてみます。