2011年9月15日木曜日

SDRAMCのDE0での動作確認 2

前回のblogでclockの位相を同位相にしたと書いたのだが、念のため再度STAしてみた。
前回はclockの時間をTimeQuestのReportPathで、それ以外の信号の時間をReportTimingで
得ていたがこの方法だとclockの時間が分かり辛かった。
そこで、今回は仮想のclockをcreate_generated_clockで生成して、このclockに対するReportTimingを実行してDRAMへのclock、他の信号のtimingを得た。
下図はDRAM_CLKの値で、これから遅延値は5.126-3.101で2.039nsだった。


また、clock以外の信号で最大遅延経路はDRAM_WEとDRAM_DQ[3]で、最小遅延経路はDRAM_CSだった。




Read (DRAM_DQ → capture F/F)の値はReport Pathで調べた。



また、SDRAMのspecは以下の通りだ。

以上の値から計算するのだが、図を書いたり手で計算するのは面倒なので、
下図のようにverilogでprogramを書いてsimulationし波形で確認した。

その結果、holdが仕様を満たしていない(仕様1nsに対して580ps)ことが判明した。


そこで、SDRAMのclockの位相を2.0ns早めるようにした。


DE0に付属しているSDRAMの仕様書はIntegrated Circuit Solutionのものだが、
実際に実装されているのはZentelのA3V64S40ETPG6という166MHz品だ。
仕様書はここから入手できる。 http://www.zentel.com.tw/

そこで上記programで160MHzの場合について計算してみた。
holdは余裕がある。setupも仕様1.5nsに対して1.637nsで大丈夫そうだ。


setup/hold関係は一応問題なさそうだ。
160MHz対応にするためにはこの他にtRCDやtRFC等のtimingの見直しも
必要になるが、とりあえずこれらは現状ままとして合成して実機で動かしてみた。

結果は動作した。
以下の動画はDRAMのR/W check programを実行させている様子だ。


また、以下の動画は同じprogramを100MHzで動かしている様子だ。
160MHzと比較してLEDの点滅が遅いのが解る。


という訳でDE0でSDRAMを160MHzで動作させることが出来た。 やったー!  \(^_^)/

0 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...