KirIn 落書き帳

素人がプログラミング, FPGA, LSIをお勉強しているメモ書きです。間違いがあればご指導していただけたら幸いです。

Vivado HLS 勉強 その0

そろそろ高位合成にも手を出さなければということで、その準備 とりあえずチュートリアルで手を動かします。

参考資料
Vivado Design Suite ユーザー ガイド 高位合成 Vivado Design Suite Tutorial High-Level Synthesis UG871 (v 2014.1) May 6, 2014
ソースコードたち

Create New Project

ダウンロードしたフォルダのug871-design-files\Vivado_HLS_Tutorial\Introduction\lab1ソースコードが入っている。

Create New Projectでウィンドウが開く。

Project名と上記フォルダを指定します。

f:id:KirIn:20160118012751p:plain

RTL化したいファイルを指定し、最上位関数の名前を指定します。

f:id:KirIn:20160118012810p:plain

Testbenchのビヘイビアモデルを記述したファイルを指定します。

f:id:KirIn:20160118012822p:plain

FPGAを指定します。ここではZedboardを指定しておきます。

f:id:KirIn:20160118012834p:plain

次にクロック周期等を設定します。ひとまずクロック周期を5nsにします。

f:id:KirIn:20160118012854p:plain

ソースコードを開く

Explorer > Source > fir.cでソースコードを開く

#include "fir.h"

void fir (
    data_t *y,
    coef_t c[N],
    data_t x
) {

    static data_t shift_reg[N];
    acc_t acc;
    data_t data;
    int i;

    acc=0;
    Shift_Accum_Loop: for (i=N-1;i>=0;i--) {
        if (i==0) {
            shift_reg[0]=x;
            data = x;
        } else {
            shift_reg[i]=shift_reg[i-1];
            data = shift_reg[i];
        }
        acc+=data*c[i];;       
    }
    *y=acc;
}

Derective y, c, xの関数の最上位引数がモジュールのポートになります。

アレイ(x[] shift\reg)やループ(Shift_Accum_Loop)などは右クックすると最適化オプションを選択できます。

Run C Simulation

上のアイコンのRun C Simulationを押して開くダイアログをOKを押す。

*******************************************
PASS: The output matches the golden output!
*******************************************
@I [SIM-1] CSim done with 0 errors.

とConsoleに出ればOK

Run C Syntesis

Cソースコードの合成を行います。

Run C/RTL Cosimulation

CやC++で書かれたテストベンチのデータをHDLシミュレータに入力してシミュレーションを行うようです。

f:id:KirIn:20160118014355p:plain

Open Wave viewer

f:id:KirIn:20160118014316p:plain