今回はSpartan3A Starter Kitで自作したDDR2 SDRAMコントローラのレイテンシを測定する。Veritakシミュレータでシミュレーションをして、Write、Readのレイテンシを測定する。
本当はReadだけで良いのだが、ついでにWriteのレイテンシも測定したい。
まずはinitialize_end が1(初期化が終了)してから最初のWriteアクセス。これはACT(アクティベート)コマンドを入れているので、レイテンシは多少長い。

この場合のWriteレイテンシは約87nsec となった。(黒いカーソルから赤いカーソルまで)上図で説明すると、read_writeが0の時がWriteなので、addr_fifo_wrenが1の時にアドレスの書き込みとなって、ここでDDR2 SDRAMへのWriteを要求している(同時にWriteデータもFIFOに書き込んでいるはず)。そこからDDR2 SDRAMのWriteした時点までをWriteレイテンシとしている。
同一ROWアドレス、同一バンクがアクティベートされていれば、ACTコマンドを入れずにWriteコマンドやReadコマンドを入れることができる。自作のDDR2 SDRAMコントローラはバンクを1つしかアクティベートしないので、ROWアドレスか、バンクが異なる場合はプリチャージしてACTコマンドを入れる必要があるので、この場合はレイテンシが伸びてしまう。通常はこうなるが、リフレッシュの場合にプリチャージをするので、その後の1発目のWriteは上図のレイテンシとなる。
次にReadの場合のレイテンシを示す。この場合はWriteで書き込んだROWアドレス、バンクと同一なので、ACTコマンドは省略されている。

READ要求を入れてからデータがREADできるまでのレイテンシは147nsec だった。上図で、read_writeが1の時がReadなので、addr_fifo_wrenが1の時にDDR2 SDRAMへのReadを要求している。そこから、Readデータが読み出されるまでをReadレイテンシとしている。
このReadは、プリチャージをしていない場合なので、プリチャージをする場合を考えてみる。Writeの後にReadした時に、プリチャージとACTコマンドが入った場合のWriteコマンドとReadコマンドの間隔は113nsec となった。次に、Writeの後にReadした時に、プリチャージとACTコマンドが入らない場合のWriteコマンドとReadコマンドの間隔は33nsec だった。よって、80nsec がプリチャージとACTコマンドのコストということができると思う。
次にリフレッシュによるレイテンシについて、みて行こうと思う。リフレッシュのタイミングを下に示す。これは次のバーストのためにプリチャージしてACTコマンドを入れたときにリフレッシュが起きて、また同じACTコマンドを入れ直している例だ。下図に示す。

この場合には、上図に示すように、180nsec のレイテンシが増加することになる。
これらのシミュレーション波形を見ると、最悪の場合は、ROWアドレスやバンクが異なる(つまりプリチャージ、ACTコマンドを入れなければならない)ReadコマンドがFIFOに詰まっている場合だと思う。そのような場合をシミュレーションによって創りだすことによって、ビットマップVGAコントローラがRead要求をした時のレイテンシの最悪値を求めたいと思う。
- 2010年01月09日 09:02 |
- VGAコントローラ
-
| トラックバック:0
-
| コメント:0