2012年3月10日土曜日
シリアルまわりの話
OpenCoresによるPDP-11の実装ではFPGAふくむハードウェア側でPDP-11のすべてを実現するわけではない。FPGAに載るのはPDP-11のCPUと、周辺デバイスとの通信機構である。メインメモリーはFPGA内蔵のものやオンボードのDRAMなど構成により違ってくる。周辺デバイスの機能はLinux側で動くソフトウェアにより実現する。このソフトウェアがFPGAに載っているCPUと通信することによりPDP-11を実現する。通信経路として標準で用意されているのはシリアル接続(UART)で、Avnet Microboardの場合はオンボードのUSB-UART変換をおこなうCP2102が利用できる。ただし、CentOSなどディストリビューションによってはドライバーのバージョンが古く、入れ替えが必要。
DigilentのNexys3はUSB-UART変換としてFT232Rを備えていていまのところトラブルなし。Avnet Microboardの場合も、PMODコネクター経由でFT232Rを接続してこちらを使うようにすると問題なく通信ができる。
このシリアル接続がCPUと周辺機器の間のバスに相当することになる。要するに、ディスクの読み書きなどはすべてこのシリアル接続を経由する。速度の上限はCP2102で941,200baud、FT232Rでは3,000,000baudである。OpenCoresのページにも記載のとおり、ある程度のボリュームの作業をこなそうと思うとかなりの限界に感じられる。
Avnet MicroboardにFPGAの構成情報を高速に書き込めるオプションとしてDigilentのJTAG-HS1がある。Xilinx純正のFPGAの書き込みケーブル(という名前のJTAGインターフェース装置)は数百ドルするのが通例だが、これはたったの50ドルほどで格安。そのドライバーであるDigilent Adeptを見てみたら、FTDIのものがそのまま入っている。その他の情報を総合すると、JTAG-HS1はFT2232HというUSB用インターフェースチップをほとんど素の状態で使っているようだ。
JTAGインターフェースは本来、LSIピンの状態を読みだしたり書き込んだりするためのものである。これを拡張して、さまざまな情報のやり取りに使うこともできる。たとえば、上記のシリアル通信をJTAGインターフェース経由で実現すると非常に高速で使い勝手がよさそうだ。というわけでそのうち作ってみたい。
2012年3月3日土曜日
CentOS 6.2にXilinx ISE 13.4をインストールする
CentOSはRedHat Enterprise Linux(RHELと略)と中身が実質的に同じ、というのが売りのLinuxディストリビューションである。Xilinx ISEはRHELを公式サポートしているので、CentOSでも問題なく動くはず、ということで最新版の6.2でインストールしてみた。
環境を準備するためにi386用CentOS 6.2のイメージを持ってきてVMware Playerにインストールする。程よい大きさのものということでLive DVD(約1.6G)を選択した。minimalは300M弱と小さくてよいが、ネットワーク設定を手動で行う必要があるなど、簡便とはいいがたい。ディスク容量は30Gbyteにした。VMware toolsのインストールやユーザー設定などは適度にやっておく。
そのままだとデバイスドライバーのインストールのみ失敗する。必要なツールなどをインストールしておこう。
OpenCoresのPDP-11を動かすためにはさらにパッケージをインストールする必要がある。
追記:
Avnet MicroboardのUSB-UARTインターフェースであるCP2102は、CentOS 6.2だとドライバーのバージョンが古いためうまく通信できない。これは簡単なパッチで修正できる(i386用カーネルモジュールパッケージとそのソースパッケージを用意しておいた)。
というわけでCentOS 6.2が標準環境 として使えるようになった。
環境を準備するためにi386用CentOS 6.2のイメージを持ってきてVMware Playerにインストールする。程よい大きさのものということでLive DVD(約1.6G)を選択した。minimalは300M弱と小さくてよいが、ネットワーク設定を手動で行う必要があるなど、簡便とはいいがたい。ディスク容量は30Gbyteにした。VMware toolsのインストールやユーザー設定などは適度にやっておく。
そのままだとデバイスドライバーのインストールのみ失敗する。必要なツールなどをインストールしておこう。
% sudo yum install kernel-devel make gcc
% ln -s /usr/src/kernels/2.6.32-220.4.2.el6.i686 /usr/src/linux
% ln -s /usr/src/kernels/2.6.32-220.4.2.el6.i686 /usr/src/2.6.32-220.el6.i686Xilinx ISE 13.4のDVDをマウントするか、Xilinxからダウンロードしてきたイメージを展開して、bin/lin/xsetupを実行する。このへんからあとはインストールとライセンスのガイドのとおりでよい。
OpenCoresのPDP-11を動かすためにはさらにパッケージをインストールする必要がある。
% sudo yum install ghdl gcc-c++ boost-devel boost-thread tcl tcl-devel
追記:
Avnet MicroboardのUSB-UARTインターフェースであるCP2102は、CentOS 6.2だとドライバーのバージョンが古いためうまく通信できない。これは簡単なパッチで修正できる(i386用カーネルモジュールパッケージとそのソースパッケージを用意しておいた)。
というわけでCentOS 6.2が標準環境 として使えるようになった。
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のクレジットは入ってないし再配布を禁止する文言もみつからなかったのでいいのだろう。
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勉強会(仮)の構想をゆるゆると固めている。今のところはこんなイメージ。
目標
初回メニュー
発表パートその1:
2次会はほどほどに。
目標
- 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の波形を見る
- 全員LT
2次会はほどほどに。
LinuxでXilinx ISE
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内蔵のメモリコントローラを利用するなど多少手間がかかるので、そのあたりは今後のお楽しみ。
動作は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でも実行可能。
まず、inserter -createで記述ファイルの雛形 *.cdcをつくる。この段階では何の情報も入力しない。したがって出力は実質、空。
つぎに、inserter -editで記述ファイルの中身を埋める。ここはGUIが起動する。引数にパーツ番号 -p xc6slx9-csg324-2 等を忘れず指定する必要がある(GUIの編集画面は何故か使えない)。ngdを生成するが、この段階のngdの必要性は謎。
最後に、inserter -insertで実際に回路をngcに追加する。この段階はcommand lineのみで処理できる。
ChipScope等のライセンスが必要となるのはngdbuildをかけるとき(きちんと確認してない)。したがって、inserterはwebpackでも実行可能。
登録:
投稿 (Atom)