FC2カウンター FPGAの部屋 2014年01月20日
FC2ブログ

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

FPGAの部屋

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

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製8(Propertiesの検証)

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製7(インプリメント)”の続き。

今回は、HDLに記述した制約(Properties)がどうなっているか検証した。

Propertiesは、IOブロックのレジスタに割り当てたいレジスタを下のVerilog HDL記述のように書いてある。つまり、ポート宣言の前に、”(* IOB = "FORCE" *)”を追加してあるのだ。

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,

    (* IOB = "FORCE" *) output    wire    hdmi_clk,
    (* IOB = "FORCE" *) output    wire    hdmi_vsync,
    (* IOB = "FORCE" *) output    wire    hdmi_hsync,
    (* IOB = "FORCE" *) output    wire    hdmi_data_e,
    (* IOB = "FORCE" *) output    wire    [15:0]    hdmi_data
);


この記述は、Vivado でも大丈夫かもしれないということでインプリメントを行った。しかし、”Vivado Design Suite Properties Reference Guide UG912 (v2013.4) December 20, 2013”には、IOB = TRUEとIOB=FALSE(94ページ)しか載っていなかった。果たして大丈夫なのかと思っていたのだが、大丈夫だったみたいだ。
下に、vga_blue_reg[0] を示す。IOBはFORCE 属性が付いていて、OLOGICのレジスタに割り当てられていた。
Cam_VDMA_109_140120.png

だが、HDMI関係の信号は、出力のレジスタの論理が複雑だからか?”IOB=FORCE”になっていてもIOBのレジスタにマップされていなかった。
Cam_VDMA_110_140120.png

HDMI関係の出力信号は、output wire で宣言してあるからかもしれない。output reg で宣言して見ようと思う。

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製9(False Pathの設定)”に続く。
  1. 2014年01月20日 18:43 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製7(インプリメント)

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製6(配置制約)”の続き。

今回は、論理合成、インプリメント、ビットストリームの生成を行った。

・Flow Navigator のProgram and Debug -> Generate Bitstream をクリックして、論理合成、インプリメント、ビットストリームの生成を行った。

・論理合成、インプリメント、ビットストリームの生成が終了した。
Cam_VDMA_101_140120.png

・critical warning が1つあるので、見てみると

[Route 35-39] The design did not meet timing requirements. Please run report_timing_summary for detailed reports.

でタイミングが制約と合っていないようだ。

・Flow Navigator のImplementation から Report Timing Summary をクリックしてタイミングを見てみよう。
Cam_VDMA_102_140120.png

・Report Timing Summary ダイアログが表示された。デフォルト値のまま、OKボタンをクリックする。
Cam_VDMA_103_140120.png

・下に Timing ウインドウが表示された。
Cam_VDMA_104_140120.png

・Inter-Clock Paths の clk_fpga_0 to clk_fpga_2 と clk_fpga_0 to pclk が赤い。更に、Other Path Groups -> **asyc_default** -> clk_fpga_0 to clk_fpga_2 が赤くなっている。
Cam_VDMA_105_140120.png

・Inter-Clock Paths の clk_fpga_0 to clk_fpga_2 は、出力用ピクセルクロックで動作する video_out_zed_0 モジュールに、AXIバスのリセットを入れたのが問題のようだ。
Cam_VDMA_106_140120.png

・下のように、aresetn は同期化処理をしてある。以前修正したのだが、修正がされていないのかな?

	// synchronization of reset_1b
always @(posedge pixclk) begin
reset_1b <= ~aresetn;
reset <= reset_1b;
end


・Inter-Clock Paths の clk_fpga_0 to pclk は、init_done に関連するものだった。
Cam_VDMA_107_140120.png

・init_done も同様に、同期化処理をしてある。

    -- ARESETN をACLK で同期化
process (ACLK) begin
if ACLK'event and ACLK='1' then
reset_1d <= not ARESETN or not init_done;
reset_2d <= reset_1d;
end if;
end process;
reset <= reset_2d;

-- ARESETN をpclk で同期化
process(pclk) begin
if pclk'event and pclk='1' then
preset_1d <= not ARESETN or not init_done;
preset_2d <= preset_1d;
end if;
end process;
preset <= preset_2d;


・Other Path Groups -> **asyc_default** -> clk_fpga_0 to clk_fpga_2 は、custom_axi4s_video_0 の aresetn がまずいようだ。
Cam_VDMA_108_140120.png

・これも、非同期FIFOでリセットの同期化処理をONにしているので、大丈夫なはずなんだけど。。。

	// video_fifo のインプリメント
video_fifo video_fifo_i (
.rst(~aresetn), // input rst
.wr_clk(aclk), // input wr_clk
.rd_clk(video_clk), // input rd_clk
.din(s_axis_video_tdata), // input [31 : 0] din
.wr_en(s_axis_video_tvalid & s_axis_video_tready), // input wr_en
.rd_en(vtg_act_vid), // input rd_en
.dout(video_data), // output [31 : 0] dout
.full(vfifo_full), // output full
.almost_full(vfifo_almost_full), // output almost_full
.overflow(vfifo_overflow), // output overflow
.empty(vfifo_empty), // output empty
.almost_empty(vfifo_almost_empty), // output almost_empty
.underflow(vfifo_underflow) // output underflow
);


次回は、これらにTIG制約を掛けてみよう。video_out_zed_0 IP は再生成してみる。

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製8(Propertiesの検証)”に続く。
  1. 2014年01月20日 04:42 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0