FC2カウンター FPGAの部屋 2009年06月04日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

FPGAの部屋が100万ヒット達成

ブログ”FPGAの部屋”が100万ヒットを達成しました。皆様、ありがとうございます。
これからも、自分の物忘れを補うためにも書いていこうと思います。かなり巨大な備忘録になりました。
FPGAs_room_1milion_090604.png

  1. 2009年06月04日 20:15 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

Spartan3A Starter KitのDDR2 SDRAMコントローラのシミュレーション2(DMの機能検証)

Spartan3A Starter KitのDDR2 SDRAMコントローラのシミュレーション1”でDQとDQSの動作はOKになったので、今度はDMの動作のバグを取ることにする。

DM(ddr2_dm) とは何なのか?ということから説明すると、このDDR2 SDRAMは16ビットのデータ幅を持っている。しかもプリフェッチ4なので、4つの16ビットのデータをWriteでは書き込むことになる。これでは一度に8バイトのデータを書き込むことになってしまう。もしC言語などでcharで宣言した i という変数を1つだけ書きたいとする。変数 i の隣のメモリ番地には、変数 j がアサインされたら。。。このメモリをDDR2 SDRAMとすると、変数 i の番地に i の値を書きこもうとしたら、変数 j も書き換えることになってしまう(8バイト単位でWriteするから)。そこでDM(ddr2_dm)信号で、書き換えたくないバイトはマスク、つまり書き込まないようにしようということだ。ddr2_dmが1の時には、そのバイトはDDR2 SDRAMに書き込まれない。
以上のことを踏まえて、シミュレーションでDDR2 SDRAMにWriteするtaskを見てみよう。

DDR2_WRITE(25'h000_0100, 4'b1001, 32'h1234_5678, 4'b0110, 32'h9ABC_DEF0);
DDR2_WRITE(25'h000_0104, 4'b1100, 32'h2233_4455, 4'b0011, 32'h3344_5566);
DDR2_WRITE(25'h000_0108, 4'b1010, 32'h7788_99AA, 4'b0101, 32'hBBCC_DDEE);


DDR2_WRITEというのがDDR2 SDRAMへWriteするtaskで、最初のフィールドが先頭のアドレス、2番目のフィールドが3番目のフィールドのマスクの値(DM)、3番目のフィールドはDQSの最初の立ち上がりと立下りのクロックエッジで書き込まれるデータ(DQ)、4番目のフィールドは5番目のフィールドのマスクの値(DM)、5目のフィールドはDQSの2番目の立ち上がりと立下りのクロックエッジで書き込まれるデータ(DQ)となっている。都合64ビット、8バイトのデータがバーストで書き込まれる。2番目と4番目のフィールドのマスク値が1のバイトはDDR2 SDRAMにバイトデータが書き込まれない。
バグを修正したDDR2 SDRAMのWrite時のシミュレーション波形で見てみる。
Spa3A_STKit_DDR2_4_090604.png

上の図でピンクの矢印の部分はddr2_dqの値が16進数で"5678"で、ddr2_dmの値が2進数で"01"なので、"5678"というWriteデータのうちの"56"のみDDR2 SDRAMに書きこまれることになる。"78"の部分は書き込まれずに元のデータが残る。
緑の矢印の部分はddr2_dqの値が16進数で"1234"で、ddr2_dmの値が2進数で"10"なので、"1234"というWriteデータのうちの"34"のみDDR2 SDRAMに書きこまれることになる。"12"の部分は書き込まれずに元のデータが残る。
それでは、Readのシミュレーション波形を見てみよう。
Spa3A_STKit_DDR2_5_090604.png

上の波形を見るとddr2_dqにReadされる波形はピンクの矢印のところに"56xx"が見えて"56"のみWriteされているのが分かる。緑の矢印のところに"xx34"が見えて"34"のみWriteされているのが分かる。
これでddr2_dmの動作もOKとなった。
これからは、バースト転送テストを行うことにしようと思ったが、出力データが正常に出ていないようだ。これをバグフィックスする。

#このようにいまのSDRAMはデータの粒度が大きいので、小さいデータ粒度でアクセスすると無駄が多い。例えば、通常のx86パソコンのDIMMは64ビット幅なのでDDR2のプリフェッチ4だと、32バイトを一度に読み書きすることになる。そこで1バイトを書きかえるとすると、残りの31バイトのアクセスは無駄になる。つまり、その場合は1/32 = 3パーセント程度しか使っていないことになる。DDR3のプリフェッチ8だと1/64 = 1.6パーセント程度しか使えていない。データキャッシュがないとやっていられないだろうな~。。。
  1. 2009年06月04日 05:32 |
  2. Spartan3A Starter Kit
  3. | トラックバック:0
  4. | コメント:0