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

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

FPGAの部屋

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

Ultra96用PMOD拡張ボードでカメラ入力5(Vivado 2018.2のcam_test_182プロジェクト2)

Ultra96用PMOD拡張ボードでカメラ入力4(Vivado 2018.2のcam_test_182プロジェクト1)”の続き。

前回は、Ultra96 ボードの低速拡張コネクタにPMOD 変換基板を付けて、MT9D111 カメラを接続する回路のブロック・デザインを作成し、HDL ラッパー・ファイルを生成し、制約ファイルを作成した。今回は、論理合成、インプリメンテーション、ビットストリームの生成を行うが、エラーが出てしまっている。

まずは、MT9D111 の信号や、AXI4-Stream 、AXI4-Master インターフェースにVivado Analyzer を設定した。
DMA_Write_sFB_24_181107.png

論理合成、インプリメンテーション、ビットストリームの生成を行ったときに以下の様なダイアログが表示された。
DMA_Write_sFB_25_181107.png

そして、カメラのPCLK がクロックを入力するための入力ポートじゃないというエラーが出てしまった。
DMA_Write_sFB_27_181107.png

[Place 30-675] Sub-optimal placement for a global clock-capable IO pin and BUFG pair.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_inst/O] >

    pclk_IBUF_inst/IBUFCTRL_INST (IBUFCTRL.O) is locked to IOB_X0Y106
     pclk_IBUF_BUFG_inst (BUFGCE.I) is provisionally placed by clockplacer on BUFGCE_HDIO_X0Y4

    The above error could possibly be related to other connected instances. Following is a list of 
    all the related clock rules and their respective instances.

    Clock Rule: rule_bufgce_bufg_conflict
    Status: PASS 
    Rule Description: Only one of the 2 available sites (BUFGCE or BUFGCE_DIV/BUFGCTRL) in a pair can be
    used at the same time
     and pclk_IBUF_BUFG_inst (BUFGCE.O) is provisionally placed by clockplacer on BUFGCE_HDIO_X0Y4


結局、制約ファイルに

set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets pclk_IBUF_inst/O]

を追加すれば、通るはず。制約ファイルに追加した。

その後、もう一度、論理合成、インプリメンテーション、ビットストリームの生成を行った。またエラーがでて、今度は、IOスタンダードが設定されていないというエラーだった。これは、制約ファイルのすべての信号にIO信号規則のLVCOMS18 を設定した。

更に、MT9D111 のI2C インターフェースを制御するためのAXI_IIC IP を追加するのを忘れていたため、追加した。
現在のブロック・デザインを示す。
DMA_Write_sFB_28_181108.png

Address Editor を示す。
最初の s_axi_lite が mt9d111_inf_axis で、s_axi_AXILiteS が DMA_Write_sFB で、最後のS_AXI が axi_iic になっている。しかし、インスタンス名が表示されるときと、今回のようにポート名が表示されるときの違いは何なのだろうか?設定が違っているのか?
DMA_Write_sFB_29_181108.png

現在の cam_test.xdc を示す。

set_property PACKAGE_PIN G7 [get_ports pclk]
set_property PACKAGE_PIN G6 [get_ports {cam_data[7]}]
set_property PACKAGE_PIN D5 [get_ports {cam_data[6]}]
set_property PACKAGE_PIN E6 [get_ports {cam_data[5]}]
set_property PACKAGE_PIN C7 [get_ports {cam_data[4]}]
set_property PACKAGE_PIN E5 [get_ports {cam_data[3]}]
set_property PACKAGE_PIN B6 [get_ports {cam_data[2]}]
set_property PACKAGE_PIN D6 [get_ports {cam_data[1]}]
set_property PACKAGE_PIN C5 [get_ports {cam_data[0]}]


set_property PACKAGE_PIN G5 [get_ports href]
set_property PACKAGE_PIN F7 [get_ports standby]
set_property PACKAGE_PIN F8 [get_ports vsync]
set_property PACKAGE_PIN A7 [get_ports xck]

set_property PACKAGE_PIN D7 [get_ports iic_rtl_scl_io]
set_property PACKAGE_PIN F6 [get_ports iic_rtl_sda_io]

create_clock -period 13.700 -name pclk -waveform {0.000 6.850} [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_property CLOCK_DEDICATED_ROUTE FALSE [get_nets pclk_IBUF_inst/O]

set_property IOSTANDARD LVCMOS18 [get_ports {cam_data[7]}]
set_property IOSTANDARD LVCMOS18 [get_ports {cam_data[6]}]
set_property IOSTANDARD LVCMOS18 [get_ports {cam_data[5]}]
set_property IOSTANDARD LVCMOS18 [get_ports {cam_data[4]}]
set_property IOSTANDARD LVCMOS18 [get_ports {cam_data[3]}]
set_property IOSTANDARD LVCMOS18 [get_ports {cam_data[2]}]
set_property IOSTANDARD LVCMOS18 [get_ports {cam_data[1]}]
set_property IOSTANDARD LVCMOS18 [get_ports {cam_data[0]}]
set_property IOSTANDARD LVCMOS18 [get_ports pclk]
set_property IOSTANDARD LVCMOS18 [get_ports href]
set_property IOSTANDARD LVCMOS18 [get_ports standby]
set_property IOSTANDARD LVCMOS18 [get_ports vsync]
set_property IOSTANDARD LVCMOS18 [get_ports xck]

set_property IOSTANDARD LVCMOS18 [get_ports iic_rtl_scl_io]
set_property IOSTANDARD LVCMOS18 [get_ports iic_rtl_sda_io]
set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
connect_debug_port dbg_hub/clk [get_nets clk]


これで、再々度、論理合成、インプリメンテーション、ビットストリームの生成を行った。エラーは無かったが、タイミング・エラーになってしまった。
DMA_Write_sFB_30_181108.png
  1. 2018年11月08日 05:24 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0