メモリ・モジュールに載っているIC:W9825G6KH(winbond)

https://www.winbond.com/hq/product/specialty-dram/sdram/?__locale=ja&partNo=W9825G6KH

SDRAMコントローラ

 これまで,KV260(AMD)Tang Nano 4K(Sipeed)をターゲット・ボードとしてLUT-Networkを紹介しました.

Gowin Vol.4で紹介した記事を元に,少し構成を変えてTang Primer 20K(Sipeed)にも移植しました.

 Tang Primer 20Kへ移植したデザインを元に,Tang Primer 25Kで動かしてみました.

●Primer 20Kとの主な変更点

・メインメモリがDDR3 SDRAMからSDRAM(オプション)に

・カメラの物理インターフェースがFPCからPmod×2に

 フレームバッファ用のメモリとしてオプションのSDRAMモジュールを利用します.メモリの変更に伴い,帯域の関係でピクセルクロックを落とさざるを得ず,出力画面の解像度も変更することになりました.

 カメラは,幸いTang Primer 20Kと同じ OV5640 をPmodボードとして利用できるので,Sipeed純正のオプションボードを利用しました(Aliexpressで入手). Pmodを2ポート占有するもので,データは 8bit 入力です.OV5640の初期化はSipeedのサンプルの中にあるので,それを利用できます(Tang Primer 20Kと共通,480×272出力で初期化).

カメラ画像から「1」を推論している(左上のバーの位置で推論結果として0~9を表現)

 Tang Primer 25KにはHDMIコネクタが無いので,これもPmodで接続します.

左下がHDMIコネクタ・モジュール(Pmod対応)

●IP:SDRAMコントローラ – SDRAM Controller(With external SDRAM)-

 

GowinのIPであるSDRAMコントローラを利用します.設定は次の通りです.

Refresh Times: 4096
Clock Perios: 10ns
tRP Period: 2
tMRD Period: 4
tWR Period: 4
CL Period: 2
tRFC Period: 8
tRCDPeriod: 2

 このモジュールには2つのクロックを入力します.コントローラの動作クロックと,SDRAMの動作クロックです.今回は,PLLを利用し,両方とも100MHzにしました.コントローラの動作クロックはSDRAMに対して45°位相を遅らせました(PLL設定において位相変更の最小刻みが45°).

●IP:フレームバッファ – Video Frame Buffer –

 GowinからIPとして提供されているフレームバッファを利用します.トリプルバッファになっているので,入力側と出力側の動作クロックが異なっていても大丈夫です.フレームバッファと組み合わせるメモリの種類としてSDRAMを選べます(ドキュメントにはまだ書かれていない…).

▲入力

 入力する画像は,OV5640の画像です.Pmod経由で接続するモジュールはデータ線が8ビットです.2クロックに分けて1ピクセル16ビットの色深度で取得します.ピクセルクロックは25MHzとしました.2クロックを束ねて16ビットデータにするので,フレームバッファへは12.5MHzで入力されます.

▲出力

 当初,出力解像度1280×720でピクセルクロック65MHzで進めていましたが,SDRAM(100MHz駆動,CL2)の帯域的に辛いようで,フレームバッファからの出力画像は定期的に水平同期が外れるような挙動でした.このSDRAMは最高で133MHz,CL3で動作可能なようです.しかし,PLLで位相差を付けたクロックを出したい場合,133MHzのクロックを出すことができず(やり方ある?),100MHz駆動で我慢しました.

 DVIで画像を出す場合,一般的なピクセルクロックとして65の下は,59.5その下は27です.今回は27MHz動作としたところ,フレームバッファからの画像も安定しました(ピクセルクロック65MHzのまま,メモリを無理やり150MHzで動かしたところ,水平同期が外れる挙動は無くなりましたが,画像が荒れました).

●うまく動いた

 720×480@60で動作しています.

コメントを残す