ConnectorとCableの説明が終わったので、今回からPhysical Layerの話。実はMechanical Layerに関してもSpecificationでは他にElectrical Requirements(5.6)/Mechanical and Environmental Requirements(5.7)/Imprementation Notes and Design Guide(5.8)といった節が並んでいるが、これらが関係しているのはPlug/Receptacle/Cableの製造を行っているベンダーで、これらを購入してデバイスを作ろうという人にはあまり関係が無い。強いて言えば、PCB上にStacked Connectorsを実装する場合には配線に気をつけましょうという話はあるだろうが、こちらもメインとなるのはConnectorの内部なので、まぁちゃんとSheeldが施されたStacked Connectorを選びましょうという話以上にはならないだろう。

意外なのは、PCB上の配線の取り回しに関して記述が一切無いこと。USB 3.0で追加された分については、これはもう信号がほぼPCI Express Gen2と同じだから、配線の取り回し方などはこれに準じればいいという事なのだろうが、ただし問題はUSB 2.0の信号も一緒に取り回すこと。物理的には単一のXHCI ControllerからReceptacleまで6本(USB 1.1/2.0が一対、USB 3.0が二対。VBUSやGNDなどは別にXHCIから引っ張る必要はないだろう)の信号を、あたかもPCI Expressのx1.5 Laneみたいな形で引っ張りまわせばいいのか、それとももう少し別の配慮が必要なのか、というあたりに何らかのガイドラインはちょっと欲しかった気はする。ちなみに先日のSuperSpeed Developer Conferenceもこれに近い話題は出た(Photo01)が、議論はUSB 3.0のSignalingのみだった(Photo02)。こちらの詳細は後述するとして、そんな訳で今のところPCB上のRoutingなどに関する情報は仕様書に皆無である。もっともこれはUSB 2.0の時も同じであり、実際にはEHCI ControllerのDesign Guide(これはNECのUSB 2.0 ControllerやIntelのICHなど各種製品毎に存在する)などを参考にRoutingを決めた事を考えると、USB 3.0でもSpecificationには盛り込むつもりはないのかもしれない。

Photo01: これはHoward Heck氏(Principal Engineer, Intel)のPhysical Layer(PHY) Specificationというプレゼンテーションからの抜粋。もっとも短期的にはどうせICHにxHCIは入らないので、もっとバックパネルに近いところにxHCI Controllerが置かれるように思う。

Photo02: 出展はPhoto01に同じく。これは複数chのUSB 3.0の信号がどうなるか、という観点での話なる。

さて、そんな訳で今回からはPhysical Layer、つまりPHYと称されるものについて説明に入りたい(Photo03)。このPHYに関しては、PIPEという形で外部I/Fが使われる場合もある(Photo04)。PIPEについてはこちらとかでも述べた通りのもので、すでにSpecificationが公開されている訳であるが、結果としてPHYの機能は極めてわかりやすいというか、機能が整理されることになった。

Photo03: Universal Serial Bus 3.0 SpecificationのFigure 6-1からの抜粋。一番下の、色の濃い部分がPHYの範囲。

Photo04: PHY Interface For the PCI Express and USB 3.0 Architectures Version 3.0のFigure 2-2からの抜粋。

さてそのPHYの機能であるが、送信と受信で当然ながら異なっている。送信側のダイアグラムをPhoto05、受信側のダイアグラムをPhoto06に示すが、

送信:
(1) データはScramble。K-Codeはそのまま
(2) Core Clockを埋め込む形で8b/10b Encode
(3) 10bitのParallel DataをSerial Dataに変換
(4) SignalをDifferentialにして送信
受信:
(1) Differential SignalをSingle End Signalに変換
(2) DRC(Data Recovery Circuit)(と、その前段に含まれたEqualization)を使い、受信信号を補正
(3) Serial Dataを10bitのParalel Dataに変換
(4) Reastic Bufferでエラーを検出
(5) 8b/10b Decodeを使い、元々のData/K-Codeを復元
(6) Dataに関してはDeScrambleを行う(K-Codeはそのまま)

といった動き方となる。

Photo05: Universal Serial Bus 3.0 SpecificationのFigure 6-2からの抜粋。

Photo06: Universal Serial Bus 3.0 SpecificationのFigure 6-3からの抜粋。

ここでK-CodeというのはPCI Expressでも使われた制御信号である。単純な話として8bit=256シンボル、10bit=1024シンボルだから、8b/10b Encodeを使うとデータ以外に768個分のシンボルが余分に使える事になる。もちろんこの大半はClock信号そのものを埋め込むのに使われるが、それとは別に制御信号用にいくつかシンボルが予約されている。例えばK29.7はENDというシンボルで、PCI Express Gen2の場合は"Marks the end of a Transaction Layer Packet or a Data Link Layer Packet"という意味である。USB 3.0は概ねこれを引き継いでおり、K29.7はUSB 3.0の場合はやはりENDで"Marks the end of a packet"の意味とされている。完全には同じでない(例えばK28.4はPCI Express Gen2ではReservedだが、USB 3.0では"Decode Error Substitution"に割り当てられている)が、概ね同等といったところだろうか?

(続く)