FC2カウンター FPGAの部屋 Vivado HLSの高位合成結果をHDLとして利用する2(ap_ctrl_none)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vivado HLSの高位合成結果をHDLとして利用する2(ap_ctrl_none)

Vivado HLSの高位合成結果をHDLとして利用する1(準備編)”の続き。

今回は、ap_ctrl_none を利用して、よりHDLソースコードとして使えるようにしていく。使用するVivado HLS のバージョンは 2014.4 だ。
ブロックレベルのインターフェースを ap_ctrl_none にすると、ap_start, ap_idle, ap_ready, ap_done 信号が無くなって、よりHDLソースコードとして利用しやすくなる。

さて、handshake_test を ap_ctrl_none に設定しよう。
右のウインドウのDirective タブをクリックして、handshake_test を右 クリックし、Insert Directive を選択する。
C2HDL_7_150519.png

Vivado HLS Directive Editor が表示される。
Directive をINTERFACE に、Destination を Source File に(これは、Cソースコードにディレクティブを入れるためだ)、Options の mode で ap_ctrl_none を選択する。
C2HDL_8_150519.png

Cソースコードに

#pragma HLS INTERFACE ap_ctrl_none port=return

が挿入された。
C2HDL_9_150519.png

次に、cntout 出力のインターフェースをデフォルトの ap_vld から ap_none に変更しよう。これは、組み合わせ回路で、すぐに出力が出るので、vld のポートが要らないためだ。

右のウインドウの Directive タブで、cntout を右クリックして、Insert Directive を選択する。

Vivado HLS Directive Editor が表示される。
Directive をINTERFACE に、Destination を Source File に(これは、Cソースコードにディレクティブを入れるためだ)、Options の mode で ap_none を選択する。
C2HDL_10_150519.png

同様に、デフォルトではあるが、あえて明示するために、cntin も ap_none に指定した。
C2HDL_11_150519.png

Cソースコードは下の図の様になった。
C2HDL_12_150519.png

現在の handshake_test.cpp を下に示す。

//
// handshake_test.cpp
// 2015/05/17
// by marsee
//

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

void handshake_test(ap_int<8> cntin, ap_int<8> *cntout){
#pragma HLS INTERFACE ap_none port=cntin
#pragma HLS INTERFACE ap_none port=cntout
#pragma HLS INTERFACE ap_ctrl_none port=return
    *cntout = cntin+1;
}


これで、高位合成を行った。
C2HDL_13_150519.png

高位合成結果の Verilog HDLコードを見ると、、ap_start, ap_idle, ap_ready, ap_done 信号が無くなっているのが分かる。

// ==============================================================
// RTL generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
// Version: 2014.4
// Copyright (C) 2014 Xilinx Inc. All rights reserved.
// 
// ===========================================================

`timescale 1 ns / 1 ps 

(* CORE_GENERATION_INFO="handshake_test,hls_ip_2014_4,{HLS_INPUT_TYPE=cxx,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=1,HLS_INPUT_PART=xc7z010clg400-1,HLS_INPUT_CLOCK=10.000000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=1.720000,HLS_SYN_LAT=0,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DSP=0,HLS_SYN_FF=0,HLS_SYN_LUT=8}" *)

module handshake_test (
        cntin_V,
        cntout_V
);

parameter    ap_true = 1'b1;
parameter    ap_const_lv8_1 = 8'b1;
parameter    ap_const_logic_1 = 1'b1;
parameter    ap_const_logic_0 = 1'b0;

input  [7:0] cntin_V;
output  [7:0] cntout_V;




assign cntout_V = (cntin_V + ap_const_lv8_1);


endmodule //handshake_test


  1. 2015年05月20日 04:45 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/3157-973248e3
この記事にトラックバックする(FC2ブログユーザー)