FC2カウンター FPGAの部屋 Ultra96用PMOD拡張ボードのPMOD端子のテストのために8ビットカウンタのLチカを作る
FC2ブログ

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

FPGAの部屋

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

Ultra96用PMOD拡張ボードのPMOD端子のテストのために8ビットカウンタのLチカを作る

Ultra96拡張ボードのPMOD端子のテストのために8ビットカウンタを作って2つのPMOD端子の 8 ビットに出力して出力できるかを見たい。

やはり、Vivado HLS 2018.2 で作ってみようと思う。8 ビットカウンタの最下位ビットは 4 HzでLチカして、最上位ビットは32秒間隔でLチカするようにしてみよう。そうすれば隣のピンとの接触も分かるに違いない。

Vivado HLS 2018.2 を使用して、ex_board_test プロジェクトを作成した。
Ultra96_ext_board_20_180804.png

ex_board_test.cpp を貼っておく。

// ex_board_test.cpp
// 2018/08/04 by marsee
// 1MHzのクロックを分周してoutcに上8ビットを割り当て
// 一番下は4Hz、一番上は1/32Hz

#include <ap_int.h>

void ex_board_test(ap_uint<8> &outc){
//#pragma HLS INTERFACE ap_ctrl_none port=return
#pragma HLS INTERFACE ap_none port=outc
    unsigned int i;

    for(i=0; i<33554432; i++){
        outc = i>>17;
    }
}


どうしてこの値になったか?というと、1MHz は 1000000 Hz なので、それを超えて一番近い 16 進数でぴったりの数は 0x100000 = 1,048,576(10進数)である。なので、ここを基準として、3 ビット分は 4 Hz , 2 Hz , 1 Hz なので 0x20 を掛けて、0x2000000 = 33,554,432(10進数)とした。(1 Hz は 0 → 1 で 1 セット)
Ultra96_ext_board_25_180804.png

次にテストベンチを示す。

// ex_board_test_tb.cpp
// 2018/08/04 by marsee
//

#include <ap_int.h>

void ex_board_test(ap_uint<8> &outc);

int main(){
    ap_uint<8> outc;

    ex_board_test(outc);

    printf("outc = %x\n", (unsigned int)outc);

    return(0);
}


C シミュレーションを行った。
Ultra96_ext_board_21_180804.png

outc = ff でこれで良いはず。

C コードの合成を行った。
Ultra96_ext_board_22_180804.png

Timing のTarget は 1000 ns だったが、Estimated は 1.133 ns で全く問題ない。
Latency は 33,554,433 で 1 クロック多いだけだった。
リソース使用量は FF が 28 個、LUT が 77 個だった。

C/RTL 協調シミュレーションを行った。
Ultra96_ext_board_23_180804.png

Latency は 33,554,433 だった。

C/RTL 協調シミュレーション波形を示す。
Ultra96_ext_board_24_180804.png

0x90 と 0x91 の間隔は 262 ms 程度で 4 Hz になっている。これで予定通りだ。

次に、

#pragma HLS INTERFACE ap_ctrl_none port=return

のコメントを外した。これは、この回路をフリーランさせたいためだ。
Ultra96_ext_board_26_180804.png

C コードの合成を行った。
Ultra96_ext_board_27_180804.png

コメントを外す前と同じだった。
合成されたVHDL ファイルを示す。

entity ex_board_test is
port (
    ap_clk : IN STD_LOGIC;
    ap_rst : IN STD_LOGIC;
    outc_V : OUT STD_LOGIC_VECTOR (7 downto 0) );
end;


ap_clk と ap_rst、そして出力 8 ビットの outc があるのが分かる。

Export RTLを行った。なお、Vivado synthesis, place and route にチェックを入れてある。
Ultra96_ext_board_28_180804.png

LUT が 12 個、FF が 28 個だった。CP achieved post-implementation が 1.753 ns で全く問題ない。
  1. 2018年08月04日 20:42 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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