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

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

FPGAの部屋

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

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

コメント

こんにちは。overflow/underflow は

 assign wroverflow = wrfull & wrreq;
 assign rdunderflow = rdempty & rdreq;

で良いのでしたっけ?

簡単に実装できるのと、デバッグ以外では使われないのとで、
省かれているのかもしれませんね。
  1. 2010/08/18(水) 16:11:11 |
  2. URL |
  3. 武内 #-
  4. [ 編集 ]

こんにちは。

それで良いと思うのですが、謎なのは、Disable overflow checking とDisable underflow checking の選択があることなんです。あ、今書いていて気が付きましたが、これは、カウンタが回ってしまうか?それともoverflowやunderflowだったらカウンタを操作しないで、それ以外のデータを守るというチェックじゃないか?と思いました。
  1. 2010/08/18(水) 16:18:00 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

そういうことでしたか。

通常、overflow / underflow が出るのは周辺回路のバグでしょうから、あまり実効性のない設定っぽいですが。。。

FWFT でない場合には、とりあえず無条件でデータを読んでおいて、empty なら読み捨てる、というような方針で設計するとパフォーマンスが改善できるとか、そんな使い方があるんですかね。
  1. 2010/08/18(水) 16:44:06 |
  2. URL |
  3. 武内 #-
  4. [ 編集 ]

>通常、overflow / underflow が出るのは周辺回路のバグでしょうから、あまり実効性のない設定っぽいですが。。。
それがわかるのが重要だと思っていまして、Spartan3A Starter Kitのときにも、overflow, underflowがバグが出ているかどうかの指標となりました。結局、クロックの波形が悪いんじゃないか?という結論に今のところ至っていますが、overflow, underflowをLEDに出していたのがとても役に立ちました。シミュレーションでは、overflow, underflowのアサーションを実装していますが、実時間はシミュレーションできないので、実機にもoverflow, underflowを何らかの形で出しておくと、思わぬバグに悩むことが少なくなるのでは?と思っています。なるべく、そういったアサーションも実機に組み込むべきでは?と思っています。LEDがなければ、例えば、USBとか、シリアルで知らせるとか?

>FWFT でない場合には、とりあえず無条件でデータを読んでおいて、empty なら読み捨てる、というような方針で設計するとパフォーマンスが改善できるとか、そんな使い方があるんですかね。
それも良いですね。そういう方法もありますね。
今回はFWFTでなければ、wrusedwやrdusedw があるので、それをデコードして、読みすぎ、書きすぎを防ごうと思っていました。FWFTだと便利なんですが、もう少しユーザーズ・ガイドを読んでみようと思っています。
  1. 2010/08/18(水) 17:01:39 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

> overflow, underflowをLEDに

シミュレーションで動いて、実機で動かないのが一番デバッグしにくいですから、確かにそういう設計にしておくと便利ですね。勉強になります。
  1. 2010/08/18(水) 18:59:13 |
  2. URL |
  3. 武内 #-
  4. [ 編集 ]

こんばんわ。
Disable overflow checking とDisable underflow checkingはおっしゃる通り、チェックしてしまうとwrreq, rdreqに従って無条件で内部カウンタが回ります。overflowやunderflowを防ぐのは外側の仕事になります。underflow checkingが効いていると、rereq(ack)をHighにしっ放しにして、emptyがLowのときにだけデータを受け取るという、ずぼらな事が可能です。overflow checkingはoverflow時に先に書いた内容が破壊されずに残るというだけです。Show-ahead synchronous FIFO mode にすると性能的なペナルティとのことですが、多少fmaxが落ちるのと、最初のデータがFIFOの入口にライトされてから出口のemptyが下がるまで1クロックほど余計に掛る程度のことだったと思います。そんなにひどい性能低下がある訳ではありません。
 あと、SDRAMコントローラですがSOPC BuilderでSDRAMのIPが選択できますので、こちらを使った方が簡単だと思います。
  1. 2010/08/19(木) 01:33:08 |
  2. URL |
  3. くり #-
  4. [ 編集 ]

くりさん、こんにちは。お世話になります。
FIFOの件了解しました。解説ありがとうございました。やはり、Show-ahead synchronous FIFO modeで使おうと思います。
SDRAMコントローラですが、かなり出来ているのと、SOPC Buiderでのシステム構築(マスタデバイスの作り方とか?)がよくわからないので、取り敢えず自分で全部作ろうと思っていました。
SOPC Builderのマスタデバイスの作り方を書いたマニュアルがあったら教えていただければと思います。
  1. 2010/08/19(木) 05:01:40 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

こんにちは。

〉SOPC Builderのマスタデバイスの作り方を書いたマニュアルがあったら教えていただければと思います。

 うーん、昔はしっかりした資料があったと思ったんですが、ざっと見、良い(日本語の)資料が見つかりませんね―。まずは、

http://www.altera.co.jp/literature/manual/mnl_avalon_spec.pdf

の3-18~あたりで、マスタに必要な最小限の信号線と基本的なタイミングを把握して下さい。で、それらの信号線を持つHDLのファイルを作り、あとはComponent Editor

http://www.altera.com/literature/hb/qts/qts_qii54005.pdf

に読み込ませて、上手く自動認識できなかった信号線を調整する(カメラ側の信号線はすべてConduit (for exporting signals to the top level)に)程度で、SOPCに自作のIPを登録できます。何か分からないことがあったら質問して下さい。
  1. 2010/08/19(木) 13:34:53 |
  2. URL |
  3. くり #-
  4. [ 編集 ]

記事にあるようなShow-ahead synchronous FIFO modeでのFIFOの設定で使ったことはないですじゃ(笑)

シミュレーションで徹底的に動作を確認することをお薦めします

CQ出版のVHDLの本にFIFOの作り方があるので、DP-RAMで作る方があとあと悩まなくて済むこともあります。参考までに
  1. 2010/08/19(木) 20:20:02 |
  2. URL |
  3. アプロ #-
  4. [ 編集 ]

くりさん、ご紹介ありがとうございます。
教えていただいた資料を読んで、勉強してみたいと思います。わからないときはよろしくお願いします。アービタも作れるみたいですね。取り敢えず、CycloneIIIの理解から始めたいと思います。

アプロさん、こんにちは。
XilinxではFWFTモード使っています。この方が、使いやすいです。DP-RAMで作る方法はXilinxでは作ったことがあります。IP使えるならば、IP使おうと思っています。
  1. 2010/08/19(木) 20:47:07 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/1558-eab232a1
この記事にトラックバックする(FC2ブログユーザー)