踊るクロック位相
Spartan-3のDCM_SPには、位相シフタ(phase shifter)が入っています。
この位相シフタを使うと、入力クロックの位相を、任意の量だけ、ダイナミックに変化させることができるといわれています。
動的に動かすというのを、実際にやってみました。
この位相シフタは内部で-255~+255までのカウンタを持っているそうで、PSCLKの立ち上がりで、遅延量が1つ減ったり増えたりします。遅延量の変化が完了するとPSDONEという信号が'1'になります。
注意しなければならないのは、PSCLKは止めてはいけないということです。PSCLKが'0'のままだとPSDONEは変化しません。PSCLKを出しっぱなしにして、PSENを制御するのが正解です。
PSENをアサートしてからPSDONEがアサートされるまでは、数μ秒かかることもありました。PSDONEを見るのは必須です。
入力クロック48MHzで実際に試してみると、-255~255の範囲というのはどうやら怪しくて、-384~+384くらいまで動いているように思われます。-255~255に限ってしまうと動く範囲も狭く(±90°くらいしか動かせない)、あまり動いた気がしません。しかし、最大で10.00nsまでしか動かせないようなことも書いてあるので、そういうものなのかもしれません。
また、DCMのSTATUS[0]が位相シフタのオーバーフローを表すということなのですが、±255を超えても反応しないように思えました。-400~+400を超えると、INCDECの方向を反転させても戻ってこなくなります。
結局、よくわかりませんが、シフト量は-255~255の範囲にしておいたほうが無難なのでしょう。範囲が狭くなるのは仕方がないようです。
こうして、クロックを動的に動かしてみた画像を撮影したので、動画をアップロードします。
上の波形が元のクロック(48MHz)。下の波形がシフトさせたクロックです。-384~+384の範囲で動かしています。使ったデバイスはSpartan-3Eです。
| 固定リンク
コメント