サンプルアプリケーションの起動
3-1.サンプルアプリケーションのダウンロード
現在、2種類のサンプルアプリケーションを用意しています。
本章では、これらのアプリケーションの使い方を説明します。
※ これらのアプリケーションを使用するには、特電汎用PCI Expressドライバが必要です。
汎用ドライバとしてインストールすれば、PCI Expressボードが手元になくても試してみることができます。
なおこのドライバはPCI Expressではなく、通常のPCIの汎用ドライバとしても使用できます。
これらのアプリケーションを利用すると、サンプルデザインの動作を即座に確認することができます。
3-2.PCI Expressマネージャ
PCI Expressマネージャは、PCIバスに接続されたデバイスの一覧を取得し、コンフィギュレーションレジスタの読み書きを行うソフトウェアです。また、PCIのCapability Listを解析する機能も備えています。
上のリンクからPCI Expressマネージャをダウンロードしたら、解凍し、PcieMan.exeというアイコンをクリックして起動します。
起動すると次のような画面が開きます。
このアプリケーションは、パソコンに接続されているPCIまたはPCI Expressのデバイスを列挙し、ベンダID、デバイスID、バス番号、デバイス番号、ファンクション番号などとともに表示します。
画面上に表示されたリストの中の目的のデバイスをクリックすると、そのコンフィギュレーションレジスタの内容が表示されます。「拡張領域」と書かれたタブをクリックすると、Capability Listを辿って、解析結果が表示されます。
表示された内容を編集して、「設定」と書かれたボタンを押すと、その内容がPCIデバイスのコンフィギュレーションレジスタに書き込まれます。ただし、不用意にシステムデバイスのレジスタを書き換えるとパソコンがシステムクラッシュしたり、重大なデータが失われる可能性があるので、自分で作成したアドインカード以外は書き換えないようにしてください。
3-3.GPIOテストアプリケーションでLEDの点滅状態を確認する
GPIOテストアプリケーションは、PCI(またはPCI Express)バスに接続された特定のデバイスの、コンフィギュレーション空間やメモリ空間を読み書きするアプリケーションです。特電PCI Expressボード用にLEDの状態を操作する機能もあります。
上のリンクからGPIOサンプルアプリをダウンロードしたら、解凍します。
そして、pcietest.iniというファイルをメモ帳などで開きます。ファイルの先頭にベンダIDとデバイスIDが書かれた部分があるので、これを第1章で設定した値に書き換えます。
PCI Expressマネージャで目的のベンダIDとデバイスIDを持つデバイスが存在するかどうか、調べておくとよいでしょう。
[PCI]
VID=1BC8
DID=5678
次に、testapp.exeというアイコンをクリックして起動します。
「目的のデバイスが見つかりませんでした」と表示される場合は、上の手順で設定したベンダIDとデバイスIDに一致するデバイスが見つからなかった場合です。その場合は、再度ベンダIDとデバイスIDを書き換えてもう一度アプリケーションを起動してください。
うまく起動すると次のような画面が開きます。
受信テストと書かれたボタンを押すと、LEDの状態が画面上に表示されます。
また、「LEDの表示」と書かれたラジオボタンをクリックすると、LEDの点滅方法を変更できます。
-
-
TLP番号・・・PCI Express IPコアが受信したTLP(トランザクション層パケット)の数を2進数で表示します。
-
バイナリカウンタ・・・一定時間ごとにカウントアップします。
-
擬似乱数・・・LFSRで生成した擬似乱数列を表示します。
-
ユーザ指定・・・ユーザが画面上でマウスクリックすることにより、LEDの点灯/消灯を切り替えられます。
-
3-4.メモリ空間とコンフィギュレーション空間を読み書きする
GPIOテストアプリケーションの上半分には、ユーザがコマンドを書き込むことができます。
ユーザが書き込んだコマンドは、「実行」ボタンを押すと自動的に実行されます。
コマンドには以下のものがあり、以下のような書式となっています。
コマンドの各要素はスペースまたはカンマ、タブによって区切ります。
アクセスサイズは、char、short、long、longlong、128のいずれかを指定します。
アドレスは、bar0+0 や bar2+12のように指定します。(ここで指定する数字は16進数です)
データは8桁の16進数を1単位として、複数個を指定できます。
コマンドの例を示します。
例
mwr char bar0 12
BAR0空間のオフセットアドレス0番地に、1バイトサイズで、0x12というデータを書き込みます。
mrd short bar0+6
BAR0空間のオフセットアドレス6番地から2バイトを読み出して、画面に表示します。
mwr 128 bar1+0 12345678 aabbccdd 99887766 13579abd
BAR1空間のオフセットアドレス0番地から、0x12345678、0xaabbccdd、0x99887766、0x13579abd
というデータを16バイトまとめて書き込みます。
mrd longlong bar1
BAR1空間のオフセットアドレス0番地から64バイトを読み出して、画面に表示します。
cwr long 10 0
コンフィギュレーションレジスタの10番地に、00000000を書き込みます。
cwr long 14 0
コンフィギュレーションレジスタの14番地を読み出して、画面に表示します。
このように、簡単なコマンドを指定することで、メモリ空間やコンフィギュレーション空間にアクセスできます。
BAR0,BAR1・・とは
PCI(Expressも含む)デバイスは、メモリ空間、I/O空間、コンフィギュレーション空間の3種類の空間を備えています。
PCIデバイスの持つ各種機能を操作するには、メモリ空間に配置された機能レジスタを、メモリ・マップド・I/Oの方法でアクセスするのが一般的です。
1つのPCIデバイスのファンクションは、このようなメモリ空間を全部で6個持つことができ、それらはコンフィギュレーションレジスタのBAR0、BAR1、・・・BAR5によって先頭アドレスが設定されます。本説明ではそれらをBAR0空間、BAR1空間・・と呼んでいます。
特電PCI Expressボードのサンプルデザインでは、BAR0~BAR1を次のように割り当てて使用しています。
BAR0(256バイト)・・LEDやGPIO、DMAコントローラなどの各種の機能レジスタ
BAR1(8192バイト)・・SRAM
つまり、PCIバスは6つのメモリ空間を持つことができ、それぞれのメモリ空間には、メモリまたは機能レジスタが配置されているというわけです。
-
-
メモリ書き込み
mwr アクセスサイズ アドレス データ [データ] ... -
メモリ読み出し
mrd アクセスサイズ アドレス -
コンフィグ空間書き込み
cwr アクセスサイズ アドレス データ -
コンフィグ空間読み出し
crd アクセスサイズ アドレス
-