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ストローブ信号の作り方が一番難しい感じがしている。


2013年5月12日日曜日

LatticeECP3用DDR3 SDRAMCの作成

タイトルを「LatticeECP3用DDR3 SDRAMCの作成」に変えた。

ECP3 HandBookを見つつPHY部の検討を進めている。

・ データの受け側、つまり、リードデータのキャプチャ部
ECP3のHigh-Speed DDR Interfaceには幾つかのモードがあり、DQSの位相を90°ずらしてこれをクロックとして使うことも出来るようであるが、このモードの場合はデータバスが11bit以下となるためDDRx SDRAM用には使えなさそうだ。 DDRx SDRAMの場合は DDRX2 Dynamicモードを使うようだ。  で、そのDDRX2 Dynamicモードにも以下の3モードがある。
 
・ GDDRX2_RX.ECLK.Dynamic (ECP3 Handbookより引用、以降同じ)

・ GDDRX2_RX.DQS.Dynamic

・ GDDRX2_RX.PLL.Dynamic


GDDRX2_RX.ECLK.Dynamicモードの場合はデータラインにDELAYBが有るだけで、他に位相調整要素はないが、DELAYBの位相調整の分解能は4bitしかないので、粗すぎて多分使えない。
したがって、DQS.DynamicかPLL.Dynamicになるわけだが、HandbookによるとDQS.Dynamicは入力クロックがデータにセンタリングされる場合に使うべきとあるのでこのモードを使えば良さそうだ。


2013年5月11日土曜日

www.hi-ho.ne.jp/bravo-fpga/のstatistics

このブログで作成した作品はwww.hi-ho.ne.jp/bravo-fpga/で公開しているが、2011/5/14からアクセスログを取るようにしている。  ログといってもそのページを閲覧したIPアドレスと時刻だけだ。プロバイダの有料サービスを利用するともっと色々な情報が得られるようなのだが、お金をかけてまでこれ以上の情報を得たいと思わないので利用していない。 

ログを解析してみた。

開始時点から現在までの総アクセス数は約9700件になる。日毎のアクセス数をグラフにすると以下のようになった。


IPアドレスをキーにしてJPNIC等でその組織名を引いてみると、インターネットサービスプロバイダ(おそらくこれは個人のアクセス)が最も多いが、その他に学術機関、大小様々な企業(もちろん、エレクトロニクス関係、一部、自動車メーカーもあるが)からのアクセスもある。


また、外国からのアクセスもある。


BG,DE,ES,...はドメイン名のccTLD(国コードトップレベルドメイン)で、詳細はここで見ることができる。

ページを閲覧したIPアドレスしか記録していないので、閲覧した方々が何をダウンロードしたのかまでは判らないし、閲覧しただけかも知れない。  こんだけ閲覧数があるにも関わらずご意見やバグのご指摘などを受けたことはまったく無いので、閲覧だけ、あるいはダウンロード後RTLを参照しただけで終了というパターンなのかも知れない。

作品を公開するにあたり、ライセンス表示をした方がいいだろうと考え、とりあえずGPLで公開しているが、これをBSDライクなライセンスかまたはクリエイティブ・コモンズの一番緩い奴(CC BY)に変えようか思案しているところだ。


2013年5月8日水曜日

LatticeECP3 Versa Development Kit その5

ECP3 Versa Development Kitだが、まずは DRAMコントロールIPの作成に挑戦してみようと思う。 このボードに搭載されているのはMicronのDDR3 SDRAMだが、具体的な型名はKitのユーザーズマニュアルには記載されていない。そこで、部品上面にあるコードを元にMicronのサイトで調べたところ、MT41J64M16JT-15E:Gであることが判った。


次に、MT41J64M16JT-15Eで検索してデータシートとVerilogのSimulation modelを入手した。


DDR3ではキャリブレーション関連の機能が増えているが、Write levelingやRead leveling等は、このボードに搭載されているデバイスが1個だけであり、配線距離も短いので、特に必要ない気がしていることから、コントローラはSpartan6用に作成したDDR2コントローラのRTLをベースにして、主にPHYの部分をECP3用に作り直す感じでいけるんじゃないかと、今のところは考えている。

DDR3 SDRAMのデータレートだが、UG45によるとLatticeのサンプルデザインでは800Mbpsで動作させているようだ。 なので、うまく行けば私の作るコントローラも800Mbpsで動作できるかも知れない。が、はてさて、どうなりますか。


GTX1050Ti と Tesla m2050 No.2 (BNN-PYNQのtrainingをやってみた)

BNN-PYNQのtraining(学習)をやってみた。  手順は https://github.com/Xilinx/BNN-PYNQ/tree/master/bnn/src/training に記載されており、特に判りづらい点はなかった。 ・ mnist.py 実行...