実機デバッグ停滞中

SD カードを読み出す部分で1週間ぐらい停滞しています。

SPI mode で CPU からそのポートにアクセスしたら、8回または16回のシリアルなデータ送受信をするとてもシンプルなデバイス。これの動作が非常に安定しません。

ソースも4回作り直したし、たまーーーに運がいいとファイルの読み込みまで成功することがあります。でも読み込みが途中で停まらないだけでデータの中身はあまり信頼できません。

今日もいろいろ試したのですが、1つわかったことがあります。それはメモリウェイトです。メモリウェイトは SPI が終わったら直後にはずし、 RD, WR が立ち上がったら再度メモリウェイトをかけるようにします。これを緩めてアドレスが有効になった直後にメモリウェイトをかけるようにタイミングをかえるとわりと対照的な結果が出てきました。

前者では大体の場合途中でタイミングがずれるのか*1、大体300回ぐらいアクセスするとメモリウェイトが有効になったまま、ステートマシンが停まります。

後者ではステートマシンが停まることはありませんが、メモリウェイトを待ってくれません。そこらへんが怪しいということです。ここら辺の怪しい要因として CPU は外付けの Xtal 8MHz で動作していますが、 FPGA はDE1内部の Xtal 24MHz 内蔵の PLL を経由して 64MHz で動作させています。 8倍の速さで動いていれば問題ないと勝手に決め付けていますが、同期は完全に無視しているのでここらへんがつらいかもしれません。

ここらへんの分野はあまりよく理解していないので動かないということも十分にあり得ます。... 一人で籠もってやっているとこういったことを書き出して自分の中で整理しないといけませんね。

*1:ステートマシンの論理合成がここだけ変だと思いこんでいたがちょっと無理