FC2カウンター FPGAの部屋 Vivado HLS 2014.4 でディスプレイ・コントローラを作る3(実機でテスト)

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

FPGAの部屋

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

Vivado HLS 2014.4 でディスプレイ・コントローラを作る3(実機でテスト)

Vivado HLS 2014.4 でディスプレイ・コントローラを作る2(RTLシミュレーション)”の続き。

前回、RTLシミュレーションをして、display_cont_sub も1フレーム終了しても、次のフレームを実行することが分かった。今回は、実際にZYBOでVGAポートに画像を表示させた。

まずは、ZYBOのVGAポートは red が 5 ビット長、green が 6 ビット長、blue が 5 ビット長なので、それに合わせるために、 disp_cont_top.v を作製した。disp_cont_top.v を下に示す。

//
// disp_cont_top.v
// 15/06/07 by marsee
//

`default_nettype none

module disp_cont_top (
    input    wire            clk,
    input    wire            reset,
    output    wire    [4:0]    vga_red,
    output    wire    [5:0]    vga_green,
    output    wire    [4:0]    vga_blue,
    output    wire            vga_hsync,
    output    wire            vga_vsync
);
    wire    [7:0]    red;
    wire    [7:0]    green;
    wire    [7:0]    blue;

    display_cont_sub display_cont_i (
        .ap_clk(clk),
        .ap_rst(reset),
        .red_V(red),
        .green_V(green),
        .blue_V(blue),
        .display_enable_V(),
        .hsyncx_V(vga_hsync),
        .vsyncx_V(vga_vsync)
    );

    assign vga_red = red[7:3];
    assign vga_green = green[7:2];
    assign vga_blue = blue[7:3];
endmodule

`default_nettype wire


Zドライブの IP_test フォルダの下に、disp_cont_top フォルダを作って、disp_cont_top をIP化した。
HLS_Disp_Cont_18_150607.png

次に、ZドライブにHLS_disp_cont_151 プロジェクト(Vivado 2015.1)を作って、IP化した disp_cont_top を使ってブロックデザインを作った。今回はZYBOのPLのみで処理を行う。PSは使用しない。
ZYBOは125MHzのクロックがPL部に供給されているので、それを使用した。125MHzのクロックは Clocking Wizard に入って、40MHz のピクセル・クロックに変換される。それを disp_cont_top に供給する。Clocking Wizard のreset はBTN0 に接続されている。
util_vector_logic_0 は clk_wiz_0 のlocked をdisp_cont_top のreset と使用するために極性を反転している。
HLS_Disp_Cont_19_150607.png

Digilent社の制約ファイルのリファレンス ZYBO_Master.xdc を一部引用して、制約ファイル HLS_disp_cont.xdc を作製した。HLS_disp_cont.xdc を下に示す。

set_property PACKAGE_PIN L16 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
create_clock -add -name sys_clk_pin -period 8.00 -waveform {0 4} [get_ports clk]

set_property IOSTANDARD LVCMOS33 [get_ports {vga_blue[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_blue[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_blue[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_blue[0]}]
set_property PACKAGE_PIN J18 [get_ports {vga_blue[3]}]
set_property PACKAGE_PIN K19 [get_ports {vga_blue[2]}]
set_property PACKAGE_PIN M20 [get_ports {vga_blue[1]}]
set_property PACKAGE_PIN P20 [get_ports {vga_blue[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_blue[4]}]
set_property PACKAGE_PIN G19 [get_ports {vga_blue[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_green[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_green[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_green[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_green[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_green[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_green[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_red[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_red[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_red[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_red[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_red[0]}]
set_property PACKAGE_PIN F20 [get_ports {vga_green[5]}]
set_property PACKAGE_PIN H20 [get_ports {vga_green[4]}]
set_property PACKAGE_PIN J19 [get_ports {vga_green[3]}]
set_property PACKAGE_PIN L19 [get_ports {vga_green[2]}]
set_property PACKAGE_PIN N20 [get_ports {vga_green[1]}]
set_property PACKAGE_PIN H18 [get_ports {vga_green[0]}]
set_property PACKAGE_PIN F19 [get_ports {vga_red[4]}]
set_property PACKAGE_PIN G20 [get_ports {vga_red[3]}]
set_property PACKAGE_PIN J20 [get_ports {vga_red[2]}]
set_property PACKAGE_PIN L20 [get_ports {vga_red[1]}]
set_property PACKAGE_PIN M19 [get_ports {vga_red[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports vga_hsync]
set_property IOSTANDARD LVCMOS33 [get_ports vga_vsync]
set_property PACKAGE_PIN P19 [get_ports vga_hsync]
set_property PACKAGE_PIN R19 [get_ports vga_vsync]

# btn[0]
set_property PACKAGE_PIN R18 [get_ports reset]
set_property IOSTANDARD LVCMOS33 [get_ports reset]


論理合成、インプリメント、ビットストリームの生成を行って、成功した。
HLS_Disp_Cont_20_150607.png

Hardware Manager で ZYBO のPL部をコンフィギュレーションした。
HLS_Disp_Cont_21_150607.png

ディスプレイに予定通りの表示が出た。
HLS_Disp_Cont_22_150607.jpg

これで、Vivado HLS 2014.4 でディスプレイ・コントローラを作製することが出来た。
しかし、ディスプレイ・コントローラはHDLで書いたほうがずっと楽だと思う。
  1. 2015年06月07日 05:55 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:2

コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます
  1. 2017/08/19(土) 09:46:44 |
  2. |
  3. #
  4. [ 編集 ]

この時は、Vivado HLSでIPするのではなく、Cコードの合成で作成されたVerilog HDLコードをそのまま使用してIP化を行いました。正規の手順ではないですが、合成されたVerilog HDLを生のまま使用しています。前のブログを参照されると分かると思います。
http://marsee101.blog19.fc2.com/blog-entry-3173.html
  1. 2017/08/19(土) 11:40:04 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


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

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