2012年4月20日金曜日

XilinxのUSBケーブルの中身

CPLDやFPGAに設定を書き込む(プログラミングやダウンロードと呼ばれる)にはJTAGインターフェースを使うが、PCには標準的なJTAGインターフェースがない。そこで、何らかの接続インターフェースを経由する必要がある。ちょっと前までは(昔、プリンター接続に使われていた)パラレルポートを使うのが一般的だったが、最近はUSB接続が当たり前になってきた。USB接続のスピーカーやキーボードは標準的なプロトコルが規定されているが、JTAGにはそういったものがなく、メーカーごとに独自のインターフェースを用意している。

Xilinxでは「プラットフォームケーブルUSB」というシリーズのケーブルを販売しており、要するにUSBからJTAGへの変換ケーブルである。WindowsやLinuxにデバイスドライバーをインストールすれば使えるようになるのだが、ちょっと気になったので調べてみたらなかなかおもしろい。

実はこの「プラットフォームケーブルUSB」自身がプログラマブルにできていて、デバイスドライバーが毎回設定を書き込んでいる。しかも、プログラマブルなパートとしてCypress社のEZ-USBシリーズ(8051プロセッサにUSBインターフェースを統合したもの)と、Xilinx社のCPLDであるXC2C256があり、それぞれの設定ファイルを書き込む仕組みになっている。書き込みに使われるのはそれぞれfxloadとimpactである。

CentOS 6.2の場合、Xilinx ISEをインストールしただけだと、設定ファイルの記述をしくじっていてfxloadがうまく動かなかった。/etc/udev/rules.d/xusbdfwu.rulesの"$TEMPNODE"という文字列をすべて小文字に置き換えて"$tempnode"にすると問題なく動くようになる。

プログラマブルということでXilinx謹製の設定ではなく、独自開発で動かそうという猛者もいて、xsvftool-xpcuというツールが公開されている。EZ-USB(8051用のC言語で記述)やCPLD(Verilog HDLで記述)のソースコードを含んでいて、どうやらUSBプロトコルまで独自開発しているようで非常に興味深い。

さらにおもしろいのが、XilinxのテストボードSP601などの設定の仕掛けである。JTAGインターフェースがついておらずUSBしかないので一体どうなっているのかと思ったら、上記の「プラットフォームケーブルUSB」に相当する回路(EZ-USBとCPLD)が基板上に最初から載っていて、そのかわりFPGAのJTAGインターフェースが出ていない。USBでアクセスできるようにしてあるのだから生のJTAGはいらないでしょ、という理屈はもっとも。ところが、無理やり生のJTAG端子を増設する人もいておもしろい。

なお、SP601でxsvftool-xpcuが使えるか、というところまでは未検証。

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が標準環境 として使えるようになった。

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
もサポート対象に加わっている模様。