2012年3月15日木曜日

Avnet MicroboardへのUSB給電

J3(マイクロUSBプラグのほう) を接続しただけでは給電しないので変だと思っていた。Avnetのフォーラムへの投稿によると、4番と5番のピンの配線が逆になっているらしい。「ハンダでつなげると使えるよ」と書いてはあるものの、普通のほうのUSBプラグをつなげれば給電できるのでそこまですることもないか。

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をインストールする

CentOSRedHat 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のインストールやユーザー設定などは適度にやっておく。

そのままだとデバイスドライバーのインストールのみ失敗する。必要なツールなどをインストールしておこう。
% 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.i686
Xilinx 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が標準環境 として使えるようになった。