System Architectureは以下のようにしている。 Versa BoardはPCIE I/Fも付いているが、いきなりPCIEから制御してもバグでPCが固まったりHDDに障害を与えたりする可能性も考えられるので、最初はPCとはなるべく粗な結合状態で確認したほうがいいだろうと考えた。

で、以下のようなプログラムで0を書いて、それが正しく読めるかを見てみた。

結果は以下の通りで正しく読めていない。リードを10回行っているが、表示される値が微妙に異なっているので少なくともリードに問題があるようだ。

今度は、FFFFFFFFで試してみたが同様に正しく読めなかった。

結果

そこで、以下のようにSDRAMからのリードデータの代わりにカウンタの値を返すようにしてリードしてみた。カウンタのカウントイネーブルであるrd_vldはDQSBUFDのDATAVALID信号だ。

SDRAMは16bit x バースト長8でアクセスしていて、且つ、上記の箇所ではデータ幅は64bitだから、期待通りに動作していればrd_vld (DATAVALID)は2サイクルの期間アサートされる筈だ。したがって、カウンタはリードの度に+2づつ更新される筈である。が、期待に反して以下のような結果になった。以下では1分程度時間をあけて4回プログラムを実行した。

上記結果をみると実行の度に値が増加(しかも大幅に)しているので、どうやらDATAVALIDが1に張り付いているっぽい。このDATAVALIDが1に維持されるという現象はシミュレーションでも確認されていて、それを回避するためにREADストローブのタイミングをあれこれと苦心していた訳だが、実機でも発生してしまっている。ということはシュミレーションモデルの問題では無くて実際にそういう動作をするということなんだろう。なんとも癖のあるモジュールだ。それとも、何か使い方を間違っているんだろうか??
うーん・・・
0 件のコメント:
コメントを投稿