FC2カウンター FPGAの部屋 2005年10月07日
FC2ブログ

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

FPGAの部屋

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

今日の教訓

今日は教訓をいくつか。他山の石としてください。

DDR SDRAMコントローラはデータや制御信号(DQS等)を入出力ともIOBのDDRレジスタにマップしないと実現はおぼつかない。
セミナに行った時にIOBにマップしないでも大丈夫な方法も教えてもらったが、基本的にはIOBのレジスタを使ったほうが安全。
今日、チップスコープの結果を見て、どうもおかしいと思って調べてみた。FPGA Editorで見ると、IOBにマップされているはずのレジスタがIOBの外に出ていた。これじゃ、だめだ。IOBに入っていると思って、制約もかけていなかった。
原因は、

1.MAPのプロパティ中の"Pack I/O Registers/Latches into IOBs"プロパティを"For Inputs and Outputs"にしておいて、IOBに入るように推定されるようにしておいてもIOB入らない事があった。
これは制約で直接指定した。このように
INST "U_ddr_cont_inf/DDR_CONT/read_data_module_inst/dq_rise[*]" IOB = TRUE;

2.Virtex2のIOBは、入力用FF、出力用FFのリセットが共通になっている。出力がDDRレジスタ・プリミティブを使用していて、IOBの入力用FFにする予定のHDL記述のリセットと異なると、当然ながらIOBの入力用FFは使用されない。そういう場合は入力用FFのリセットが削除できるので削除したらOKとなった。

3.出力のトライステート・バッファの制御はFFからの出力で皆さん制御していると思います。それをIOBに入れたかったがDQS用の制御FFが入ってなかった。これもVirtex2のIOBの制限で、出力FFのクロックと出力トライステート・バッファ制御用FFのクロックは同一でなければならなかったようだ。
クロックが違っているので、IOBに入れるのは無理となった。これは、MAXDELAY制約をそのネットに加えて、良しとした。

(FPGA EditorでIOBを見ると構造が良くわかると思います。)
この3つを厳密に適用したら、大丈夫になったようだ。まだ火曜日に再度やってみるまで安心できないかもしれないが、今日のところは単発アクセスは完璧だ。バースト・アクセスは、今の回路では検証できないので保留。単発が完璧でチップスコープが使えれば、バーストの検証も難しくないと思われる。だが、現在の動作周波数は83MHzである。これを133.33MHzまで上げなくては。。。
http://marsee101.blog19.fc2.com/blog-entry-32.htmlでカスケード接続DCMがおかしいと書いたが、もしかすると大丈夫だったかもしれない。もう一度確かめる予定。
133MHz水晶は、DVIボードの製造元に売ってくれるかどうか問い合わせ中。あっても悪いことは無いので、購入したい。
  1. 2005年10月07日 14:46 |
  2. FPGAチップ内の配線方法
  3. | トラックバック:0
  4. | コメント:0

XilinxのFPGAについての雑感

今回の回路はPlacer Cost Table(Place & Routeのプロパティの中)を変更すると、動作周波数違反が、がらがら変わったり、ホールドタイム・バイオレーションが出たり、本当に暴れる回路だった。
FPGAチップはXC2V6000-5FF1517。スライス占有率で11%ほどしか使ってない回路だ。
MAPリポートの一部を示す。

Logic Utilization:
Number of Slice Flip Flops: 3,197 out of 67,584 4%
Number of 4 input LUTs: 1,806 out of 67,584 2%
Logic Distribution:
Number of occupied Slices: 4,029 out of 33,792 11%
Total Number 4 input LUTs: 4,235 out of 67,584 6%
Number used as logic: 1,806
Number used as a route-thru: 258
Number used for Dual Port RAMs: 1,820
(Two LUTs used per Dual Port RAM)
Number used as Shift registers: 351

Number of bonded IOBs: 194 out of 1,104 17%
IOB Flip Flops: 13
IOB Dual-Data Rate Flops: 148
Number of Block RAMs: 19 out of 144 13%
Number of GCLKs: 8 out of 16 50%
Number of DCMs: 3 out of 12 25%
Number of BSCANs: 1 out of 1 100%

一番大きいのが、LUTを使用した分散RAM。
こういう大きなFPGAの一部を使う場合は、少なくともエリア制約を作って適用しないと、うまく行かないのだろうか?
P&Rが迷ってしまうことがあるのかもしれない。
どなたか発表できる事例があれば教えてください。

チップスコープをかけると動作がおかしくなると言う現象は、よく聞くし、私も経験したことがる。チップスコープを入れるとうまく動くことがあると言うのも。
それは、制約が足りないのかもしれないが、うまく動作したチップスコープが入っていないコンパイル結果をfloorplannerでロジックセルを固定する。そして、チップスコープをかければ、少なくとも基本動作がおかしくなることはないはずである。チップスコープが動かないことはあるかもしれないが。。。
  1. 2005年10月07日 09:34 |
  2. FPGAチップ内の配線方法
  3. | トラックバック:0
  4. | コメント:0