FC2カウンター FPGAの部屋 Vivado HLS で PWM モジュールIP を作ってみた2

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

FPGAの部屋

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

Vivado HLS で PWM モジュールIP を作ってみた2

Vivado HLS で PWM モジュールIP を作ってみた”の続き。

PmodHB5インターフェース回路 (PmodHB5_inf) の作成”でPWMモジュールのバグがわかったので、修正を行う。

修正したC ソースコードを示す。なお、引数の渡し方をポインタ渡しから参照渡しに変更した。

// PWMmodule.cpp
// 2016/06/08 by marsee
// PmodHB5のPWM用モジュール
// 100MHzのクロックで2KHz(500us)のPWM出力(最初に500分周する)

#include <ap_int.h>

#define PWM_MAX_VALUE    100
#define PWM_WAIT_CLOCK    500

void pwm(ap_uint<7> sw_late, ap_uint<1> dir,
        volatile ap_uint<1> & pwm_out, ap_uint<1>  & dir_out){
#pragma HLS INTERFACE s_axilite port=dir
#pragma HLS INTERFACE ap_none register port=dir_out
#pragma HLS INTERFACE ap_none register port=pwm_out
#pragma HLS INTERFACE s_axilite port=sw_late
#pragma HLS INTERFACE s_axilite port=return

    dir_out = dir;
    for (int i=1; i<=PWM_MAX_VALUE; i++){
        for (int n=0; n<PWM_WAIT_CLOCK; n++){
#pragma HLS PIPELINE II=1 rewind
            if (sw_late == 0){
                pwm_out = 0;
            } else if(i>=1 && sw_late >= i){
                pwm_out = 1;
            } else if (sw_late < i){
                pwm_out = 0;
            }
        }
    }
}


テストベンチも参照渡しに変更した。

// PWMmodule_tb.cpp
// 2016/06/08 by marsee
// PWMmodule用テストベンチ
//

#include <ap_int.h>

void pwm(ap_uint<7> sw_late, ap_uint<1> dir,
        volatile ap_uint<1> & pwm_out, ap_uint<1>  & dir_out);

int main(){
    ap_uint<1> pwm_out;
    ap_uint<1> dir_out;

    pwm(00, pwm_out, dir_out);
    pwm(501, pwm_out, dir_out);
    pwm(1000, pwm_out, dir_out);

    return 0;
}


これで、C コードの合成を行った。結果を示す。
PWMmodule_6_160624.png

FFが 8 個増えていた。

C/RTLコシミュレーションを行った。
PWMmodule_7_160624.png

Latency も Interval も増えている。

C/RTLコシミュレーションの波形を示す。
PWMmodule_8_160624.png

PWMmodule_9_160624.png

PWM 1回の幅は500.39 us だった。前回よりも 70 ns 増えていたが、このくらいは問題ないと思う。
  1. 2016年06月24日 05:20 |
  2. Zybot
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/3500-7d2991ea
この記事にトラックバックする(FC2ブログユーザー)