Version 3.0
この 文書 はコンピューターによって 英語 から 自動的 に 翻訳 されているため、 言語 が 不明瞭 になる 可能性 があります。
このドキュメントは、 元 のドキュメントに 比 べて 少 し 古 く なっている 可能性 もあります。
可能 であれば、 英語 のドキュメントを 参照 してください。
This document has been automatically translated from En- glish by a computer, which may result in unclear language.
This document may also be slightly outdated in relation to the original.
If possible, please refer to the document in English.
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
1 序序序章章章 3
2 host driverののの取取取りりり付付付けけけ 5
2.1 インストール手順 . . . 5
2.2 診断情報の取得. . . 10
3 コココマママンンンドドド ララライイインンン テテテススストトト 16 3.1 序章 . . . 16
3.2 command lineインターフェースの使用 . . . 17
3.3 UNIXのような代替手段 . . . 18
3.4 Cygwinノート . . . 19
4 サササンンンプププルルルhostアアアプププリリリケケケーーーシシショョョンンン 21 4.1 全般的 . . . 21
4.2 Compilation . . . 22
4.3 実行 . . . 24
4.4 メモリーインターフェース . . . 25
5 高高高帯帯帯域域域幅幅幅パパパフフフォォォーーーマママンンンスススのののガガガイイイドドドララライイインンン 27 5.1 loopbackをしないでください. . . 27
5.2 ディスクやその他のストレージを含めないでください . . . 28
5.3 大きなチャンクの読み取りと書き込み . . . 29
5.4 CPUの消費量に注意してください . . . 30
5.5 読み取りと書き込みを相互に依存させない . . . 30
5.6 hostのRAM bandwidth制限を知る . . . 31
5.7 DMA buffers十分な大きさ . . . 31
5.8 適切なデータ幅を使用する . . . 31
5.9 パラメータのチューニング . . . 32
6 33
序 序 序章 章 章
これは、 Windows hostに Xillybus / XillyUSB 用のdriver をインストールし、 IP coreの基本機能を試すためのウォークスルーガイドです。
このガイドでは、FPGAにXillybus またはXillyUSBのいずれかの IP core を含む demo bundleのbitstreamがロードされており、hostによって( PCI Expressまたは USB 3.xを介して)周辺機器として認識されていることを前提としています。
これに到達するための手順は、次の2つのドキュメントのいずれかに概説されてい ます(選択したFPGAによって異なります)。
• Getting started with the FPGA demo bundle for Xilinx
• Getting started with the FPGA demo bundle for Intel FPGA
host driver は、named pipesのように動作する device filesを生成します。それら は、他のファイルと同じように開かれ、読み書きされますが、プロセス間または TCP/IP streams間ではpipesのように動作します。hostで実行されているプログラ ムにとっての違いは、streamの反対側が別のプロセス(ネットワークまたは同じコ ンピューター上)ではなく、FPGA内のFIFOであることです。TCP/IP streamと同 様に、Xillybus streamは、高速データ転送だけでなく、時々送受信される単一バイ トでもうまく機能するように設計されています。
1つのdriverバイナリはPCIeトランスポートを使用してすべてのXillybus IP cores をカバーし、別のバイナリはUSBベースのcoresをカバーします。streamsとその 属性は、hostのオペレーティング システムに読み込まれるとdriverによって自動検 出され、それに応じてdevice filesが作成されます。
PCIe driverによって作成されたこれらのpipeに似たdevice filesは、\\.\xillybus_somethingと して表示されます。同様に、XillyUSBのdriverは、\\.\xillyusb_00_somethingの
ように device filesを作成します。ここで、00部分はデバイスのインデックスで
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
す。01、02などでXillyUSBを複数台同時に接続する場合に交換する部品です。
ただし、PCIe用のdriverとXillyUSB用のdriverが1つずつあることに注意してく ださい。
hostに関連するトピックの詳細については、Xillybus host application programming guide for Windowsを参照してください。
host driver の の の 取 取 取 り り り 付 付 付 け け け
2.1 イ イ イン ン ンス ス スト ト トー ー ール ル ル 手 手 手順 順 順
Xillybus またはXillyUSBにWindows driverをインストールすることについて特別 なことは何もありません。以下に説明する手順は、ディスク上の特定の場所から device driverをインストールするための一般的な方法です。
Windowsがbootプロセスを初めて終了し、PCIe Xillybus IP coreがhostに表示さ れる場合、またはXillyUSBデバイスが接続されている場合、警告バブルが表示され る可能性があります。ハードウェアが見つかったが、driverがインストールされて いないと表示されます。
これは正常で、Windowsがまだ認識していないものを検出した兆候です。
Device Managerを実行することから始めます。これは、“Windows start”ボタンを クリックして次のように“device manager”と入力し、一番上の項目をクリックする ことで最も簡単に実行できます。
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
開いたDevice Managerは次のようになります(重要な部分が強調表示されていま す)。
Intel)は検出されません。このような問題は、PCIe busとのインターフェイス にこのPCIeブロックを使用するXillybusとは関係ありません。
• FPGAカードがPCから電源を取得する場合、PC computerの電源がオンに
なると、bitstream が FPGAにロードされます。この場合のみ、 FPGAが
bitstreamをロードするのが遅すぎるため、BIOSがboot中にPCIeインター フェイスを検出しなかった可能性があります。
Action>Scan for New Hardwareも機能する可能性がありますが、Windows restartを(電源を入れ直さずに)実行することは、これを修正する安全な方法 です。
• Xillybus / XillyUSB driver はすでにインストールされています。その場合、 Device Managerはインストール手順の最後に示されている例のようになりま す。
“PCI Device” アイテムを右クリックし、次のウィンドウを開く “Update Driver Software...” を選択します。
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
“Browse my computer for driver software”を選択すると、次のウィンドウが開きま す。
“Browse...” ボタンを使用して、driverが解凍された場所に移動します。ディレクト リ名は、driverのバージョンと解凍先によって異なる場合があります。
次のステップは、インストールを確認することです。
“Install”をクリックします。driverをインストールするプロセスは、Windows 7では
10 20秒かかり、Windowsの新しいバージョンではおそらくそれよりもはるかに短
い時間です。
次のウィンドウで、インストールが正常に完了したことが通知されます。
Device Managerには、新しくインストールされたデバイスが表示されます。
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
繰り返しますが、これらのスクリーンショットはPCIeのXillybusに関連しています が、プロセスはXillyUSBでも同じですが、わずかな違いがあります。特に、Device Managerの新しいグループは、“Xillybus”ではなく“XillyUSB”と呼ばれます。
この時点で、driverがシステムにインストールされ、自動的にロードされます。シ
ステムがPCIe bus上のXillybus IP coreでbootを実行するたびに、またはXillyUSB デバイスがhostに接続されると、リロードされます。
次に説明するように、Xillybusのlog messagesを表示するようにEvent Viewerを セットアップすることをお勧めします。
2.2 診 診 診断 断 断情 情 情報 報 報 の の の 取 取 取得 得 得
Xillybus / XillyUSB用のdriverは、診断メッセージをオペレーティング システムの メインevent loggerに送信します。これらのメッセージには、driverが初期化に失 敗したときの問題(たとえば、DMA buffersに十分なメモリがなかった)に関する情 報や、予期しない動作を理解するのに役立つその他のメッセージが含まれます。
次に説明する手順は、event viewerでカスタム ビューを作成する方法を示している
ため、Xillybus関連のメッセージのみが表示されます。
まず、Event Viewerを開きます。これは、“Windows start”ボタンをクリックして 次のように“event viewer”と入力し、一番上の項目をクリックすることで最も簡単 に実行できます。
Event Viewerが開きます。Xillybusメッセージのみのカスタム ビューを作成するに は、“Custom Views”を右クリックし、メニューから“Create Custom View...” を選 択します。
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
カスタム ビューのフィルタリングを定義するためのウィンドウが開きます。“By source”を選択し、drop-down menuで必要に応じてXillybusまたはXillyUSBを選択 します。他のオプションはデフォルトのままにします。
drop-down リストにXillybus / XillyUSBエントリが見つからない場合は、driverが 正しくインストールされているかどうかを確認してください。
“OK”をクリックすると、このカスタム ビューに名前と説明を割り当てるためのウィ ンドウが開きます。これは個人的な選択に開放されています:
“OK”をクリックすると、Event Viewerは次のようになります。
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
上記の例では、このビューに1つのログ エントリがあり、Xillybusが適切に開始さ れ、5つのdevice filesが作成されたことを通知しています。これは、driverを正常 にインストールした直後に予想されることであり、FPGAにはdemo bundleがロー ドされています。
コンピューターのrebootが発生してもログ エントリは削除されないため、このカ スタム ビューには、driverがインストールされてからの履歴が表示されます(ログ がクリーンアップされない限り)。
PCIe driverについては、多くのログ メッセージの説明が次の場所にあります。
http://xillybus.com/doc/list-of-kernel-messages
ただし、メッセージ テキスト自体でGoogleを使用すると、特定のメッセージを簡 単に見つけることができます。
いずれにせよ、問題がすぐに解決されない場合は、発生する可能性のある問題を報 告する電子メールをためらわずに送信してください。
ログ メッセージをファイルにエクスポートすることもできます。サポートを依頼す るときは、貴重な情報を含むログ メッセージ ファイルを添付することをお勧めし ます。これを行うには、“Action”メニュー項目と“Save All Events in a Custom View As...”を選択します。
これにより、ファイル選択ウィンドウが開きます。推奨される出力形式はCSVで す。
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
コ 3
コ コマ マ マン ン ンド ド ド ラ ラ ライ イ イン ン ン テ テ テス ス スト ト ト
3.1 序 序 序章 章 章
driverは、トランスポートのタイプ( PCIeまたはUSB)に応じて、\\.\xillybus_
または\\.\xillyusb_nn_ プレフィックスを持つdevice filesを介してそのイン ターフェイスを公開します。これらのオペレーティング システム オブジェクトは ファイルのように動作し、同じインターフェイスでアクセスできます。Microsoft Windowsの内部に精通していない人は、これは信頼できないアクセス方法だと誤解 するかもしれませんが、実際には、Windowsコンピュータのハードウェア アクセ スの多くは、このようにdevice filesを介して行われます。
これらの device filesが user applicationに直接公開されることは実際にはまれで す。むしろ、それらは通常、DLLも提供するハードウェアのベンダーによって定義 されたAPIを介してアクセスされます。ただし、このDLLは通常、APIで公開され ているwrapper functions内のdevice filesにアクセスします。
Xillybusのインターフェースは非常に単純であるため、このDLLは不要であり、
user applicationソフトウェアはdevice filesに直接アクセスします。
Microsoft Windowsのパラダイムは、device filesが直接アクセスされないというこ とであるため、それらのリストをすぐに取得する方法はありません。これは、PCIe バリアント用にdemo bundleによって生成されたdevice filesのリストです。
• \\.\xillybus_read_8
• \\.\xillybus_write_8
• \\.\xillybus_read_32
• \\.\xillybus_write_32
• \\.\xillyusb_00_write_32
• \\.\xillyusb_00_mem_8
IP Core Factoryによって生成されたカスタムIP coresのdevice filesのリストは、
ダウンロードしたzipファイルに含まれるREADMEファイルにリストされていま す。
ほとんどのプログラミング言語 (C/C++を含む)を使用する場合、backslashesの 前にescape characterが必要であることに注意してください。したがって、Cで関 数の引数として使用される場合、device fileの名前は\\\\.\\xillybus_read_8 のように記述されます。
WinObjユーティリティ( Microsoftのサイトからダウンロードできます)を使用する と、Windowの内部オブジェクト構造を参照できます。Xillybus / XillyUSB device filesは、よく知られているC:、COM1: などとともに、GLOBAL??という名前の
“subdirectory”でsymbolic linksとして表示されます。
command-lineを使用してXillybus / XillyUSB device files の名前を取得するには、
MicrosoftのWebサイトからaccesschkユーティリティをダウンロードし、
> accesschk -o \\GLOBAL\?\?
この操作では、他の多くのグローバルdevice filesがリストされることに注意してく ださい。
3.2 command line イ イ イン ン ンタ タ ター ー ーフ フ フェ ェ ェー ー ース ス スの の の 使 使 使用 用 用
Xillybus device files は、Windowsのuser spaceアプリケーションとうまく連携す るように設計されています。ただし、command-line toolsを使用すると、インター フェイスを使用した最初のステップに最適であり、データ出力を簡単に取得できま す。
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
command line でのテストは、4で説明されているように、サンプル hostアプリ
ケーションで実行できます。または、次に説明するように、汎用のcommand-line utilitiesを使用することもできます。
すぐにプログラミングに取り掛かることを好む人は、 Xillybus host application programming guide for Windowsを参照することをお勧めします。
残念ながら、Windowsのコマンドライン ツールは、すべてのUNIXベースのシステ
ムで利用できるものほど豊富ではありません。DOS command promptの組み込みコ マンドは、期待どおりに使用しないと役に立たなくなります。また、Windowsで 提供されるshellプログラムの標準セットは、明らかに何か役に立つものではあり ませんでした。幸いなことに、UNIXコマンドは多くの点でWindowsに移植され ています。これらの移植されたユーティリティを使用すると、Getting started with Xillybus on a Linux host に示されている“Hello world”の使用例をWindowsマシン で実行できます。
注意すべき点がいくつかあります。
• Windowsは、よく知られているUNIX/dev/ディレクトリではなく、\\.\
パスにそのグローバルdevice filesを保持します。たとえば、device file が Linux指向のコンテキストで/dev/xillybus_read_8として指定されている 場合、Windowsユーザーは\\.\xillybus_read_8を参照する必要があり ます。
• backslashは一般にescape characterとして解釈されるため、Cygwinおよび ほとんどのプログラミング言語で使用する場合、\\.\パスを\\\\.\\とし て記述する必要があります。つまり、/dev/xillybus_read_8 はCygwin では\\\\.\\xillybus_read_8としてアクセスされ、CやPerlなどの言語 でも同じことが言えます。段落3.4を参照してください。
• DOS環境はbackslashをescape characterと見なさないため、device fileを 引数としてコマンドライン バイナリ プログラムに渡す場合、DOS command windowにはbackslashのescapeはありままませせせん。内部でargumentsを処理す る方法に応じて、scripts内で異なるレベルのescapingが必要になる場合があ ります。
3.3 UNIXの の のよ よ よう う うな な な 代 代 代替 替 替手 手 手段 段 段
セクション 4のWindows用のサンプルhost アプリケーションは、無料でダウン ロードできるMicrosoftのcompilerに基づいていることに注意してください。このセ クションのUNIXユーティリティに関する説明は、これらのサンプル アプリケー ションとは関係ありません。
ストールします。特に、CoreutilsおよびUtil-Linux-NGパッケージのみをイ ンストールすると、このガイドの例で使用されるユーティリティがカバーさ れます(両方をインストールする場合)。Gnuwin32のセットアップ ユーティリ ティは、DOS Command Windowのexecution pathを変更しししななないいいことに注意し てください。
• unixutilsサブディレクトリにあるWindowsパッケージ(ダウンロード可能)で
Xillybusが提供するユーティリティを使用します。これらは、このサイトの例
をサポートするために厳選されたGnuwin32ユーティリティのセットです。
これは、コマンド ライン ユーティリティの使用を最小限に抑える場合に推奨 される選択肢です。
3.4 Cygwin ノ ノ ノー ー ート ト ト
Xillybusは、Cygwinで広範囲にテストされています。Cygwin bash terminalでの次 のセッションは正正正しししいいいことに注意してください。
$ cat \\\\.\\xillybus_read_8 cygwin warning:
MS-DOS style path detected: \\.\xillybus_read_8 Preferred POSIX equivalent is: //./xillybus_read_8
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user’s guide for more details about POSIX paths:
\url{http://cygwin.com/cygwin-ug-net/using.html#using-pathnames}
• この警告メッセージは、パス名でbackslashesを初めて使用したときに表示 されますが、無無無視視視しししてください。environment variableを推奨どおりに設定し て、それを回避してください。通常のファイル名の場合、確かにスラッシュ を使用することをお勧めしますが、Cygwinは//./を\\.\に変換しななないいいた め、backslashesは必須です。
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
• Cygwinは単一のbackslashをescape characterとして扱うため、backslashes は2倍になっていることに注意してください。
サ
サ サン ン ンプ プ プル ル ル host ア ア アプ プ プリ リ リケ ケ ケー ー ーシ シ ショ ョ ョン ン ン
4.1 全 全 全般 般 般的 的 的
Windows用の Xillybus パッケージには、 demoapps サブディレクトリの下に 6 つの単純なC コマンドライン プログラムがあります。precompiled executables はprecompiled-demoappsにあります。これらのCソースは、Windows SDKの一 部として無料でダウンロードできるMicrosoft’s Visual C++ compilerを使用した compilation用に作成されました。これらをVisual Studioに採用することは難しく ありません。
Cygwin でcompilationを実行することを好むユーザーは、Linuxの手順に従い、
プログラムを実行するときに/dev/プレフィックスを\\\\.\\に置き換えます。
MinGWツールセットを使用する場合、同様の手順が可能です。詳細については、
コマンドライン ノートを参照してください。
とにかく、Microsoftのcompilerを使い続けたい人のために、demoappsディレク トリは次のファイルで構成されています。
• Makefile –このファイルには、“nmake”ユーティリティが5つのプログラム
のうちcompilationを実行するために使用する規則が含まれています。
• streamread.c –ファイルから読み取り、データをstandard outputに送信しま す。
• streamwrite.c – standard inputからデータを読み取り、ファイルに送信しま す。
• memread.c – seekを実行した後にデータを読み取ります。FPGAでメモリ イ ンターフェイスにアクセスする方法を示します。
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
• memwrite.c – seekを実行した後にデータを書き込みます。また、FPGAでメ モリ インターフェイスにアクセスする方法も示します。
• fifo.c –連続データstreaming用のユーザー空間RAM FIFOの実装を示します。
このプログラムはXillybus host application programming guide for Windowsで 説明されています。
• winstreamread.c–ファイルから読み取り、データをstandard outputに送信し ます。このプログラムは、標準のAPIの代わりに、ファイルにアクセスするた めにWindowsによって提供されるAPIの使用を示します。
最後のプログラムを除くすべてのプログラムは、 Microsoftの compilerを備えた compilationを対象としていますが、従来のUNIXスタイルで書かれています。
これらのプログラムの目的は、正しいコーディング スタイルを示し、カスタム ア プリケーションを作成するための基礎として機能することです。ただし、fifo.cを 除いて、これらはどちらも実際のアプリケーションでの使用を意図したものではあ りません。セクション5で説明されているように、特に高帯域幅のデータ転送には 適していないためです。
これらのプログラムは非常に単純であり、Xillybus host application programming guide for Linuxで詳細に説明されているUNIXの一般的なファイル アクセス方法にす べて準拠しているため、ここでは個別に説明しません。
これらのプログラムは、 fopen()、 fread()、 fwrite() セットではなく、単純な _open()、_read()、_write() などの関数を使用することに注意してください。後 者は、C libraryレベルでdata buffersが原因で予期しない動作を引き起こす可能性 があるためです。
fifo.cプログラムは、連続data streamingのためのuserspace RAM FIFOの実装を 示しています。device fileのRAM buffersはほとんどすべてのシナリオに十分なス ペースを生成するように構成できるため、このプログラムが役立つことはめったに ありません。
4.2 Compilation
Xillybusが提供するWindowsパッケージにはprecompiled binariesがありますが、
デモ アプリケーションのcompilationは、コードを変更するために明らかに必要で す。
Microsoftでは、software development kit (SDK)を無料でダウンロードできます。
このキットには、特にC compilerとビルド ユーティリティが含まれており、以下 で説明するcompilation手順で使用されるツールセットです。ただし、compilation
> cd \path\to\demoapps
すべてのプログラムのcompilationを実行するには、promptで“nmake”と入力しま す。次のセッションが予定されています。
> nmake
Microsoft (R) Program Maintenance Utility Version 10.00.30319.01 Copyright (C) Microsoft Corporation. All rights reserved.
if not exist "XP32_DEBUG/" mkdir XP32_DEBUG
cl -D_CRT_SECURE_NO_WARNINGS -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo [ ... ] link /INCREMENTAL:NO /NOLOGO -subsystem:console,5.01 -out:XP32_DEBUG\ [ ... ] cl -D_CRT_SECURE_NO_WARNINGS -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo [ ... ] link /INCREMENTAL:NO /NOLOGO -subsystem:console,5.01 -out:XP32_DEBUG\ [ ... ] cl -D_CRT_SECURE_NO_WARNINGS -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo [ ... ] link /INCREMENTAL:NO /NOLOGO -subsystem:console,5.01 -out:XP32_DEBUG\ [ ... ] cl -D_CRT_SECURE_NO_WARNINGS -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo [ ... ] link /INCREMENTAL:NO /NOLOGO -subsystem:console,5.01 -out:XP32_DEBUG\ [ ... ] cl -D_CRT_SECURE_NO_WARNINGS -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo [ ... ] link /INCREMENTAL:NO /NOLOGO -subsystem:console,5.01 -out:XP32_DEBUG\ [ ... ] cl -D_CRT_SECURE_NO_WARNINGS -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo [ ... ] link /INCREMENTAL:NO /NOLOGO -subsystem:console,5.01 -out:XP32_DEBUG\ [ ... ]
“cl”で始まる6行は、“nmake”ユーティリティによって生成されたcompilerの呼び 出しです。これらのコマンドは、任意のプログラムのcompilationに対して個別に
使用できます(ただし、そうする理由はありません。単に“nmake”を使用してくださ
い)。“link”コマンドについても同様で、オブジェクト ファイルをライブラリにリン
クし、executablesを作成します。
“nmake”ユーティリティは、必要なものだけでcompilationを実行します。ソース ファイルの1つだけが変更された場合、そのファイルのみが、その後の“nmake”の
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
呼び出しでcompilationを受けます。したがって、通常の手順では、対象のソー ス ファイルを編集してから、必要に応じてrecompilationに対して“nmake”を呼び 出します。compilationによって生成されたexecutablesを削除するには、“nmake clean”と入力します。
前述のように、compilationルールはMakefileにあります。その構文はやや難しい と思われるかもしれませんが、幸いなことに、正確に理解していなくても編集でき るファイルの1つです。
指定されたMakefileは、現在のディレクトリ内のファイルのみに関連しています。
つまり、ディレクトリ全体のコピーを作成し、衝突することなくコピーを操作でき るということです。Cファイルを追加して、他のソース ファイルに加えて“nmake”
がcompilationを実行するようにルールを簡単に変更することもできます。
executables (およびobject files)は、ビルド プロセス中に生成されるXP32_DEBUG サブディレクトリにあります。ディレクトリの名前が示すように、これらのファイ ルは32-bit Windows XPを対象としていますが、64ビット プラットフォームを含む
それ以降のWindowsプラットフォームでも実行されます。
4.3 実 実 実行 行 行
compilationによって作成されたばかりのexecutablesに基づいて、またはprecom- piled binariesを使用して、2つのterminalsを使用した単純なloopbackの例を次に 示します。compilationの後、ディレクトリをXP32_DEBUGに変更するか、com- pilationをスキップしてprecompiled-demoappsサブディレクトリを使用します。最 初のDOS command promptで次のように入力します。
> streamread \\.\xillybus_read_8
backslashesのescapingがないことに注意してください。これをプレーンなDOS commandウィンドウではなくCygwinで実行すると、\\\\.\\xillybus_read_8に なります。
これはdevice fileから読み取るプログラムです。2番目のDOSウィンドウで、正し いディレクトリに変更した後:
> streamwrite \\.\xillybus_write_8
次に、2番目のDOSウィンドウにテキストを入力し、ENTERを押します。同じテ キストが最初のDOSウィンドウに表示されます。standard inputの予期される動作
に従って、ENTERが押されるまで何も送信されないことに注意してください。
要に応じて、Xillybus driverは、FIFOがI/Oの準備が整うまでアプリケーションを 強制的に待機させます( blocking =によりuser spaceプログラムを強制的にスリー プ状態にします)。
device filesとFIFOの間に\\.\xillybus_read_32と\\.\xillybus_write_32の別のペ アがあります。これらのdevice filesは32ビット ワードの粒度で動作し、FPGAの FIFOも同様です。上記と同じテストを試みると、同様の動作になりますが、1つの 違いがあります。すべてのI/Oは4バイトのチャンクで実行されるため、入力が4 バイトのチャンクの境界に達していない場合、最後のバイトは送信されないままに なります。
Linux用の streamwrite のバージョンとは異なり、 Windows 用の streamwrite は
consoleの設定を変更しようとしないため、行ごとに動作することに注意してくださ
い。
4.4 メ メ メモ モ モリ リ リー ー ーイ イ イン ン ンタ タ ター ー ーフ フ フェ ェ ェー ー ース ス ス
memreadおよびmemwriteプログラムは、device fileで_lseek()関数呼び出しを行 うことによってFPGAのメモリにアクセスする方法を示しているため、より興味 深いものです。demo bundleでは、xillybus_mem_8のみがseekingを許可すること に注意してください。また、読み取りと書き込みの両方で開くことができる唯一の device fileです。
メモリに書き込む前に、hexdumpユーティリティ( Windows packageのunixutils ディレクトリにあります)を使用して現在の状況を確認します。
> hexdump -C -v -n 32 \\.\xillybus_mem_8
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |...|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |...|
00000020
出力は異なる場合があります:これはFPGAのRAMを反映しており、最初は他の値
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com
が含まれている可能性があります(以前の実験による可能性が最も高い)。
-Cおよび-vフラグは、hexdumpに示されている出力形式を使用するように指示し ます。“-n 32”部分は、最初の32バイトのみを要求します。メモリ配列の長さはわ ずか32バイトなので、それ以上読む必要はありません。
何が起こったかについての簡単な説明: hexdump は\\.\xillybus\mem_8を開 き、そこから32バイトを読み取りました。_lseek関数呼び出しを許可するすべて のファイルは、開かれたときにデフォルトで位置0から始まるため、出力はメモリ 配列の最初の32バイトになります。
アドレス3のメモリの値を170 ( hex形式の0xaa )に変更します。
> memwrite \\.\xillybus_mem_8 3 170
そして、配列全体を再度読み取ります。
> hexdump -C -v -n 32 \\.\xillybus_mem_8
00000000 00 00 00 aa 00 00 00 00 00 00 00 00 00 00 00 00 |...Ãa...|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |...|
00000020
明らかに、うまくいきました。
memwrite.c の特別な部分は、“lseek(fd, address, SEEK_SET)”と書かれているとこ ろです。このコマンドを使用すると、FPGAのアドレスが設定され、後続の読み取
りまたは書き込みがその位置から開始されます(データが流れるにつれてインクリ
メントされます)。
高
高 高帯 帯 帯域 域 域幅 幅 幅 パ パ パフ フ フォ ォ ォー ー ーマ マ マン ン ンス ス スの の のガ ガ ガイ イ イド ド ドラ ラ ライ イ イン ン ン
XillybusのIP coresのユーザーは、宣伝されているデータ レートが実際に満たされ ていることを確認するために、データ帯域幅テストを実行することがよくありま す。これらのレートを達成するには、データ フローを大幅に遅くする可能性のある 障害を回避する必要があります。そのほとんどは、hostがデータを十分に迅速に処 理していないことが原因です。
IP coreの機能を最大限に活用するには、アプリケーション プロジェクトでこれらの
障害を回避することがさらに重要です。
このセクションはガイドラインの集まりであり、最も一般的な間違いに基づいてい ます。これらのガイドラインに従うと、帯域幅の測定値が公開されているものと同 じか、わずかに高くなるはずです。
予想される帯域幅を満たしていないという苦情の最も一般的な理由は、測定が正 しくないことです。推奨される方法は、以下の5.3の段落に示されているように、
“dd”コマンドを使用することです。このユーティリティは、Windows package for Xillybusのexecutableとして利用できます。
このセクションの情報は、“Getting Started”ガイドとしては比較的高度なものであ り、他のドキュメントで説明されているトピックを参照しています。それにもかか わらず、多くのユーザーがIP coreに慣れる初期段階でパフォーマンス テストを実 行するため、このガイドではそれを示しています。
5.1 loopback を を をし し しな な ない い いで で でく く くだ だ ださ さ さい い い
demo bundle のlogicは、反対方向に進むstreams のカップル間のデータのloop- backを実装します。これは初期テストには役立ちますが、パフォーマンスのテスト には適していません。問題は、Xillybus IP coreによって作成されるデータ転送バー
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com ストが、loopback FIFOを完全に満たすか、完全に空にすることです。これが発生 するたびに、IP coreのデータ転送が一時的に停止します。これらの一時停止によ り、測定されたスループットが大幅に低下します。
FPGAからhostへの最大データ レートを使用する実際のシナリオでは、application logicは、Xillybus IP coreがそれを排出するのと同じ速さでFPGAのFIFOを満たし ます。したがって、FIFOが空になることは決してありません。同様に、他の方向 では、application logicはIP coreがいっぱいになるのと同じ速さでFIFOを空にす るため、いっぱいになることはありません。
もちろん、機能の観点からは、FIFOが最初のケースで空になり、2番目のケース でいっぱいになっても問題ありません。これにより、Xillybus streamが一時的に停 止するだけです。すべてが正しく機能しますが、最大レートではありません。
demo bundleに基づいたパフォーマンス テストが必要な場合は、非常に簡単に 変更できます。たとえば、32 ビット インターフェイスをテストするには、 user_r_read_32_empty および user_w_write_32_full信号をFIFO (fifo_32) から切 断し、それらを定数ゼロに結び付けます。これにより、FIFOがoverflowとunder- flow の両方の状態に陥り、誤ったデータが発生する可能性がありますが、データ レートは最適になります。このようなパフォーマンス テストでアプリケーション データを使用する必要がある場合は、これら2つの信号が決してHighにならない ようにする任意の配置で問題ありません。
loopbackを開くと、各方向を個別にテストできますが、同時に両方の方向をテスト する正しい方法でもあることに注意してください。
5.2 デ デ ディ ィ ィス ス スク ク クや や やそ そ その の の 他 他 他 の の のス ス スト ト トレ レ レー ー ージ ジ ジを を を 含 含 含 め め めな な ない い いで で でく く くだ だ ださ さ さい い い
ディスク、solid-state drives、およびその他の種類のコンピューターストレージ は、多くの場合、帯域幅の期待が満たされない理由です。オペレーティング シス
テムのcachingメカニズムは、基盤となる物理メディアを必要としない高速データ
転送の短距離バーストを可能にするため、混乱を助長します。cacheは最新のコ ンピューターでは非常に大きくなる可能性があるため、ディスクの速度制限が明ら かになる前に、いくつかのGigabytesデータが流れる可能性があります。これは、
データ レートのこの突然の変化には他に明確な説明がないため、Xillybusのデータ トランスポートで何か問題が発生したとユーザーに思わせる可能性があります。
solid-state drives (flash)では、特に長時間連続して書き込むときに、さらに混乱を 招く要因があります。flash driveへの書き込みには、未使用のblocksの消去が含ま れます。これは、flash memoryへのデータの書き込みは、消去された、つまり空 のblocksに対してのみ許可されるためです。
フォーマンス測定は完全に間違っている可能性があります。
ストレージがアプリケーションの一部であることが意図されている場合(例: data acquisition)、メディアで広範囲にわたる長期テストを実行して、期待どおりである ことを確認することをお勧めします。短いbenchmark testは非常に誤解を招く可能 性があります。
5.3 大 大 大 き き きな な なチ チ チャ ャ ャン ン ンク ク クの の の 読 読 読 み み み 取 取 取 り り りと と と 書 書 書 き き き 込 込 込 み み み
各_read()および_write()操作は、オペレーティング システム上でsystem callを 生成し、CPUサイクルで犠牲になります。したがって、十分な大きさのbufferサ イズを使用することが重要です。これは、帯域幅テストだけでなく、高性能アプリ ケーションにも当てはまります。
bufferの一般的な適切なサイズは、_read()および_write()関数呼び出しごとに128 kB前後です。そのような関数呼び出しのそれぞれが128 kBを処理することを必ず しも意味するわけではありませんが、これらの関数呼び出しが最大で128 kBを処理 できることを意味します。
streamreadとstreamwriteのサンプル ユーティリティ(4を参照)はパフォーマンス の測定には適していないことに注意してください。これらのbufferのサイズは128 バイト( kBではない)です。これにより、コード例が簡素化されますが、パフォー マンス テストには遅すぎます。
代わりに、XillybusのWindowsパッケージのunixutilsサブディレクトリにある“dd”
コマンドライン アプリケーションを使用することをお勧めします。Cygwinを使用 すると、デフォルトで“dd”ユーティリティが提供されるだけでなく、/dev/zeroお
よび/dev/nullがデータ ソースおよびデータ コンシューマとして提供されるため、
簡単に使用できます。
次のshellコマンドをCygwin内で使用して、速度をすばやくチェックできます(必 要に応じて\\\\.\\xillybus\_*の名前を置き換えてください)。
dd if=/dev/zero of=\\\\.\\xillybus_sink bs=128k
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com dd if=\\\\.\\xillybus_source of=/dev/null bs=128k
これらは、CTRL-Cで停止するまで実行されます。“count=”パラメータを追加し て、一定量のデータのテストを実行します。
コマンドライン テストの詳細については、セクション3を参照してください。
5.4 CPU の の の 消 消 消費 費 費量 量 量 に に に 注 注 注意 意 意 し し して て てく く くだ だ ださ さ さい い い
速度に関してCPUの機能を過大評価するのはよくある間違いです。一般に信じら れていることとは異なり、利用可能な最速のCPUsでさえ、100-200 MB/sよりも 高速なデータで意味のあることを行うのに苦労しています( threadによる)。コン ピュータープログラムは、集中的なアプリケーションのボトルネックになることが 多く、必ずしもデータ トランスポートとは限りません。bufferのサイズが不十分な 場合(前述のように)、CPUの消費量が過剰になることもあります。
したがって、Task Managerなどを使用して、CPUの消費量に注意することが重要 です。それにもかかわらず、これらのプログラムの出力を適切に解釈することが重 要です: quad-coreコンピュータ上の25% CPUは、CPU消費量が少ないことを意 味しますか?それとも、特定のthread上の100%ですか? system monitoringのさま ざまなユーティリティでは、この情報がさまざまな方法で表示されます。
5.5 読 読 読 み み み 取 取 取 り り りと と と 書 書 書 き き き 込 込 込 み み みを を を 相 相 相互 互 互 に に に 依 依 依存 存 存 さ さ させ せ せな な ない い い
双方向の通信を必要とするアプリケーションの場合、よくある間違いは、1つの メイン ループで構成される single-threadedコンピュータ プログラムを作成する ことです。ループごとに、データのチャンクがFPGAに書き込まれ、チャンクが FPGAから読み取られます。
2つのstreamsが機能的に独立している場合、これで問題ない可能性があります。
ただし、このようなプログラムはcoprocessingアプリケーション用に作成されるこ とが非常に多く、プログラムは処理のためにチャンクを送信してから結果を読み戻 す必要があるという誤解に基づいているため、各ループは一定量のデータの処理を 完了します。
このメソッドは非効率的であるだけでなく、実行がスタックする可能性もあります (記述の仕方によっては)。Xillybus host application programming guide for Windows のセクション6.6では、このトピックについて詳しく説明し、より適切なコーディ ング手法を提案しています。
らアクセス可能なbufferにコピーされる場合です。同様の理由で、データが反対方 向に進む場合も、2つのRAM操作が必要です。
DMA buffersとuser space buffersの分離は、_read()と_write() (または同様の関数 呼び出し)を使用するすべてのI/Oのオペレーティング システム要件です。
したがって、リビジョンXL IP coreが両方向で同時にテストされ、各方向で約3.5 GB/sが期待される場合、RAMからこの帯域幅の4倍、つまり14 GB/sが必要にな ります。すべてのマザーボードがこの機能を備えているわけではありません。ま た、hostはRAMを他の目的にも同時に使用することに注意してください。
リビジョンXXLでは、同じ理由で、一方向の単純なテストでもRAMの帯域幅能力 を超える可能性があります。
5.7 DMA buffers 十 十 十分 分 分 な な な 大 大 大 き き きさ さ さ
これが問題になることはめったにありませんが、言及する価値があります。DMA buffers用にhostに割り当てられたRAMスペースが小さすぎる場合、hostがdata
streamを小さなチャンクに分割することを余儀なくされるため、データ転送が遅く
なる可能性があります。CPUサイクル。
すべての demo bundles には、パフォーマンス テストに十分な DMA メモリが
あり、 IP Core Factoryで生成されたcoresにも同じことが当てはまり、目的の
“Expected BW”が実際の期待値に設定され、“Autoset Internals”が有効になってい ます。“Buffering”は10 msに設定する必要がありますが、どのオプションでも問題 ない可能性が高くなります。
一般的に言えば、要求されたレートで10 msのデータに対応する合計RAMスペー スを持つ4つのDMA buffersは、帯域幅テストの目的には十分です。
5.8 適 適 適切 切 切 な な なデ デ デー ー ータ タ タ 幅 幅 幅 を を を 使 使 使用 用 用 す す する る る
明らかに、streamの最大データ レートは、streamのデータ幅とbus_clkの周波数
Xillybus Ltd. (機械で日本語に翻訳) www.xillybus.com によって制限されます。しかし、それに加えて、リビジョンAのIP coresでは32
ビットのstreamsを使用する必要があります。これは、8 ビットおよび16ビット
のstreamsが実際にペイロード データの送信に使用するよりも多くのPCIe帯域幅 を消費するためです。
リビジョンB以降のIP coresでは、PCIeブロックのデータパスよりも広いデータ 幅を選択できます。たとえば、リビジョンBのIP coreをテストするには、PCIe データパスが 64ビット幅であるため、当然 64ビット幅のstreamが必要になり ます。 application logicの方がデータへのアクセスが高速になるため、幅の広い
streamを選択すると、わずかに良い結果が得られる可能性があります。ただし、そ
の差は無視できる可能性があります。
リビジョンXLのIP coresは、128ビットdata streams (または256ビット、大きな 違いはないはず)でテストする必要があります。XXLの場合、これらのIP coresは 256ビットdata streamsでテストする必要があります。
5.9 パ パ パラ ラ ラメ メ メー ー ータ タ タの の のチ チ チュ ュ ュー ー ーニ ニ ニン ン ング グ グ
ダウンロード可能な demo bundles の PCIe ブロックは、主流の x86ベースの processorで要求された帯域幅を処理するように調整されています。同様に、 IP Core Factoryと“Autoset Internals”で生成されるstreamsは、通常、パフォーマン スとFPGAリソース使用率の最適なバランスを提供し、各streamに定義された帯 域幅を確保します。
まれに、リビジョンB以降のcoresのみで、要求されたデータ レートを達成するた めに、PCIeブロックのパラメーターをさらに微調整する必要がある場合がありま す(特にhostからFPGAへのstreamsで)。これについては、The guide to defining a custom Xillybus IP coreのセクション4.5で説明されています。
ただし、この例外的なシナリオでも、変更されるのはXillybus IP coreのパラメー ターではなく、PCIeブロックのパラメーターであることに注意してください。IP
coreのパラメータを調整してデータ レートを改善しようとするのはよくある間違い
ですが、ほとんどの場合、問題は上記の問題のいずれかにあります。
ト
ト トラ ラ ラブ ブ ブル ル ルシ シ シュ ュ ュー ー ーテ テ ティ ィ ィン ン ング グ グ
Xillybus / XillyUSB用のdriversは、システムのevent logで意味のあるlog messages を生成するように設計されました。したがって、2.2の段落で説明されているよう
に、Xillybus関連のイベントのログをフィルタリングしてメッセージを探すことを
お勧めします。
実際、すべてが正常に動作しているように見えても、Event Viewerを監視すること をお勧めします。
PCIe driverのメッセージの一部は、次の場所にリストされ、説明されています。
http://xillybus.com/doc/list-of-kernel-messages
ただし、メッセージ テキスト自体でGoogleを使用すると、特定のメッセージを簡 単に見つけることができます。
問題がすぐに解決されない場合は、電子メールで支援を求めることを躊躇しないで ください。