FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Vivado 2015.4 HLSを試す(Interface Synthesis Lab 2)

Interface Synthesis Lab 2: Port I/O Protocolをやっていこう。

http://www.xilinx.com/support/documentation/sw_manuals/xilinx2013_1/ug871-vivado-high-level-synthesis-tutorial.pdf

Step1. Create and Open the Project

まずは、CUIでvivadoを起動してシミュレーションを実行する。

vivado_hls -f run_hls.tcl
...
@I [APCC-3] Tmp directory is apcc_db
@I [APCC-1] APCC is done.
   Generating csim.exe
  10+20+30=60
  20+30+40=90
  30+40+50=120
  40+50+60=150
  50+60+70=180
----------Pass!------------
...

次に、GUIを立ち上げる。

vivado_hls -p adders_io_prj

ソースコード的には、以下のようになっている。

void adders_io(int in1, int in2, int *in_out1) {

    *in_out1 = in1 + in2 + *in_out1;
    

}

f:id:msyksphinz:20151205010933p:plain

現状でコンパイルすると、どのようになるだろう?

input   ap_clk;
input   ap_rst;
input   ap_start;
output   ap_done;
output   ap_idle;
output   ap_ready;
input  [31:0] in1;
input  [31:0] in2;
input  [31:0] in_out1_i;
output  [31:0] in_out1_o;
output   in_out1_o_ap_vld;

制御信号の全く存在しないインタフェースになった。これをいろいろ改造していこう。

Step2. Specify the I/O Protocol for Ports

DIRECTIVEを変更していこう。modeに、ap_vldを変更して、"ap_vld"を設定する。

f:id:msyksphinz:20151205011534p:plain

以降、in2, in_out1にも同様のディレクティブを設定していく。

############################################################
## This file is generated automatically by Vivado HLS.
## Please DO NOT edit it.
## Copyright (C) 2015 Xilinx Inc. All rights reserved.
############################################################
set_directive_interface -mode ap_vld "adders_io" in1
set_directive_interface -mode ap_ack "adders_io" in2
set_directive_interface -mode ap_hs "adders_io" in_out1

これをSynthesizeするとどうなるかな。

input   ap_clk;
input   ap_rst;
input   ap_start;
output   ap_done;
output   ap_idle;
output   ap_ready;
input  [31:0] in1;
input   in1_ap_vld;
input  [31:0] in2;
output   in2_ap_ack;
input  [31:0] in_out1_i;
input   in_out1_i_ap_vld;
output   in_out1_i_ap_ack;
output  [31:0] in_out1_o;
output   in_out1_o_ap_vld;
input   in_out1_o_ap_ack;

インタフェースが変更された。