2008/12/22

Spartan3 PCIバス付きFPGA評価ボード(11) - 状態遷移不正

前回、簡易PCIアナライザで性能が出ない原因を検証しましたが、よくよく検討するとあまりにも遅すぎです。どうもおかしな状態遷移をしているように見えます。机上では良くわからなかったので、ステートマシンの状態番号までトレースするようにしてデバッグしたところ、不正な状態?(本来生起するはずのないIDLE状態)が途中に入ってしまって遅くなっていたようです。

ISEのログを見るとステートマシンが推論された様子がありません。そのあたりが原因かもしれないと思い、ステートマシンの部分をvariableで書き直したりして、ステートマシンを推論したというメッセージを確認したら、何とかちゃんとした状態遷移をするようになりました。

[WRITE]
#003367: AD fa000000, CBE 8(mw ), FRAME# H, DEVSEL# L, IRDY# L, TRDY# L, STOP# L, stat 0, app 0
#003368: AD 87654321, CBE f(---), FRAME# L, DEVSEL# L, IRDY# H, TRDY# L, STOP# L, stat 0, app 0
#003369: AD 87654321, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L, stat 1, app 0
#00336a: AD 87654321, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L, stat 3, app 0
#00336b: AD 87654321, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L, stat 4, app 0
#00336c: AD 87654321, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L, stat 4, app 3
#00336d: AD 87654321, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# H, STOP# H, stat 4, app 5
#00336e: AD 87654321, CBE f(---), FRAME# L, DEVSEL# L, IRDY# L, TRDY# L, STOP# L, stat 5, app 0
#00336f: AD 87654321, CBE f(---), FRAME# L, DEVSEL# L, IRDY# L, TRDY# L, STOP# L, stat 6, app 0

[READ]
#0067e7: AD fa000000, CBE 9(mr ), FRAME# H, DEVSEL# L, IRDY# L, TRDY# L, STOP# L, stat 0, app 0
#0067e8: AD fa000000, CBE f(---), FRAME# L, DEVSEL# L, IRDY# H, TRDY# L, STOP# L, stat 0, app 0
#0067e9: AD fa000000, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L, stat 1, app 0
#0067ea: AD fa000000, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L, stat 3, app 0
#0067eb: AD fa000000, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L, stat 4, app 0
#0067ec: AD deadbeef, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# L, STOP# L, stat 4, app 3
#0067ed: AD deadbeef, CBE f(---), FRAME# L, DEVSEL# H, IRDY# H, TRDY# H, STOP# H, stat 4, app 5
#0067ee: AD deadbeef, CBE f(---), FRAME# L, DEVSEL# L, IRDY# L, TRDY# L, STOP# L, stat 5, app 0
#0067ef: AD deadbeef, CBE f(---), FRAME# L, DEVSEL# L, IRDY# L, TRDY# L, STOP# L, stat 6, app 0


VHDLにしても、verilogにしても、その文法や意味論そのものは生成される回路の正当性を保障してくれなくて、結局、回路要素マクロでしかないので仕方ありません。

0 件のコメント: