FC2カウンター FPGAの部屋 Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製10(IPの更新)
FC2ブログ

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

FPGAの部屋

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

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製10(IPの更新)

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製9(False Pathの設定)”の続き。

IP Integrator でIPを接続して回路を作っているが、自作カスタムIP自体の回路を変更したいときに、自作カスタムIPのブロジェクトでIPを再生成しても、すでに作製済みのIP Integrator のBlock Design では変更されていなかった。自作カスタムIP自体の回路を変更した時に、すでに作製済みのIP Integrator のBlock Design に反映させる方法を探ってみた。

具体的には、”Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製8(Propertiesの検証)”で、HDMI関係の信号は、出力のレジスタの論理が複雑だからか?”IOB=FORCE”になっていてもIOBのレジスタにマップされていなかった。video_out_zed プロジェクトを立ちあげて、video_out_zed.v のHDMI関連信号の出力ポートを wire から reg に変更してFFを付加したが、IPを再生成してから、CamD_VDMAを再度論理合成、インプリメントしても同じ状況だった。video_out_zed.v の変更点を下に示す。

// XPS のIP、v_axi4s_vid_out のVideo出力を受けてVGAポートとHDMI出力に出力する
// video_out_zed.v
// 2013/06/09
//

`default_nettype none

module video_out_zed # (
    parameter  VIDEO_DATA_WIDTH = 24
) (
    input    wire    pixclk,            // pixel clock
    input    wire    aresetn,        // AXI reset
    input    wire    video_de,    // data enable
    input    wire    video_hsync,
    input    wire    video_vsync,
    input    wire    video_vblank,
    input    wire    video_hblank,
    input    wire    [VIDEO_DATA_WIDTH-1:0]    video_data,

    (* IOB = "FORCE" *) output    reg     [3:0]    vga_red,
    (* IOB = "FORCE" *) output    reg     [3:0]    vga_green,
    (* IOB = "FORCE" *) output    reg     [3:0]    vga_blue,
    (* IOB = "FORCE" *) output    reg        vga_hsync,
    (* IOB = "FORCE" *) output    reg        vga_vsync,

    output    wire    hdmi_clk,    // 下のモジュールで ODDR プリミティブを宣言してあるので、wire宣言のままとした
    (* IOB = "FORCE" *) output    reg     hdmi_vsync,
    (* IOB = "FORCE" *) output    reg     hdmi_hsync,
    (* IOB = "FORCE" *) output    reg     hdmi_data_e,
    (* IOB = "FORCE" *) output    reg     [15:0]    hdmi_data
);

    reg        reset_1b, reset;
    reg        [7:0]    red, green, blue;
    reg        hsyncx, vsyncx;
    wire    hdmi_vs, hdmi_hs;
    wire    hdmi_de;
    wire    [15:0]    hdmi_d;

// 途中は略

    always @(posedge pixclk) begin
       if(reset) begin
            hdmi_vsync    <= 1'b1;
            hdmi_hsync    <= 1'b1;
            hdmi_data_e <= 1'b0;
            hdmi_data    <= 16'd0;
       end else begin
            hdmi_vsync    <= hdmi_vs;
            hdmi_hsync    <= hdmi_hs;
            hdmi_data_e    <= hdmi_de;
            hdmi_data    <= hdmi_d;
       end
    end

endmodule

`default_nettype wire


つまり、IOポートの宣言の所で、wire 宣言だったHDMI関連の出力信号を reg 宣言にして、Flip Flopを記述したわけだ。これで、インプリメントしたつもりが、以前と同様の回路になってしまっていたわけだ。
Cam_VDMA_110_140120.png

さて、自作カスタムIPの回路を修正して、すでに作製済みのIP Integrator のBlock Design に反映させる方法を紹介しよう。うまくいくかどうか分からなかったため、要点だけの画面キャプチャとなっているので、ご了承願いたい。

・まずは、Sourcesウインドウから CamD_VDMA_i のDiagram を起動する。(IP Integrator)

・video_out_zed_0 を選択して、右クリックし、右クリックメニューから Edit IP Packager を選ぶ。
Cam_VDMA_119_140121.png

・video_out_zedプロジェクトに、video_out_zed_v1_0_projectを作製するというダイアログが出てくる。確かOKボタンをクリックした。

・もう1つ、video_out_zed プロジェクトの Vivado 2013.4が立ちあげて、IPを編集することが出来た。
Cam_VDMA_120_140121.png

・HDLソースを修正して、Review and Package で Re-Package IP ボタンをクリックした。
Cam_VDMA_121_140121.png

・video_out_zed 自作カスタムIPが再度生成されたようだ。確か、video_out_zed_v1_0_projectのVivado 2013.4 は自動的に閉じられたと思う。

・これで、CamD_VDMAプロジェクトに戻って、論理合成、インプリメントを行うと、video_out_zed.v の変更内容が反映されていた。

下に、hdmi_data[0]ポートを示す。OLOGICにレジスタがマップされているのがわかる。
Cam_VDMA_122_140122.png

OLOGIC にマップされている hdmi_data_reg[0] のプロパティを見ると、FORCE 属性が設定されているのが見える。
Cam_VDMA_123_140122.png

Vivado 2013.4 では、IOBの FORCE 属性は付加することはできるが、IOポートの信号の宣言が wire の場合は効かない気がする。因みに、PlanAhead で作ったカメラ表示回路では、IOポートの信号の宣言が wire の場合でもOLOGIC にレジスタがマップされていた。

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製11(ハードウェアのエクスポート)”の続く。
  1. 2014年01月22日 04:45 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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