2012年5月20日日曜日

Spartan6版 DDR2コントローラの作成 2

というわけで、DDR2 SDRAMコントローラを実機で動かしてみた。

実機動作の為のRTLは以下の構成とした。


合成はうまく行った。


メモリのリードライトチェックプログラムを走らせてエラーにならないことが確認できたので、
PCからUSB-UART経由で画像データをDRAMにダウンロードしてDVIに表示させてみた。
これも問題ない。 解像度はXGA (1024x768)




ということで、200MHz(DDR2-400)版のコントローラは割と簡単に作ることができた。
次は、400MHz(DDR2-800)に挑戦だぁー


2012年5月13日日曜日

Spartan6版 DDR2コントローラの作成

DDR2 SDRAMコントローラを作っている。
DDR2 SDRAMコントローラの作成はこのブログの始めのほう(2010年)でも行ったが、その時は
Spartan3A版で、Spartan3A Starter Kitで動作させた。 今回はSpartan6版で、DIGILENTのATLYS
ボード用だ。ATLYSボードに搭載されているDDR2 SDRAMはMicronのMT47H64M16HR-25Eと
いうやつで、スピードグレードはDDR2-800だ。 AtlysのReference Manualを見ると実際800Mbps
(DDR2なのでクロック周波数は400MHz)まで動作確認できているようだ。
ハードマクロでの性能とは言えすごいな。


今回のDDR2 SDRAMコントローラだが、以前作成したSparatn6版LPDDR SDRAMコントローラの
RTLをベースに、というかDDR2 SDRAM用に変更して作ることにし、一応RTLは出来た上がった。
周波数は400MHz (DDR2-800)と行きたいところだが、このスピードは簡単に達成できるとは思え
ないので、まずはLPDDR-SDRAMCと同じ200MHzで動く物を作ることにした。

以下はシミュレーションしているところだ。




次はこれを合成して実機で動かしてみるつもりだ。

2012年5月7日月曜日

next theme ... Atlys用DDR2 SDRAMコントローラ

次のテーマはAtlysボード(Spartan6)用DDR2 SDRAMコントローラを作ってみることにした。
AtlysボードでDVI (HDMI)に画像出力等をやろうとするとそれなりの容量のメモリが欲しくなる。

DDR2 SDRAMコントローラはこのブログの始めの頃にも作ったが、Spartan3A Starter Kit向けだった。 そこで今度は、Atlysボード(Spartan6)用のDDR2 SDRAMコントローラという訳だ。


2012年5月2日水曜日

SPIコントローラの作成 10

Atlysでも動作確認してみた。 AtlysのFPGA Spartan6 LX45はMicroBoardのSpartan6 LX9の4.7倍の規模なので、ROMに格納するFPGAデータのサイズも大きい。 IMPACTでプログラムした場合は以下のとおり1224秒(20分!!)もかかった。


これに対して今回作成したSPI IP & プログラムでは101秒(1分41秒)だ。


まあ、何とか我慢して待てるレベルだと思う。

ということで、今回のプロジェクトは一応終わりにしようと思う。

先日公開したRTL等のsnapshot版はrelease版に更新した。
http://www.hi-ho.ne.jp/bravo-fpga/


SPIコントローラの作成 9

前回のブログでcommand frameに対するACK/NAK応答は残すと書いたのだが、
これだとライトの高速化の障害となることが判ったため結局、なくすことにした。
また、ライトの高速化の為、自動受信モードを送信にも拡張して自動転送モードにすることにした。
この機能を使うライト用制御プログラムは以下のようになる。 (166行~171行)


元々の目的だったROM(N25Q)のFPGAデータ更新用プログラムは以下のようになった。
(FPGA制御部のみを示している。)


書込みに先立ちその領域を消去する必要があるが、このプログラムでは書込みループの中で、
書込みアドレス(addr)がセクタの先頭に達するタイミングでそのセクタの消去を行うようにした。
また、Verifyは自動受信モードで全データ分をr_buffに一気にリードしてからw_buff(書込み
データ)と比較するようにした。
このような諸々の工夫の結果、SPIコントローラと更新用プログラムが完成した。
肝心の処理時間だが、以下のようにMicroBoardのROMの更新は24秒(Verify含む)、Verify
のみは4秒で処理できている。


ちなみにIMPACTで書換えた場合を以下に示す。



IMPACTの場合の341秒に対して24秒なので14倍高速に書換できることになる。
やったー \(^_^)/


やっぱ、ROMの更新は短時間で済ませたいよね。


TE0720 No.4 (BNN-PYNQを動かしてみる 2)

TE0720でBNN-PYNQを動かすことが出来た。 以下は前回に続いてBNN-PYNQが動くまでの記録。 gdb (GNU debugger)で例外が出る原因を調べてみた。 例外が発生しているのはシェアードライブラリ(python_hw-cnv-pynq.so)の中であ...