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インターフェース経由で実現すると非常に高速で使い勝手がよさそうだ。というわけでそのうち作ってみたい。

0 件のコメント:

コメントを投稿