2011年10月09日

SDRAM周りの設計(2)

 SDRAM のアクセスについて、今回は次のようにしました。

・リード時
 ローアドレス、バンクを指定して、ACT コマンドを出力。
 カラムアドレスを指定して、RDコマンド出力。この時、A10='H' にして、オートプリチャージにする。
 2クロック後にデータが出力される

・ライト時
 ローアドレス、バンクを指定して、ACT コマンドを出力。
 カラムアドレス、データを指定して、WRコマンド出力。この時、A10='H' にして、オートプリチャージにする。

 それぞれのアクセスをしていない間は、CBR(オートリフレッシュ)状態にしておく。
 リード/ライトのアクセスの前に、CBR を解除する。少し時間を置いてから、リード、ライトが開始できる。


SDRAM タイミングチャート



 これで動くかどうかよくわかりませんが、とりあえずこれで設計してみます。


 また、SDRAM は100MHzでアクセスするにしても、配線遅延やデバイスの遅延などを考えないと、SDRAM から出力されるデータを正確に受信する事ができません。

 模式図、タイミングは次の通りです。


SDRAM とのやりとり(1)

SDRAMとのやりとり(2)


 SDRAMの入力のsetup/hold 値は、データシートより、tSI = 2ns、tHI = 1ns です。

 これは、
 ・クロックの立ち下がりでデータを出力する。
 ・クロックとデータの遅延値をほぼ同じにする。

 ことで満たすことが出来ます。


 問題は、SDRAM から入力されるデータを取り込む時で、元のCLK100M から見ると

 FPGA の出力遅延 + 配線遅延 + SDRAM の出力遅延 + 配線遅延 + FPGA の入力バッファの遅延

 の遅延が付きます。

 また、SDRAM の出力遅延と、SDRAM のデータホールドタイムが違うため、取り込むデータの有効な幅は、1クロック未満になります。

 これらを考慮して、SDRAM から入力されるデータの丁度真ん中辺りでデータを取り込むことが出来るように、取り込みクロックを決める必要があります。

 併せて〜.sdc でタイミング制約を与える必要があります。


 かなり面倒なんですが、これをちゃんとやっとかないと、まともに動かなかったり、たまに調子が悪くなったりするので、手は抜けません。



posted by えすび at 17:32| Comment(2) | FPGA化:SDRAM | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
非 R/W 時にCBRを出しつづけるとのことですが、tARFC (Refresh Cycle Time)に違反してる気がするのですが大丈夫ですか? 後、SimulationはDRAMのモデルを使用してますか?
SOPC Builderが生成するモデルは機能限定版のファンクションモデルでタイミングチェック等は一切行っていないので、DRAMメーカー製(*1)を使った方がいいと思いますよ。

頑張って下さいねー (^_^)/~

*1 例えばMicronの奴とか。
http://www.micron.com/get-document/?documentId=4054&file=mt48lc4m16a2.zip
Posted by 匿名希望 at 2011年10月09日 20:40
 コメントありがとうございます。

 タイミングチャートを見ると、Auto Refresh コマンドを送出した直後は、NOPを出す必要はないようです。

 ...と思ったんですが、CS だけは H にしないといけないようですね。

 他のコマンドでも、CS をベタL にしっぱなしでした。修正してみます。

 情報ありがとうございました。
Posted by えすび at 2011年10月09日 21:19
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。