分123みなさん,FPGA使ってますか?スマートフォンの普及によって,ARMデバイスは本当に身近な存在になりました。近頃のスマートフォンは一昔前では考えられないほどいいCPU/SoCを搭載しているため,Twitterから3Dゲームに至るまで,手のひらにおさまる大抵の用途において十分に真価を発揮します。CPU/SoCでは遠からず「性能の限界」がやってきます。この限界を突破するために,FPGAに手を出すのは生き物のサガと言っても差し支えないでしょう。すみません,ちょっと言い過ぎました。今回はそんな「ちょっと特殊なシチュエーション」に憧れる人に向けて,廉価なFPGA開発ボードの使い方を紹介します。Digilent製FPGA開発ボード「Zybo」Digilent製FPGA開発ボード「Zybo」は2万円強で買える初心者向けのFPGA開発ボードです(※1⁠)⁠。Zyboにはメインプロセッサとして「謎の半導体メーカー」Xilinx社のZynq-7000シリーズが載っています。FPGA」ともいわれるカテゴリのチップで,Atrix-7相当のFPGAとARMのCPUコアであるCortex-A9がひとつにまとめられたSoCです。これにより一般的なARMボードのように使いながら,周辺機器からの信号をFPGAに処理させるといった使い方が可能になります。Array)とは「配線は現場で起きているんだ!」系のICです。ロジックセルと呼ばれる回路を何度も配線しなおすことが可能なので,特定の機能をもたせた回路を簡単に作ることができます。論理回路のプロトタイピングやASICではペイしない程度の少量生産の基板で使われているようです。廉価版のFPGAがベースになっているためロジックスライス数は4400個と少なめです。「⁠ぼくのかんがえたさいきょうのロジックかいろ」をプログラミングしたいのであれば,より高機能・高価格のFPGAが必要になるかもしれません。FPGAの学習用だと割りきりましょう。Zyboには,microUSBのJTAG・UART共用端子がついています。「お高い」ダウンロードケーブルを購入しなくても,周囲に転がっているUSBケーブルを使えばFPGAへの書き込みができるというわけです。Zybo以外に用意すべきものは,次のとおりです。2.5Aの内径2.1mm・center-positiveなプラグのついたACアダプター(USBから給電しない場合)USBケーブル以外は「あると便利」程度であり,とりあえず動かすだけであれば不要です。Flashに書き込むことでmicroSDがなくてもシステムを起動できます。ちなみにZybo自体は比較的古い製品です。Z7やPYNQ-Z1などおなじZynq-7000ベースの新しいボードも出ていますので,今ならそちらを買う手もあるでしょう。原則として,この記事に書かれている内容は他のZynq系ボードでも適用可能です。電源投入のテストさっそく電源をいれてみましょう。ROM(※2)には最初から「ちゃんと動く」データが書き込まれているため,何もプログラムしていなくても動くようになっています。Interface)の2本ある全二重のデータ線を4本に増やし,半二重方式でパラレルにデータを送るインターフェースです。Zyboに搭載されているCypless製のFlashデバイスS25FL129Pは,Quadモードに設定することでHoldピンやWriteProtectピンをデータピンに流用できる仕組みになっているようです。「パラレル通信するSPIデバイス」になります。電源ソースを設定するJ15ピンを,USBとVU5V0がショートするようにつなぎます。ACアダプターを使う場合は,USBではなくWALLをショートさせます。ちなみにVU5V0とGNDを利用してバッテリーを接続することも可能です。アイドル状態で5V0.2A消費とのことなので,かんたんなものを動かすうちはUSB給電で十分ですが,本格的に使う場合はACアダプターを用意しましょう。次にJP5ピンを使ってブートデバイスを変更します。ROMからのブートになります。UART」と書かれたmicroUSB端子にUSBケーブルを接続し,SW4のスイッチを「ON」に変更しましょう。LED(LD10)が緑点灯したら起動完了です。HDMIケーブルをディスプレイにつなぐと,カラフルなテストパターンが表示されます。そのままPCからシリアルコンソールに接続してみましょう。PCにUSBケーブルを接続し,電源を入れたタイミングで2つのシリアルコンソールデバイスが作られているはずです。以下で言うところの,「⁠ftdi_sio」ドライバーが使われているデバイスがそれにあたります。ICであるFT2232Hが搭載されています。他にUSB接続のUARTデバイスを繋いでいない環境であれば,おそらく「/dev/ttyUSB0」と「/dev/ttyUSB1」が作られていることでしょう。前者がJTAG経由のプログラミング用で,後者がUART用のデバイスです。udevadmコマンドでプロパティを見れば,「⁠Digilent」と書かれているはずです。ID_VENDOR_ENC=Digilentscreenコマンドをインストールしていれば,次のようにシリアルコンソールを開くことができます。0000000000000000この状態でボード上の「PS-SRST」ボタンを押すと,システムがリセットします。その結果,次のようにU-Bootとカーネルの起動ログが表示されます(※3⁠)⁠。※3UARTデバイスはメインスイッチの電源が入っていないと,PC側から認識されません。U-Bootのログを表示したい場合は,電源を入れてコンソールを開いたあとにリセットボタンを押してください。Completezynq>上記ログにもあるようにルートファイルシステム(ramdisk)は3MiB程度になっています。BusyBoxだけで構成されているものの,ちゃんとしたLinuxシステムです。ちなみにpsコマンドを実行すると,起動ログにもあるようにtelnetdやHTTPサーバー,ftpdにSSHサーバー(dropbear)が動いていることもわかります。dropbear個々のパーツやその機能については,Zyboのリファレンスマニュアル(PDF)を参照してください。