FPGAの部屋FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。desginのシミュレーションができた。今回はユーザー回路からどのようにMIGが制御されているかを見ていく。UserGuide参照。SDRAMの初期化のシミュレーション波形を下に示す。Enabledに設定している。シミュレーション時の初期化時のログを下に示す。complete次にユーザー回路とのインターフェース信号を見ていく。同期している必要がある。立ち下がりに同期させる必要がある。立ち上がりに同期している。Virtex-5のMIGよりユーザーインターフェースを作るのが面倒だ。コマンド入力用FIFOが付いていない感じだ。MIGのユーザーインターフェースの上にFIFOを使ったラッパーを作ったほうが良いかもしれない。Spartan-3A用のMIGのユーザー・インターフェース信号について簡単に説明する。memory(010)。(clk0の立ち下がりに同期)user_cmd_ack:MIGからコマンドをうけとれるという返事。リフレッシュなどの用事があってコマンドを受け取れない場合はアサートされない。(clk0の立ち下がりに同期)user_input_address:アドレス入力。使いにくいことにROW+COLUMN+BANKの順番になっているので、まともに使用するためには、COLUMNとBANKのアドレスを入れ替える必要がありそう。(clk0の立ち下がりに同期)burst_done:バーストの終了時に4バーストモードは2クロック間、8バーストモードは4クロック間アサートする。(clk0の立ち下がりに同期)user_input_data:clk90に同期してデータを出力する(Writeのみ)。(clk90の立ち上がりに同期)user_data_valid:user_output_dataが有効。(Readのみ)(clk90の立ち上がりに同期)user_output_data:Readしたデータ。Burstsを下に引用する。上の図はSpartan-3A用MIGのWriteの例だ。1.clk0の立ち下がりに同期して、ユーザー回路はWriteコマンドを発行し始める。2.最低1クロック後にMIGは、clk0の立ち下がりに同期してuser_cmd_ackをアサートし、Writeコマンドを受け付けたことをユーザー回路に知らせる。リフレッシュ動作中でuser_cmd_ackのアサートが遅れることもある。3.user_cmd_ackがアサートされた後のclk90の立ち上がりに同期して、ユーザー回路はuser_input_dataにWriteするデータを入力する。SDRAMのデータ幅の2倍幅となっている。4バーストモードならば、2つのデータを入力する必要がある。address)は、user_cmd_ackがアサートされた後の3クロック間維持する。その後のバーストアドレスは2クロック維持する。burstを終了させるときに、ユーザー回路はburst_doneをアサートしてMIGに知らせる。4バーストモードの時は2クロック間アサートする。6.burst_doneのアサート後にWriteコマンドをデアサートする。(NOPコマンドに変更)7.プリチャージをした後に、MIGはuser_cmd_ackをデアサートする。user_cmd_ackをデアサートされたら、ユーザー回路は次のコマンドを入力することができる。実際にシミュレーションでデータをWirteしている部分を下に示す。4バーストモードで2組のデータをWriteすると、25クロックほどかかる。Burstsを下に引用する。上の図はSpartan-3A用MIGのReadの例だ。1.clk0の立ち下がりに同期して、ユーザー回路はReadコマンドを発行し始める。2.最低1クロック後にMIGは、clk0の立ち下がりに同期してuser_cmd_ackをアサートし、Readコマンドを受け付けたことをユーザー回路に知らせる。リフレッシュ動作中でuser_cmd_ackのアサートが遅れることもある。address)は、user_cmd_ackがアサートされた後の3クロック間維持する。その後のバーストアドレスは2クロック維持する。(clk0の立ち下がりに同期)4.user_output_dataが有効なのは、user_data_validがアサートされた時である。SDRAMのReadしたデータがuser_output_dataに出力される。SDRAMのバス幅の2倍の幅がある。SDRAMは1クロックで2つのデータを読み書きするが、その2つのデータがuser_output_dataにSDR1クロックで出力される。4バーストモードでは、2つのデータがclk90の立ち上がりに同期して出力される。burstを終了させるときに、ユーザー回路はburst_doneをアサートしてMIGに知らせる。4バーストモードの時は2クロック間アサートする。7.burst_doneのアサート後にReadコマンドをデアサートする。(NOPコマンドに変更)8.プリチャージをした後に、MIGはuser_cmd_ackをデアサートする。user_cmd_ackをデアサートされたら、ユーザー回路は次のコマンドを入力することができる。大体、Readコマンドを発行してからデータが来るまで17クロックかかるようだ。実際にシミュレーションでReadしている例を下に示す。4バーストモードで2組のデータをReadすると、データが到着し終わるまでに26.75クロックかかる。addressなことだ。COLUMNアドレスとBANKアドレスを入れ替えないと使いにくい。コメント:0プロフィールAuthor:marseeFPGAの部屋へようこそ!FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。WEBブログデザイナ。