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で動作できるかも知れない。が、はてさて、どうなりますか。


2013年4月30日火曜日

LatticeECP3 Versa Development Kit その4

Versa Kitのデバッグ用PCとデバイスドライバ関係のセットアップを行った。

デバッグ用PCには現在使用していないPCが1セットあるのでそれを使うことにした。

PCにVersa Kitを装着し、火入れしたところ。

lspciでボードが認識されているか確認、、、されている。


この手のボード用のデバイスドライバは数年前に作成したことがあり、今回はそれをベースにして自作するつもりでいるが、今日のところは環境も含めて簡単な動作確認をしたかったので、LatticeのDesign sampleを用いて動作確認を行うことにした。Design sampleはここから入手できる。これらのsampleの内、PCIe DemoにPCI用デバイスドライバと簡単なテストアプリが入っているが、バージョンが古くてLinux 3.0に対応しておらず、若干の修正が必要だった。デバイスドライバはlscdma_Linux26とlscpcie2_Linux26が存在するが、今日は簡単な動作確認をしたかったので、lscpcie2_Linux26で動作確認した。
具体的な修正箇所は以下の3項目だ。

1. file_operaions 構造体のioctlをunlocked_ioctlに修正
(unlocked_ioctl自体の情報はこれが参考になる。)

lscpcie2_ioctlはlscpcie2_unlocked_ioctlを介してコールする。
lscpcie2_unlocked_ioctlはmutexで排他処理を行っている。

また、unlocked_ioctlの引数にはinodeが無くなっているので、lscpcie2_ioctlからinode参照部を削除した。lscpcie2_ioctlではデバッグメッセージの表示要素で参照しているだけなので、削除しても問題は無い。

2. 1199行のclass_device_create、1273行のclass_device_destroy APIはdeivce_create、device_destroyに変更になっているので修正する。

3. 594行のDMA_32BIT_MASKをDMA_BIT_MASK(32)に修正する。

以上の修正を行った結果、コンパイルが通り、insmodでモジュールをinsert出来た。


lscpcie2_Linux26/testsに簡単なテストアプリがあるが、これも若干の修正が必要だった。
具体的には、78行目の"/dev/LSC_PCIe/%s"を"/dev/%s"に修正した。
このプログラムを実行してみた結果、無事ボードの制御が出来ることが確認できた。


プログラムが動作している様子

PCI側の動作確認も一応できたので、後は色々作って実装するのみだ。このボードは拡張用コネクタがピンヘッダになっている点もいい感じだ。抵抗ラダー式のVGA変換基板を追加すれば、VGAボードもどきの実験も出来そうだ。 (ECP3というFPGAは高速シリアルI/F部のドライバがPCMLになっていて、これを使ってHDMIやDVI(TMDS)相当を出力することもできるのだが、Versa Kitに搭載されているECP3-35は入出力ともに4CHのみであり、あいにくその内の1CHをPCI expressに使ってしまっている。) また、DAC基板を作って以前作成したDDS IPを実装すればファンクションジェネレータボードが出来そうだし、ADC基板を作成しDFT IPを実装し、x1ではあるがPCIe busのバンド幅を活かして高速なスペクトル解析ボードも出来るかも知れない。 色々と楽しめそうな気がする。


2013年4月22日月曜日

FPGA関連本

二泊三日で帰省していた。  その間はIP unreachableな状態だったので、こうしてネットにつながる環境に戻ってきて色々な情報を見ると、僅かの間にも世界はどんどん変化しているんだと感じる。

それはそれとして、

今月はFPGA関連書籍が多数発刊されているようだ。Amazonで検索すると6種(6冊?)か。
FPGA関係の書籍が一月に6種も発刊されるなんて、珍しいんじゃなかろうか。 やっぱ、FPGAって流行ってるんだろうか?

今月と来月はFPGA関連のイベントもあるんだよな。たしか。
TabulaのTabulaSpacetimesフォーラムってのが4/18にあったんだよな、たしか。
参加申し込みしたかったのだが、都合がつかず断念したのだった。
来月はアルテラのSOCシンポジウムがあるんだっけ。
アルテラSOCに関しては先月、某商社のセミナーに参加する機会が得られたので参加した。
講師の方が説明がお上手でおもしろく、判りやすかった。



2013年4月16日火曜日

LatticeECP3 Versa Development Kit その3

Kit購入時に登録したライセンスは期限が切れてしまっていたが、再登録することで取得することができた。で、次にサンプルデザインを合成してみたところ、mapの段階でLSC_ADVANCED_ORCAのライセンスエラーが出て終了してしまった。この時点での開発環境 Diamondのバージョンは2.1だったのだが2.1.1のパッチが出ていることが判ったのでこれを適用して再度合成してみたところ、今度は無事最後のbitstreamファイルの生成まで実行できた。

実機へのダウンロードも出来るようになったが、Linuxの場合FTDI用のシリアルドライバ(ftdi_sioとusbserialモジュール)をrmmodで外す必要があった。(ここを参考にした。)

これで、合成から実機にダウンロードして動作させるまでの確認は出来た。

で改めてこのKitのスペックを見てみる。
Latticeのサイトからの引用
The LatticeECP3 Versa Evaluation Board features the following:
  • LatticeECP3 FPGA: LFE3-35EA-8FN484C
  • 64 Mbit SPI Flash Memory
  • 1 Gbit DDR3
  • PCI Express x1 Interface
  • 4 SMA Connectors for Electrical Testing of one full-duplex SERDES channel
  • Two RJ45 Interfaces to 10/100/1000 Ethernet to GMII
  • Expansion Connectors for prototyping
  • 14-segment alpha-numeric display
  • Switches, LEDs, and Displays for demo purposes
  • Push buttons for General Purpose I/O and Reset
  • Onboard reference clock sources
  • Programmed using a Mini USB cable via PC
これはECP3ハンドブックからの引用


この表からECP3-35はSpartan6-LX45相当か?  もっとも、ECP3のLUTは4入力なのでSpartan3系と比較すべきかも知れない。そうするとこれでDDR3コントローラを組んだ場合にどの位のクロックで動かせるのか疑問も湧くが、リソース規模はそこそこデカいので色々と詰め込むことは出来そうではある。そう考えるとやはり$99というのは格安だという気がする。このKitの定価は$299らしいのだが、Lattice online storeでは$99に戻っている。ただしStockはNoとなっている。 $99で買えるならもう1枚買っておこうと思って注文してみたところ、送料が$98かかるけど、本当に買うの? 買うなら手続きを進めるけど。っていう内容のメールが来た。で、結局キャンセルしてしまった。


2013年4月3日水曜日

LatticeECP3 Versa Development Kit 2

そういえば、2年程前にLatticeのLatticeECP3 Versa Development Kitというのを購入したんだっけ。すっかり失念していた。  この開発キットは当時特別セールで$99(手数料、配送料込みで$145.45)で購入できた。

PCIE I/FのFPGA開発ボードはどれも非常に高価で私には買えない。
このボードはちゃんと動かすことが出来ればかなりお得な買い物だと思う。

購入してからまだ一度もプログラミングしていない。
知り合いのお手伝いも佳境に入ってきてFPGA活動再開はもう少し先になりそうだが、
今度はこのKitで何かやってみようかな。

ライセンスはまだ有効なんだろうか? 要確認だな。

2013年3月17日日曜日

妄想族の憂鬱とHLSとOpenCL


妄想族という言葉は埼玉のFM放送局の番組が発祥のように思うが私もそれに当たるかも知れない。よく妄想をする。っていうか、昔々、3つ4つの毛色の違うモジュールの設計を同時に行っていたことがあり、その時は波形ツールを3つ4つ開いて同時というか時分割的にデバッグ・検証をするという滅茶苦茶なことをやっていた。それ以来のような気がしているが、一つの事に集中できなくなってしまい、何かをやっていても頭は別のことを考える癖がついてしまった。それが仕事でない場合は妄想的なものになったりする訳だ。その上、悪いことに私は考えていることが顔に出るようだ。これの何が問題かというと、例えば電車なんかにのっていてうっかり変な事を妄想しちゃったりすると、それが自分でも気づかない内に表情に現れてしまう。私の場合、妄想といっても大抵は下らないギャグとかだから、自分でも気づかない内に顔がニヤけていたりすることになり、周囲に怪訝な顔をされたりすることになる訳だ。そんなときに限って前方に若い女性とかいたりしたらもうバツが悪いことこの上ない。 お、お、オジサンは変態じゃねー!! ワシゃノーマルじゃー!、、、と心の中でそっと呟いたりして。。。 あーん、普通のオジサンに戻りたーい。

それはさておき、

Electric Engineering Journal (旧 FPGA Journal)というサイトをたまに見るが、久しぶりにみたら 3/12日の記事に興味深いのがあった。

HLS versus OpenCL
Xilinx and Altera Square Off on the Future

http://www.eejournal.com/archives/articles/20130312-highlevel/

この記事によるとXilinxはHLS(高位合成)を推していて、ALTERAはOpenCLを推しているようだ。
へー、そうなのか。 記事では、抽象レベルというキーワードで回路図、そして言語記述(ゲートレベル、RTLレベル、Behaviorレベル、…)への変遷を説明してもいる(と読めた)。 うん、そう、抽象化なんだよね。 進化の方向としては、RTL記述からBehavior記述、そして機能記述へと向かうんだろうが、つまんねーだろうなー、そんな未来。 しかし、本当に高位合成とかCベース開発っていうのが主流になるのかね将来は。 記事に有るようにデータパスへの適用は可能かも知れないが、コントロールパス系は・・・。 結局はCがHDLの仲間入りしただけっていうことになったりして。

死んだ爺ちゃんが言ってた。
「いいか○坊、よーく考えるんじゃぞ。
 アヒルはな、喋らないんじゃ。 ふぉっ、ふぉっ、ふぉっ、ふぉっ、・・・」 って

よーく考えよー、アヒルは喋らないー、グァー!
ア*%÷×***・・・自主規制・・・

嘘です。すべて私の妄想です。
ハイ。 -_-);


2013年3月9日土曜日

fpga_story


F男:たしかに僕は回路情報がなければ只の石さ。
        でもね、それは君も同じだ。プログラムが無ければ只の石だ。
        ねっ!、ぼくたちうまくいくって!!

~ 手を取り互いに見つめ合うF男とA子であった。~

M子:F男さんったら。大丈夫よN子、私たちには分身の術があるわ。
         リソースさえあれば10個でも20個でも何個でも分身できるのよ。
         それにN子にはCustom Instructionだってあるじゃない。
         あんな融通の聞かないA子なんかに負けやしないわ。

A子:はんっ!、このソフトマクロ風情が!!
        貴方達に800MHzで動作することができるのかしら?

D  : 要は適材適所なんじゃね?

M,N子:あなたはDS...P子先輩!

A子:はんっ!、アンタなんか只の乗算器と加算器の集合体じゃないのよ!
         DSPなんて名乗ってるけど、コードフェッチとか出来るのかしら?
         この、名前倒れがっ!!
         おーほっほっほっほ・・・

~ 勝ち誇ったように高笑いをするA子であった。~

つづく。たららてぃららららん…(渡鬼のテーマ)

そんな妄想をする春の夜であった。

な~んてな。

はぁ~~、だりぃ orz

2013年3月8日金曜日

3Dレンダリングパイプライン 3

以前はこのブログを検索エンジンで検索出来る設定にしていたのだが、2ヶ月位前に検索できない設定に変更した。そうしたのにはとくに理由はないが、別にアフィリエイトで稼ぎたいわけでもないのでこのブログの存在を知ってる人だけみればいいかな見たいな感じだ。
設定変更したら毎日のページビューの数も見事に減少した。まぁ、もともと多くなかったが。
本当はページビューは殆ど0になるかとも思っていたのだが、数人(数件?)が参照しているようだ。
固定客がついたか?

さて、レンダリングパイプラインIPの作成に挑戦しようとしていたが、以下の理由により一旦中止することにした。

・  昨年の年末から年明けにかけてDFT IPの作成を行っていたが、頑張りすぎたせいかburnout気味で、中々レンダリングパイプラインIPに集中できなくなってしまった。(歳はとりたくないもんじゃ)
 ジオメトリエンジンの方は、やることは行列演算で、基本的にはメモリ上にあるモデルの頂点リストを読込み、変換行列を掛け算すればいいんだと思う。変換行列の値はグローバル座標に配置するモデル毎に異なるので、頂点リストの上位にコマンドリストのようなものがあり、(それをメモリ上に配置し、)そこに変換行列の値と頂点リストのアドレス、長さの情報を書く。それを専用のDMACで処理するというイメージになると思う。 ここまでは、難易度としてもそれほど高くなく、動作的にもレイテンシーは一定のものが作れそうな気がする。 が、難しいのはその後のレンダリングパイプラインだ。レンダリングパイプラインではジオメトリパイプラインで算出した頂点座標で構成される平面(群)に対してテクスチャを貼ったり、色を塗ったりしなければならない。その際には光源とオブジェクトの光の反射率などから明るさも計算しなければならないし、ピクセルの補間演算も必要になるだろう。最終的に描画する対象(VRAM)の解像度が低い場合は、簡略化できるかも知れないがせっかくやるからにはdvi_encで出力できるXGA(1024x768)を対象にしたいが、そうすると恐らく1年位の時間をかけてじっくり取り組まなければ出来そうに無い気がする。趣味でやるというよりは業務としてやるべきレベルのような気がする。

・  とある事情で、知り合いのシステム開発をちょっと手伝う(というか相談にのるというか)ことになり、マイコンについて調査する必要がでてきた。仕様次第ではFPGAの方が良いという結論になる可能性もあるが、現状聞いている限りではマイコンでも実現可能だしその方がコストも断然安くすみそうだ。この件に関しては今後このブログに書くつもりはないが、3~4月はこれに注力することになりそうだ。

以上の理由で、レンダリングパイプラインIPは一旦中止させて頂く。
匿名の方には、「ダメ元で」とこたえたのであまり期待はしていないと思うが、以上の理由なのでご了承願いたい。

最近、このブログの更新も滞りがちだが、しばらくこの状態が続きそうだ。
気が向いたら下らない話とか書くかも知れないし、小規模なIPの作成に着手するかも知れない。


2013年3月3日日曜日

3月

うかうかしてたら3月になってしまった。 早いなー
前にも書いたが、よく、fpgaを検索ワードにしてそれに引っかかる Twitter の呟きを眺めている。2月は2名の新キャラクター登場といった感じだった。もしかすると以前からもfpga関連の呟きをされていたのかも知れないが私が気づいたのは2月からだ。お一人はアイコンがドランクドラゴンの塚地さん似の方で、もう一方はアイコンがアンガールズの山根さん似の方だ。Twitterでfpgaに関して呟く方のアイコンは何故か多くが少女趣味なアニメ風なのだが、その二方は写真を使われている。お二人とも、かなり聡明な方のようで、呟く文章から聡明さがひしひしと伝わってくる感じがする。で、その内の御一方の呟きが発端となりワサワサと呟きが広がる様を興味深く見ていた。また、色々と考えさせられたりもしたが、そんなこんなしていたら3月になってしまった。

さぁー、いい加減サボってないで私は私の課題に取り組むことにしよう。
人は人、自分は自分だ。




ERROR: Failed to spawn fakeroot worker to run ...

なにかと忙しくてなかなか趣味の時間を確保できない。 ...orz  家の開発機のOSはLinux Mintなのだが、最近バージョンを22に更新したところ、myCNC用のpetalinuxをビルドできなくなってしまった。ビルドの途中で ERROR: Failed to spawn ...