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

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

FPGAの部屋

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

ZYBO用カメラ表示回路の作製3(インプリメント)

”ZYBO用カメラ表示回路の作製2(プロジェクト、ブロック・デザイン作製)”の続き。

前回で、ブロック・デザインが出来上がったので、今回は、HDLのラッパー・ファイルを生成して、インプリメントを行う。

・ブロック・デザインの Cam_Disp を右クリックして、右クリックメニューから Create HDL Wapper... を選択する。

・Create HDL Wapper ダイアログが表示された。そのまま、OKボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_158_140624.png

・CamDisp_wapper.v が生成されて、トップ・ファイルになった。
ZYBO_Cam_Disp_59_140818.png

・次に、File -> Add Source... から、制約ファイルを生成した。名前は、V_ZYBO_CAMD.xdc とした。
ZYBO_Cam_Disp_60_140818.png

・V_ZYBO_CAMD.xdc に、”ZYBO用ビットマップ・ディスプレイ・コントローラの作製5(制約の生成、インプリメント)”で生成した制約をコピーした。
ZYBO_Cam_Disp_61_140818.png

・Flow Navigaotr の Synthesis -> Run Synthesis をクリックして、論理合成を行った。

・論理合成が問題なく終了し、Synthesis Completed ダイアログが表示された。Open Synthesized Design のラジオボタンをクリックして、OKボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_160_140624.png

・Synthesized Design が開いた。ここで、残りの出力端子の出力レベルと配置の制約を行う。
ZYBO_Cam_Disp_62_140818.png

・配置制約は書き終わったので、セーブした。
ZYBO_Cam_Disp_67_140819.png

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

・インプリメントでエラー発生。pclkがクロック入力ピンじゃないというエラーだ。

[Place 30-574] Poor placement for routing between an IO pin and BUFG. If this sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .xdc file to override this clock rule.
< set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets pclk_IBUF] >

pclk_IBUF_inst (IBUF.O) is locked to IOB_X0Y47
and pclk_IBUF_BUFG_inst (BUFG.I) is provisionally placed by clockplacer on BUFGCTRL_X0Y15


ZYBO_Cam_Disp_68_140819.png

・制約ファイルに CLOCK_DEDICATED_ROUTE 制約を追加して、再度インプリメントを行った。

・その結果、タイミング・エラーが発生した。
ZYBO_Cam_Disp_69_140819.png

・クロック間のパスがタイミング・エラーだった。
ZYBO_Cam_Disp_70_140819.png

・クロック間のFalse Path制約を追加した。Timing Summary の Rerun をクリックした。
ZYBO_Cam_Disp_71_140819.png

・タイミング制約を追加して、再計算してくれるようだ。タイミング制約をパスできるようだ。
ZYBO_Cam_Disp_72_140819.png

・再度、インプリメントを行った。今度は、タイミング制約をパスしている。
ZYBO_Cam_Disp_73_140819.png

・Implemented Design を開いて、pclk のIOパッドからBUFG までの配線遅延を見た。1.879nsec なので、大丈夫そう。
ZYBO_Cam_Disp_74_140819.png

・そう言えば、pclk のクロック・ピリオド制約と入力ピンのセットアップ時間制約を忘れていたので、制約を行った。制約を行う際には、”Triple Frame Buffer Controller の追加5(インプリメント、実機検証)”で実際に測定した pclk を参考にした。
ZYBO_Cam_Disp_75_140819.png

・インプリメントを行うと、タイミング・エラーが出た。pclk のピリオド制約を入れたので、clk_fpga_0 との間で、タイミング・エラーが出てしまった。
ZYBO_Cam_Disp_76_140819.png

・False Path制約を追加した。
ZYBO_Cam_Disp_77_140819.png

・Timing Summary の Rerun をクリックした。
ZYBO_Cam_Disp_78_140819.png

・False Path制約を追加すれば問題無さそうだ。
ZYBO_Cam_Disp_79_140819.png

・インプリメントを行ったところ成功した。
ZYBO_Cam_Disp_80_140819.png

制約ファイル (V_ZYBO_CAMD.xdc) を貼っておく。(2014/08/25:I2CのPULLUPを追加。2 Mega pixel Camera Module MT9D111 JPEG Out + HQ lensでも動作可能とするため)

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]
set_property IOSTANDARD TMDS_33 [get_ports TMDS_tx_0_B_p]
set_property IOSTANDARD TMDS_33 [get_ports TMDS_tx_1_R_p]
set_property IOSTANDARD TMDS_33 [get_ports TMDS_tx_2_G_p]
set_property IOSTANDARD TMDS_33 [get_ports TMDS_tx_clk_p]
set_property PACKAGE_PIN D19 [get_ports TMDS_tx_0_B_p]
set_property PACKAGE_PIN C20 [get_ports TMDS_tx_1_R_p]
set_property PACKAGE_PIN B19 [get_ports TMDS_tx_2_G_p]
set_property PACKAGE_PIN H16 [get_ports TMDS_tx_clk_p]

set_property PACKAGE_PIN T14 [get_ports {cam_data[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[0]}]
set_property PACKAGE_PIN U14 [get_ports {cam_data[6]}]
set_property PACKAGE_PIN T15 [get_ports {cam_data[5]}]
set_property PACKAGE_PIN U15 [get_ports {cam_data[4]}]
set_property PACKAGE_PIN P14 [get_ports {cam_data[3]}]
set_property PACKAGE_PIN V17 [get_ports {cam_data[2]}]
set_property PACKAGE_PIN R14 [get_ports {cam_data[1]}]
set_property PACKAGE_PIN V18 [get_ports {cam_data[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports mt9d111_iic_scl_io]
set_property IOSTANDARD LVCMOS33 [get_ports mt9d111_iic_sda_io]
set_property IOSTANDARD LVCMOS33 [get_ports href]
set_property IOSTANDARD LVCMOS33 [get_ports pclk]
set_property IOSTANDARD LVCMOS33 [get_ports standby]
set_property IOSTANDARD LVCMOS33 [get_ports vsync]
set_property IOSTANDARD LVCMOS33 [get_ports xck]
set_property PACKAGE_PIN V15 [get_ports mt9d111_iic_scl_io]
set_property PACKAGE_PIN W14 [get_ports mt9d111_iic_sda_io]
set_property PACKAGE_PIN W15 [get_ports vsync]
set_property PACKAGE_PIN Y14 [get_ports href]
set_property PACKAGE_PIN T11 [get_ports standby]
set_property PACKAGE_PIN T10 [get_ports pclk]
set_property PACKAGE_PIN U12 [get_ports xck]

set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets pclk_IBUF]


set_false_path -from [get_clocks n_0_BUFR_pixel_clk_io] -to [get_clocks clk_fpga_0]
set_false_path -from [get_clocks clk_fpga_0] -to [get_clocks n_0_BUFR_pixel_clk_io]


create_clock -period 55.560 -name pclk -waveform {0.000 27.780} [get_ports pclk]
set_input_delay -clock [get_clocks pclk] 10.800 [get_ports {cam_data[0] cam_data[1] cam_data[2] cam_data[3] cam_data[4] cam_data[5] cam_data[6] cam_data[7] href pclk vsync}]


set_false_path -from [get_clocks pclk] -to [get_clocks clk_fpga_0]
set_false_path -from [get_clocks *] -to [get_clocks pclk]

set_property PULLUP true [get_ports mt9d111_iic_scl_io]
set_property PULLUP true [get_ports mt9d111_iic_sda_io]

  1. 2014年08月20日 05:19 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0