« 32bitを超えるメモリアクセス | トップページ | WDM版の汎用PCIドライバ »

2009.03.12

PCIeコアを更新(バースト転送対応)

本日、PCI Expressコアを更新しました。

今回の主な更新点は、バースト転送をサポートしたことです。
パソコン→PCIeボードへの転送は、毎秒70MBytes/secが出るようになりました。大抵のアプリケーションは十分ではないかと思います。
この速度を出すため、汎用PCIデバッグライブラリで、128bit書き込み関数を用いています。128bit書き込み関数では、SSE2命令を使って16バイトの書き込みを発行していますが、チップセットによって64bitのトランザクション2個に分けられています。

一方、PCIeボード→パソコン方向の転送は、あまり速くありません。6~8MBytes/sec程度です。Athron64x2のパソコン(DELL DimensionC521)で試したところ、128bitの読み出しは、32bitの読み出しトランザクション4個に分けられてしまいました。
これは、もっと高速にするならアドインカード上にDMAコントローラを乗せてバスマスタにするしかないですね!

興味深いことにAthron64x2のマシンでは、アドレス(BAR0 + 4)番地から連続する16バイト読み出そうとしたら、+0C,+10,+04,+08というアドレスの順序で4個のトランザクションが発行されました。SSE2命令による1つのバスサイクルのはずなのに、アドレスの順序まで変わってしまっています。キャッシュのしくみとかが関係しているのでしょうか。

それから、制御信号のタイミングを厳密に規定しました。

次の図は、メモリ・ライト・トランザクションを発行したときのローカルバスの波形です。
Memwr

コアはbar*_wr信号をアサートするので、dvalid信号が出るタイミングでユーザ回路にデータを書き込みます。
bar*_wr信号は、アドレスやBEを確定てから1クロック後に有効になるようにしました。

次の図は、メモリ・リード・トランザクションを発行したときのローカルバスの波形です。
Memrd

メモリ・リードの場合、コアはbar*_rdreq信号をアサートします。
ただし、メモリがすぐに使える状態になっていないこともある(リフレッシュ中だったり、低速メモリをつないでいるような場合)ので、ユーザ回路はbar_rdack信号をHにして、準備ができたことを知らせられるようになっています。

コアはbar_rdackを確認したら、数クロック後にuser_dreq信号をパチパチと出してくるので、そのタイミングでユーザが出したデータが取り込まれます。

このローカルポートインタフェースは、ものすごくシンプルですが、ほとんどのアプリケーションにとって十分なことができるようになっています。
要するに、IPコアは複雑なPCI Expressのプロトコルと単純なローカルバスのプロトコルを変換しているわけです。

また、PCI Expressのサンプルアプリケーションも更新しました。いままでのサンプルアプリでは、LEDがチカチカするのをただ眺めていただけでしたが、今回のバージョンアップで、BAR0~BAR2空間や、コンフィグ空間に対して読み書きするデータを、簡単なスクリプトで記述できるようにしました。

Sampleapp

たとえば、
  mwr long bar1+40 12345678
のように記述すると、BAR1空間のオフセットアドレス0x40に、longサイズで、0x12345678というデータを書き込みます。
  mrd longlong bar0+3C
のように記述すると、BAR0空間のオフセットアドレス0x3Cから、8バイトを読み出して画面に表示します。

このような簡単な手順でやりたい操作をどんどん書くことで、コアにつながったユーザ回路の動作を確認することができます。

コアやサンプルアプリ、マニュアルは下記のページに用意しました。
http://www.tokudenkairo.co.jp/pcie/index.html

ようやく実用的なレベルに近づいてきたのですが、今の最大の問題点は、オリジナルなデバイスドライバがないこと!
WDMのを急いで作っていますので、もうしばらくお待ち下さい。

|

« 32bitを超えるメモリアクセス | トップページ | WDM版の汎用PCIドライバ »

コメント

基板を購入させていただいたytakeuchと申します。
まだ動作確認できておりません(PCが無いため)。
なひたふさんにお伺いしたいのですが、Root Complexのモデルは何を使用されていますでしょうか?(企業秘密であれば無視していただければ幸いです)。
私はシミュレーション用に特電PCIeコアのモデルを作成するつもりです。

投稿: ytakeuch | 2009.03.13 07:32

ytakeuch様 はじめまして

特電PCI Expressボードをご購入いただきまして誠にありがとうございます。
>Root Complexのモデルは何を使用されていますでしょうか?

モデルというのがよく分かりませんが、普通のパソコンの場合は、RootComplexはチップセットに含まれています。
Intelの場合は945とか965とか、そういうものになります。
当社の場合はシミュレーションは行わず、いきなり実機です。

投稿: なひたふ | 2009.03.13 17:33

ご回答ありがとうございます。

質問ですが、シミュレーションに用いるビヘイビアモデルは何を使われているかということでした。言葉足らずで申し訳ありません。

> 当社の場合はシミュレーションは行わず、いきなり実機です。

了解いたしました。

今後ともよろしくお願いいたします。

投稿: ytakeuch | 2009.03.13 23:25

コメントを書く



(ウェブ上には掲載しません)




« 32bitを超えるメモリアクセス | トップページ | WDM版の汎用PCIドライバ »