2013年5月26日日曜日

LatticeECP3用DDR3 SDRAMCの作成 2

このところ、youtubeの金属加工系のビデオにハマっている。始めのころはBlacksmith(鍛冶屋)系だったが、最近は金属加工系の方にハマっていてKeith Fenner氏のビデオ(http://www.youtube.com/user/KEF791)とか、myfordboy氏のビデオ(http://www.youtube.com/user/myfordboy?feature=watch)をよく見ていている。
とにかく、coolでカッコよくて何時間見ても飽きないし、芯出しの仕方とかいろいろと勉強にもなる。この手の機械の構造は詳しくないが、ビデオから旋盤という機械はさまざまな工夫が施されていて、非常に高機能だということを知って驚いた。  ケースの穴あけ加工用にボール盤は持っているのだが、旋盤は持っていない。卓上用でいいから旋盤やフライス盤が欲しくなってしまった。  いつかお金ができたら入手したいもんだ。


そんなこんなでSDRAMCの方は進捗が捗々しくなかったが、この土日で何とかPHYの部分は90%程度は出来てきた。と言っても基本的にハードマクロをつなぎ合わせるだけなので構成はある程度は始めから決まっており、設計要素は無いに等しい。ハンドブックやマクロのシミュレーションモデルの振る舞いからやっと全体の構成方法が判ったといった感じだ。

ブロック図を以下に示す。図の水色のブロックは8bit分であり、ボードに実装されているDDR3 SDRAMは16bit品なので、このブロックが2個で構成される。XilinxのSpartan6の場合は起動時にIODELAYモジュールのキャリブレーションをする必要があったが、LatticeのECP3の場合はDQSBUFDもDELAYBもキャリブレーション処理は不要だ。

(2013.06.09 修正)


以下はPHY部単体でのシミュレーションの様子
PHYで使用しているODDRxx等の各ハードマクロのシミュレーション用ライブラリはDiamondのインストールディレクトリ配下のcae_library/simulation/verilog/ecp3/にあるのでそれを使っている。残念ながらDQSBUFDがIcarus verilogでコンパイルできないため、シミュレーションはmodelsimで行っている。

WRITE


READ


READの場合、DQSBUFDにREADストローブをアサートするのだが、このタイミングがSDRAMからくるDQSのアサート期間と重なっている必要がある。 このタイミングが正しくないとDATA有効を示すDATAVALID信号がアサートされっぱなしになったりするようだ。 今はまだ論理的なシミュレーションなのでタイミングを合わせられているが、実遅延を加味するとちょっと苦労するかも知れない。。。
とにかく、このPHYではこのREADストローブ信号の作り方が一番難しい感じがしている。


0 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

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