LMBの使い方

Permalink: 2011-03-03 09:09:00+09:00 by tu1978 in tags: FPGA

Xilinx Platform StudioでLMBのサイズを変更するには、dlmb_cntlr, ilmb_cntlrを右クリックし、Configure IP....を選択 > LMBのアドレスレンジを設定。このレンジの幅でメモリサイズが決まるようだ。LMBバス幅が32bitの場合は、lmb_bramの最大サイズは256Kbytes(Virtex-5の場合)。

more…

MicroBlaze + IPコア

XilinxのMicroblazeに自作IPコアをどのように接続するかを調査中。いろいろ検索してみたが、要領よくまとまっている資料が見つからなかった。


最新はAXIというARMのバスらしい。しかしこれは最新のFPGAにしか対応していないようだ。AlteraはAvalonかCustom Instructionくらいしかなかったが、Xilinxはしょっちゅうバスを入れ替えている。OPB, PLB, AXI, FSL。FSLはMicroBlazeにPoint-to-Pointで接続するので、残りとは少し違う。AlteraのCustom Instructionと同じような目的で使うために準備しているらしい。FSLのI/Fを使ってやりとりするのが一番簡単そうではある。でもこれだとCPUの介在がワードごとに必要なので、DMAで使えない。でもPLB to FSL bridgeというのがあるので、FSL I/Fで作ったIPコアをPLBに接続することもできるっぽい。これでやってみようかと思う。ただ、PLB to FSL bridgeのデータシートは古いので、最新のISE12.4でも使えるのか、というのが少し不安。

more…

C to Verilog

C to Verilogというサイトを見つけた。最近はいろいろ高位合成ツールもあるようだけれど、きっと高価なものだと想像してしまう。このサイトだと、無料でCコードからVerilogコードを生成してくれる。試しに、サイトにもあるpop countのコードをverilogに変換してシミュレーションしてみた。

ちなみに、ポップカウントというのは、変数中の1の数のこと。例えば、a=0x12だと、二進数で00010010だから、ポップカウントは2になる。

ポップカウントを計算したいデータ(モジュールへの入力)は、mem_BというBRAMに格納されている。また、計算結果はmem_Aに格納する。

シミュレーションの様子を次に示す。まずはシミュレーション開始時。

resetをテストベンチから入力すると、rdyがLになる。生成されたモジュールがmem_B_addr0を順次カウントアップしている。mem_B_outから得るデータでモジュールが計算を行う。最初の方はmem_B_addr0が1clkごとに7になるまでカウントアップしているのに注目できる。これはこのモジュールがパイプラインで計算しているから。

120nsでmem_A_mode0がHになる。これは最初のデータ0に対するポップカウントが計算でき、mem_Aに結果を格納するためのWrite Enable信号である。mem_Aのアドレス0に0(mem_A_in0に出力されている)をライトしている。160nsでもまたmem_A_mode0がHである。これはアドレス1にデータ1のポップカウント1をライトするための信号。


次にシミュレーション最後の部分を示す。rdyがHになると終了。最後の出力は、データ0x3FFに対するポップカウント10(=0x0a)である。


正しく求められていることが分かる。

少し試して見ただけだが ...

more…

node.js+MySQLで文字化け

node.jsからMySQLを使用して、昔にRoRで作成したアプリと同等のものを(同じデータベースを使って)作ろうとしているが、いろいろやっても文字化けが解決できなかった。ひたすら検索し、仙石浩明の日記 2009年9月14日 文字化けしていなくても MySQL 内の文字コードが正しくない場合があるを見て、ついに原因が判明した。結局、既存のRoRで作成したアプリが、latin1でMySQLとやりとりしているのが原因だった。実際に、mysqldumpでデータベースをダンプする際に、--default-character-set=latin1を追加したら、文字化けしなかった。というわけで、根本的に解決するには、データベースのデータをちゃんとUTF8にすることだけれど、ひとまず、node.jsのプログラム側で、set names latin1というクエリを送って、RoRと同じ動作にさせたら、文字化けが直った。

more…

C#のScrollBar

ScrollBarの値をユーザが操作して変更すると、Scrollイベントが発生するが、プログラムコードでValueプロパティを変更するとScrollイベントは発生しない。ValueChangedイベントを使用すれば、Valueプロパティをコードで変更しても捕捉できる。分かってしまえばどうということは無いけれど、ちょっと調べる必要があった。

# Delphiは確かコードで変更してもC#でいうところのValueChangedイベントのような動作がデフォルトだったように思った。

more…

NIOS2カスタム命令

NIOS2で計算を高速化するためにカスタム命令を実装してみた。最初は、レイテンシ固定で実装してみたのだが、どうやっても計算結果がおかしい。クロック数がずれているのかと思っていくつか試してみたが、だめ。それで結局、レイテンシ可変にして、START, DONE信号をモジュールで処理するようにしたら動いた。Quartus II 9.0 SP2で実験。

more…

node.js vs Erlang

Node.js vs Erlang: SyncPad’s Experience になかなか興味深い結果が掲載されている。node.jsを長時間サーバとして動かしていると、徐々にメモリ使用量が増えてしまうという問題に遭遇したので、同じ機能のサーバをErlangで作成してみた、という記事。node.jsと比較して、CPU, Memory両方とも使用量が少なくて済んだ、という結果。またErlangブームが起きるか?ただ自分としてはErlangはあまり構文が好きになれない。まだJavaScriptの方がきれいにまとまっているように感じる。

Is node.js best for Comet? この記事も参考になる。V8は現状の所サーバに使用するにはあまり良いアーキテクチャではない、という指摘。全部は読んでいないけれど、コメントも参考になりそう。

more…

最近のJava騒動

最近、AppleがJavaの公式サポートを打ち切る、というのが話題になったので、色々調べていて気づいたのだけれど、OracleがSunを買収してからというもの、Java界隈の動向が怪しくなっているように思った。AppleとしてはiOSへの囲い込みというのもあるのかも知れないが、将来性が不透明になってきているJavaへの投資をやめようという動機もあるのかもしれない。もしそうだとすると、ZFSの場合と同じ理由といえるかも。

そう思うと、1ベンダーが広める言語というのは、そのベンダーが無くなってしまったようなときに言語の存在価値が減じることもあるかもしれない。その点、C, C++, Lispなどベンダーとは(少なくとも仕様としては)関係ない言語の生存期間は、より長いと言えるかも知れない。

もしJavaが廃れてしまったら、マイブームのclojureも危うくなるなぁ。そうなると今度はnode.jsあたりになるのかな。JavaScript自体も一応ベンダー非依存の言語だし。Lisp->JavaScriptトランスレータもあるので、Lispでサーバサイドプログラミングというのは一応できるはず。

やれやれ...

more…

NIOS+DDR2

これまでNIOS2を使ったシステムでDDR2コントローラを使うときには、コントローラはAvalonバスに接続せずに、CPU外に置いていた。今回、ちょっと思い立ってAvalonバスに接続して試してみることにした。

しかしはまった点がある。インプリメントしたSOFをボードにダウンロードするまでは良いのだが、Nios II IDEからファームをダウンロードして実行しようとしても、target processor not responding(正確ではないかも)のようなメッセージが出て、CPUが動作しない。いろいろ試して検索してみた結果、DDR2コントローラのポートglobal_reset_n_to_the_altmemddr_0をCPUからPIOで操作しようとしているのが悪さをしているらしいと分かった。これをFPGA端子に入力されているRSTnピンにしたら、ファームのダウンロードもできるようになった。これで半日つぶれてしまった。

more…

compojureなどの実験(その2)

H2データベースとJSONを使用するために必要な、Leiningenを使ったプロジェクトファイルは結局次のようになりました。


(defproject myproject "1.0.0-SNAPSHOT"
  :description "FIXME: write"
  :dependencies [[org.clojure/clojure "1.2.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [ring "0.3.0"]
                 [com.h2database/h2 "1.2.142"]
                 [org.danlarkin/clojure-json "1.1"]
                 [compojure "0.4.1"]])

JSONを使うには、Compojure Demystified with an exampleでも説明されていますが ...

more…