FC2カウンター FPGAの部屋 2019年06月18日
FC2ブログ

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

FPGAの部屋

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

Zybot のモーターの回転数と回転方向を取得する2(HDLシミュレーションにVivado HLS を使用する1)

Zybot のモーターの回転数と回転方向を取得する1”の続き。

HDL を作成したら次はHDL シミュレーションだが、HDL シミュレーションもSA, SB のタイミングを作成する回路をVivado HLS で作ったら、とっても便利なんじゃない?ということで、作ってみた。

作成した Vivado HLS 2019.1 の rot_sim プロジェクトを示す。
rot_sim_1_190618.png

rot_sim.cpp を示す。

// rot_sim.cpp
// 2019/06/15 by marsee
//

#include <ap_int.h>
#include "ap_utils.h"

#define WAIT_COUNT  10

int rot_sim(ap_uint<1> rev, volatile ap_uint<1> &sa, volatile ap_uint<1> &sb){
#pragma HLS INTERFACE ap_none port=sb
#pragma HLS INTERFACE ap_none port=sa
    if(rev == 0){ // Normal rotation
        sa = 0; sb = 0;
        ap_wait_n(WAIT_COUNT);
        sa = 1; sb = 0;
        ap_wait_n(WAIT_COUNT);
        sa = 1; sb = 1;
        ap_wait_n(WAIT_COUNT);
        sa = 0; sb = 1;
        ap_wait_n(WAIT_COUNT);
    }else{
        sa = 0; sb = 0;
        ap_wait_n(WAIT_COUNT);
        sa = 0; sb = 1;
        ap_wait_n(WAIT_COUNT);
        sa = 1; sb = 1;
        ap_wait_n(WAIT_COUNT);
        sa = 1; sb = 0;
        ap_wait_n(WAIT_COUNT);
    }
    return(0);
}


なお、ap_wait_n() は初めて使ったと思うが、”Vivado Design Suite ユーザーガイド 高位合成 UG902 (v2018.3) 2018 年 12 月 20 日”の 90 ページに書いてある。ap_wait_n() を使用すると複数のクロックサイクルの wait を挿入できる。

テストベンチの rot_sim_tb.cpp を示す。これは、SA, SB の極性を変えて、2 回 rot_sim() を呼び出す。

// rot_sim_tb.cpp
// 2019/06/15 by marsee
//

#include <ap_int.h>

int rot_sim(ap_uint<1> rev, ap_uint<1> &sa, ap_uint<1> &sb);

int main(){
    ap_uint<1> sa, sb;

    rot_sim(0, sa, sb);
    rot_sim(1, sa, sb);

    return(0);
}

  1. 2019年06月18日 04:59 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0