2013年7月15日月曜日

LatticeECP3用DDR3 SDRAMCの作成 11

LFSRを使ったR/W テストモジュール 2つによるアクセス試験の場合にfailが発生する問題を調べている。テストモジュールを修正して、1回めのfail発生時のアドレス、レングス、データの初期値、そして何ワードまで受信していたかを示すカウンタ値をレジスタに保持し後からUART経由でリードできるようにした。 PC側のプログラムは以下のようにした。通常は各カウント値をポーリングし表示し続けるが、何れかでfailが検出されたらループを抜け、保持されている値をリードして表示しプログラムを終了する。

これを実行したところ、以下のような結果が得られた。 xx_ADR_BKの上位側8bitはレングス値、下位側24bitはアドレス値、xx_RCNT_BKは何ワードまで受信していたかを示すカウンタの値、xx_ECP_BKはリードデータの期待値、xx_RDT_BKはリードされた値である。

上記はRW1_FAIL_Cが3、RW2_FAIL_Cが0となっており、RW1側でのみfailとなっていることを示している。興味深いことに、FPGAをリセットして再度プログラムを実行しても同じアドレス、同じRCNT値の箇所でfailが発生し、xx_RDT_BKの値も同じであった。

しかし、このデータではリードされたのがどういう素性の値なのか判らないので、乱数の代わりにアドレス値をデータとして書き込むように修正して再度実行してみた。こんどは以下のような結果になった。赤線の箇所の値が異なっている。

 FPGAをリセットして再度実行しても同じ結果になるので規則性があるようにも見える。
値が化けているところを見るとタイミングマージンの問題か?という気もするが、だとして、何回試行しても同じ化け方になるもんだろうか???  チェックモジュール1chだけでの動作を昨晩中走らせてみたが問題なかった。2ch動作させた場合にfailが発生する。シミュレーションで確認したいのだが、passカウントの値が3000のオーダーに達するのにこれまた一晩位を要する。波形ファイルもmodelsimのwlf形式で4GBを越えてしまっていた。したがって、上記結果にあるように80000のオーダーまでシュミレーションして確認するというのは現実的では無い。 XilinxのChipscopeやALTERAのSignalTapのような仕組みがLatticeにもあり、Revealというらしいのだが、果たしてこれを使うべきか。。。  観測したい信号は125MHzまたは250MHzで動作している信号になる。これをサンプリングして見るためにはサンプリングクロックは250MHz以上を使う必要がある。見えるか・・・というか、Revealを入れてタイミングがMetするか???

何とか工夫して解析するしかないか...うーむ。


0 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...