IDELAYの規格外的な使い方
Virtex-4やVirtex-5には、IDELAYというプリミティブがあります。
I/Oに内蔵された入力用の遅延コンポーネントで、すべてのI/Oピンに内蔵されています。遅延時間は可変で、1タップは、おそらく75~78psくらいで、64タップあります。つまり、ピンごとに75~4800psくらいまでの遅延を作ることができます。
これはこれで便利なのですが、周期が3ns程度(つまり330MHz程度)の信号を受信する場合には厄介な問題が生じます。
なぜなら、入力ディレイは、入力信号が遷移する中間のタイミングでサンプリングできるようにあわせるのがベストなのですが、最大でも4.8nsのディレイしか作れないので、信号が遷移する中間のベストな点を簡単には探すことができないからです。
入力遅延の最適値を探すには、入力信号に定型的なビットパターンをいれて、IDELAYの遅延量を0から順に増やしていって、そのパターンが変化する場所(信号が遷移点:つまり、一番サンプリングにふさわしくないタイミング)を探します。
最適な点を見つけるときのイメージは下の図のような感じです。
例えば、IDELAYの遅延量を0から順に増やしていって、13タップ目(つまり1nsあたり)で最初の遷移点が見つかったとしましょう。そして、次の遷移点が53タップ目(つまり4nsあたり)とします。すると、最適な遅延量は(13+53)/2=23タップあたりということになります。このような場合、IDELAYを23タップに合わせておけば、ベストなタイミングでサンプリングできるでしょう。
しかし、IDELAYの遅延量を0から順に増やしていって探そうとして、最初の遷移点が33タップ目(つまり2.5nsあたり)だったらどうすればよいでしょうか?IDELAYは64タップしかないので、2回の遷移点を探して中間を取るということができません。設計者が周期3nsだと知っていれば、13タップあるいは53タップにセットするということもできるでしょう。
さて、IDELAYを使うには、IDELAYCTRLというプリミティブが必要ですが、実は、IDELAYの遅延時間は、IDELAYCTRLというプリミティブが測っているようです。
だから、IDELAYCTRLのREFCLKを変えると、タップの遅延量も比例して変わります。
本来、Virtex-4やVirtex-5のIDELAYCTRLには正確に200MHzのREFCLKを与えなければなりませんが、これを100MHzにしてみたところ、IDELAYのタップの遅延量は2倍の約150psになりました。
すると、最大遅延量も比例して延び、約330MHzの信号に対しても遅延を2週させて遷移の中間点でサンプリングできるようにあわせることができるようになりました。
もちろん、規格外の使い方になるので、保障はありません。
一応、動作はしているみたいですが、いつ動かなくなるか心配です。
Virtex-4ではこのやり方で動いてしまったことがあるので、Virtex-5でもできるかなと思ってやってみたら、できました。FPGAってのは不思議なものです。
なお、Spartan-6のIDELAYは、それとは別の原理で動いているようです。
Spartan-6のIODELAYは、入力信号が遷移すると、入力ピンに内蔵されたリングオシレータが超高速に振動して50psくらいの周期のクロックを出し、そのクロックをカウントすることで、入力信号の遷移から既定の時間を遅らせて出力信号を遷移させるというような驚愕の原理で動いているようです。これも近いうちに実験してみます。
| 固定リンク
コメント
なひたふさん、いつも興味深く読ませてもらっています。
物事の本質を知ろうとする姿勢と実行力がが素晴らしいです。
見習いたいです。
投稿: ままサル | 2010.02.03 08:58
ままサルさん
コメントありがとうございます。
いえいえ、それほどたいしたものではありません。
Virtex-5のIDELAYって本質的にはどうやっているんでしょうね。
DLL、PLL、DCI、IODELAY、内蔵終端抵抗。FPGAの中に埋め込んだアナログ的な部品ってすごいと思います。
投稿: なひたふ | 2010.02.06 10:34