2008/12/19

Spartan3 PCIバス付きFPGA評価ボード(10) - 簡易PCIバスアナライザによるデータ解析

前回のPCIボード性能測定では、
  • 32MBライト=9.77MB/s
  • 32MBリード=5.28MB/s

という不本意かつアンバランスな結果でした。

この現象を、早速、簡易PCIバスアナライザで解析してみました。

  • メモリリード
    メモリリードを実行しているときのPCIバス状態は以下のようになりました。AD:のfa000000がPCIカードのPCIメモリ空間のアドレスで、以下のデータは0xfa000000を読み終わって0xfa000004を読みにいくところです。先頭の#...はタイムスタンプ(PCIクロックに同期して1増える)です。
#008f5c28: AD: fa000000, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#008f5c29: AD: deadbeef, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#000f5c2a: AD: deadbeef, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# H, STOP# H
← 15クロック →
#008f5c39: AD: fa000004, CBE 9(mr ), FRAME# H, DEVSEL# L, IRDY# L, TRDY# L, STOP# L
#008f5c3a: AD: fa000004, CBE f(---), FRAME# L, DEVSEL# L, IRDY# H, TRDY# L, STOP# L
#008f5c3b: AD: fa000004, CBE f(---), FRAME# L, DEVSEL# L, IRDY# H, TRDY# L, STOP# L
#008f5c3c: AD: fa000004, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#008f5c3d: AD: fa000004, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#008f5c3e: AD: fa000004, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#008f5c3f: AD: fa000004, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#008f5c40: AD: fa000004, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#008f5c41: AD: deadbeef, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#000f5c42: AD: deadbeef, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# H, STOP# H
← 15クロック →
#008f5c51: AD: fa000008, CBE 9(mr ), FRAME# H, DEVSEL# L, IRDY# L, TRDY# L, STOP# L
#008f5c52: AD: fa000008, CBE f(---), FRAME# L, DEVSEL# L, IRDY# H, TRDY# L, STOP# L
1回のメモリリードに0x8f5c39~0x8f5c42までの10クロックを要していることが判ります。しかも、各メモリリードの間に15クロックの隙間が空いてしまっています。 1回の読み出しに10+15=25クロック掛かるとすると、133MB/s/25 = 5.32MB/sとなり、ほぼ実測結果と符合しています。
  • メモリライト
    今度はライトの方を見てみます。やはり一回のライトに10クロック掛かっています。同時に各ライト間に隙間がありますが、こちらの隙間は4クロックで済んでいます。

    133MB/s/(10+4)=9.5MB/sでライトの方も実測値と整合性が取れました。

#00e6cda4: AD: 87654321, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#0066cda5: AD: 87654321, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# H, STOP# H
← 4クロック →
#00e6cda9: AD: fa000004, CBE 8(mw ), FRAME# H, DEVSEL# L, IRDY# L, TRDY# L, STOP# L
#00e6cdaa: AD: 87654321, CBE f(---), FRAME# H, DEVSEL# L, IRDY# H, TRDY# L, STOP# L
#00e6cdab: AD: 87654321, CBE f(---), FRAME# H, DEVSEL# L, IRDY# H, TRDY# L, STOP# L
#00e6cdac: AD: 87654321, CBE f(---), FRAME# H, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#00e6cdad: AD: 87654321, CBE f(---), FRAME# H, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#00e6cdae: AD: 87654321, CBE f(---), FRAME# H, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#00e6cdaf: AD: 87654321, CBE f(---), FRAME# H, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#00e6cdb0: AD: 87654321, CBE f(---), FRAME# H, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#00e6cdb1: AD: 87654321, CBE f(---), FRAME# H, DEVSEL# H, IRDY# H, TRDY# L, STOP# L
#0066cdb2: AD: 87654321, CBE f(---), FRAME# H, DEVSEL# H, IRDY# H, TRDY# H, STOP# H
#0066cdb3: AD: 87654321, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# H, STOP# H
← 3クロック →
#00e6cdb6: AD: fa000008, CBE 8(mw ), FRAME# H, DEVSEL# L, IRDY# L, TRDY# L, STOP# L
#00e6cdb7: AD: 87654321, CBE f(---), FRAME# H, DEVSEL# L, IRDY# H, TRDY# L, STOP# L
#00e6cdb8: AD: 87654321, CBE f(---), FRAME# H, DEVSEL# L, IRDY# H, TRDY# L, STOP# L
何故このような隙間が空くのかはわかりませんが、マザーボード・チップセット絡みに何か事情があるのでしょう。
  • バースト転送対応
  • PCIバスシーケンサの状態遷移を見直して、より無駄なく状態間を移動できるようにする
などに取り組んで行きます。

0 件のコメント: