もう一つ考えなければいけないのは、HostあるいはHubが供給する電力である。USB 2.0でもUSB 3.0でも、High-power PortとLow-power Portの2つが定義されているが、ここで供給される電力は、

USB 2.0 USB 3.0
High-power Port 500mA 900mA
Low-power Port 100mA 150mA

という事になっている。これ、厳密に言えばもう少し細かく定められており、例えばUSB 3.0の場合、High-power Periferal Device (in)が最大900mA、一方High-powered Port(out)が最小900mAとなっており、つまりHubはポート当たり900mA以上を供給する必要があり、一方Deviceは最大でも900mA以下に消費電力を抑えないといけないことになる。この900mAという数字は、実はコントローラにとっては結構な負荷である。USBポートを経由しての電力供給という観点で言えば、OTG(On-The-Go) and Embedded Host Suppliment to the USB 2.0で定められた仕様の場合、最大5AをVBUSで供給する必要があるので、それに比べれば大分楽という言い方もあるが、こちらは組み込み機器向けの仕様だからまた話が変わってくる。

さて、話を戻すとポートあたり900mAというのは、実はUSBコントローラが単独で供給するのは結構面倒な値である。USB 3.0コントローラは通常PCIe x1スロット経由もしくはオンボードという事になるが、PCIe x1スロットの場合供給されるのは、

+3.3V : 3A (=10W)
+12V : 0.5A (=6W)

までとなっている。一方USB 3.0はポートあたり5V/900mA = 4.5Wだから、コントローラの消費電力を考えなくても最大で3ポートが限界となるだろうし、+3.3Vと+12Vの両方から+5Vを作るのは難しいから、事実上は+3.3Vラインを昇圧する形にするしかないし、その場合は余分な昇圧回路が必要になる。前回紹介した玄人志向のカードの場合、もうそういう面倒な事を諦め、外部電源端子から5Vの供給を受け、それをそのままUSB 3.0ポートに流すような形になっているが、これはやむをえないところだろう。

この問題は、特に今後USB 3.0のポート数が増える場合にやはり問題となるだろう。実際Specificationを見てみると、Photo01の様に電源制御と(データ送受信を行う)Hubコントローラを分離する形を推奨していることが判る。

Photo01: Universal Serial Bus 3.0 SpecificationのFigure 11-1から抜粋

これをチップセットに置き換えた場合どうなるか、をちょっと考えてみる。実装が一番簡単なのは、図1の様にUSB Hubそのものをチップセットに取り込まず、外部に実装する方式だ。VBusの供給回路も外部に置いてしまるから、一番面倒が無い。ただしこの場合はコスト面では間違いなく上昇要因となるので、ハイエンド向けはともかくメインストリームやバリュー向けでは嫌われるだろう。

次のアイディアは図2の様に、Hubそのものはチップセットに取り込みつつ、VBusの供給回路は外部に置く形だ。これは図1よりはコスト面で有利だし、ラインナップに応じて差別化がしやすい(図1の場合、ポート数は結局外部のUSB Hubの構成で決まってくるから、せいぜいXHCIコントローラをいくつ搭載するか、位しか差別化要因がない)が、外部に回路が必要になる点では本質的に図1と変わらない。

長期的に見れば、図3の構成が一番リーズナブルだろう。ただし今度は回路的に難しいという問題が別途出てくる。例えば10ポート構成だと+5Vで9Aの電流を制御する必要がある訳で、これは当然チップセットの大型化に繋がる(とにかくピン数を増やさないとこれだけの電流はハンドリングできないから、無駄にピン数が増えることになる)し、電流が多いとプロセスの微細化も難しくなる(やはり大きなプロセスの方が大電流の制御はしやすい)から、I/Fの高速化に伴い微細化を進めつつある昨今のチップセットとしてはあまり有難い話ではない。

なので、短期的には図1のソリューションもありえるが、長期的には図2の形になってゆくだろうと筆者は予想している。今でも、例えばCPUのVcoreの電圧制御そのものは、チップセットの外にコントローラが用意されており、こことチップセットの間が専用リンクで繋がれる形で実装されている。こうしたものが、USB 3.0でまた一つ増える、という具合に考えれば良いだろう。

(続く)