USB 3.0/USB 2.0論理層は何が大事?:失敗しないUSB 3.0、規格解説と実現のキーポイント(3)(2/2 ページ)
USB 3.0/USB 2.0でのソフト制御をどう共通化? USB 3.0制御フローやアーキテクチャに着目しながらUSB機器実現を検討する
Endpointの存在定義の転換
そもそもEndpointとは何でしょうか? Endpointは、USB通信を行うために必須なデバイス側内部に配置される中間バッファでした。ホストはこの中間バッファに対して通信を行い、OUT転送において十分な容量がなければ、再送やフロー制御の要因となりますし、IN転送においては転送するデータが格納されていなければ、これもホストによる再リクエストを期待することになります。ましてやIN転送ではClassなどで定義されたプロトコルを除いて、データリクエストはホストのスケジューリングに依存するため、デバイスからは要求される時期が明確には分かりません。
USB 3.0での最大パケットサイズは1kbyteですのでEndpointごとに高速転送を考慮した必要十分と思われる容量を持つことは、極めて大きいRAMが必要となる可能性につながります。加えて、USB 3.0という高速転送にはどのくらいのバッファを持つのが妥当なのかデバイス内部のバスマスタ能力に合わせて検討しなければなりません。
規格そのものへ言及してしまいますが、ホストがEndpointと通信を行う位置付けであることはUSB規格を簡略化する半面、デバイス開発においてはこのEndpointとのアクセス方法検討には十分な時間を割く必要が出てきます。
USBインターフェイスを備えるストレージにしろ、バスブリッジにしろ、独自で必要なデータ領域(ワークメモリ)を実装してあることが多く、また、何らかのエンコーダ/デコーダなどのデータ変換を伴う機器の場合は特に転送すべきデータがそのデータ領域に格納されるわけです。
この構成をそのまま踏襲した場合は、USBではホストとEndpoint間をUSBバスで転送が行われるとともにデバイス内部ではEndpointとデバイス固有のデータ領域のローカルバス転送が必要となってしまいます(このとき、Endpointとデバイス固有のデータ領域との通信でメモリマッピングが同時に行われます)。
この2段階の転送に対し、EndpointはUSBプロトコルを実現するために必須であることを理解しながら、USB機器固有のワークメモリをEndpointと見立てる概念を適用することができます。
この概念では、実際のEndpointサイズを意識せずにワークメモリのデータをそのままUSB通信に使用でき、ユーザーアプリケーションによってそれぞれのワークメモリの自由度をそのままUSB転送へ生かすことができると考えられます。
また、ワークメモリとのEndpoint間のデータ転送がなくなるわけではありませんが、この転送をUSB MACのDMAコントローラが受け持つことで無駄を生まずに高速転送が実現できるUSBデバイスの実現へつなげられると考えています。
USB用バスマスタ構造とローカルバス
先ほど述べたとおり、USB MAC内のEndpointとワークメモリの間には必ずデータの受け渡しが必要となります。一般的にはデータ受け渡しはDMAコントローラによって行われますが、どのようなタイプのDMAコントローラであってもUSB 3.0の高速転送を妨げない構成とその転送設定が必要です。
また、昨今のデバイス内部構成において、ワークメモリをDRAMで構築し、さまざまなアクセスが集中するアーキテクチャが取られています。よっていかなる転送においてもこのワークメモリを早急に解放することが全体のパフォーマンスの向上に直結します。停滞状態(ウェイト)が発生し、DRAMへのアクセスが解放できない場合はデバイス内部すべてに影響を及ぼすことがあり、システム的な低下、もしくは停滞を招くことになりますので絶対に避けなければなりません。DMAコントローラはデータをリードしてライトすることが役目ですから、転送先がデータを格納できない場合は停滞条件が伝搬することがあり得ます。USBでいうと、USB MACの持つEndpoint情報を監視しておくことが望ましいと考えます。
具体的にはIN転送(デバイス→ホスト)で、ワークメモリのデータをバースト的に読み出し中に、USB MAC内のIN用Endpointに空き容量が足りなければ、ワークメモリ側にウェイトが入ってしまう場合が考えられることです。
必要なのはデータ転送サイズとEndpoint状況を監視可能で、USBのパケットサイズを意識できるバスマスタがそれぞれのEndpointごとに必要となります。このアプローチがEndpointを中間バッファとして見なし、ワークメモリのデータを直接転送可能な状態へ導きます。また、IN転送の場合は1パケット分の空きができたらワークメモリへデータを読み出しにいく制御を繰り返しますので、ウェイトが発生する要因を作らないといえます。
また、USB 2.0まではUSBパケットの考えを踏襲し、パケット受信をきっかけにデータを読み出し、送信Endpointの空きをきっかけにデータを格納する方法も少なくありませんでした。
USB 3.0の高速転送ではパケットの概念をUSB MAC外部に持ち込むことは避けるべきだと考えています。理由はDMAコントローラのタイプにもよりますが、DMAコントローラを駆動する設定の介在が、USB 3.0の転送の妨げになる要因となり得るからです。
USB 3.0のように高速転送を求めるアプリケーションは一般的にはデータ転送量が多くなりがちで、アプリケーション側ではパケットの概念を持たずにDMAコントローラへの介在が少ないことが求められます。
またUSB固有の転送として、OUT転送の場合、総データ転送量が不明の場合や、途中終了する場合があり、USBでは最大パケットサイズに満たないショートパケットや空のNULLパケットをもって、転送終結の意味を持たせる場合があります。
アプリケーション側ではショートパケット/NULLパケットの概念を持たずとも、DMAコントローラにより転送の終了を通知する機能を欲します。同様にIN転送の場合、総転送サイズが最大パケットサイズの倍数であった場合には、転送の終了を意味するために意図的にNULLパケットを送信しなければならない場合もあり得ます。
USBで用いるDMAコントローラでは以上に述べたような若干特殊な機能が転送効率の向上につながるため、ちょっとした工夫が必要となるでしょう。
まとめると、DMAコントローラではデータを転送するために大きく3つの特徴があります。
■USB MAC内のEndpointの状況を監視しながらデータ転送を実施する
■大容量転送を高速性を意識し容易に転送できる(USBバスではBulk Burst転送をイメージ)
■ショートパケット/NULLパケットへの対応
インベンチュアで用意しているDMAコントローラは、USB MAC用に開発した汎用DMAコントローラで、ショート/NULLパケットに対応し、アプリケーション側ではパケットの概念なく使用できるものです。特に大きな転送サイズであっても1回の設定でUSBプロトコルの意識なく、データ転送が可能ですので、USB 3.0の転送レートを十分に引き出すことができる構成を採用しています。
また、DMAコントローラを用いたマスタインターフェイスのほかにDMAコントローラを使用しないスレーブインターフェイスも選択することが可能です。デバイス開発側がバスマスタを実現する必要がある一方、自由度の高い転送を実現できるメリットもあります。ゲート規模、開発工数、開発時間を総合的にご判断できると思われます。
このようにUSBインターフェイスを実現するMAC部だけでなく、制御フローや転送効率への機能実装範囲がまさにプロジェクトの成功を左右するといっても過言ではありません。
今回のまとめ
今回はUSB 3.0を実現するためのポイントとして、アーキテクチャについて着目して説明しました。特にUSB 2.0での常識がUSB 3.0では最良といえないことがあると思います。次回はUSB 3.0とUSB 2.0を実機で確認した結果を、事例を交えてご紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.