DDR SDRAMコントローラを設計する上で、参考にしたアプリケーション・ノートがある。それがXilinxのxapp253だ。もうXilinxのサイトには載っていないが、グーグルのキャッシュが
ここにある。デザインファイルは
ここに残っている。
シミュレーションしてこれを調べた所、とてもよい出来だと思った。バンクをアクティブにした後、タイムアウトまでプリチャージしない様になっている。タイムアウト前に同じバンクへのアクセスが来たら、バンクがアクティブになっているので、レイテンシが短くなる。これを使ってもいいかなと思ったが、シミュレーションをしてみると、バグがあるようだ。2つくらい修正したが、どうもまだだめなので、自分で作りることにした。
構造を参考にしながら、オリジナルに作ったのだが、アプリ・ノートの回路に疑問があるところがあった。DQ,DQS,DMの信号が1本ずつモジュールとして書かれていたのだ。1本を8本とか4本にまとめていて、何でこんな面倒なことするのかな?と思っていた。まとめてインスタンスすれば良いのにと思っていた。実際自分ではfor generateでまとめてインスタンスした。
でも、今回のセミナを受けていた気がついた。1本ずつまとめ、8本単位にまとめれば、それごとにフロアプランでエリア制約をかけることが出来る。(エリア制約については
これを参照) データバスを64本(私のは32本じゃなくてDIMM用に64本に拡張してある)まとめると、フロアプランナーでは四角形しかエリア制約できないので、ロジックがばらけてしまう。これはタイミングにとっては不利になると思う。
さらに、私は書き込みと読み出しのモジュールを分けてしまった。これじゃ、タイリング状にフロアプランするしかないし、(IOBは読み書き両方)おまけにフロアプランナーじゃ出来ないので、PACEでやるしかない。それで、IOBの形でアプリ・ノートでは書いてあったのか。IOBの配置もチップの横に縦一列に並んでいて、データパス的に有利だ。
やはり、IOBに最適化できるように修正しよう。
- 2005年11月12日 08:36 |
- その他のFPGAの話題
-
| トラックバック:0
-
| コメント:2