Kintex7(KC705 Evaluation Kit)は差動クロックで200MHz?のようで
Spartan6(100MHz)用に作ったシリアル通信の回路をそのまま使いたい(書き換えるのがめんどくさい)ので
はじめは分周して100MHzにしようとしたのですがうまくいかず、
IP Core Generator にあったClocking Wizardを使ってみました。
New Sourceで
適当な名前をつけて次に
Clocking Wizardを選択
こんな画面がでてきました
Kintex7の固定クロックは差動なので
Differentialを選択
入力クロックの周波数を入力
KC705は200MHzなので 200にします
出力の周波数などを設定できます、
出力数を増やすこともできる模様
クロックリソースの管理に便利
ここのリセットやロックなどは特になくてもいいと思うのでチェックをはずしても良いはず
ここは特に変更なし
確認画面
そして、Generate!
プロジェクトディレクトリに'ipcore_dir'というディレクトリが生成されるので
その中にあるname.veoを開くと
下のほうに
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
sysclk instance_name
(// Clock in ports
.CLK_IN1_P(CLK_IN1_P), // IN
.CLK_IN1_N(CLK_IN1_N), // IN
// Clock out ports
.CLK_OUT1(CLK_OUT1)); // OUT
// INST_TAG_END ------ End INSTANTIATION Template ---------
こんなのがあるのでこれをコピーして
トップモジュールに貼り付ける。
ここで入力となる
CLK_IN1_P
CLK_IN1_N
のピン制約をUCFに追加しました
NET "CLK_IN1_P" LOC = AD12;
NET "CLK_IN1_N" LOC = AD11;
これでOKです
一応ファイルはこちらに
任意の周波数を設定したりできるようになりました('o')
ちなみに最初UCFのロケーションを CLK_PにAD11 CLK_NにAD12としていると
//ERROR:Place:1209 - It appears that the specified pin locations for differential
// pair "CLK_P" (LOC="AD11") and "CLK_N" (LOC="AD12") are reversed and can not
// be placed without changing the functionality (polarity) of the signal. To
// correct this error, either modify the LOC values or change the buffer
// connections in the code so that the P-side of the differential buffer is
// LOCed to the pin location "AD12" and the N-side of the buffer is LOCed to the
// pin location "AD11".
// It is possible to allow location constraints to override this rule by
// setting the environment variable XIL_PAR_ALLOW_LVDS_LOC_OVERRIDE./
こんなエラーが出ました
差動クロックって極性あるんだ.....別にどちらでもいい気がするけど...
というか分周してもちゃんと100MHzになってくれなかったのはこれが原因だったのだろうか...