FPGAの部屋

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

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。ご利用ください。 http://marsee101.web.fc2.com/index.html

2008年05月

”DQの最適な遅延値を測定するDDR2 SDRAMコントローラのインプリメント2”でDDR2 SDRAMの初期化手順を見てみると、DDR2 のDLLリセットから、最初のアクティベート・コマンドを入れるまでの間隔が52クロックと短いことが問題となった。
”DQの最適な遅延値を測定するDDR2 SDRAMコントローラのインプリメント3”では、DLLリセットからの時間を計るカウンタのクロックCLK1_16について、Chipscopeで測定したが問題なかった。
それではということで、カウンタの動作はどうなのだろうか?ということでカウンタの各ビットをChipscopeで確認してみたところ、DDR2 のDLLリセットから、最初のアクティベート・コマンドを入れるまでの間隔が256クロックになっていて直ってしまった。
9a6c7e52.png


これはおかしいと思って原因を探って見ると、タイミング制約が満足していなかった。
179f89c6.png


これは、どこがまずいのかと調べると、リセットSWとして使用したSW2をクロックで同期したFFの出力をSYS_RSTとORしていたので、SW2をクロックで同期したFFから、その他の回路のFFまでのパスがタイミング制約と比較されたからのようだ。本当はそうする時はSW2をクロックで同期したFFをツリー状に複製して、負荷を分散しなくていけないのだろう。(DDR2 SDRAMコントローラのインプリメントテスト2(動作周波数の確保2))
Timing Analyzerの結果は以下の通り。
3a38b781.png


いずれにせよ。どうもうまく受けられないようだ。
やはり、IOBの遅延素子によってDQの入力を遅延させてコントローラのクロックでサンプルする方式では、200MHzのSuzaku-Vでは無理があるのだろうか?
#どこか間違っているという可能性もあるが。。。

200MHzから動作周波数を下げるとIOBの遅延素子で1周期分遅延させることができないので、この方法をとるのは難しくなる。(クロックの立ち上がりのデータと立下りのデータを入れ替えられれば、1/2の周波数まではいけると思うが。。。)
この方法で受けるのはやめて、やはりDQSで受ける方法を模索しようと思う。その場合、問題はどうやって自分の内部クロックに乗せかえるかということになる。とりあえずはただ受けて見て、値をChipscopeで観測して正しいデータが受けられるかどうかを見てみようと思う。

たまたま検索していたら、有限会社レグシムさんのVersys EDAが引っかかった。
ライブリナックスでCDブートして、リナックスのVerilog、SystemCのシミュレーション環境をお手軽に試すことができる。
Verilog Simulatorは、Icarus VerilogとGPL Cver、波形表示ツールとしてはGTKWave、あとSystemC コンパイラが入っている。
早速、UbuntuのISOイメージをCDに書いて試してみたが、なかなかよさそうだった。お手軽にリナックスのシミュレーションツールを試せるのが良い。私のところのノートパソコンでも問題なく動作した。

”DQの最適な遅延値を測定するDDR2 SDRAMコントローラのインプリメント2”で200MHzの16分周クロックがうまく出ていないようなので、Chipscopeで見てみるということだったので、実際に見てみた。
a78ccc74.png


16分周クロックは一番下のclk1_16。その結果、ちゃんと16分周されていた。原因は何なんだろう。
もう少し調査が必要のようだ。

ISE10.1.01が前のバージョンと違っているところをやってい見ている。複数のUCFを扱えるようになっているようだ。結果をそのうち書こうと思っている。

いつの間にか55万アクセスを越していた。みなさん、見ていただいて、ありがとうございます。
Access_550000_080526.png


FPGAのキーワードでgoo で検索していたら、量子性備忘録さんの”FPGAで機能をプログラミングできるグラフィックカード”が引っかかった。これはと思って、リンクをたどっていった。
The Open Graphics Projectがあって、 OGD1, Revision B (OGD1P-256DDAV; AS-000-0002)ボードを売るようだ。
FPGAで作るグラフィックカードのようだが、PCI-X 64bit 133MHz, DDR SDRAM, XC3S4000が載っていて、とてもよさそう。だが値段は$1,500 か。。。買えませんね。。。
The Open Graphics Development Board(OGD1)のページ。
それにWebpackでは開発できないみたいですね。だめですね。

”DQの最適な遅延値を測定するDDR2 SDRAMコントローラのインプリメント”でリセットSWを追加して、初期化時の遅延値を調整するフェーズをChipscopeで観測することにした。
遅延値を最適な位置に設定する方法については、”DQの最適な遅延値を測定するDDR2 SDRAMコントローラのシミュレーション”を見てほしい。
そこで、”2.DQのIDELAY値を0から63まで変化させてイニシャル・データをリードする。”の位置をChipscopeで観測してみた。
その結果が下図である。
60f2ffaa.png


上から二番目のcas_node_1dが0のときに、DDR2 SDRAMにリードコマンドが発行される(Oカーソルの位置)ので、CASレイテンシ3クロックの後にデータが出てくる(Xカーソルの位置)はずだ。下から3番目のidelay_ceが遅延値をインクリメントする信号である。(idelay_incが遅延値を増加させるか減少させるかを決める信号)
これを見るとリードコマンドと遅延値をインクリメントする信号が重なり合っているので、もっと間をあけてみた。これが下図である。
71a45b20.png


今度はだいぶ idelay_ce (Oカーソルの位置)とリードコマンドが離れた。これでタイミング的にはだいぶ余裕があるはずだが、リードデータ (dq_rise_1d と dq_fall_1d、Xカーソルの位置)は正しい値ではない。
やはり、おかしい。DDR2 SDRAMの出力波形が悪いのか? それともそもそもDDR2 SDRAMにライトできていないのか? 
動作周波数を下げてやってみようと思ったが、何気なく前のDDR2 SDRAMの初期化手順を見てみると、DDR2 のDLLリセットから、最初のアクティベート・コマンドを入れるまでの間隔が短いのに気がついた。規格では、200クロック以上だが、最初のアクティベート・コマンドが入力されるまで52クロックしかない。(下図参照)
6a27c372.png


シミュレーションでは、どうなっているかというと1,280ns 間がある。1クロックは、200MHzなので、周期は5ns だ。それで1,280ns を割ると256クロックということになる。
f7f94e58.png


実際にはDCMのclkdv出力を16分周に設定して16カウントしている。従って、clkdv出力がおかしくなっているのかもしれない。
調査が必要のようだ。clkdvをChipscopeでサンプルして確認してみるか、実際にポートに出してオシロで見てみようと思う。

#しかし、本当にパソコンが遅い。効率が全く上がらない。早く買わねば。。。

↑このページのトップヘ