FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

Vivado 2015.4 HLSを試す(Chap.4 Interface Synthesis)

Vivado HLSのチュートリアルを進めていこう。次はInterface Synthesis(Chapter-4)だ。

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

ソースコードのシミュレーション(Cレベル)

まずは、Cソースコードでシミュレーションをしてみる。

vivado_hls -f run_hls.tcl
...
   Generating csim.exe
  10+20+30=60
  20+30+40=90
  30+40+50=120
  40+50+60=150
  50+60+70=180
----------Pass!------------
@I [SIM-1] CSim done with 0 errors.

次に、GUIを立ち上げて、プロジェクトを確認する。

vivado_hls -p adders_prj

f:id:msyksphinz:20151203003052p:plain

まずは、adder.cを開く。 あれ、良く見てみると既にプラグマが付加されている??

int adders(int in1, int in2, int in3) {
#pragma HLS INTERFACE ap_ctrl_none port=return

// Prevent IO protocols on all input ports
#pragma HLS INTERFACE ap_none port=in3
#pragma HLS INTERFACE ap_none port=in2
#pragma HLS INTERFACE ap_none port=in1
...

f:id:msyksphinz:20151203003403p:plain

次に、[Solution]→[Run C Synthesis]→[Active Solution]を選択する。

合成の結果から、[Interface]を参照してみよう。

f:id:msyksphinz:20151203004011p:plain

やはり、信号が削除されている。では、このプラグマを除去するとどうなるだろう?

int adders(int in1, int in2, int in3) {
// #pragma HLS INTERFACE ap_ctrl_none port=return

// Prevent IO protocols on all input ports
#pragma HLS INTERFACE ap_none port=in3
#pragma HLS INTERFACE ap_none port=in2
#pragma HLS INTERFACE ap_none port=in1
...

f:id:msyksphinz:20151203005309p:plain

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