FC2カウンター FPGAの部屋 SDR SDRAMコントローラ

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

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

DE0のSDR SDRAMコントローラ4(デバック中)

”DE0のSDR SDRAMコントローラ3(ALTPLL)”でMegaWizard Plug-In Manager でALTPLLを生成した。しかし、SDRAMに供給するクロックは、位相シフトを考えても、独立に1つのポートを割り当てたほうが良いと思ったので、ALTPLLの出力を変更した。

ここで疑問なのだが、Cyclone IIIのSDRAMへのクロックの出し方はどうすればよいのだろう?Xilinxだと、IOBに内蔵されたDDRレジスタを叩いて、クロックを出力させたが、Cyclone IIIではPLLから直接外部IOパッドに出力のだろうか?
Cyclone III デザイン・ガイドラインの13ページのクロック出力数の項を下に参照させて頂く。

Cyclone III PLL は、最大5 個のクロック出力(c0-c4)を備えています。c0 クロッ ク出力は、専用外部クロック出力ピン(推奨)、通常のユーザI/O または専用グ ローバル・クロック・ネットワークに接続することができます。


ということなので、どうやらALTPLLのc0にSDRAMへのクロック出力をアサインする必要がある。もう一度、ALTPLLの設定を変更した。
SDRAMCTL_DE0_2_101019.png

これで、c0がSDRAMへのクロック出力(133.333MHz)、c1が内部でSDRAMをコントロールする為に使用するクロック0度(133MHz)、c2が内部でSDRAMをコントロールする為に使用するクロック180度(133.333MHz)、c3が133.333/16MHz=8.3333MHz、c4がCMOSカメラ・ディスプレイ回路用の25MHzとなった。

次に、SDR SDRAMコントローラ単体でバーストテストをすることにした。現在、Veritakでシミュレーションをできるようにソースを修正中だ。XilinxのDDR2 SDRAMコントローラのプロジェクトからAlteraのSDR SDRAMコントローラに変更しているので、バグが満載だけれど、少しずつ直している。
SDRAMCTL_DE0_3_101019.png
  1. 2010年10月19日 05:45 |
  2. SDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:4

DE0のSDR SDRAMコントローラ3(ALTPLL)

どうも、先週の金曜日くらいから調子が悪いです。朝に熱が出て、昼ごろ下がる状態が続いています。扁桃腺が腫れているようです。

さて、Altera の方に戻って、SDR SDRAMコントローラを作っています。Xilinxの時にはDCMでしたが、Cyclone IIIは、PLLなので、MegaWizard Plug-In Manager でALTPLLを生成した。DCMはカスケードして使っていたが、ALTPLLはカスケードしなくても必要な出力が出ていたので、単体で使用している。
SDRAMCTL_DE0_1_101011.png

c0はカメラ用の25MHz、c1はSDRAM用の133.33MHz位相0度、c2は133.33MHz位相180度、c3は133.33MHz/16 = 8.3333MHzだ。
一発で、出せてうれしい。
早く、バーストテスト用の回路を作ってテストしてみたい。まずはシミュレーションからやってみよう。

(2010/10/19:追記)
ALTPLLの設定を変更しました。詳しくは、”DE0のSDR SDRAMコントローラ4(デバック中)”をご覧くさい。
  1. 2010年10月11日 17:13 |
  2. SDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

DE0のSDR SDRAMコントローラ2

DE0にCMOSカメラを搭載するためのSDR SDRAMコントローラを作っていこうと思っている。
SDR SDRAMコントローラは、Xilinx用に作ったDDR SDRAMコントローラを改造する。実はXilinxのVirtex-2ProではVHDLだが、すでに動作してるコントローラだ(動作確認はしたのですが、使ってはいません)。それをVerilog HDL にすでに変更してあるので、XilinxからAlteraへの変更を行えば良い。
問題はアドレスや書き込み、読み出しデータのFIFOが分散RAMを使用したFIFOを使用しているところだ。Altera ではMLABを使おうと思っていたが、CycloneシリーズではMLABはないみたい。
そこで、勿体無いがM9Kブロックを使用する。これはMegaWizard Plug-In Manager でFIFOを生成することにした。すでに、”MegaWizard Plug-In Manager で作った同期FIFOの動作を確かめる1 ”と”MegaWizard Plug-In Manager で作った同期FIFOの動作を確かめる2(シミュレーション) ”でSFIFOの動作は確かめてある。
書き込み、読み出しデータのFIFOは、そのままSFIFOをMegaWizard Plug-In Manager で生成して使うこととするが、アドレスFIFOは次の出力ポートがあるので、SFIFOを内部にインスタンスして、ロジックを加えることにする。

DE0のSDRAMは、Integrated Circuit Solution Inc. のIS42S16400ということだった。このSDRAMは64Mbitの16ビット幅のデータバスを持つSDRAMだ。シミュレーションをするためのVerilog HDLモデルを探したのだが、なかったので、Micron社の256MbitのMT48LC16M16のモデルで代用することにした。
2つのSDRAMの違いは、アドレスビット幅がIS42S16400が12ビットで、MT48LC16M16が13ビット幅、カラムアドレス幅がIS42S16400が8ビットで、MT48LC16M16が9ビット幅であることだ。
動作周波数は一応、133MHzを目指すことにしようと思う。CL=3となる。


# いろいろ迷ったんですが、SOPC Builder使わないとAltera じゃないかな? FPGA-BBSで出ていたSG-DMA使おうか?とか。結局、お蔵入りしているSDR SDRAMコントローラも動かしてみたいし、Alteraの実装の様子も見てみたいので、今回はXilinxからの変更で行くことにしました。FPGA技術6号がでたらSOPC BuilderのMMマスタでつくり直してみようと思っています。
  1. 2010年10月05日 05:58 |
  2. SDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

DE0のSDR SDRAMコントローラ1

昨日は娘の具合が悪くなってしまったので、ジブリ美術館には行こうとしたのだが、四谷で引き返してしまった。TXを降りる頃はだいぶ回復していたので、良かった。チケットと往復の電車賃がもったいなかったが、まあこんなこともあるということで。。。ジブリ美術館は、ひところの全く予約が取れない状況ではなく、土日でも予約が取れる様なので、9月12日に予約した。今度はいけると良いな?と思う。これで、夏休みの旅行は全滅で、1つも行けなかった。。。

さて、Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路は、今度の日曜日にFPGA-CAFEで、ユニバーサル基板とソケットのハンダ付けさせてもらうことにしようと思っている。ライトアングルヘッダは在庫がなく遅れるそうなので、取り敢えずカメラを上向きに付けようと思っている。
次に、AlteraのボードのDE0にCMOSカメラをつなぎたいと思っているので、まずはSDR SDRAMのコントローラをつくろうと思っている。いままでのDDR2 SDRAMコントローラとバックエンドへの入出力インターフェースを合わせれば、今までの回路が使いまわせるはずだ。
SDR SDRAMコントローラはVHDLはシミュレーションが終了して、コンパイル(Alteraではコンパイルでよかったですよね?)する段階になっている。ただ、DE0用ではないため、DE0の使用している、SDR SDRAMに合わせたチューニングが必要な状態だ。Verilogバージョンは作りかけで止まっているので、完成させて、こっちを使おうと思っている。SDR SDRAMはDDRよりも実装が楽になるはずだ。
Avalonバスのマスタデバイスの作り方が分かれば(CMOSカメラの出力をマスタデバイスとして作れれば)、SDR SDRAMコントローラはあるのだが、自分で構築すると作る必要がある(のですよね?)。

SDR SDRAMコントローラとは関係ない、なくもないが、AlteraのFIFOはFWFTモードがあるのだろうか?
Alteraでは、同期FIFOのことはSCFIFO(Single-Clock FIFO)、非同期FIFOのことはDCFIFO(Dual-Clock FIFO)とよぶようだ。DCFIFOで入力データ幅と出力データ幅の異なるFIFOもMegaWizard Plug-In Manager で作ることができたのだが、FWFTに出来るかどうかわからないし、overflow, underflow出力も出せないのだろうか?チェックはしているみたいなのだが、overflow, underflow出力が出せれば、実機でアサーションとして使えるのだが。。。ユーザーズ・ガイドを読んで勉強することにする。
DCFIFO_1_100818.png

SCFIFO and DCFIFO Megafunctions User Guide を読んでいてわかったのだが、XilinxのCore Generator のFIFOのFWFTモードと同じモードは、Show-ahead synchronous FIFO mode と言うらしい?
DCFIFO_2_100818.png

でも性能へのペナルティがあると書いてあるがなぜだろう?いろいろ謎なことが多いが、ユーザーズ・ガイドを読むしかないかな?
(Quartus 2のバージョンは9.1です)

(追記)
もしかして、”the q output must be registered in normal mode and unregistered in show-ahead mode for the DCFIFO.”だから性能が悪くなるのかな?
  1. 2010年08月18日 05:36 |
  2. SDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:10