FC2カウンター FPGAの部屋 Zybot のモーターの回転数と回転方向を取得する2(HDLシミュレーションにVivado HLS を使用する1)
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

コメント

コメントの投稿


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

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