連載
» 2009年01月29日 00時00分 公開

追い出したソフトウェアを“ハードウェア化”する準備−ザ・組み込み−ソフトウェアのハードウェア化(6)(3/4 ページ)

[鳥海佳孝 設計アナリスト,@IT MONOist]

FPGAボードへダウンロード

 FPGA用の設計データを作成したら、後はFPGAボードにデータをダウンロードするだけです。

 FPGAボードとホストPCをUSBケーブルで接続して、FPGAボードの電源を入れてから、ISEのメイン画面左の[Process]ツリーにある[Configure Target Device]−[Manage Configuration Project(iMPACT)]の項目を右クリックして、[Run]を実行します。

 すると、「iMPACT−Welcome to iMPACT」ダイアログが表示されますので、ここで[Finish]ボタンを押してください(画面9)。これでダウンロードプログラムが実行されるはずです……。

「iMPACT−Welcome to iMPACT」ダイアログ 画面9 「iMPACT−Welcome to iMPACT」ダイアログ

 しかし、結果は画面10のようにデバイスが認識されず、むなしくもエラーメッセージが表示されてしまいます。

ダウンロードエラー 画面10 ダウンロードエラー

 さらに、正しくホストPCとFPGAボードのコミュニケーションがうまくいっていれば、画像2のようにUSBポートの近くにある緑色のLEDが点灯するはずですが、今回の接続ではこのLEDが点灯していません。

ホストPCとFPGAボードの接続確認(正常ならLEDが光る) 画像2 ホストPCとFPGAボードの接続確認(正常ならLEDが光る)

 このままでは、FPGAボードに設計データをダウンロードできません。この辺りは筆者の得意分野なのでかなり簡単に考えていましたが、やはり組み込みの神様はいろいろ困難なハードルを設定してくださいます(ふぅ〜)。

 さて、あまり愚痴をいっていても仕方がないので原因を追究してみましょう!

 まずは、この原因を探るためにカーネルのお言葉、お告げを聞いてみましょう。カーネルのお言葉は「/var/log/messages」というファイルに吐き出されていますので、それを見てみることにします。いったん、FPGAボードの電源を切るか、電源を入れたままUSBケーブルを抜きます。次に、root権限で以下のようにコマンドを実行します。

# tail -f /var/log/messages 

 この状態で、FPGAボードの電源を再度投入するか、電源を入れたままの状態でUSBのケーブルをホストPCに接続します。すると以下のようなメッセージが出力されます。

Jan 18 11:26:13 localhost udevd-event[29609]: run_program: exec of program '/sbin/fxload' failed
Jan 18 11:26:13 localhost udevd-event[29613]: run_program: exec of program '/sbin/fxload' failed
Jan 18 11:26:13 localhost udevd-event[29618]: run_program: exec of program '/sbin/fxload' failed 

 このメッセージを見ると、どうも「/sbin/fxload」というコマンドで不具合が起こっているようです。そこで「/sbin」の下を見てみると、「fxload」というコマンドが存在していません(汗)。どうやらこれが諸悪の原因のようです。そこで、以下のサイトから「fxload」コマンドのソースをダウンロードして、インストールすることにします。

 ダウンロードしたファイル「fxload-2008_10_13.tar.gz」はtarボールなので展開し、「make」コマンドでインストールすればよいようです(今度こそ簡単、簡単)。ところが、「make」コマンドを実行すると以下のようにエラーが……(またまたため息)。

# make
cc -c -O -Wall   ezusb.c -o ezusb.o
ezusb.c:33:29: linux/usb/ch9.h: そのようなファイルやディレクトリはありません
ezusb.c: 関数 `ezusb_read' 内:
ezusb.c:198: error: `USB_DIR_IN' undeclared (first use in this function)
ezusb.c:198: error: (Each undeclared identifier is reported only once
ezusb.c:198: error: for each function it appears in.)
ezusb.c:198: error: `USB_TYPE_VENDOR' undeclared (first use in this function)
ezusb.c:198: error: `USB_RECIP_DEVICE' undeclared (first use in this function)
ezusb.c: 関数 `ezusb_write' 内:
ezusb.c:226: error: `USB_DIR_OUT' undeclared (first use in this function)
ezusb.c:226: error: `USB_TYPE_VENDOR' undeclared (first use in this function)
ezusb.c:226: error: `USB_RECIP_DEVICE' undeclared (first use in this function)
ezusb.c: 関数 `ezusb_cpucs' 内:
ezusb.c:253: error: `USB_DIR_OUT' undeclared (first use in this function)
ezusb.c:253: error: `USB_TYPE_VENDOR' undeclared (first use in this function)
ezusb.c:253: error: `USB_RECIP_DEVICE' undeclared (first use in this function) 

 どうやら「linux/usb/ch9.h」というヘッダーファイルがないのが原因のようです(毎度のことながら一難去ってまた一難です……)。ヘッダーファイルは「linux」ディレクトリの下に存在していることになっているので、ホストのLinuxのカーネルソースが置いてあるディレクトリに移動してみます。

# cd /usr/src/kernels/2.6.16-0vl76.33-i586/include/linux 

 「2.6.16-0vl76.33-i586」の部分は、カーネルのアップデートなどを行っているか否かでバージョン番号が異なりますので注意をしてください。使用しているカーネルのバージョン番号の確認は、「uname -a」で確認できます。

# uname -a
Linux localhost.localdomain 2.6.16-0vl76.33 #1 Fri Feb 15 11:47:40 JST 2008 i586 i586 i386 GNU/Linux

 もし、上記のディレクトリに何もない場合は、ホストPCで使用しているLinuxのカーネルソースがインストールされていないということです。Vine Linuxのデスクトップ上部のメニュー[デスクトップ]−[システム管理]−[Synapticパッケージマネージャ]を選択し、Synaptic画面で「kernel-devel#バージョン番号」を選択して、該当のカーネルソースをインストールしてください。

 「linux」ディレクトリに移動してみると、そもそも「usb」というディレクトリが存在していません。これもどこからか持ってこないといけないのでしょうか? ここで冷静にこのディレクトリを見てみると、「usb_ch9.h」というヘッダーファイルが存在します。名前が似ているので、このヘッダーファイルをインクルードしてコンパイルしてみます。具体的には、「ezusb.c」の33行目を以下ようにを書き換えます。

# include  <linux/usb/ch9.h> 

  ↓

// # include  <linux/usb/ch9.h>
# include  <linux/usb_ch9.h> 

 「ezusb.c」の書き換えが終了したら、再度「make」コマンドを実行します。

# make
cc -c -O -Wall   ezusb.c -o ezusb.o
cc -c -O -Wall   main.c -o main.o
cc -o fxload ezusb.o main.o 

 今度はうまくコンパイルできました。コンパイルを実行したディレクトリに「fxload」という実行ファイルが出来上がっていますので、以下のコマンドで「/sbin」の下にコピーします。

# cp fxload /sbin 

 「fxload」のインストールが完了したところで、再度ホストPCとFPGAボードをつなぎます。その際に、前述した「tail」コマンドで「/var/log/messages」を監視しておきます。今度は、「fxload」に関するエラーについてカーネルからのお言葉はないはずです。さらに、FPGAボード上のUSBケーブルの近くのLEDもきちんと点灯しています。これはかなり期待できそうです!!

 この状態で、ダウンロードプログラム「iMPACT」を実行します。

 今度は、FPGAデバイスやROMのチェーンが出力され、「Assign New Configuration File」ダイアログが表示されるはずです。このダイアログで「UPDOWN.bit」を選択し、[Open]ボタンをクリックしてください(画面11)。

BITファイルを選択 画面11 BITファイルを選択

 すると、ROMに転送するファイルを選択するダイアログが2回続けて表示されますので、両方とも[Cancel]ボタンを押してください(今回はROMファイルの作成を行っていないので)。続いて、画面12が表示されますので、[OK]ボタンをクリックしてください。

「Device Programming Properties」ダイアログ 画面12 「Device Programming Properties」ダイアログ

 そして、画面上に表示されたFPGAデバイス(の画)の上を右クリックし、ショートカットメニューの[Program]を選択すると、ダウンロードが実行されます(画面13)。

ダウンロードの実行 画面13 ダウンロードの実行

 これで、10進のアップダウンカウンタがFPGAボード上で動作するはずです。もっと簡単に開発環境を構築できると思いましたが、やはり一筋縄ではいかないものです。

Copyright © ITmedia, Inc. All Rights Reserved.