guruguru123’s diary

かなり雑な作業日記です。

Papilio Pro へのクロック入力

SerDesの受信ブロックで、SerDesからのクロックを入力するところでエラーが出て詰まった。エラーを見ると

ERROR:Place:1108 - A clock IOB / BUFGMUX clock component pair have been found
that are not placed at an optimal clock IOB / BUFGMUX site pair. The clock
IOB component <WING_C<5>> is placed at site <P119>. The corresponding BUFG
component <WING_C_5_BUFGP/BUFG> is placed at site <BUFGMUX_X2Y4>. There is
only a select set of IOBs that can use the fast path to the Clocker buffer,
and they are not being used. You may want to analyze why this problem exists
and correct it. If this sub optimal condition is acceptable for this design,

---------------------------------------------------------------------------------------------------------------
you may use the CLOCK_DEDICATED_ROUTE constraint in the .ucf file to demote
this message to a WARNING and allow your design to continue. However, the use
of this override is highly discouraged as it may lead to very poor timing
results. It is recommended that this error condition be corrected in the
design. A list of all the COMP.PINs used in this clock placement rule is
listed below. These examples can be used directly in the .ucf file to
override this clock rule.
< NET "WING_C<5>" CLOCK_DEDICATED_ROUTE = FALSE; >

となっている。PapilioのWING_C(5)からクロック入力をしようとしたのが悪かったらしい。理由は、WING_C(5)のピンP119はBUFGに直接入力できるピンではないとのこと。

点線より下は最後の行の呪文を書けば警告に移るよ、という内容。

WING_C(5)がだめならどこなら良いのかということで、Spaltan-6 FPGAパッケージおよびピン配置という資料を読んでみた。(https://japan.xilinx.com/support/documentation/user_guides/j_ug385.pdf)

まず、Papilio Proに乗っているSpaltan-6(XC65LX9)にはGCLKというピンがある。GCLKピンは入力で、これらのクロックピンはグローバルクロックバッファに接続される。また、クロックに使用される必要がないときは通常のユーザーI/Oになるというもの。GCLKピンは、バンク0,1,2,3にそれぞれ8つあり、合計で32ピンがクロック入力として使用される。バンクは図1.1参照

f:id:guruguru123:20171207152445p:plain

この32ピンのうち、どれがPapilioのI/Oピンと対応しているのか見てみた。以下の図がPapilioのI/Oが対応しているあたりのGCLKピン。

f:id:guruguru123:20171207152924p:plain

これを元にUCFファイルを見てみるとWING_Aは1,2,13、WING_Bは2,3,4,9,13,14、WING_Cは8,9,10,11,12,13,14,15が見落としがあるかもしれないがGCLK対応である。クロック入力を行うときはこのピンから行えばよい。