FC2カウンター FPGAの部屋 Virtex2の動的位相シフト覚書
FC2ブログ

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

FPGAの部屋

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

Virtex2の動的位相シフト覚書

DDR SDRAMコントローラに動的位相シフトを使っているが、使うにあったってのメモ。
Virtex2などのFPGAでは、DCMというクロック・マネージャーが載っている。DCMはクロックの分周、逓倍、位相シフトなどが出来る。スペクトラム拡散も前のユーザーズマニュアルには記述があったが、うまく行かなかったのか、今はキャンセルされている。
DDR SDRAMコントローラを作る場合に、リードの時のサンプルクロックの位相が問題になる。(本当はVirtex4みたいにデータのほうを遅延できれば一番良いのが)
ちょうど良くサンプル出来る位相にクロックをシフトしたいという欲求が当然起こる。そこで、データを出して、(本当はDQSだけど)そのデータがうまくサンプルできるところを動的位相シフトで探るわけである。リードのクロックを位相シフトして行って、うまくリードでき始めた位相とリードできなくなった位相のちょうど真ん中にクロックの位相をロックできれば、うまくリードできるはずである。
DCMの位相シフト範囲はディレイラインの関係上最大+-5nsだそうだ。目的の周波数は133MHzなので、1周期7.5ns、間に合うはずである。
ここで、DCMの動的位相シフトをXilinxのアンサー・データベースから調べる。XilinxのFPGAばかりでもないだろうが、理想と現実の差(バグとも言う)がアンサー・データベースに表現されている。3つ程度ヒット。
1. Virtex-II - DCM 位相シフトの精度について
2. Virtex-II、DCM - 可変位相シフトのタイミング図 (PSEN、PSINCDEC、PSCLK、PSDONE のタイミング パラメータ)
3. Virtex-II/Virtex-II Pro DCM - 位相シフトを可変モードで使用するには、BitGen?オプションを設定し位相シフト範囲を正の値にする必要がある
1はDCMの精度について限界があるよと言っている。2は動的位相シフトのやり方。3が重要で位相シフト範囲を正の値にしろと言っている。
普通は+-5nsなのだが、"bitgen -g Centered_x0y0:0 design.ncd"とやると、+10ns位相シフトするようになるらしい。
アンサーのやり方のうちのPHASE_SHIFT = 128 の場合でやることにした。最初0までディクリメントしてから、255までインクリメントしてデータが受けられるかどうか見ていくので面倒だ。これには理由があって、シミュレーションではこれでやると+5nsだけしか動かないので、うまくシミュレーションできない。そこで、PHASE_SHIFT = 0に書き換えて、シミュレーションするとうまく出来るのである。これは、最後のbitgenコマンドで設定を書き換えているので、上流(VHDLファイルの状態)では+10ns位相シフトするのがわからないためである。でも、DCMのgeneric map見てもそれに該当するものがないので、上流で書けない。(ISE6.3i SP3の場合、7.1iに期待しているがどうだろう?)
次にISEの"Processes for Source"ウインドウの"Generate Programming File"のところをダブルクリックするとbitgenコマンドが実行される。ここのPropertiesを見ても、"-g Centered_x0y0:0"に相当する場所がない。これは、自分でコマンドラインからbitgenを実行しなければいけないことを意味する。
ほかのオプションもすべて入れなくてはいけないので、どうやってオプションが入っているのを見ようか。。。
ISEの"Processes for Source"ウインドウの"Design Entry Utilities"の中に"View VHDL Instantiation Template"というのがある。これをダブルクリックすると今まで、どんなコマンドをどんなオプションで起動してきたかのログが出てきた。
ここで、bitgenのところを見るとプロジェクト名.utというのがbitgenのオプションを書いてあるファイルのようだ。ここに"-g Centered_x?y?:0"を書き込んでやってみると、今までうまく行かなかったのが、まだまだ修正は必要だが、だいぶうまくリードできる様になってきた。やはり、このオプションを入れないと動的位相シフトはだめな様である。
Centered_x?y?と書いたのは、動的位相シフトを行っているDCMをUCFで位置を固定していないため、コンパイル1回ごとに位置が変わってしまうためである。そのたびにFPGA Editorで位置を調べて、その位置を?の部分に入れている。
なお、プロジェクト名.utは、コンパイルのだびに作り直されてしまうので、どっかにコピーしておいて、"Generate Programming File"の時だけプロジェクトがあるフォルダにコピーしている。

-----------------------

ISE7.1iをインストールしてみた。ISE6.3iと同様にプロジェクト名.utを編集して、"Generate Programming File"をしたら、"-g Centered_x?y?:0"が消えていた。ISE7.1iは"Generate Programming File"をする直前に、プロジェクト名.utを書き換えるようだ。
これではできないので、本当に、bitgenをコマンドラインから実行する羽目となった。
また、ISE7.1iのDCMソースにもそれらしいオプションがなかった。がっかり。
そういえば、ISE7.1iはFPGAエディタのデザインが変わっていた。これはこれでいいかも。
  1. 2005年09月09日 13:43 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/19-f709ca3c
この記事にトラックバックする(FC2ブログユーザー)