2012年2月29日水曜日

MIGについてまとめ

Avnet Microboard上のSpartan-6での利用を念頭において、MIG(Memory Interface Generator)についてまとめておく。

MIGはCore Generatorの機能の一部。ISE 13.4に乗っているのはMIG 3.9(Core Generatorには固有のバージョンはないようで13.4)。もとはbatch modeでインターフェースを生成できたようだがMIG 3.5以降、削除されている(Memory Interface Solutions User Guide UG086)。したがって、GUIを使わざるを得ない。

Spartan-6には強力なDDRメモリコントローラーが搭載されていて、その使い方はSpartan-6 FPGA Memory Controller User Guide UG388を参照。MIGで生成したインターフェースを使うことが前提になっていて、MIGの使い方はSpartan-6 FPGA Memory InterfaceSolutions User Guide UG416を参照。

Avnet Microboard用に生成してカスタマイズしたインターフェースをAvnetが用意している(MIG Traffic Generator Design (Verilog and VHDL)) 。ただしこれはMIG 3.61で生成したもので、ISE 13.4では合成できなかった。すくなくとも{icon,ila,vio}_coregen.xcoのISEをFoundation_ISEに書きなおす必要がある。Avnet用のカスタマイズはリセットのピン・電圧およびクロックのピン・電圧・周期。さらに、デバッグで取れる信号の追加。MIG 3.9で生成したインターフェースに同様の変更を加えるのは容易だろう(未確認)。

PDP-11 on FPGAに組み込むのは技術的にはそれほど難しくなさそう。ただ、このメモリインターフェースのコードは再配布できないので、利用しやすい形で公開するにはどうすればいいか、といったところで工夫が必要になるだろう。

追記(2012年3月19日):
LEON3のコードもちょうど似たような発想のことをやっていた。regen.cgc  coregen.cgp  mig.prj  mig.xcoの4つのファイルがあればコマンドラインのみでコードを生成できるようだ。この4つのファイル自体はGUIを使って生成する必要がある。

うるさいことを言うと生成したファイルが再配布可能かどうかも議論の余地があるが、Xilinxのクレジットは入ってないし再配布を禁止する文言もみつからなかったのでいいのだろう。

2012年2月28日火曜日

PDP-11 on FPGA勉強会構想

PDP-11 on FPGA勉強会(仮)の構想をゆるゆると固めている。今のところはこんなイメージ。

目標
  • FPGA上で動くPDP-11の動作を理解する。
手段
  • FPGAを実際に動かしながらOpenCoresによるPDP-11のうちCPU部分のソースコード(およそ9,500行)を読んで概要を把握する。
前提知識
  • PDP-11とVHDLの基礎(身につけながらの参加も歓迎)。
  • PDP-11のハンドブックなどドキュメントを理解できる程度の英語力。
開催ポリシー
  • 2012年夏から月1程度、1年間くらい?
  • 基本は東京都内。温泉合宿もやりたい。たまには地方巡業も?
  • 内容は濃厚。参加者にある程度負荷あり。
環境
  • LinuxのXilinx開発環境とghdl(必須)
  • FPGAボード(強く推奨。あると勉強会を256倍楽しめる)。AvnetのMicroboardが標準環境。DigilentのS3board, Nexys2, Nexys3等でもOK
内容
  • 発表パートと実技パートを設ける。
  • 発表者を毎回決めて持ち回り。自己紹介を兼ねて全員LT。
  • 実技パートでは、発表パートの内容をエミュレーターやFPGA上で動かして確かめる、など。

初回メニュー

発表パートその1:
  • PDP-11のシステム概観とFPGAでの実現
  • CPU部分の構成
  • pdp11_lunit.vhd解説
  • 2プロセス法について
実技パート:
  • Xilinxツール概観
  • pdp11_lunitの動作検証
  • pdp11_lunitの波形を見る
発表パートその2:
  • 全員LT
最後に次回内容を決めて解散。
2次会はほどほどに。

LinuxでXilinx ISE

Xilinxのツール類をUbuntuで使って変な工夫をするはめになっているが、そもそもサポート外らしい。一覧によると、サポートされているLinuxは
  • Red Hat Enterprise Linux 4 WS32/64bit
  • Red Hat Enterprise Linux 5 WS32/64bit
  • SUSE Linux Enterprise 11 32/64bit
 なので素直にこのへんで環境を用意するのが最善だろう。なお、リリースノートによると13.3以降では
  • Red Hat Enterprise Linux 6 WS32/64bit
もサポート対象に加わっている模様。

2012年2月25日土曜日

w11aをAvnet Microboardに移植

Avnet Microboard(秋月電子などで安価に入手できるXilinxのSpartan-6搭載のFPGA開発ボード)でOpenCoresのPDP-11が動いた。差分は最新のw11a_V0.55に対するパッチにまとめてある。具体的な動かし方などはOpenCoresのサイトや、アーカイブ中のドキュメントを参照。@magoroku15さんによる解説は非常に参考になる。


動作はUbuntu 10.04上のXilinx ISE 13.4で確認した。(私が買った時点でMicroboardに付属していた)13.2や13.3でも問題なく動作するはず。

MicroboardのオンボードのLEDやスイッチ、ボタンが貧弱であまり役に立たない。とりあえずDIPスイッチを(左から右へ)下上下下と設定しておくのを忘れなければ動くはず。

メインメモリはFPGA内蔵のblock RAMのみ使用しているので、64kbyteしかない。UNIX Version 5はちゃんと動くが、2.11BSDはboot中に例外が発生して停止してしまう。

MicroboardにはLPDDR SDRAMがたっぷり乗っているのでこちらをメインメモリにすれば2.11BSDも動くはず。そのためにはSpartan-6内蔵のメモリコントローラを利用するなど多少手間がかかるので、そのあたりは今後のお楽しみ。

2012年2月5日日曜日

ChipScope Pro Inserter をコマンドラインで使う(2)

ChipScope Pro Inserterを使うと、解析用のロジアナ等の回路を既存のngcに組み込むことができる。command lineからの使い方にはちょっと癖があってドキュメントだけではわかりにくいのでメモ。

まず、inserter -createで記述ファイルの雛形 *.cdcをつくる。この段階では何の情報も入力しない。したがって出力は実質、空。

つぎに、inserter -editで記述ファイルの中身を埋める。ここはGUIが起動する。引数にパーツ番号 -p xc6slx9-csg324-2 等を忘れず指定する必要がある(GUIの編集画面は何故か使えない)。ngdを生成するが、この段階のngdの必要性は謎。

最後に、inserter -insertで実際に回路をngcに追加する。この段階はcommand lineのみで処理できる。

ChipScope等のライセンスが必要となるのはngdbuildをかけるとき(きちんと確認してない)。したがって、inserterはwebpackでも実行可能。