|

本プロジェクトでは、以下のハードウェア/ソフトウェアからなる、デバッグ支援システムを開発した。、
● 簡易PCIバスアナライザ・ハードウェア
● 簡易PCIバスアナライザ制御ソフトウェア
● 簡易PCIバスアナライザ・ユーザインターフェイス・ソフトウェア
● デバッグ支援ソフトウェア
以下、それぞれ簡単に説明する。
● 簡易PCIバスアナライザ・ハードウェア
簡易PCIバスアナライザ・ハードウェアは、PCIカードエッジを持つFPGA評価ボードに搭載するFPGA構成情報である。FPGA評価ボード2枚を用い、1枚は、ターゲットのPCIバスよりデータを取得し、データを送り出す機能を持つ。もう1枚は、送り出されたデータを解析用PCに転送する機能を持つ。それぞれ別のFPGA構成情報としてHDL(ハードウェア記述言語)で記述する。
● 簡易PCIバスアナライザ制御ソフトウェア
上述の「簡易PCIバスアナライザ・ハードウェア」を制御するソフトウェアであり、PCIバス上を流れるデータの取得を行うためのものである。Linux上で動作するソフトウェア。
● 簡易PCIバスアナライザ・ユーザインターフェイス・ソフトウェア
取得したPCI上を流れるデータをグラフィカルに表示するソフトウェア。Linux版とWindows版を用意する。
● デバッグ支援ソフトウェア取得したPCIバス上を流れるデータを解析し、PCI I/OアクセスやPCIメモリアクセス、PCIコンフィギュレーションアクセスといった、ソフトウェアでの動作と対応する形で解析結果を表示する。
本プロジェクトで開発を行った結果、簡易PCIバスアナライザのハードウェア/ソフトウェアの機能はいずれも動作する状態となり、デバッグ支援システムとしての動作を実現することができた。さらに、「簡易PCIバスアナライザ・ハードウェア」については、FPGA評価ボード2枚構成だけでなく、より低コスト化が可能なFPGA評価ボード1枚のみを用いる構成についても実現することができた。
本プロジェクトで開発した成果物の特徴は、以下の通りである。
● 割り込みを使うソフトウェアのデバッグや、マルチスレッドアプリケーションのデバッグなど、通常であれば、コードの実行順序がわかりにくくなりがちな状況において、コードの実行順序特定が可能なこと。
● ICE(In-Circuit
Emulator)等であれば、実行速度に制限がかかる場合が多いが、本システムではコードの実行速度に影響を与えることなく、デバッグに必要な情報が取得可能であること。
● デバイス制御等のデバッグにおいて、ソフトウェアが原因なのか、ハードウェアが原因なのかを特定でき ない場合に客観的な立場でデバッグ情報を提供できること。
以下、具体的な成果について示す。
1.簡易PCIバスアナライザの動作原理
システム構成にも依存するが、PCIバスを持つコンピュータシステムにおいては、メインメモリへのアクセスを除く周辺デバイスへのアクセスサイクルの大半がPCIバス上に流れる。このアクセスサイクルを発生時刻と共に記録する。この記録を、実行したソフトウェアと照らし合わせることにより、プログラム・コードの実際の実行順序を特定することができる。これによって、割り込み等により実行順序が複雑なタイミングに依存する現象の解析が可能となる。また、そのアクセスサイクルが発生した時刻を記録することにより、特定の処理間に要した時間を計測することが可能となる。
PCIバスの構成によっては、限定的なデバイスへのアクセスサイクルしか発生しないが、実行するソフトウェアにPCIバスにアクセスを発生させるようなマーカーコードを挿入することにより、同様にプログラム・コードの実際の実行順序を特定したり、特定の処理間に要した時間を計測したりすることが可能となる。これは、PCのBIOSが行っているPOST(Power On Self Test)コード表示のような機能であり、よりわかりやすく対象となるソフトウェアをデバッグすることが可能となる。
PCIバスのアクセスサイクルを記録するためには、PCIバスアナライザに相当する装置が必要となる。低コストでPCIバスアナライザに相当する機能を実現する方法として、FPGAの搭載されたPCI評価ボードを用いる。FPGAの搭載されたPCI評価ボードは、PCIバスの動作に関わるすべての信号がFPGAと接続されている。これを利用して、PCIバスの全ての信号をFPGAに対する入力としてやることにより、PCIバス上を流れる全てのデータを取得することが可能となる。
本プロジェクトでは、これらPCIバスの性質とFPGAの機能を生かして、組み込みシステムソフトウェアのデバッグ支援システムを開発した。
2.簡易PCIバスアナライザ・ハードウェアの開発
PCIバスのアクセスサイクルを記録するためには、PCIバスアナライザに相当する装置が必要となる。現在、市販やレンタルされているPCIバスアナライザは、非常に高価であるので、なかなか組み込みシステムの開発現場で使うのは難しい。そのため、低コストでPCIバスアナライザに相当する機能を実現する方法として、データ解析用PCとFPGAの搭載されたPCI評価ボード2枚を使用した。
FPGAの搭載されたPCI評価ボードは、PCIバスの動作に関わるすべての信号がFPGAに入力されている。そこで、1枚のボードを、PCIバスの信号を観測するプローブカードとして用いる。もう1枚のボードは、データ解析用PCに接続し、データ転送のために通常のPCIデバイスとして用いる。2枚のボード間は、適切なケーブルを用いて接続する。図1にシステムの構成を示す。

図1.システムの構成
本プロジェクトで開発したシステムに用いたFPGA評価ボードは、東京エレクトロンデバイス株式会社 inrevium プロダクトグループ製PCI開発用プラットフォーム TD-BD-PCI66 (http://www.inrevium.jp/board/pci66.html)である。このFPGA評価ボードを2枚用いることにより図1のシステムを構成する。FPGA評価ボードの外観を図2に示す。

図2.TD-BD-PCI66 外観
このFPGA評価ボードの主要な構成要素は以下の通りである。
● PCIカードエッジ(64bit対応)
● LVDSコネクタ(WideSCSI形状互換)
● PCI用FPGA Spartan-II
● LVDS用FPGA Virtex-II
プローブ用カードとして用いる側は、PCIバスの情報をフィルタして取得する機能をPCI用FPGA Spartan-II に搭載する。また、Spartan-II からのデータをLVDSコネクタに出力する機能をLVDS用FPGA Virtex-II に搭載する。また、プローブ用カード側のPCI用FPGAでは、データ取得を開始・終了するトリガ条件の設定や、特定のパターンに合致するデータのみを取得するフィルタ条件の設定を可能にした。
データ転送用カードとして用いる側は、LVDSコネクタからの入力を受け取り、PCI用FPGAに渡す機能をLVDS用FPGA
Virtex-II に搭載する。そのデータはPCI用FPGA
Spartan-II に転送される。PCI用FPGA
Spartan-II には、通常のPCIデバイスとしてデータ転送機能を搭載する。
これら4つのFPGAに搭載する構成情報は、全てHDL(ハードウェア記述言語)により記述し、Xilinx社製FPGA統合開発環境ISEによりコンパイル・生成を行った。
ターゲットハードウェアをプローブする側は、32ビット33MHz動作のPCIバスに対応する。データ転送を行う側は、64ビット66MHz動作のPCIデバイスとして動作させている。
また、本プロジェクトでは、FPGA評価ボードを1枚のみ使う構成についても、検討・実装を行った。1枚のみを使う構成については、図3の通りである。データ取得用PC+データ転送用ボードの代わりに、FPGA評価ボードにストレージを持たせる。ここにPCIバスより取得したデータを蓄えておき、後からデータを取り出すことによりFPGA評価ボード2枚構成とほぼ同じ機能を実現している。この構成には、Xilinx社製ML-455を用いている。図4にML-455の外観を示す。
この時検討した、FPGA評価ボードの使用枚数についての各方式の特徴は以下の通りである。
○ FPGA評価ボード2枚構成
☆ 長所
・ ターゲットハードウェアのシステム構成、例えば、CPU、OS、あるいは、各種ソフトウェア等と無関 係にデータ取得が可能。
・ 任意のタイミングでデータの取得が可能。
・ リアルタイムでのデータ解析の可能性が残されている。
☆ 短所
・ FPGA評価ボードを2枚用いるため、コストがかかる。
・ ケーブル経由でのデータ転送における転送速度がネックとなる。
○ FPGA評価ボード1枚構成
☆ 長所
・ FPGA評価ボードが1枚で済むためコストが安い。
・ ストレージとして選べる物は、FPGA評価ボードの種類によるが、SRAM/SDRAM等を用いた場合、余裕をもってデータ転送が行える。
☆ 短所
・ ターゲットハードウェアのシステム構成によっては、ストレージに蓄えられたデータの取得が困難 あるいは不可能である。
・ ターゲットハードウェアが不安定な状態においては、同じく、ストレージに蓄えられたデータの取得が困難あるいは不可能となる。

図3.システムの構成(ボード1枚)

図4.システムの構成(ボード1枚)
3.簡易PCIバスアナライザ・ソフトウェアの開発
(1)簡易PCIバスアナライザ制御ソフトウェア
前述の簡易PCIバスアナライザのハードウェアを制御し、データを取得するためのソフトウェアである。ユーザの指示により、データ取得開始・終了、トリガ条件の設定、フィルタ条件の設定等を行う。Linux上のコマンドラインで使用する。
(2)簡易PCIバスアナライザ・ユーザインターフェイス・ソフトウェア
前述の簡易PCIバスアナライザ制御ソフトウェアにより取得されたデータを表示するソフトウェアである。表示スタイルは、ロジックアナライザ風の形式となっている。検索、拡大・縮小、移動等の機能を有し、取得したデータの任意のタイミングでのPCIバスの動作を確認することが出来る。Linux版とWindows版がある。Linux版は、qtを利用しており、C++言語で実装している。Windows版は、C#言語で実装している。図5にLinux版の画面サンプルを、図6にWindows版の画面サンプルを示す。

図5.Linux版の動作画面サンプル

図6.Windows版の動作画面サンプル
(3)デバッグ支援ソフトウェア
前述の簡易PCIバスアナライザ制御ソフトウェアにより取得されたデータのトランザクションを解析し、表示するソフトウェアである。簡易PCIバスアナライザユーザインターフェイスソフトウェアだけでは、PCIバスの動作を理解している必要があるため、ソフトウェア技術者にはわかりにくい。そこで、PCIのトランザクションを解析し表示するツールである。LinuxおよびWindowsのコマンドラインで動作する。図7に表示例を示す。

図7.デバッグ支援ソフトウェア出力サンプル
|