Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

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

はじめに

いつものように、Google君に質問していたら、見つけした。FPGAの部屋の記事の中で下記のもの。

fpga.blog.jp

Random Stallという機能を使うと、UVMを使うっポイです。

Vitisをやってみた

上記の記事の中の下記のサンプルコードを使いました。。。2つの8ビットのUINTを掛け算して、16ビットのUINTを生成するというものです。

// 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;
}

テストベンチを下記の記事のものを使いました。

marsee101.blog.fc2.com

簡単なテストベンチですね。

#include <string.h>
#include <ap_int.h>

void multi_apuint(ap_uint<8> multi_in0, ap_uint<8> multi_in1,
        ap_uint<16> *multi_out);

int main(){
    using namespace std;

    ap_uint<8> multi_in0;
    ap_uint<8> multi_in1;
    ap_uint<16> multi_out;

    for (multi_in0=0, multi_in1=1; multi_in0<10; multi_in0++, multi_in1++){
        multi_apuint(multi_in0, multi_in1, &multi_out);
        cout << "multi_out = " << multi_out << endl;
        if (multi_out != (multi_in0 * multi_in1))
            return(1);
    }

    return(0);
}

vitis の実行

vitis の実行等は、上記の記事をみてもらって、ここでは生成されたファイルをみてみます。

プロジェクト名は、multi_apunit にしました。プロジェクトを生成したら、

  • multi_apuint

というディレクトリの下に、

が生成されました。hls.app は、下記のような内容でした。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="com.autoesl.autopilot.project" top="">
  <files>
    <file name="multi_apuint.cpp" sc="0" tb="false" cflags="" csimflags=""/>
    <file name="../../testbench_multi_apuint.cpp" sc="0" tb="1" cflags="" csimflags=""/>
  </files>
  <solutions>
    <solution name="solution1" status="active"/>
  </solutions>
  <includePaths/>
  <libraryPaths/>
  <Simulation>
    <SimFlow name="csim"/>
  </Simulation>
</project>

solution1 ディレクトリの下には、

  • directives.tcl
  • script.tcl
  • solution1.aps
  • solution1.directive

というファイルが生成されました。この中で、script.tcl をみてみます。

############################################################
## This file is generated automatically by Vitis HLS.
## Please DO NOT edit it.
## Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
############################################################
open_project multi_apuint
add_files multi_apuint.cpp
add_files -tb testbench_multi_apuint.cpp
open_solution "solution1" -flow_target vivado
set_part {xc7z010iclg225-1L}
create_clock -period 10 -name default
#source "./multi_apuint/solution1/directives.tcl"
csim_design
csynth_design
cosim_design
export_design -format ip_catalog

おわりに

次回以降で、script.tcl 内の下記のコマンド

  • csim_design
  • csynth_design
  • cosim_design

の結果をみてみます。それぞれのコマンドは、VitisのWindowでは、左下の Flow Navigator のところの

  • C SIMULATION => Run C Simulation
  • C SYNTHESIS => Run C Synthesis
  • C/RTL COSIMULATION => Run Cosimulation

というコマンドに相当します。