Xillybus の「Hello, world」テスト
これは、Xillybus を使い始める手順の 3 番目のステップです。Xillybus を含むビットストリーム (bitstream) がすでに FPGA に書き込まれ、ホストにはドライバがインストールされている状態です。ここでは、簡単なテストを行います。このテストの目的は、デバイスファイルが正しく作成され、動作することを確認することです。
このページでは、Windows ホスト上の Xillybus について説明します。Linux については、類似のページがあります。
ここでは PCIe を使う Xillybus に焦点を当てますが、XillyUSB でもほとんど同じです。相違点はこのページの最後にまとめてあります。
このトピックの詳細は、Windows ホストで Xillybus を使い始めるを参照してください。
PCIe デバイスは認識されていますか?
デバイスマネージャーには、検出された PCIe デバイスが表示されます。これについては、ドライバのインストールの説明の中で前述しました。
ドライバをインストールする前は、Xillybus のデバイスは「Other Devices」(その他のデバイス)の一覧に表示されていました。インストール後は、このデバイスは「Xillybus」というグループに表示されます。デバイスマネージャーに、これら 2 つのいずれも表示されない場合は、FPGA が PCIe デバイスとして認識されていません。おそらく FPGA 側に問題があります。多くの場合、FPGA に書き込まれているビットストリーム (bitstream) についての思い違いが原因です。
このトピックについては、Windows 向けスタートアップガイドにスクリーンショットと詳細な説明があります。
ドライバは正しく起動しましたか?
次は、ドライバの状態を確認します。これはデバイスマネージャーで行います。「Xillybus」グループ内のアイコン(デバイス名は「Xillybus driver for generic FPGA interface」)を右クリックし、「Properties」(プロパティ)を選択します。ポップアップウィンドウが表示されるので、「Device status」(デバイスの状態)というタイトルの欄を確認してください。そこに「The device is working properly」(このデバイスは正常に動作しています)と表示されていれば、ドライバは Xillybus を正常に初期化し、必要なデバイスファイルを作成しています。
何か別のテキストが表示されている場合は、ドライバの初期化中に問題が発生しています。これは通常、FPGA のロジックに問題があることを意味します。特に、FPGA 内の PCIe ブロックの設定が間違っている場合に発生しがちです。たとえば、デモバンドル (demo bundle) の PCIe ブロックのパラメータを変更すると、この種のエラーが発生することがあります。
問題の詳細は、Windows のイベントビューアーで確認できます。Xillybus のドライバからのメッセージをフィルタリングするには、「Xillybus」というソースからのメッセージを表示するカスタムビューを作成します。この方法については、Windows 向けスタートアップガイドで詳しく説明されています。
「Hello, world」
ドライバは 5 つのデバイスファイルを作成します。\\.\xillybus_read_8、\\.\xillybus_read_32、\\.\xillybus_write_8、\\.\xillybus_write_32、\\.\xillybus_mem_8 です。IP Core Factory でカスタム IP コア (custom IP core) を作成すると、作成されるデバイスファイルの数、名前、プロパティを自由に選択できることに注意してください。
しかし、今は FPGA にデモバンドル (demo bundle) が書き込まれています。このうち 2 つのデバイスファイルを試してみましょう。これらのデバイスファイルは、実際にはオペレーティングシステムのオブジェクトですが、通常のファイルと同じようにアクセスできます。「\\.\」という部分は、Windows の低水準プログラミングになじみのない人には奇妙に見えるかもしれません。しかし、これはユーザー空間のソフトウェア(多くの場合 DLL)がハードウェアにアクセスする際の一般的な方法です。
デモバンドルには、read_8 と write_8 の間にループバックがあります。つまり、コンピュータが write_8 にデータを書き込むと、FPGA が read_8 を通じてまったく同じ内容のデータを返します。これはあくまでデモ用に用意されているもので、それ以外の実用的な用途はありません。
テストの手順は次のとおりです。コンピュータでコマンドプロンプトウィンドウを 2 つ開きます。両方のコマンドプロンプトウィンドウで、「precompiled-demoapps」ディレクトリに移動してください。このディレクトリは「xillybus-windowspack」ディレクトリの中にあります。デモバンドルと一緒に xillybus-windowspack.zip をダウンロードするよう提案したことを思い出してください。
1 つ目のコマンドプロンプトウィンドウで、次のように入力します。
$ streamread \\.\xillybus_read_8
次に、2 つ目のコマンドプロンプトウィンドウで、次のように入力します。
$ streamwrite \\.\xillybus_write_8
2 つ目のコマンドプロンプトウィンドウで何か入力して ENTER を押します。すると、1 つ目のコマンドプロンプトウィンドウに同じ文字列が表示されます。これは、入力したテキストが write_8 に書き込まれ、FPGA に到達し、最後にコンピュータへ戻ってくる流れを示しています。
これらの 2 つのプログラムは CTRL-C で停止できます。
これらのプログラムのソースコードは、demoapps サブディレクトリ(同じ zip ファイルに含まれています)にあります。プログラムは C で書かれており、標準 I/O API を使って Xillybus のデバイスファイルにアクセスする方法を示しています。Windows 向けスタートアップガイドには、これらのプログラムのコンパイル方法が記載されています。
この例は単純ですが、その仕組みを理解することは重要です。特に、FPGA 内部のロジックがどのようにしてこれを実現しているのかを理解することが大切です。それが、ご自身のロジックを組み込むための出発点になります。
XillyUSB
XillyUSB を使っている場合も、上記のすべてが当てはまります。ただし、いくつかの違いがあります。
XillyUSB には、FPGA との物理的な接続品質を調べるための showdiagnostics というツールがあります。このツールを使って、生のデータリンクにエラーがないことを確認することを強くお勧めします。XillyUSB が完全に動作しているように見えても、この確認を行うことが重要です。その理由は、USB 3.0 プロトコルが生のデータリンク上のエラーを隠してしまう一方で、これらのエラーがバグのように見えるまれな問題を引き起こす可能性があるからです。
この種のエラーを許容する理由はありません。解決策は簡単なことが多く、たとえばコンピュータの別の USB ポートを使うだけで済みます。
その他の相違点:
- デバイスファイルの名前は少し異なります。たとえば、\\.\xillybus_read_8 の代わりに、\\.\xillyusb_00_read_8 という名前になります。「00」の部分は異なる場合があります。
- デバイスマネージャーでは、デバイスは「Universal Serial Bus controllers」(ユニバーサル シリアル バス コントローラー)というグループの下に表示されます(ドライバがインストールされているかどうかに関係ありません)。