・リード時
ローアドレス、バンクを指定して、ACT コマンドを出力。
カラムアドレスを指定して、RDコマンド出力。この時、A10='H' にして、オートプリチャージにする。
2クロック後にデータが出力される
・ライト時
ローアドレス、バンクを指定して、ACT コマンドを出力。
カラムアドレス、データを指定して、WRコマンド出力。この時、A10='H' にして、オートプリチャージにする。
それぞれのアクセスをしていない間は、CBR(オートリフレッシュ)状態にしておく。
リード/ライトのアクセスの前に、CBR を解除する。少し時間を置いてから、リード、ライトが開始できる。
これで動くかどうかよくわかりませんが、とりあえずこれで設計してみます。
また、SDRAM は100MHzでアクセスするにしても、配線遅延やデバイスの遅延などを考えないと、SDRAM から出力されるデータを正確に受信する事ができません。
模式図、タイミングは次の通りです。
SDRAMの入力のsetup/hold 値は、データシートより、tSI = 2ns、tHI = 1ns です。
これは、
・クロックの立ち下がりでデータを出力する。
・クロックとデータの遅延値をほぼ同じにする。
ことで満たすことが出来ます。
問題は、SDRAM から入力されるデータを取り込む時で、元のCLK100M から見ると
FPGA の出力遅延 + 配線遅延 + SDRAM の出力遅延 + 配線遅延 + FPGA の入力バッファの遅延
の遅延が付きます。
また、SDRAM の出力遅延と、SDRAM のデータホールドタイムが違うため、取り込むデータの有効な幅は、1クロック未満になります。
これらを考慮して、SDRAM から入力されるデータの丁度真ん中辺りでデータを取り込むことが出来るように、取り込みクロックを決める必要があります。
併せて〜.sdc でタイミング制約を与える必要があります。
かなり面倒なんですが、これをちゃんとやっとかないと、まともに動かなかったり、たまに調子が悪くなったりするので、手は抜けません。


SOPC Builderが生成するモデルは機能限定版のファンクションモデルでタイミングチェック等は一切行っていないので、DRAMメーカー製(*1)を使った方がいいと思いますよ。
頑張って下さいねー (^_^)/~
*1 例えばMicronの奴とか。
http://www.micron.com/get-document/?documentId=4054&file=mt48lc4m16a2.zip
タイミングチャートを見ると、Auto Refresh コマンドを送出した直後は、NOPを出す必要はないようです。
...と思ったんですが、CS だけは H にしないといけないようですね。
他のコマンドでも、CS をベタL にしっぱなしでした。修正してみます。
情報ありがとうございました。